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.


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.


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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.