ทำไม lisp-interaction-mode มีอยู่และเราต้องการมันหรือไม่?


20

Q:ทำไมไม่lisp-interaction-modeอยู่และจะมีเหตุผลใดที่จะใช้มันแทนemacs-lisp-mode?

คู่มือระบุว่าemacs-lisp-modeและlisp-interaction-modeจะเหมือนกันยกเว้นว่าผูกหลังไปC-j eval-print-last-sexpนอกเหนือจากนั้น"คำสั่งอื่นทั้งหมดในโหมด Lisp Interaction นั้นเหมือนกับในโหมด Emacs Lisp" เท่าที่ฉันสามารถบอกได้มีเพียง*scratch*บัฟเฟอร์เท่านั้นที่ใช้โหมดหลัง

มันทำให้ฉันรู้สึกแปลก ๆ ว่ามีโหมดทั้งหมดที่แตกต่างจากที่อื่นโดยการกดปุ่มเพียงครั้งเดียวดังนั้นฉันจึงสันนิษฐานว่าฉันไม่มีประวัติหรือบริบทบางอย่าง

ดังนั้น:

แรงจูงใจสำหรับคำถามนี้คือตอนนี้ฉันผูกกุญแจสองครั้ง (ในสองโหมด) เพื่อให้*scratch*บัฟเฟอร์ของฉันทำงานเหมือนกับบัฟเฟอร์ที่ไปที่*.elไฟล์ หากไม่มีเหตุผลเชิงปฏิบัติที่จะต้องรักษาlisp-interaction-modeฉันจะ(setq initial-major-mode 'emacs-lisp-mode)ทำมันให้สำเร็จ


1
บางทีคุณอาจหยุดการเตรียมคำถามทุกข้อของคุณด้วย " Q: " :)
nicael

คุณสามารถใช้โหมดที่สำคัญใด ๆ *scratch*ที่คุณต้องการสำหรับ
สเตฟาน

3
@nicael: Q:อะไรที่ไม่ชอบเกี่ยวกับQ ? คุณทำให้ฉันเจ็บคุณ! ;)
Dan

คำตอบ:


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วิธีต่อไปนี้:

  • มันมีชื่ออื่น
  • มันมี keymap ที่แตกต่างกัน
  • มันมีตารางไวยากรณ์ที่แตกต่างกัน
  • มันมีตะขอเพิ่มเติม

ในทางตรงกันข้ามก็หุ้นตาราง abbrev emacs-lisp-modeกับ

แก้ไข:ตามที่ระบุไว้โดย @phils ในคำตอบของเขา (ซึ่งดู), keymaps ของ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 แบ่งปัน keymap แม่เดียวกัน ( lisp-mode-shared-map) มันมีตารางไวยากรณ์แยกต่างหาก แต่มันก็เหมือนกับโหมดหลักของมัน
Phils

Darn คุณพูดถูก หวังว่าถูกต้องแล้ว
jch

4

FWIW ฉันใช้emacs-lisp-modeใน*scratch*บัฟเฟอร์ตัวเอง ถ้าฉันต้องการประเมินบางสิ่งฉันก็ทำได้C-x C-eพร้อมด้วยC-uคำนำหน้าเมื่อจำเป็น ฉันไม่เห็นข้อเสียของการฝึกนี้

สำหรับสาเหตุที่โหมดอยู่ที่นั่นมันเป็นเพียงแค่ไม่กี่บรรทัดของเสียงกระเพื่อมในelisp-mode.elและมันก็เป็นเช่นนั้นตลอดไปดังนั้นการลบมันดูเหมือนไม่มีจุดหมาย


ฉันเริ่มทำสิ่งนี้ด้วยตัวเองทุกเพศทุกวัยที่ผ่านมาเพราะฉันต้องการที่C-jจะผูกพันnewline-and-indentแต่วันนี้เมื่อเยื้องเกิดขึ้นโดยอัตโนมัติมากขึ้นนี้ไม่ได้เป็นกังวลอย่างจริงจังอีกต่อไป ดังนั้นถ้าฉันไม่ได้ทำการเปลี่ยนแปลงนี้มานานแล้วฉันจะไม่สนใจกับมันตอนนี้
Harald Hanche-Olsen

ฉันด้วยเช่นกันสำหรับสิ่งที่คุ้มค่า - ทำมานานแล้ว หรือฉันจะใช้*.elบัฟเฟอร์ไฟล์แบบthrowaway
Drew
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.