Quiero ver la definición de una función existente en Emacs. es posible?
Lo intenté C-h d function-name RET
, pero solo devuelve la cadena de documentación para la función, no la función en sí misma.
Estoy pensando en algo similar al type
comando de bash , que devolverá la definición completa de una función.
(Historia de fondo vergonzosa: accidentalmente escribí sobre una función que funcionaba en mi .emacs
archivo con una versión que no funcionaba. ¡La función original todavía está en la memoria! ¡Y funciona! Pero por mi vida no puedo recordar cómo lo hice).
.emacs
abierto en un búfer, intente deshacerlo como loco.Respuestas:
Si escribe
C-h f function-name RET
, obtendrá la documentación de la función, con un enlace a la fuente de la función si está disponible.No creo que haya una función Lisp fácil a la que pueda llamar para recuperar la ubicación de la fuente de una función; la búsqueda está bastante entrelazada con el resto del sistema de ayuda.
find-lisp-object-file-name
es la función principal que intenta averiguar dónde está la fuente de una función.A menos que
function-name
sea una primitiva (definida en la fuente C de Emacs), puede ver su código con(symbol-function 'function-name)
, o más generalmente (nombre-función-función-indirecta). Sin embargo, si la función fue compilada por bytes, todo lo que verá es su código de bytes.fuente
(symbol-function 'function-name)
es exactamente lo que estaba buscando! Además, parece que si realmente necesita la fuente para las funciones C, puede obtenerla utilizando la información de la respuesta de Oleg.M-x find-function
devuelve la definición de la función cerca del punto.De la documentación:
Si desea incluir también funciones implementadas en C, debe agregar lo siguiente a su archivo .emacs:
fuente