Question

Considérant une frappe dans Emacs, par ex. C-x C-s . Je peux savoir quelle fonction il appelle en tapant C-h c touche , mais comment puis-je savoir où cette liaison a été définie?

(Peut-être que la bonne réponse est que cela ne peut pas être décidé, car les keymaps ne stockent pas ce type d'informations.)

Était-ce utile?

La solution

Emacs ne conserve pas les informations sur les associations de touches avec les fonctions. En fait, la réponse est généralement indéfinie.

Plusieurs fois, les raccourcis clavier sont configurés comme un effet secondaire d'un mode mineur ou via des crochets de mode. La liaison de clé pour les modes mineurs est souvent stockée dans des variables telles que comint-mode-map . Ce clavier est activé en définissant la variable de mode comint-mode . Cependant, cette carte de mode est une variable globale et n'importe qui, n'importe où, peut y ajouter des liaisons de clé. Donc, faire ce que vous voulez, c'est essentiellement savoir qui définit une variable avec une valeur particulière. De même pour les combinaisons de touches qui sont simplement définies localement via des crochets de mode (en utilisant local-set-key ). De plus, vous pouvez même configurer des liaisons de clé via variables de fichier . Tout cela pour simplement dire que les raccourcis dans Emacs sont éphémères.

La meilleure chose à faire est de trouver la fonction associée à la clé et de rechercher dans ce fichier (ou dans tout fichier associé si le mode est fractionné en plusieurs fichiers).

La recherche de liaison de clé dans emacs est relativement complexe en raison de la multitude de méthodes permettant de définir / d'associer des traits de clé (globalement, mode majeur, modes mineurs, remplacement de modes mineurs, tampons locaux, propriétés du texte, etc.). Pour un aperçu rapide, consultez cette documentation .

Vous pouvez écrire une fonction comme celle-ci pour regarder dans les modes mineurs et voir où une liaison de clé peut être définie, mais bien sûr, mon premier test a montré que la liaison de clé n’était pas définie ici. Mais peut-être que le code sera instructif.

(defun guess-where-keybinding-is-defined (key)
  "try to guess where a key binding might be defined"
  (interactive (list (read-key-sequence "Describe key: ")))
  (let ((bindings (minor-mode-key-binding key))
        found)
    (while (and bindings (not found))
      (if (setq found (caar bindings))
          (find-function (cdar bindings)))
      (setq bindings (cdr bindings)))))

Y a-t-il un problème spécifique que vous essayez de résoudre (autre que cette question)?

Autres conseils

Il suffit de faire M-x find-function

De la documentation Emacs:

  

(fonction de recherche)

     

Trouver la définition de la fonction   près du point.

     

Recherche le fichier source contenant le   définition de la fonction près du point   (sélectionné par   `fonction-appelée-at-point ') dans un   tampon et place le point avant la   définition. Placez la marque avant de vous déplacer, si   le tampon existait déjà.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top