De temps en temps, j'observe un comportement inattendu lors de l'édition de texte. Mon premier recours consiste généralement à utiliser C-h k
pour savoir quelles fonctions sont appelées par une séquence de touches donnée. Cependant, la documentation est parfois en contradiction avec le comportement observé. Dans ces cas, je suppose généralement qu'un autre package s'est accroché à cette fonction ou séquence de touches et modifie son comportement.
Comment savoir quelles fonctions sont liées à ma séquence de touches?
Un exemple que j'ai rencontré récemment est que j'ai appuyé sur la "touche et que des guillemets ont été insérés au début et à la fin de la région active. Je soupçonnais que ce n'était pas le comportement par défaut d'Emacs, j'ai donc l'habitude C-h k "
de savoir quelle fonction était réellement appelée.
La describe-key
documentation m'a dit que la fonction self-insert-command
était appelée, qui est une fonction intégrée. Pour faire court, après quelques essais et erreurs, j'ai pu déterminer que le comportement était dû à electric-pair-mode
. À l'avenir, y a-t-il un moyen plus rapide d'arriver à cette conclusion que de désactiver les colis suspects un par un jusqu'à trouver le coupable?
electric-pair-mode
été activé uniquement dans certains modes majeurs? Ne voyez - vous encoreself-insert-command
pour"
quand vous faitesC-h k
toutelectric-pair-mode
est actif?electric-pair-mode
fonctionne en se connectant àpost-self-insert-hook
, et non en modifiant le raccourci clavier.C-h k
vous indique exactement ce qui se passe pour une touche. Si vous regardez la documentation deself-insert-command
, il est très clairement indiquépost-self-insert-hook
que la commande est exécutée une fois la commande terminée.after-change-functions
comme Jordon le mentionne dans sa réponse? La documentation d'une fonction ne mentionnera probablement pas spécifiquement ce crochet, n'est-ce pas?C-h k
+ les hooks standards == le comportement complet (plus ou moins). Bien sûr, cela laisse parfois beaucoup de possibilités, mais il est toujours beaucoup plus transparent que tout autre système logiciel complexe que je connaisse.Réponses:
Il n'y a pas de moyen facile de savoir exactement ce que fera une seule pression sur une touche.
Si vous voyez un comportement supplémentaire, vérifiez toujours les crochets communs. Voir la liste ici: http://www.gnu.org/software/emacs/manual/html_node/elisp/Standard-Hooks.html
Dans la plupart des cas, les plus importants sont:
Vous devrez inspecter ces crochets et examiner les fonctions qu'ils contiennent pour voir lequel modifie votre comportement.
Si les fonctions de ces hooks ne décrivent pas entièrement le comportement observé, consultez les fonctions pour obtenir des conseils qui apparaîtront dans leur documentation à partir de
describe-function
.Edit: J'ai écrit quelques fonctions pour aider à décrire un crochet mieux que de passer par les fonctions une par une: https://gist.github.com/jordonbiondo/bad03e44bb053db0f1eb Vous pouvez utiliser
describe-hook
défini ici comme les autres fonctions de description. Voici un échantillon de sa sortie:Et voici tout le code, au cas où l'essentiel disparaîtrait:
la source
documentation
est mise à jour pour refléter.Peut-être pas une réponse complète à votre question, mais le package
helm-descbinds
vous aide à rechercher toutes les liaisons de clavier définies à partir de la représentation ascii du raccourci. Pour chaque hit, il vous montre la fonction interactive associée au raccourci clavier, et vous pouvez demanderhelm-descbinds
à le décrire ou à l' exécuter directement à partir des résultats de la recherche.Voici la description du package sur le site GitHub:
la source
C-h b
. Mon seul souhait est que je puisse passer à l'élément de la liste en entrant la séquence de touches réelle au lieu de taperC
-
c
_
C
-
p