P: ¿Por qué lisp-interaction-modeexiste, y hay alguna razón para usarlo en lugar de emacs-lisp-mode?
El manual establece que emacs-lisp-modey lisp-interaction-modeson idénticos, excepto que este último se une C-ja eval-print-last-sexp. Más allá de eso, "todos los otros comandos en el modo Lisp Interaction son los mismos que en el modo Emacs Lisp". Por lo que puedo decir, solo el *scratch*búfer usa el último modo.
Me parece extraño que haya un modo completo que difiere de otro por solo una combinación de teclas, por lo que supongo que me falta algo de historia o contexto.
Entonces:
- ¿Por qué
lisp-interaction-modeexiste? - Sin contar la
C-jcombinación de teclas, ¿hay alguna circunstancia en la que sería preferibleemacs-lisp-mode? - ¿Habría consecuencias inesperadas al cambiar el
*scratch*modo del búfer aemacs-lisp-mode?
La motivación para esta pregunta es que, en este momento, estoy vinculando las teclas dos veces (en los dos modos) para que mi *scratch*búfer se comporte como búferes visitando *.elarchivos. Si no hay una razón práctica para quedarse lisp-interaction-mode, simplemente (setq initial-major-mode 'emacs-lisp-mode)lo terminaré.

*scratch*.Respuestas:
A menos que odie el
C-jcomportamiento (y estoy seguro de que la mayoría de los autores de elisp lo encuentran útil), simplemente mantenga las cosas como están.Defina sus claves para en
lisp-mode-shared-maplugar de duplicarlas para los mapas de teclas específicos del modo.Todos
lisp-mode-map,emacs-lisp-mode-mapylisp-interaction-mode-maptienenlisp-mode-shared-mapcomo su mapa de teclas padre.fuente
Un nuevo modo derivado es barato:
lisp-interaction-modehereda deemacs-lisp-mode, su implementación es solo una docena de líneas de código más o menos. Difiere deemacs-lisp-modelas siguientes formas:Por otro lado, comparte su tabla abreviada con
emacs-lisp-mode.Editar: como señaló en su respuesta @phils (ver), los mapas de teclas de
emacs-lisp-modeylisp-interaction-modecomparten un antepasado comúnlisp-mode-shared-map. Por lo tanto, no hay ninguna razón para duplicar las combinaciones de teclas: solo defínaloslisp-mode-shared-mapy se aplicarán a ambos modos (ylisp-modetambién, pero probablemente esté bien).La consecuencia más obvia sería que
lisp-interaction-mode-hookya no se ejecutaría en el*scratch*búfer.fuente
emacs-lisp-mode-hookcorrelisp-interaction-modeporque así es como funcionan los modos derivados . Se hace un mapa de teclado diferente, pero ambos modos elisp compartir el mismo mapa de teclas padre (lisp-mode-shared-map). Tiene una tabla de sintaxis separada, pero es idéntica a la de su modo padre (porque difiere al padre para configurarlo).FWIW, yo mismo uso
emacs-lisp-modeen el*scratch*búfer. Si deseo evaluar algo, simplemente lo hago C-x C-e, con un C-uprefijo cuando sea necesario. No veo ningún inconveniente en esta práctica.En cuanto a por qué el modo está ahí, solo hay unas pocas líneas de código lisp
elisp-mode.el, y ha estado allí como siempre , por lo que eliminarlo parece inútil.fuente
C-jhacerlonewline-and-indent, pero en estos días, como la sangría ocurre más automáticamente, esto ya no es una preocupación seria. Entonces, si no hubiera hecho este cambio hace mucho tiempo, no me molestaría ahora.*.elbúfer de archivos desechable .