Lisp-etkileşim modu neden var ve buna ihtiyacımız var mı?


20

S: Neden lisp-interaction-modevar ve bunu kullanmak için herhangi bir neden var emacs-lisp-modemı?

Kılavuzu bildiren emacs-lisp-modeve lisp-interaction-modeikinci bağlar dışında aynıdır C-jiçin eval-print-last-sexp. Bunun ötesinde, "Lisp Etkileşim modundaki diğer tüm komutlar Emacs Lisp modundakiyle aynıdır." Anlayabildiğim kadarıyla, sadece *scratch*arabellek ikinci modu kullanır.

Sadece tek bir tuş takımı ile diğerinden farklı bir modun olması bana garip geliyor, bu yüzden ya bazı geçmişi ya da bağlamı kaçırdığımı varsayıyorum.

Yani:

Bu soru için motivasyon, şu anda, iki kez (iki modda) tuşları bağladığım, böylece *scratch*arabelleğimin *.eldosyaları ziyaret eden tamponlar gibi davranması . lisp-interaction-modeEtrafta saklamak için pratik bir neden yoksa , sadece (setq initial-major-mode 'emacs-lisp-mode)ve onunla bitireceğim.


1
Belki de " Q: " :)
nicael

İstediğiniz herhangi bir büyük modu kullanabilirsiniz *scratch*.
Stefan

3
@nicael: S: yaklaşık benzerine bu değil Q ? Beni yaraladın , efendim! ;)
Dan

Yanıtlar:


13

C-jDavranıştan nefret etmedikçe (ve eminim çoğu elisp yazarının bunu yararlı bulduğu), sadece işleri olduğu gibi tut.

lisp-mode-shared-mapModunuza özgü tuş haritaları için çoğaltmak yerine anahtarlarınızı tanımlayın .

Tüm lisp-mode-map, emacs-lisp-mode-mapve lisp-interaction-mode-mapsahip lisp-mode-shared-mapebeveynlerinin klavye haritası olarak.


15

Yeni türetilmiş bir mod ucuzdur: lisp-interaction-modemiras alınır emacs-lisp-mode, uygulaması sadece bir düzine kod satırıdır. Sadece emacs-lisp-modeaşağıdaki yollardan farklıdır :

  • farklı bir adı var;
  • farklı bir tuş eşlemesi var;
  • farklı bir sözdizimi tablosu vardır;
  • ek bir kancası vardır.

Öte yandan, kısaltma tablosunu ile paylaşır emacs-lisp-mode.

Düzenleme: cevabında @phils tarafından not edildiği gibi (bakın), ortak bir ebeveynin tuş haritaları emacs-lisp-modeve lisp-interaction-modepaylaşılması lisp-mode-shared-map,. Bu nedenle, tuş bağlantılarını çoğaltmak için bir neden yoktur - sadece bunları tanımlayın lisp-mode-shared-mapve her iki mod için de geçerli olacaklardır (ve lisp-modebu da muhtemelen iyidir).

*scratch*Tampon modunu değiştirmenin beklenmedik sonuçları olur emacs-lisp-modemu?

En belirgin sonuç, lisp-interaction-mode-hookartık *scratch*tamponda çalıştırılmayacağıdır .


3
Bir sahiptir ek kanca. emacs-lisp-mode-hookiçin çalışır lisp-interaction-modeçünkü o modlar işi türetilmiş nasıl . Bu does farklı tuş eşleşmesini var, ama ikisi de elisp modları aynı üst keymap paylaşan ( lisp-mode-shared-map). Ayrı bir sözdizimi tablosu vardır, ancak üst modununkiyle aynıdır (çünkü ayarlamak için üst öğeye zarar verir).
phils

Lanet olsun, haklısın. İnşallah şimdi düzeltin.
JCH

4

FWIW, ben kullanmak emacs-lisp-modeiçinde *scratch*tampon kendim. Bir şeyi değerlendirmek istersem, sadece gerektiğinde C-x C-ebir C-uönekle yaparım . Bu uygulamanın hiçbir dezavantajı yok.

Modun neden var olduğuna gelince, sadece birkaç satır lisp kodu elisp-mode.elvar ve sonsuza kadar oradaydı , bu yüzden kaldırmak anlamsız görünüyor.


Bunu yıllar önce kendim yapmaya başladım çünkü C-jbağlı olmak istedim newline-and-indent, ama bu günlerde girinti daha otomatik olarak gerçekleştiğinden, bu artık ciddi bir endişe değil. Bu değişikliği daha önce yapmamış olsaydım, şimdi bundan rahatsız olmazdım.
Harald Hanche-Olsen

Ben de, değeri ne olursa olsun - bunu uzun zamandır yaptık. Ya da bir takas *.eldosya tamponu kullanıyorum.
Drew
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.