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 type
comando bash , que retornará toda a definição de uma função.
(Backstory Embaraçoso: Eu acidentalmente escreveu mais de uma função trabalhar no meu .emacs
arquivo com uma versão não-trabalho A função original ainda está na memória e ele funciona, mas eu não posso para a.! Vida de me lembrar como eu fiz isso.)
.emacs
aberto em um buffer, tente desfazer como um louco.Respostas:
Se você digitar
C-h f function-name RET
, obterá a documentação da função, com um link para a fonte da função, se disponível.Eu não acho que exista uma função fácil do Lisp que você possa chamar para recuperar a localização da fonte de uma função; a pesquisa está bastante entrelaçada com o resto do sistema de ajuda.
find-lisp-object-file-name
é a principal função que tenta descobrir onde está a fonte de uma função.A menos que
function-name
seja um primitivo (definido na fonte 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 em bytes, tudo o que você verá é seu código de bytes.fonte
(symbol-function 'function-name)
é exatamente o que eu estava procurando! Além disso, parece que, se você realmente precisa da fonte para as funções C, pode obtê-la usando informações da resposta de Oleg.M-x find-function
retorna a definição da função perto do ponto.A partir da documentação:
Se você deseja incluir também funções implementadas em C, adicione o seguinte ao seu arquivo .emacs:
fonte