De vez en cuando observo un comportamiento inesperado al editar texto. Mi primer recurso suele ser utilizar C-h k
para averiguar qué funciones está llamando una secuencia de teclas determinada. Sin embargo, a veces la documentación está en desacuerdo con el comportamiento observado. En estos casos, generalmente asumo que algún otro paquete se ha conectado a esa función o secuencia de teclas y está modificando su comportamiento.
¿Cómo puedo averiguar qué funciones se enganchan en mi secuencia de teclas?
Un ejemplo que encontré recientemente fue que presioné la "tecla y las comillas se insertaron al principio y al final de la región activa. Tenía la sospecha de que este no era el comportamiento predeterminado de Emacs, así que solía C-h k "
averiguar qué función se llamaba realmente.
La describe-key
documentación me dijo que self-insert-command
se estaba llamando a la función , que es una función incorporada. Para resumir, después de una cierta cantidad de prueba y error, pude determinar que el comportamiento fue causado por electric-pair-mode
. En el futuro, ¿hay una manera más rápida de llegar a esta conclusión que apagar los paquetes sospechosos de uno en uno hasta encontrar al culpable?
electric-pair-mode
se haya activado solo en algunos modos principales? ¿Todavía veself-insert-command
para"
cuando lo haceC-h k
mientraselectric-pair-mode
está activo?electric-pair-mode
funciona enganchándosepost-self-insert-hook
y no cambiando la combinación de teclas.C-h k
le dice exactamente qué sucede con una pulsación de tecla. Si observa la documentaciónself-insert-command
, dice claramente quepost-self-insert-hook
se ejecuta una vez que finaliza el comando.after-change-functions
como Jordon menciona en su respuesta? La documentación para una función probablemente no mencionará específicamente ese gancho, ¿verdad?C-h k
+ los ganchos estándar == el comportamiento completo (más o menos). Por supuesto, a veces eso deja muchas posibilidades, pero aún es mucho más transparente que cualquier otro sistema de software complejo que conozco.Respuestas:
No hay una manera fácil de saber exactamente qué hará una sola pulsación de tecla.
Si ve un comportamiento adicional, siempre verifique los ganchos comunes. Vea la lista aquí: http://www.gnu.org/software/emacs/manual/html_node/elisp/Standard-Hooks.html
En la mayoría de los casos, los importantes son:
Tendrá que inspeccionar esos ganchos y examinar las funciones que contienen para ver cuál está modificando su comportamiento.
Si las funciones en estos ganchos no describen completamente el comportamiento observado, verifique las funciones para obtener consejos que aparecerán en su documentación
describe-function
.Editar: he escrito algunas funciones para ayudar a describir un gancho mejor que pasar por las funciones una por una: https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb . Puede usar
describe-hook
las funciones definidas allí como las otras funciones de descripción. Aquí hay una muestra de su salida:Y aquí está todo el código, en caso de que la esencia desaparezca:
fuente
documentation
se actualiza para reflejar.Quizás no sea una respuesta completa a su pregunta, pero el paquete lo
helm-descbinds
ayuda a buscar todas las vinculaciones de teclado definidas desde la representación ascii del atajo. Para cada golpe, muestra la función interactiva asociada con el método abreviado de teclado, y puede solicitarhelm-descbinds
que lo describa o ejecutarlo directamente desde los resultados de búsqueda.Aquí está la descripción del paquete del sitio de GitHub:
fuente
C-h b
. Mi único deseo es poder saltar al elemento de la lista ingresando la secuencia de teclas real en lugar de escribirC
-
c
_
C
-
p