A lo largo del día uso constantemente C-h f
o C-h v
( describe-function
y describe-variable
) para buscar documentación para funciones y variables. La mayoría de las veces, si no obtengo toda la información que necesito, haré clic en el enlace del archivo al final de:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
y navega hasta el código fuente. Esto funciona para paquetes instalados, pero no parece funcionar para los integrados. Por ejemplo, en la parte superior de la página de ayuda para el comando, describe-function
todo lo que obtengo es:
describe-function is an interactive compiled Lisp function.
sin enlace al código fuente. ¿Hay alguna forma de navegar rápidamente al código fuente de un paquete integrado?
Sé que puedo encontrar el código fuente en, por ejemplo, /usr/share/emacs/24.5/lisp
y encontrar varias formas de acceder a ese directorio rápidamente, pero tengo curiosidad por saber si hay una manera rápida y fácil de navegar a una función incorporada / definición de variable en el código fuente. ¡Gracias!
fuente
M-x find-function
;M-x find-variable
;M-x find-face
;M-x find-library
. Siempre uso una instalación completa de Emacs para tener acceso a todo, y justo después de construir mi propio Emacs copio sobre el código fuente C y establezco su ubicación para que pueda encontrar definiciones de código fuente C también. Consulte la variablefind-function-C-source-directory
para establecer la ubicación del código fuente C después de copiarlo.M-x describe-function
: describe-function es una función Lisp compilada con carga automática interactiva en 'help-fns.el'. Y desde allí puedo hacer clic en (o presionar enter)help-fns.el
y luego ser transportado a la sección correspondiente del código. ¿Quizás tenga múltiples versiones de Emacs, y la que está usando en este momento no tiene todo el código fuente instalado?emacs -Q
(sin archivo de inicio), o si puede reprogramarlo con una receta que comienza conemacs -Q
(por ejemplo, decir qué bibliotecas carga y cómo las carga, etc.), considere la posibilidad de presentar un error reportar:M-x report-emacs-bug
..el
archivos (tratados como opcionales) de los.elc
archivos (obligatorios), de modo que necesita instalar uno o más paquetes adicionales para obtenerlos. Si obtuvo Emacs del administrador de paquetes de su sistema operativo, tal vez esto lo explique./usr/bin/emacs
y/usr/bin/emacsclient
, y tengo una versión muy bien empaquetado en una aplicación OSX carpeta que termina por .app - es decir,/Applications/Emacs.app
(dentro de esa Emacs.app, son los binarios y toda la archivos de código fuente).Respuestas:
La razón por la que a veces ve la "función Lisp compilada interactiva" (o lo mismo ocurre con las variables) sin nombre de archivo es porque la función se cargó desde un archivo compilado por bytes y el archivo fuente de Elisp correspondiente no está presente. Para poder mostrarle el código fuente, Emacs debe poder encontrar el código fuente.
Muchas distribuciones envían los archivos fuente de Lisp en un paquete separado, porque no todos los usuarios los quieren y son voluminosos. Por ejemplo, en Debian y derivados, instale
emacs24-el
. Si construye Emacs desde la fuente,make install
copie las fuentes de Elisp.Si desea ver el código fuente de las primitivas (subrutinas y formas especiales), Emacs necesita poder encontrar las fuentes C. Esos normalmente no están disponibles a menos que los haya instalado desde la fuente.
Emacs busca las fuentes de Lisp en los directorios en
load-path
. Para una función o variable cargada desdefoo.elc,
el archivo puede serfoo.el
ofoo.el.gz
. Emacs busca las fuentes C debajosource-directory
y le solicita un directorio diferente si no encuentra el archivo fuente.fuente
M-x emacs-version
dice "modificado por Debian" al final, lo que indicaría que estoy usando una versión del administrador de paquetes de mi sistema operativo (Ubuntu), ¿verdad?/usr/bin/emacs
o/usr/local/bin/emacs
?Si está buscando formas de saltar rápidamente al código fuente, también hay
find-function-at-point
yfind-variable-at-point
saltará a la definición del símbolo debajo del cursor; por ejemplo, puede vincularlos a Ch Cf y Ch Cv.O podrías probar elisp-slime-nav , que usa M-. saltar a la definición de un símbolo, y M-, regresar - navega a variables, funciones, bibliotecas y caras - https://github.com/purcell/elisp-slime-nav/
fuente