P: ¿Por qué lisp-interaction-mode
existe, y hay alguna razón para usarlo en lugar de emacs-lisp-mode
?
El manual establece que emacs-lisp-mode
y lisp-interaction-mode
son idénticos, excepto que este último se une C-j
a 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-mode
existe? - Sin contar la
C-j
combinació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 *.el
archivos. 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-j
comportamiento (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-map
lugar de duplicarlas para los mapas de teclas específicos del modo.Todos
lisp-mode-map
,emacs-lisp-mode-map
ylisp-interaction-mode-map
tienenlisp-mode-shared-map
como su mapa de teclas padre.fuente
Un nuevo modo derivado es barato:
lisp-interaction-mode
hereda deemacs-lisp-mode
, su implementación es solo una docena de líneas de código más o menos. Difiere deemacs-lisp-mode
las 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-mode
ylisp-interaction-mode
comparten 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-map
y se aplicarán a ambos modos (ylisp-mode
también, pero probablemente esté bien).La consecuencia más obvia sería que
lisp-interaction-mode-hook
ya no se ejecutaría en el*scratch*
búfer.fuente
emacs-lisp-mode-hook
correlisp-interaction-mode
porque 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-mode
en 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-j
hacerlonewline-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.*.el
búfer de archivos desechable .