Existe uma maneira de imprimir a definição de uma função existente no Emacs?

6

Eu quero ver a definição de uma função existente no Emacs. Isso é possível?

Eu tentei C-h d function-name RET , mas ele retorna apenas a string de documentação para a função, não a função real em si.

Estou pensando em algo semelhante ao comando type do bash, que retornará toda a definição de uma função.

(história de fundo embaraçosa: eu acidentalmente escrevi sobre uma função de trabalho no meu arquivo .emacs com uma versão que não funciona. A função original ainda está na memória! E funciona! Mas eu não posso pela vida de mim lembra como eu fiz isso.)

    
por Micah R Ledbetter 10.11.2011 / 23:50

2 respostas

6

Se você digitar C-h f function-name RET , obterá a documentação da função, com um link para a fonte de função, se disponível.

Eu não acho que haja uma função Lisp fácil que você possa chamar para recuperar a localização da fonte de uma função; a pesquisa está bastante interligada com o resto do sistema de ajuda. find-lisp-object-file-name é a função principal que tenta descobrir onde a origem de uma função é.

A menos que function-name seja primitivo (definido na origem C do Emacs), você pode ver seu código com (symbol-function 'function-name) ou mais geralmente (função indireta 'nome-da-função). No entanto, se a função foi compilada por byte, tudo o que você verá é o bytecode.

    
por 11.11.2011 / 02:12
3

M-x find-function retorna a definição da função perto do ponto.

Da documentação:

Finds the source file containing the definition of the function near point (selected by 'function-called-at-point') in a buffer and places point before the definition. Set mark before moving, if the buffer already existed.

Se você quiser incluir também as funções implementadas em C, adicione o seguinte ao seu arquivo .emacs:

(setq find-function-C-source-directory (concat (getenv "emacs_home") "/path/to/source-dir"))
    
por 11.11.2011 / 07:19