Q: Pourquoi lisp-interaction-mode
existe- t- il et y a-t-il des raisons de l'utiliser à la place emacs-lisp-mode
?
Le manuel indique que emacs-lisp-mode
et lisp-interaction-mode
sont 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-mode
existe-t-il? - Sans compter le
C-j
raccourci clavier, y a-t-il des circonstances dans lesquelles il serait préférable de le faireemacs-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 *.el
fichiers. 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.
*scratch*
.Réponses:
À moins que vous
C-j
ne 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-map
lieu de les dupliquer pour les images clés spécifiques au mode.Tous
lisp-mode-map
,emacs-lisp-mode-map
etlisp-interaction-mode-map
ontlisp-mode-shared-map
leur keymap mère.la source
Un nouveau mode dérivé est bon marché:
lisp-interaction-mode
hérité deemacs-lisp-mode
, son implémentation n'est que d'une dizaine de lignes de code. Il diffère deemacs-lisp-mode
seulement des façons suivantes: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-mode
etlisp-interaction-mode
partagent un parent commun,lisp-mode-shared-map
. Il n'y a donc aucune raison de dupliquer les raccourcis clavier - il suffit de les définirlisp-mode-shared-map
et ils s'appliqueront aux deux modes (etlisp-mode
aussi, mais c'est probablement bien).La conséquence la plus évidente serait
lisp-interaction-mode-hook
qu'elle ne serait plus exécutée dans le*scratch*
tampon.la source
emacs-lisp-mode-hook
s'exécutelisp-interaction-mode
car 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).FWIW, j'utilise moi-même
emacs-lisp-mode
dans 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.la source
C-j
lié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.*.el
tampon de fichier jetable .