Je veux voir la définition d'une fonction existante dans Emacs. Est-ce possible?
J'ai essayé C-h d function-name RET
, mais il ne renvoie que la chaîne de documentation de la fonction, pas la fonction elle-même.
Je pense à quelque chose de similaire à la type
commande de bash , qui renverra toute la définition d'une fonction.
(Contexte embarrassant: j'ai accidentellement écrasé une fonction qui fonctionnait dans mon .emacs
fichier avec une version qui ne fonctionnait pas. La fonction d'origine est toujours en mémoire! Et cela fonctionne! Mais je ne peux pas pour la vie de me rappeler comment je l'ai fait.)
.emacs
ouvert dans un tampon, essayez d'annuler comme un fou.Réponses:
Si vous tapez
C-h f function-name RET
, vous obtiendrez la documentation de la fonction, avec un lien vers la source de la fonction si disponible.Je ne pense pas qu'il existe une fonction Lisp facile à appeler pour récupérer l'emplacement de la source d'une fonction; la recherche est assez entrelacée avec le reste du système d'aide.
find-lisp-object-file-name
est la fonction principale qui tente de déterminer où se trouve la source d'une fonction.À moins qu'il
function-name
ne s'agisse d' une primitive (définie dans la source C d'Emacs), vous pouvez voir son code avec(symbol-function 'function-name)
, ou plus généralement (nom de fonction de fonction indirecte). Cependant, si la fonction a été compilée en octets, tout ce que vous verrez est son bytecode.la source
(symbol-function 'function-name)
c'est exactement ce que je cherchais! En outre, il semble que si vous avez vraiment besoin des fonctions source vers C, vous pouvez les obtenir en utilisant les informations de la réponse d'Oleg.M-x find-function
renvoie la définition de la fonction près du point.De la documentation:
Si vous souhaitez inclure également des fonctions implémentées en C, vous devez ajouter ce qui suit à votre fichier .emacs:
la source