Dlaczego istnieje tryb interakcji seplenia i czy kiedykolwiek go potrzebujemy?

20

P: Dlaczego lisp-interaction-modeistnieje i czy istnieją jakieś powody, aby go używać emacs-lisp-mode?

Do podręcznika stwierdza, że emacs-lisp-modei lisp-interaction-modesą identyczne z wyjątkiem, że ta ostatnia wiąże C-jproduktu 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-modeistnieje
  • Nie licząc C-jprzypisania klawiszy, czy są jakieś okoliczności, w których lepiej by było emacs-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 *.elpliki. Jeśli nie ma żadnego praktycznego powodu, aby pozostać w lisp-interaction-modepobliżu, po prostu (setq initial-major-mode 'emacs-lisp-mode)skończę z tym.

Dan
źródło
1
Może przestaniesz przygotowywać każde swoje pytanie za pomocą „ P: ” :)
nicael,
Możesz użyć dowolnego trybu głównego, który ci się podoba *scratch*.
Stefan
3
@nicael: P: czego nie lubić w Q ? Ci rany , sir! ;)
Dan

Odpowiedzi:

13

O ile nie nienawidzisz tego C-jzachowania (i jestem pewien, że większość eliskich autorów uzna to za przydatne), po prostu zachowaj to, co jest.

Zdefiniuj klucze lisp-mode-shared-mapzamiast kopiować je dla map klawiszy specyficznych dla trybu.

Wszystko lisp-mode-map, emacs-lisp-mode-mapi lisp-interaction-mode-mapmieć lisp-mode-shared-mapich macierzystej mapy klawiatury.

phils
źródło
15

Nowy tryb pochodny jest tani: lisp-interaction-modedziedziczy emacs-lisp-mode, jego implementacja to zaledwie kilkanaście wierszy kodu. Różni się od emacs-lisp-modenastępujących sposobów:

  • ma inną nazwę;
  • ma inną mapę klawiszy;
  • ma inną tabelę składni;
  • ma dodatkowy hak.

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-modei lisp-interaction-modemają 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 (i lisp-modeteż, ale prawdopodobnie to w porządku).

Czy wystąpiłyby nieoczekiwane konsekwencje zmiany *scratch*trybu bufora na emacs-lisp-mode?

Najbardziej oczywistą konsekwencją byłoby to, lisp-interaction-mode-hookże nie byłoby już uruchamiane w *scratch*buforze.

jch
źródło
3
Ma dodatkowy hak. emacs-lisp-mode-hookdziała, lisp-interaction-modeponieważ 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).
phils
Cholera, masz rację. Mam nadzieję, że teraz poprawne.
jch
4

FWIW, sam używam emacs-lisp-modew *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.eli jest tam jak zawsze , więc usunięcie go wydaje się bezcelowe.

Harald Hanche-Olsen
źródło
Zacząłem to robić wieki temu, ponieważ chciałem to C-jzrobić 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.
Harald Hanche-Olsen
Ja też, za co warto - robiłem to od dłuższego czasu. Albo używam *.elbufora plików na żądanie.
Drew