Quero personalizar cc-mode
para executar uma função antes de salvar. Uma solução seria modificar o cc-mode
mapa de teclas para vincular C-x C-s
a uma função que executa o trabalho de que preciso e, em seguida, o salva.
Minha pergunta é se existe um gancho que eu possa personalizar para isso? Os documentos do CC Hooks não mencionam um before-save-hook
especificamente para cc-mode
. Como isso deve ser feito através de um gancho?
Como alternativa, como faço isso defadvice
? Ao ler o manual, a única maneira que pude ver foi ativar o conselho antes de salvar e depois desabilitá-lo após o término do trabalho. Isso parece complicado. Qual seria a maneira idiomática de usar advice
s?
before-save-hook
pode verificar o modo principal atual (por exemplo(eq major-mode ...)
) e não fazer nada se não corresponder ao modo que você está personalizando.haskell-mode
tem pelo menos um dosafter/before-save
ganchos e eu assumi que essa era uma prática padrão para os modos prog.after-save-hook
; você pode usar o mesmo tipo de procedimento, mas substituabefore-save-hook
.Respostas:
Uma maneira bastante comum de restringir a ação de um gancho a um modo principal específico é verificar o valor de
major-mode
.Por exemplo, este gancho imprime uma mensagem antes de salvar buffers usando
c++-mode
:Como uma observação lateral: às vezes pode ser útil verificar se um modo principal é derivado do Modo CC; podemos fazer isso verificando se
c-buffer-is-cc-mode
não estánil
:fonte
Como alternativa, use um gancho local:
Isso adiciona
MY-HOOK-FUNC
ao buffer-localbefore-save-hook
de cada buffer do modo C ++ ou a qualquer buffer em um modo derivado do modo C ++.Acho isso mais elegante que a verificação explícita
major-mode
e tem a vantagem de desabilitarbefore-save-hook
localmente para cada bufferM-: (remove-hook 'before-save-hook MY-HOOK-FUNC 'local)
sem afetar outros buffers.fonte
Uma vez eu precisei de algo assim para compilar automaticamente meus arquivos elisp quando salvos, usei uma abordagem como esta (converti a abordagem para o modo cc):
fonte
c-mode-common-hook
? Segundo, parece que ela adicionará a função àbefore-save-hook
primeira vez que você inserir umC
idioma relacionado, mas essa função será chamada imediatamente antes de cada salvamento em cada buffer. O que o OP precisa fazer é executar a função condicional no buffer estar em um modo específico (consulte o comentário de @ Constantine para saber como).