Pregunta:
Quiero personalizar cc-mode
para ejecutar una función antes de guardar. Una solución sería modificar el mapa de teclas del cc-mode
para vincular Cx Cs
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. Losdocumentos CC Hooks no mencionan un before-save-hook
específicamente para cc-mode
. ¿Cómo se debe hacer esto a través de un gancho?
Alternativamente, ¿cómo hago esto a través de defadvice
? Al leer el manual, la única forma que pude ver fue habilitar los consejos antes de guardar y luego deshabilitarlos después de que el trabajo está terminado. Suena engorroso. ¿Cuál sería la forma idiomática de utilizar los advice
?
Respuesta:
Una forma bastante común de restringir la acción de un gancho a un modo mayor en particular es verificar el valor del major-mode
.
Por ejemplo, este gancho imprime un mensaje antes de guardar búferes usando el modo c++-mode
:
(defun my-c++-mode-before-save-hook ()
(when (eq major-mode 'c++-mode)
(message "It's never too early to start saving (C++ code)!")))
(add-hook 'before-save-hook #'my-c++-mode-before-save-hook)
Como nota al margen: a veces puede ser útil comprobar si un modo principal se deriva del modo CC; podemos hacer esto comprobando si c-buffer-is-cc-mode
no es nil
:
(defun my-cc-mode-before-save-hook ()
(when c-buffer-is-cc-mode
(message "Saving a buffer with a major-mode derived from CC Mode.")))