Por que existe o modo de interação lisp, e sempre precisamos dele?


20

P: Por que lisp-interaction-modeexiste e existem razões para usá-lo em vez de emacs-lisp-mode?

Os manuais estados que emacs-lisp-modee lisp-interaction-modesão idênticos, excepto que o último se liga C-jao 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:

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 *.elarquivos. Se não houver uma razão prática para ficar lisp-interaction-modepor aqui, (setq initial-major-mode 'emacs-lisp-mode)acabarei com isso.


1
Talvez você vai parar prepending cada de suas perguntas com " Q: " :)
nicael

Você pode usar qualquer modo principal que desejar *scratch*.
23413 Stefan

3
@nicael: Q: o que há para não gostar no Q ? Você ferida me, senhor! ;)
Dan

Respostas:


13

A menos que você odeie o C-jcomportamento (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-mapvez de duplicá-las, para os mapas de teclas específicos do modo.

Todos lisp-mode-map, emacs-lisp-mode-mape lisp-interaction-mode-maptem lisp-mode-shared-mapcomo seu mapa de teclado pai.


15

Um novo modo derivado é barato: lisp-interaction-modeherda emacs-lisp-mode, sua implementação é apenas uma dúzia de linhas de código. Difere emacs-lisp-modeapenas das seguintes maneiras:

  • tem um nome diferente;
  • possui um mapa de teclas diferente;
  • tem uma tabela de sintaxe diferente;
  • possui um gancho adicional.

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-modee os lisp-interaction-modecompartilhamentos de um pai ou mãe em comum lisp-mode-shared-map,. Portanto, não há razão para duplicar as combinações de teclas - apenas defina-as lisp-mode-shared-mape elas serão aplicadas aos dois modos (e lisp-modetambém, mas provavelmente isso é bom).

Haveria consequências inesperadas para mudar o *scratch*modo do buffer para emacs-lisp-mode?

A conseqüência mais óbvia seria que lisp-interaction-mode-hooknão seria mais executada no *scratch*buffer.


3
Tem um gancho adicional . emacs-lisp-mode-hookcorre lisp-interaction-modeporque é 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).
phils

Droga, você está certo. Espero que esteja correto agora.
JCH

4

FWIW, eu mesmo uso emacs-lisp-modeno *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.


Eu comecei a fazer isso mesmo há séculos porque eu queria C-jobrigado a newline-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.
Harald Hanche-Olsen /

Eu também, pelo que vale a pena - já o faz há muito tempo. Ou eu uso um *.elbuffer de arquivo descartável .
Tirou
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.