Tout au long de la journée, j'utilise constamment C-h f
ou C-h v
( describe-function
et describe-variable
) pour rechercher de la documentation sur les fonctions et les variables. Plus souvent qu'autrement, si je n'obtiens pas toutes les informations dont j'ai besoin, je clique sur le lien du fichier à la fin de:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
et accédez au code source. Cela fonctionne pour les packages installés, mais ne semble pas fonctionner pour les packages intégrés. Par exemple, en haut de la page d'aide de la commande, describe-function
tout ce que j'obtiens est:
describe-function is an interactive compiled Lisp function.
sans lien vers le code source. Existe-t-il un moyen de naviguer rapidement vers le code source d'un package intégré?
Je sais que je peux trouver le code source dans, par exemple, /usr/share/emacs/24.5/lisp
et trouver un certain nombre de façons d'accéder rapidement à ce répertoire, mais je suis curieux de savoir s'il existe un moyen rapide et facile de naviguer vers une définition de fonction / variable intégrée dans le code source. Je vous remercie!
la source
M-x find-function
;M-x find-variable
;M-x find-face
;M-x find-library
. J'utilise toujours une installation complète d'Emacs pour avoir accès à tout, et juste après avoir construit mes propres Emacs, je copie sur le code C-source et définit son emplacement afin de pouvoir également trouver des définitions de code C-Source. Voir la variablefind-function-C-source-directory
pour définir l'emplacement du code source C après l'avoir copié.M-x describe-function
: decrire-fonction est une fonction Lisp compilée autochargée interactive dans 'help-fns.el'. Et à partir de là, je peux cliquer sur (ou appuyer sur Entrée)help-fns.el
et je suis ensuite transporté vers la section applicable du code. Peut-être que vous avez plusieurs versions d'Emacs, et que celle que vous utilisez actuellement n'a pas tout le code source installé?emacs -Q
(pas de fichier init), ou si vous pouvez le reprocher avec une recette qui commence paremacs -Q
(par exemple en disant quelles bibliothèques vous chargez et comment vous les chargez etc.), alors pensez à déposer un bogue rapport:M-x report-emacs-bug
..el
fichiers (traités comme facultatifs) des.elc
fichiers (obligatoires), de sorte que vous devez installer un ou plusieurs paquets supplémentaires pour les obtenir. Si vous avez obtenu Emacs auprès de votre gestionnaire de packages de système d'exploitation, cela explique peut-être cela./usr/bin/emacs
et/usr/bin/emacsclient
, et j'ai une version bien emballée dans un dossier d'application OSX se terminant par .app - c'est-à-dire/Applications/Emacs.app
(à l'intérieur d'Emacs.app, se trouvent les binaires et tous les fichiers de code source).Réponses:
La raison pour laquelle vous voyez parfois «fonction Lisp compilée interactive» (ou de même pour les variables) sans nom de fichier est que la fonction a été chargée à partir d'un fichier compilé en octets et que le fichier source Elisp correspondant n'est pas présent. Afin de vous montrer le code source, Emacs doit être capable de trouver le code source.
De nombreuses distributions expédient les fichiers source Lisp dans un package séparé, car tous les utilisateurs n'en veulent pas et ils sont volumineux. Par exemple, sur Debian et dérivés, installez
emacs24-el
. Si vous construisez Emacs à partir de la source,make install
copiez les sources Elisp.Si vous voulez voir le code source des primitives (sous-programmes et formulaires spéciaux), Emacs doit être capable de trouver les sources C. Ceux-ci ne sont normalement pas disponibles sauf si vous avez installé à partir de la source.
Emacs recherche les sources Lisp dans les répertoires de
load-path
. Pour une fonction ou une variable chargée à partirfoo.elc,
du fichier, vous pouvez êtrefoo.el
oufoo.el.gz
. Emacs recherche les sources C soussource-directory
et vous invite à choisir un répertoire différent s'il ne trouve pas le fichier source.la source
M-x emacs-version
il dit "modifié par Debian" à la fin, ce qui indiquerait que j'utilise une version du gestionnaire de paquets de mon système d'exploitation (Ubuntu), non?/usr/bin/emacs
ou/usr/local/bin/emacs
?Si vous cherchez des moyens de passer rapidement au code source, il y en a aussi
find-function-at-point
etfind-variable-at-point
qui sautera à la définition du symbole sous le curseur - vous pouvez les lier à Ch Cf et Ch Cv, par exemple.Ou vous pouvez essayer elisp-slime-nav , qui utilise M-. pour passer à la définition d'un symbole, et M-, pour revenir - il navigue vers les variables, les fonctions, les bibliothèques et les faces - https://github.com/purcell/elisp-slime-nav/
la source