Isso deve funcionar:
(defvar no-kill-buffers
'("*Messages*"
;; ...
))
(defadvice kill-buffer (around no-kill-some-buffers activate)
(unless (member (buffer-name) no-kill-buffers)
ad-do-it))
A razão pela qual seu conselho não funcionou é que ele foi "após" conselho, o que significa que ele não foi executado até que a lógica normal kill-buffer
fosse concluída. (Esse é o after
em (after avoid-message-buffer-in-next-buffer)
.
around
advice permite que você coloque a lógica personalizada antes ou depois do comando advised e até mesmo controle se ela é executada. O símbolo ad-do-it
é o que diz se e quando executar a rotina normal kill-buffer
.
Editar:
Depois de reler sua pergunta, acho que posso ter entendido errado. Se você estiver tentando pular um buffer especial que teria sido exibido depois de matar um buffer, sua abordagem está basicamente correta. Você ativou o aviso ?
Você pode avaliar (ad-activate 'avoid-messages-buffer-in-next-buffer)
ou incluir activate
no final da lista de argumentos como defadvice
como no exemplo.