Как пропустить специальные буферы при уничтожении текущего буфера?

У меня есть код в моем .emacs который мешает ему показывать некоторые предварительно определенные специальные буферы, когда я использую previous-buffer и next-buffer :

 (defadvice next-buffer (after avoid-messages-buffer-in-next-buffer) (when (string= "*Messages*" (buffer-name)) (next-buffer)) (when (string= "*Completions*" (buffer-name)) (next-buffer)) (when (string-match "\*tramp.*\*" (buffer-name)) (previous-buffer)) ... and so on) 

Это отлично работает, но я бы хотел иметь ту же функциональность для Cx k . До сих пор я пытался написать такую ​​же функцию (defadvice (after kill-buffer) ...) , но это, похоже, не работает.

Как мне это сделать?

One Solution collect form web for “Как пропустить специальные буферы при уничтожении текущего буфера?”

Это должно работать:

 (defvar no-kill-buffers '("*Messages*" ;; ... )) (defadvice kill-buffer (around no-kill-some-buffers activate) (unless (member (buffer-name) no-kill-buffers) ad-do-it)) 

Причина, по которой ваш совет не срабатывал, заключается в том, что он был «после» совета, то есть он не запускался до тех пор, пока нормальная логика « kill-buffer не завершилась. (Это after в (after avoid-message-buffer-in-next-buffer) .

around совета, давайте ставим пользовательскую логику до или после рекомендации команды и даже контролируем, работает ли она вообще. Символ ad-do-it – это то, что говорит ему, когда и когда запускать обычную процедуру kill-buffer .

Редактировать:

Перечитав ваш вопрос, я думаю, что, возможно, неправильно понял его. Если вы хотите пропустить специальный буфер, который был бы отображен после убийства буфера, ваш подход в основном правильный. Вы активировали совет ?

Вы можете либо оценить (ad-activate 'avoid-messages-buffer-in-next-buffer) либо включить в конце списка аргументов значение defadvice как это было в моем примере.

  • Как запустить emacs без оболочки?
  • Настройка Org-режима для открытия PDF-файлов с помощью evince
  • Как переделать M- / в Emacs в M- (тире)
  • Emacs: разные пользователи, разные темы, один и тот же файл инициализации
  • Как узнать имя функции внутри руля
  • Emacs: запрос-замена, регулярное выражение, повторное использование результата поиска
  • Как закрыть gdb (или другие фреймы) на emacs?
  • В чем разница между каталогом `/ usr / share / emacs / site-lisp /` и `/ usr / share / emacs23 / site-lisp /`?
  • Как получить emacs на недавно установленной системе Fedora 20?
  • Не удается открыть slime-helper.el
  • Как установить / по умолчанию версию командной строки Emacs?
  • Linux и Unix - лучшая ОС в мире.