P: Por que lisp-interaction-mode
existe e existem razões para usá-lo em vez de emacs-lisp-mode
?
Os manuais estados que emacs-lisp-mode
e lisp-interaction-mode
são idênticos, excepto que o último se liga C-j
ao eval-print-last-sexp
. Além disso, "todos os outros comandos no modo Lisp Interaction são os mesmos que no modo Emacs Lisp". Até onde eu sei, apenas o *scratch*
buffer usa o último modo.
Parece-me estranho que exista um modo inteiro que difira do outro por apenas uma única combinação de teclas, então presumo que estou perdendo alguma história ou contexto.
Tão:
- Por que
lisp-interaction-mode
existe? - Sem contar a
C-j
combinação de teclas, há alguma circunstância em que seria preferívelemacs-lisp-mode
? - Haveria consequências inesperadas para mudar o
*scratch*
modo do buffer paraemacs-lisp-mode
?
A motivação para esta pergunta é que, no momento, estou ligando chaves duas vezes (nos dois modos) para que meu *scratch*
buffer se comporte como buffers que visitam *.el
arquivos. Se não houver uma razão prática para ficar lisp-interaction-mode
por aqui, (setq initial-major-mode 'emacs-lisp-mode)
acabarei com isso.
*scratch*
.Respostas:
A menos que você odeie o
C-j
comportamento (e tenho certeza de que a maioria dos autores da elisp o acha útil), mantenha as coisas como estão.Defina suas chaves para, em
lisp-mode-shared-map
vez de duplicá-las, para os mapas de teclas específicos do modo.Todos
lisp-mode-map
,emacs-lisp-mode-map
elisp-interaction-mode-map
temlisp-mode-shared-map
como seu mapa de teclado pai.fonte
Um novo modo derivado é barato:
lisp-interaction-mode
herdaemacs-lisp-mode
, sua implementação é apenas uma dúzia de linhas de código. Difereemacs-lisp-mode
apenas das seguintes maneiras:Por outro lado, compartilha sua tabela abreviada com
emacs-lisp-mode
.Editar: como observado por @phils em sua resposta (que é exibida), os mapas principais
emacs-lisp-mode
e oslisp-interaction-mode
compartilhamentos de um pai ou mãe em comumlisp-mode-shared-map
,. Portanto, não há razão para duplicar as combinações de teclas - apenas defina-aslisp-mode-shared-map
e elas serão aplicadas aos dois modos (elisp-mode
também, mas provavelmente isso é bom).A conseqüência mais óbvia seria que
lisp-interaction-mode-hook
não seria mais executada no*scratch*
buffer.fonte
emacs-lisp-mode-hook
correlisp-interaction-mode
porque é assim que os modos derivados funcionam . Ele faz ter um mapa de teclado diferente, mas ambos os modos elisp compartilham o mesmo mapa de teclado pai (lisp-mode-shared-map
). Ele possui uma tabela de sintaxe separada, mas é idêntica à de seu modo pai (porque adia ao pai por defini-lo).FWIW, eu mesmo uso
emacs-lisp-mode
no*scratch*
buffer. Se eu quiser avaliar algo, basta fazê-lo C-x C-e, com um C-uprefixo quando necessário. Não vejo desvantagem nessa prática.Quanto ao porquê do modo estar lá, existem apenas algumas linhas de código lisp
elisp-mode.el
, e ele está lá há uma eternidade , então removê-lo parece inútil.fonte
C-j
obrigado anewline-and-indent
, mas estes dias, como recuo acontece mais automaticamente, isso não é uma preocupação séria anymore. Portanto, se eu já não tivesse feito essa alteração há muito tempo, não me incomodaria agora.*.el
buffer de arquivo descartável .