Tại sao mã này không thể vô hiệu hóa tất cả các tổ hợp phím trong một sơ đồ bàn phím?


7

Tóm lại, có một thư viện nhỏ mà tôi thích nhưng tôi không thích bất kỳ phím bấm mặc định nào. Ví dụ, đó là một chế độ nhỏ toàn cầu và liên kết một chức năng với C-c C-s, nhưng bóng đó org-scheduletrong bộ đệm org và org-agenda của tôi.

Tôi muốn giữ thư viện nhỏ nhưng loại bỏ tất cả các ràng buộc trong sơ đồ phím thư viện nhỏ.

Trong một nỗ lực đầu tiên để làm điều này, tôi đã thử như sau (sau khi xác nhận rằng đó little-library-mode-maplà nơi các ràng buộc sống):

(with-eval-after-load "little-library-mode"
  (setq little-library-mode-map (make-sparse-keymap)))

Mã "thành công" ( C-h v little-library-mode-map RETchỉ ra rằng (keymap)bây giờ mới có) nhưng tất cả các tổ hợp phím thư viện nhỏ vẫn "hoạt động" ( C-c C-svẫn thực hiện chức năng thư viện nhỏ, bao gồm cả bộ đệm org và org-agenda).

Tôi đã tìm thấy một cách khác để giải quyết vấn đề của mình, nhưng tôi thực sự tò mò tại sao phương pháp này thất bại. Bàn phím của Emacs dường như vẫn là ma thuật đen đối với tôi.


Bạn sẽ cần phải sửa đổi triệt để cấu trúc dữ liệu mà chế độ nhỏ sử dụng, như thế nào (setcdr little-library-mode-map nil).
wasamasa

Câu trả lời:


3

Có ba điều quan trọng trong câu chuyện này:

  • sơ đồ chế độ nhỏ
  • tên của nó
  • sơ đồ bàn phím thưa thớt bạn tạo

Về cơ bản những gì bạn đã làm là tạo điểm tên ở sơ đồ bàn phím thưa thớt thay vì bản gốc, nhưng đã quá muộn: chế độ nhỏ sử dụng bản gốc.


À, hiểu rồi Khi bạn đặt nó theo cách đó nó có ý nghĩa hoàn hảo. Bạn có biết làm thế nào Emacs / chế độ nhỏ tìm thấy sơ đồ bàn phím ban đầu không? Nó nhìn vào cấu trúc dữ liệu nào?
Purple_arrows

3
@purple_arrows sơ đồ bàn phím gốc nằm trong minor-mode-map-alist.
npostavs

2

Tại một số điểm khi kích hoạt little-library-modesơ đồ bàn phím được lưu trữ trong biến little-library-mode-mapđược thêm vào minor-mode-map-alist:

(push (cons 'little-library-mode little-library-mode-map) minor-mode-map-alist)

Emacs sử dụng alist này để tra cứu các ràng buộc chế độ nhỏ. Khi bạn liên kết biến little-library-mode-mapvới một giá trị mới sau đó, điều này không ảnh hưởng đến các minor-mode-map-alistđiểm ánh xạ chính. Như đã lưu ý trong nhận xét của @wasamasa, một cách để loại bỏ tất cả các ràng buộc trong sơ đồ này là thay đổi trực tiếp sơ đồ bàn phím:

 (setcdr little-library-mode-map nil)

Một cách khác là đặt lại sơ đồ bàn phím trước khi tải thư viện:

(setq little-library-mode-map (make-sparse-keymap))
(with-eval-after-load "little-library-mode" 
    ...more-setup-code)

Nếu chế độ nhỏ được xử lý tốt, điều này cũng sẽ tránh hiện tượng ràng buộc của nó.

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.