Durante todo o dia, estou constantemente usando C-h f
ou C-h v
( describe-function
e describe-variable
) para procurar documentação para funções e variáveis. Frequentemente, se não obtiver todas as informações necessárias, clicarei no link do arquivo no final de:
some-random-command is an interactive compiled Lisp function in `some-mode.el'.
e navegue até o código fonte. Isso funciona para pacotes instalados, mas não parece funcionar para pacotes internos. Por exemplo, na parte superior da página de ajuda do comando, describe-function
tudo o que recebo é:
describe-function is an interactive compiled Lisp function.
sem link para o código fonte. Existe alguma maneira de navegar rapidamente para o código-fonte de um pacote incorporado?
Sei que posso encontrar o código-fonte em, por exemplo, /usr/share/emacs/24.5/lisp
e apresentar várias maneiras de acessar esse diretório rapidamente, mas estou curioso para saber se existe uma maneira rápida e fácil de navegar para uma função interna / definição de variável no diretório Código fonte. Obrigado!
fonte
M-x find-function
;M-x find-variable
;M-x find-face
;M-x find-library
. Eu sempre uso uma instalação completa do Emacs para ter acesso a tudo, e logo após criar o meu próprio Emacs copio o código-fonte C e defino sua localização para encontrar também as definições do código C-fonte. Consulte a variávelfind-function-C-source-directory
para definir o local do código-fonte C depois de copiá-lo.M-x describe-function
: description-function é uma função Lisp compilada e interativa, carregada automaticamente, em 'help-fns.el'. E a partir daí eu posso clicar (ou pressionar enter)help-fns.el
e depois ser transportado para a seção aplicável do código. Talvez você tenha várias versões do Emacs, e a que você está usando no momento não possui todo o código-fonte instalado?emacs -Q
(sem arquivo init), ou se puder reproduzi-lo com uma receita que comece comemacs -Q
(por exemplo, dizendo quais bibliotecas você carrega e como as carrega etc.), considere registrar um bug informar:M-x report-emacs-bug
..el
arquivos (tratados como opcionais) dos.elc
arquivos (obrigatório), de forma que você precisa instalar um ou mais pacotes adicionais para obtê-los. Se você obteve o Emacs do seu gerenciador de pacotes do sistema operacional, talvez isso explique./usr/bin/emacs
e/usr/bin/emacsclient
tenho uma versão bem compactada em uma pasta de aplicativo OSX que termina em .app - ou seja,/Applications/Emacs.app
(dentro desse Emacs.app, estão os binários e todos os arquivos de código-fonte).Respostas:
Às vezes, você vê a “função Lisp compilada interativa” (ou da mesma forma para variáveis) sem nome de arquivo, porque a função foi carregada de um arquivo compilado em bytes e o arquivo de origem Elisp correspondente não está presente. Para mostrar o código fonte, o Emacs deve ser capaz de encontrar o código fonte.
Muitas distribuições enviam os arquivos de origem Lisp em um pacote separado, porque nem todo usuário os deseja e eles são volumosos. Por exemplo, no Debian e derivados, instale
emacs24-el
. Se você criar o Emacs a partir da fonte,make install
copia as fontes Elisp.Se você deseja ver o código fonte das primitivas (sub-rotinas e formas especiais), o Emacs precisa ser capaz de encontrar as fontes C. Normalmente, eles não estão disponíveis, a menos que você tenha instalado a partir da fonte.
O Emacs procura as fontes Lisp nos diretórios em
load-path
. Para uma função ou variável carregada dofoo.elc,
arquivo pode serfoo.el
oufoo.el.gz
. O Emacs procura fontes C emsource-directory
e solicita um diretório diferente se não encontrar o arquivo de origem.fonte
M-x emacs-version
"modificado pelo Debian" no final, o que indica que estou usando uma versão do gerenciador de pacotes do meu sistema operacional (Ubuntu), certo?/usr/bin/emacs
ou/usr/local/bin/emacs
?Se você estiver procurando maneiras de pular rapidamente para o código-fonte, também existem
find-function-at-point
efind-variable-at-point
quais irão pular para a definição do símbolo sob o cursor - você pode vinculá-las ao Ch Cf e Ch Cv, por exemplo.Ou você pode tentar elisp-slime-nav , que usa M-. para pular para a definição de um símbolo e M- para retornar - ele navega para variáveis, funções, bibliotecas e faces - https://github.com/purcell/elisp-slime-nav/
fonte