Чому існує режим Lisp-взаємодії та чи потрібний він нам коли-небудь?


20

З: Чому lisp-interaction-modeіснує, і чи є причини використовувати його замість emacs-lisp-mode?

В ручної йдеться , що emacs-lisp-modeі lisp-interaction-modeє ідентичними , за винятком , що останні прив'язок C-jдо eval-print-last-sexp. Крім того, "всі інші команди в режимі взаємодії Lisp такі ж, як і в режимі Emacs Lisp". Наскільки я можу сказати, *scratch*останній режим використовує лише буфер.

Мені здається дивним, що існує цілий режим, який відрізняється від іншого лише однією клавіатурою, тому я припускаю, що мені не вистачає чи якоїсь історії, чи контексту.

Так:

  • Чому lisp-interaction-modeіснує?
  • Якщо не рахувати C-jпалітурку, чи є обставини, за яких було б кращим emacs-lisp-mode?
  • Чи можуть бути якісь несподівані наслідки зміни режиму *scratch*буфера наemacs-lisp-mode ?

Мотивація цього питання полягає в тому, що зараз я двічі прив'язую клавіші (у двох режимах), щоб мій *scratch*буфер поводився як буфери, що відвідують *.elфайли. Якщо немає ніяких практичних причин триматись lisp-interaction-mode, я просто (setq initial-major-mode 'emacs-lisp-mode)і закінчу з цим.


1
Можливо, ви перестанете передбачати кожне своє запитання на " Q: " :)
nicael

Ви можете використовувати будь-який основний режим, який вам подобається *scratch*.
Стефан

3
@nicael: Питання: що не подобається Q ? Ви мене поранили , пане! ;)
Дан

Відповіді:


13

Якщо ви не ненавидите C-jповедінку (і я впевнений, що більшість елісейських авторів вважають це корисним), просто тримайте речі такими, якими вони є.

Визначте свої ключі lisp-mode-shared-mapзамість того, щоб дублювати їх для специфічних для клавішів карт.

Все lisp-mode-map, emacs-lisp-mode-mapі lisp-interaction-mode-mapмають в lisp-mode-shared-mapякості батька розкладки клавіатури.


15

Новий похідний режим коштує дешево: lisp-interaction-modeуспадковує emacs-lisp-mode, його реалізація - це лише десяток рядків коду або близько того. Він відрізняється emacs-lisp-modeлише такими способами:

  • вона має іншу назву;
  • вона має іншу клавішу;
  • вона має іншу таблицю синтаксису;
  • він має додатковий гачок.

З іншого боку, він ділиться своєю скороченою таблицею emacs-lisp-mode.

Edit: як відзначило @phils в своїй відповіді (які бачать), то розкладка з emacs-lisp-modeі lisp-interaction-modeрозділяє загальний предок, lisp-mode-shared-map. Тому немає жодних причин дублювати клавіші - просто визначте їх lisp-mode-shared-map, і вони застосовуватимуться до обох режимів (і lisp-modeтеж, але це, мабуть, добре).

Чи можуть бути якісь несподівані наслідки зміни режиму *scratch*буфера на emacs-lisp-mode?

Найбільш очевидним наслідком було б те, lisp-interaction-mode-hookщо більше не працюватимуть у *scratch*буфері.


3
Він має додатковий гачок. emacs-lisp-mode-hookпрацює, lisp-interaction-modeтому що так працюють похідні режими . У нього є інша карта, але обидва режими elisp мають однакову батьківську клавішну мапу ( lisp-mode-shared-map). У нього є окрема таблиця синтаксису, але вона ідентична режиму його батьківського режиму (тому що він задає батьківському для його встановлення).
філс

Дарн, ти маєш рацію. Сподіваємось, правильно зараз.
jch

4

FWIW, я сам використовую emacs-lisp-modeв *scratch*буфері. Якщо я хочу щось оцінити, я просто роблю C-x C-eз C-uпрефіксом, коли це потрібно. Я не бачу недоліків у цій практиці.

Щодо того, чому режим існує, це лише кілька рядків lisp-коду elisp-mode.el, і він існує як назавжди , тому видаляти його здається безглуздим.


Я почав це робити ще віки тому, тому що хотів C-jзв'язатись newline-and-indent, але в наші дні, коли відступ відбувається більш автоматично, це вже не є серйозною проблемою. Тож якби я давно не змінив цю зміну, я б зараз не переймався цим.
Харальд Ханш-Олсен

Я теж заради того, що того варто - робив так давно. Або я використовую *.elбуфер файлів, що викидається.
Дрю
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.