Perché esiste la modalità interazione lisp e ne abbiamo mai bisogno?


20

D: Perché lisp-interaction-modeesiste e ci sono dei motivi per usarlo al posto di emacs-lisp-mode?

Il manuale afferma che emacs-lisp-modee lisp-interaction-modesono identici, tranne per il fatto che quest'ultimo si lega C-ja eval-print-last-sexp. Oltre a ciò, "tutti gli altri comandi in modalità Interazione Lisp sono gli stessi della modalità Emacs Lisp". Per quanto ne so, solo il *scratch*buffer utilizza quest'ultima modalità.

Mi sembra strano che esista un'intera modalità che differisce da un'altra per una sola associazione di tasti, quindi presumo che mi manchi un po 'di storia o contesto.

Così:

La motivazione di questa domanda è che, in questo momento, sto vincolando due volte le chiavi (nelle due modalità) in modo che il mio *scratch*buffer si comporti come buffer che visitano i *.elfile. Se non c'è motivo pratico per restare in lisp-interaction-modegiro, lo farò (setq initial-major-mode 'emacs-lisp-mode)e finirò.


1
Forse smetterai di anteporre ogni tua domanda con " Q: " :)
nicael,

Puoi utilizzare qualsiasi modalità principale che ti piace *scratch*.
Stefan,

3
@nicael: Q: cosa non ti piace della Q ? Mi hai ferito , signore! ;)
Dan

Risposte:


13

A meno che tu non odi il C-jcomportamento (e sono sicuro che la maggior parte degli autori elisp lo trova utile), mantieni le cose così come sono.

Definisci le tue chiavi lisp-mode-shared-mapinvece di duplicarle per le mappe di tasti specifiche della modalità.

Tutti lisp-mode-map, emacs-lisp-mode-mape lisp-interaction-mode-maphanno lisp-mode-shared-mapcome loro mappa dei tasti genitore.


15

Una nuova modalità derivata è economica: lisp-interaction-modeeredita da emacs-lisp-mode, la sua implementazione è solo una dozzina di righe di codice o giù di lì. Si differenzia emacs-lisp-modenei seguenti modi:

  • ha un nome diverso;
  • ha una keymap diversa;
  • ha una tabella di sintassi diversa;
  • ha un gancio aggiuntivo.

D'altra parte, condivide la sua tabella abbrev con emacs-lisp-mode.

Edit: come notato da @phils nella sua risposta (che vedono), le mappe dei tasti di emacs-lisp-modee lisp-interaction-modecondividono un comune genitore, lisp-mode-shared-map. Non vi è quindi alcun motivo per duplicare le combinazioni di tasti: basta definirle in lisp-mode-shared-mape si applicheranno ad entrambe le modalità (e lisp-modeanche, ma probabilmente va bene).

Ci sarebbero conseguenze impreviste nel cambiare la *scratch*modalità buffer in emacs-lisp-mode?

La conseguenza più ovvia sarebbe che lisp-interaction-mode-hooknon sarebbe più eseguito nel *scratch*buffer.


3
Ha un gancio aggiuntivo . emacs-lisp-mode-hookfunziona lisp-interaction-modeperché è così che funzionano le modalità derivate . Si fa una mappa di tastiera diversa, ma entrambe le modalità elisp condividere lo stesso keymap genitore ( lisp-mode-shared-map). Ha una tabella di sintassi separata, ma è identica a quella della sua modalità padre (perché si differenzia dal padre per l'impostazione).
phils,

Accidenti, hai ragione. Speriamo di correggere ora.
dal

4

FWIW, lo uso anch'io emacs-lisp-modenel *scratch*buffer. Se desidero valutare qualcosa, lo faccio semplicemente C-x C-e, con un C-uprefisso quando necessario. Non vedo alcun aspetto negativo di questa pratica.

Per quanto riguarda il motivo per cui la modalità è lì, è solo poche righe di codice lisp elisp-mode.eled è stata lì come per sempre , quindi rimuoverla sembra inutile.


Ho iniziato a farlo da solo anni fa perché volevo C-jvincolarlo newline-and-indent, ma oggigiorno, poiché il rientro avviene più automaticamente, questa non è più una preoccupazione seria. Quindi se non avessi già apportato questa modifica molto tempo fa, non mi preoccuperei adesso.
Harald Hanche-Olsen,

Anche io, per quello che vale, lo faccio da molto tempo. Oppure uso un *.elbuffer di file usa e getta .
Disegnò il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.