P: Dlaczego lisp-interaction-mode
istnieje i czy istnieją jakieś powody, aby go używać emacs-lisp-mode
?
Do podręcznika stwierdza, że emacs-lisp-mode
i lisp-interaction-mode
są identyczne z wyjątkiem, że ta ostatnia wiąże C-j
produktu eval-print-last-sexp
. Poza tym „wszystkie inne polecenia w trybie interakcji Lisp są takie same jak w trybie Emacsa Lisp”. O ile wiem, tylko *scratch*
bufor używa tego drugiego trybu.
Dziwne jest dla mnie, że istnieje cały tryb, który różni się od innego tylko jednym klawiszem, więc zakładam, że brakuje mi historii lub kontekstu.
Więc:
- Dlaczego
lisp-interaction-mode
istnieje - Nie licząc
C-j
przypisania klawiszy, czy są jakieś okoliczności, w których lepiej by byłoemacs-lisp-mode
? - Czy wystąpiłyby nieoczekiwane konsekwencje zmiany
*scratch*
trybu bufora naemacs-lisp-mode
?
Motywem tego pytania jest to, że teraz wiążę klucze dwukrotnie (w dwóch trybach), dzięki czemu mój *scratch*
bufor zachowuje się jak bufory odwiedzające *.el
pliki. Jeśli nie ma żadnego praktycznego powodu, aby pozostać w lisp-interaction-mode
pobliżu, po prostu (setq initial-major-mode 'emacs-lisp-mode)
skończę z tym.
*scratch*
.Odpowiedzi:
O ile nie nienawidzisz tego
C-j
zachowania (i jestem pewien, że większość eliskich autorów uzna to za przydatne), po prostu zachowaj to, co jest.Zdefiniuj klucze
lisp-mode-shared-map
zamiast kopiować je dla map klawiszy specyficznych dla trybu.Wszystko
lisp-mode-map
,emacs-lisp-mode-map
ilisp-interaction-mode-map
miećlisp-mode-shared-map
ich macierzystej mapy klawiatury.źródło
Nowy tryb pochodny jest tani:
lisp-interaction-mode
dziedziczyemacs-lisp-mode
, jego implementacja to zaledwie kilkanaście wierszy kodu. Różni się odemacs-lisp-mode
następujących sposobów:Z drugiej strony dzieli tę tabelę skrótów
emacs-lisp-mode
.Edit: jak zauważył @phils w swojej odpowiedzi (co widać), że keymaps z
emacs-lisp-mode
ilisp-interaction-mode
mają wspólny nadrzędny,lisp-mode-shared-map
. Dlatego nie ma powodu, aby powielać skróty klawiszowe - wystarczy je zdefiniowaćlisp-mode-shared-map
, a będą one miały zastosowanie do obu trybów (ilisp-mode
też, ale prawdopodobnie to w porządku).Najbardziej oczywistą konsekwencją byłoby to,
lisp-interaction-mode-hook
że nie byłoby już uruchamiane w*scratch*
buforze.źródło
emacs-lisp-mode-hook
działa,lisp-interaction-mode
ponieważ tak działają tryby pochodne . To ma mieć inny układ klawiatury, ale oba tryby Elisp podziela tą mapę klawiszy nadrzędnego (lisp-mode-shared-map
). Ma osobną tabelę składni, ale jest identyczna z tabelą trybu macierzystego (ponieważ odkłada ją do ustawienia).FWIW, sam używam
emacs-lisp-mode
w*scratch*
buforze. Jeśli chcę coś ocenić, po prostu robię C-x C-e, z C-uprefiksem, gdy jest to potrzebne. Nie widzę wady tej praktyki.Jeśli chodzi o to, dlaczego ten tryb istnieje, jest tylko kilka wierszy kodu seplindera
elisp-mode.el
i jest tam jak zawsze , więc usunięcie go wydaje się bezcelowe.źródło
C-j
zrobićnewline-and-indent
, ale w dzisiejszych czasach, ponieważ wcięcie odbywa się bardziej automatycznie, nie jest to już poważny problem. Więc gdybym nie dokonał już tej zmiany dawno temu, nie zawracałbym sobie tym teraz głowy.*.el
bufora plików na żądanie.