¿Por qué existe el modo de interacción lisp? ¿Lo necesitamos alguna vez?


20

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:

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é.


1
Tal vez deje de anteponer todas sus preguntas con " P: " :)
nicael

Puede usar cualquier modo principal que desee *scratch*.
Stefan

3
@nicael: P: ¿qué no le gusta de la Q ? Usted me hirió , señor! ;)
Dan

Respuestas:


13

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-mapy lisp-interaction-mode-maptienen lisp-mode-shared-mapcomo su mapa de teclas padre.


15

Un nuevo modo derivado es barato: lisp-interaction-modehereda de emacs-lisp-mode, su implementación es solo una docena de líneas de código más o menos. Difiere de emacs-lisp-modelas siguientes formas:

  • tiene un nombre diferente;
  • tiene un mapa de teclas diferente;
  • tiene una tabla de sintaxis diferente;
  • Tiene un gancho adicional.

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-modey lisp-interaction-modecomparten un antepasado común lisp-mode-shared-map. Por lo tanto, no hay ninguna razón para duplicar las combinaciones de teclas: solo defínalos lisp-mode-shared-mapy se aplicarán a ambos modos (y lisp-modetambién, pero probablemente esté bien).

¿Habría consecuencias inesperadas al cambiar el *scratch*modo del búfer a emacs-lisp-mode?

La consecuencia más obvia sería que lisp-interaction-mode-hookya no se ejecutaría en el *scratch*búfer.


3
Tiene un gancho adicional . emacs-lisp-mode-hookcorre lisp-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).
phils

Maldición, tienes razón. Esperemos que sea correcto ahora.
jch

4

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.


Comencé a hacer esto yo mismo hace mucho tiempo porque quería C-jhacerlo newline-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.
Harald Hanche-Olsen

Yo también, por lo que vale, lo he hecho durante mucho tiempo. O uso un *.elbúfer de archivos desechable .
Dibujó el
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.