Tại sao chế độ tương tác lisp tồn tại, và chúng ta có bao giờ cần nó không?


20

Q: Tại sao lisp-interaction-modetồn tại, và có bất kỳ lý do để sử dụng nó thay vì emacs-lisp-mode?

Các nhãn hiệu quốc gia mà emacs-lisp-modelisp-interaction-modelà giống hệt nhau ngoại trừ việc với phím tắt sau C-jđể eval-print-last-sexp. Ngoài ra, "tất cả các lệnh khác trong chế độ Tương tác Lisp đều giống như trong chế độ Emps Lisp." Theo như tôi có thể nói, chỉ có *scratch*bộ đệm sử dụng chế độ sau.

Tôi nhận ra điều kỳ lạ là có toàn bộ chế độ khác với một chế độ phím khác, vì vậy tôi cho rằng tôi đang thiếu một số lịch sử hoặc bối cảnh.

Vì thế:

Động lực cho câu hỏi này là, ngay bây giờ, tôi ràng buộc các khóa hai lần (ở hai chế độ) để *scratch*bộ đệm của tôi hoạt động giống như bộ đệm truy cập *.eltệp. Nếu không có lý do thực tế để giữ lisp-interaction-modexung quanh, tôi sẽ làm (setq initial-major-mode 'emacs-lisp-mode)và giải quyết nó.


1
Có thể bạn sẽ ngừng trả lời mọi câu hỏi của mình bằng " Q: " :)
nicael

Bạn có thể sử dụng bất kỳ chế độ chính nào bạn thích *scratch*.
Stefan

3
@nicael: Q: điều gì không thích ở Q ? Anh làm em đau , thưa anh! ;)
Dan

Câu trả lời:


13

Trừ khi bạn ghét C-jhành vi đó (và tôi chắc chắn rằng hầu hết các tác giả elisp đều thấy nó tiện dụng), chỉ cần giữ mọi thứ theo cách của họ.

Xác định các khóa của bạn lisp-mode-shared-mapthay vì sao chép chúng cho các keymap cụ thể theo chế độ.

Tất cả lisp-mode-map, emacs-lisp-mode-maplisp-interaction-mode-maplisp-mode-shared-mapnhư keymap mẹ.


15

Một chế độ dẫn xuất mới là rẻ: lisp-interaction-modekế thừa từ emacs-lisp-mode, việc thực hiện của nó chỉ là một tá dòng mã hoặc hơn. Nó khác với emacs-lisp-modechỉ trong những cách sau:

  • nó có một tên khác;
  • nó có một sơ đồ khác nhau;
  • nó có một bảng cú pháp khác nhau;
  • nó có một cái móc bổ sung.

Mặt khác, nó chia sẻ bảng viết tắt của nó với emacs-lisp-mode.

Chỉnh sửa: như được lưu ý bởi @phils trong câu trả lời của anh ấy (xem), các keymap của emacs-lisp-modelisp-interaction-modechia sẻ một cha mẹ chung , lisp-mode-shared-map. Do đó, không có lý do nào để sao chép các phím bấm - chỉ cần xác định chúng lisp-mode-shared-mapvà chúng sẽ áp dụng cho cả hai chế độ (và lisp-modecũng vậy, nhưng điều đó có thể tốt).

Sẽ có bất kỳ hậu quả bất ngờ nào khi thay đổi *scratch*chế độ bộ đệm thành emacs-lisp-mode?

Hậu quả rõ ràng nhất là lisp-interaction-mode-hooksẽ không còn được chạy trong *scratch*bộ đệm.


3
Nó có một cái móc bổ sung . emacs-lisp-mode-hookchạy lisp-interaction-modeđó là cách các chế độ dẫn xuất hoạt động . Nó không có một sơ đồ bàn phím khác nhau, nhưng cả hai chế độ elisp chia sẻ keymap cùng cha mẹ ( lisp-mode-shared-map). Nó có một bảng cú pháp riêng, nhưng nó giống hệt với chế độ cha của nó (vì nó trì hoãn cha mẹ để đặt nó).
phils

Chết tiệt, bạn nói đúng. Hy vọng chính xác ngay bây giờ.
JCH

4

FWIW, tôi sử dụng emacs-lisp-modetrong *scratch*bộ đệm. Nếu tôi muốn đánh giá một cái gì đó, tôi chỉ cần làm C-x C-e, với một C-utiền tố khi cần thiết. Tôi thấy không có nhược điểm cho thực hành này.

Về lý do tại sao chế độ ở đó, nó chỉ là một vài dòng mã lisp elisp-mode.el, và nó tồn tại mãi mãi , vì vậy việc loại bỏ nó dường như vô nghĩa.


Tôi bắt đầu thực hiện việc này từ lâu bởi vì tôi muốn C-jbị ràng buộc newline-and-indent, nhưng những ngày này, khi thụt lề xảy ra tự động hơn, đây không còn là vấn đề nghiêm trọng nữa. Vì vậy, nếu tôi đã không thực hiện thay đổi này từ lâu, tôi sẽ không bận tâm đến nó bây giờ.
Harald Hanche-Olsen

Tôi cũng vậy, vì những gì nó đáng giá - đã làm như vậy trong một thời gian dài. Hoặc tôi sử dụng một *.elbộ đệm tập tin ném đi .
vẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.