Quiero personalizar cc-mode
para ejecutar una función antes de guardar. Una solución sería modificar el cc-mode
mapa de teclas para vincularlo C-x C-s
a una función que realiza el trabajo que necesito y luego lo guarda.
Mi pregunta es si hay un gancho que pueda personalizar para esto. Los documentos de CC Hooks no mencionan before-save-hook
específicamente para cc-mode
. ¿Cómo debe hacerse esto a través de un gancho?
Alternativamente, ¿cómo hago esto defadvice
? Al leer el manual, la única forma en que pude ver fue habilitar el consejo antes de guardarlo y luego deshabilitarlo una vez que el trabajo está hecho. Esto suena engorroso. ¿Cuál sería la forma idiomática de usar advice
s?
before-save-hook
puede verificar el modo principal actual (por ejemplo(eq major-mode ...)
) y no hacer nada si no coincide con el modo que está personalizando.haskell-mode
tiene al menos uno de losafter/before-save
ganchos y supuse que esta era una práctica estándar para los modos de programa.after-save-hook
; puede usar el mismo tipo de procedimiento pero sustitutobefore-save-hook
.Respuestas:
Una forma bastante común de restringir la acción de un gancho a un modo principal particular es verificar el valor de
major-mode
.Por ejemplo, este enlace imprime un mensaje antes de guardar buffers usando
c++-mode
:Como nota al margen: a veces puede ser útil verificar si un modo principal se deriva del modo CC; podemos hacer esto comprobando si
c-buffer-is-cc-mode
no es asínil
:fuente
Alternativamente, use un gancho local:
Esto se agrega
MY-HOOK-FUNC
al búfer localbefore-save-hook
de cada búfer de modo C ++, o cualquier búfer en un modo derivado del modo C ++.Esto me parece más elegante que la comprobación explícita
major-mode
, y tiene la ventaja de que puede deshabilitarlobefore-save-hook
localmente para cada búferM-: (remove-hook 'before-save-hook MY-HOOK-FUNC 'local)
sin afectar a ningún otro búfer.fuente
Una vez necesité algo así para autocompilar mis archivos elisp cuando los guardé, usé un enfoque como este (convertí el enfoque al modo cc):
fuente
c-mode-common-hook
? En segundo lugar, parece que agregará la función abefore-save-hook
la primera vez que ingrese unC
lenguaje relacionado, pero luego se llamará a esa función justo antes de cada guardado en cada búfer. Lo que OP necesita hacer es ejecutar la función condicional para que el búfer esté en un modo específico (vea el comentario de @ Constantine para saber cómo).