Pourquoi le mode d'interaction lisp existe-t-il et en avons-nous jamais besoin?

20

Q: Pourquoi lisp-interaction-modeexiste- t- il et y a-t-il des raisons de l'utiliser à la place emacs-lisp-mode?

Le manuel indique que emacs-lisp-modeet lisp-interaction-modesont identiques sauf que ce dernier se lie C-jà eval-print-last-sexp. Au-delà de cela, "toutes les autres commandes en mode d'interaction Lisp sont les mêmes qu'en mode Emacs Lisp." Pour autant que je sache, seul le *scratch*tampon utilise ce dernier mode.

Il me semble étrange qu'il existe un mode entier qui diffère d'un autre par une seule liaison de touches, donc je suppose qu'il me manque un historique ou un contexte.

Donc:

  • Pourquoi lisp-interaction-modeexiste-t-il?
  • Sans compter le C-jraccourci clavier, y a-t-il des circonstances dans lesquelles il serait préférable de le faire emacs-lisp-mode?
  • Y aurait-il des conséquences inattendues à changer le *scratch*mode du tampon enemacs-lisp-mode ?

La motivation de cette question est que, pour le moment, je lie des clés deux fois (dans les deux modes) afin que mon *scratch*tampon se comporte comme des tampons visitant des *.elfichiers. S'il n'y a aucune raison pratique de rester lisp-interaction-mode, je vais juste (setq initial-major-mode 'emacs-lisp-mode)en finir.

Dan
la source
1
Peut-être que vous arrêterez d'ajouter à vos questions « Q: » :)
nicael
Vous pouvez utiliser n'importe quel mode majeur pour lequel vous aimez *scratch*.
Stefan
3
@nicael: Q: qu'est-ce qui ne plaît pas au Q ? Vous m'avez blessé , monsieur! ;)
Dan

Réponses:

13

À moins que vous C-jne détestiez le comportement (et je suis sûr que la plupart des auteurs élisp le trouvent pratique), gardez les choses telles qu'elles sont.

Définissez vos clés au lisp-mode-shared-maplieu de les dupliquer pour les images clés spécifiques au mode.

Tous lisp-mode-map, emacs-lisp-mode-mapet lisp-interaction-mode-mapont lisp-mode-shared-mapleur keymap mère.

phils
la source
15

Un nouveau mode dérivé est bon marché: lisp-interaction-modehérité de emacs-lisp-mode, son implémentation n'est que d'une dizaine de lignes de code. Il diffère de emacs-lisp-modeseulement des façons suivantes:

  • il a un nom différent;
  • il a une carte de touches différente;
  • il a une table de syntaxe différente;
  • il a un crochet supplémentaire.

En revanche, il partage sa table d'abréviations avec emacs-lisp-mode.

Edit: comme l'a noté dans sa réponse @phils (qui voient), les keymaps de emacs-lisp-modeet lisp-interaction-modepartagent un parent commun, lisp-mode-shared-map. Il n'y a donc aucune raison de dupliquer les raccourcis clavier - il suffit de les définir lisp-mode-shared-mapet ils s'appliqueront aux deux modes (et lisp-modeaussi, mais c'est probablement bien).

Y aurait-il des conséquences inattendues à changer le *scratch*mode du tampon en emacs-lisp-mode?

La conséquence la plus évidente serait lisp-interaction-mode-hookqu'elle ne serait plus exécutée dans le *scratch*tampon.

jch
la source
3
Il a un crochet supplémentaire . emacs-lisp-mode-hooks'exécute lisp-interaction-modecar c'est ainsi que fonctionnent les modes dérivés . Il ne une configuration clavier différente, mais les deux modes elisp partagent la même keymap mère ( lisp-mode-shared-map). Il a une table de syntaxe distincte, mais il est identique à celui de son mode parent (car il s'en remet au parent pour le définir).
phils
Bon sang, tu as raison. Avec un peu de chance maintenant.
jch
4

FWIW, j'utilise moi-même emacs-lisp-modedans le *scratch*tampon. Si je souhaite évaluer quelque chose, je le fais C-x C-e, avec un C-upréfixe si nécessaire. Je ne vois aucun inconvénient à cette pratique.

Quant à savoir pourquoi le mode est là, il ne s'agit que de quelques lignes de code lisp elisp-mode.el, et il est là depuis toujours , donc le supprimer semble inutile.

Harald Hanche-Olsen
la source
J'ai commencé à faire moi - même l' âge il y a parce que je voulais C-jlié newline-and-indent, mais ces jours -ci , comme l' indentation arrive plus automatiquement, ce n'est pas un grave plus préoccupante. Donc, si je n'avais pas déjà fait ce changement il y a longtemps, je ne m'en occuperais pas maintenant.
Harald Hanche-Olsen
Moi aussi, pour ce que ça vaut - je l'ai fait depuis longtemps. Ou j'utilise un *.eltampon de fichier jetable .
Drew