Làm cách nào để thêm khóa tiền tố vào tất cả các tổ hợp phím của chế độ cụ thể?


7

Tôi đang sử dụng một chế độ, nhưng không quen với các ràng buộc chính của nó: một số trong số chúng xung đột với các chế độ toàn cầu của emacs. vì vậy, tôi muốn thêm một ràng buộc khóa tiền tố vào tất cả các liên kết khóa hiện có của nó.

ví dụ: nếu chế độ của tôi xác định ràng buộc khóa M-]cho chế độ chụp của tôi, tôi đang tìm một số cách như sau:

(define-prefix-for-mode 'my-mode (kbd "C-c m"))

sau đó, ràng buộc khóa cho chế độ bắn của tôi bây giờ là C-c m M-].

Làm thế nào để thêm một ràng buộc khóa tiền tố vào tất cả các ràng buộc khóa có sẵn của một chế độ cụ thể?


1
Nó có thể phụ thuộc vào loại chế độ. Bạn có thể cho biết chi tiết?
Stefan

@Stefan tôi đang tìm kiếm một giải pháp chung, không phải là một chế độ cụ thể.

Một giải pháp hoạt động đáng tin cậy cho tất cả các chế độ có lẽ là không thể. Bạn có thể có thể nấu một giải pháp, sử dụng mã tôi cung cấp, sẽ hoạt động cho hầu hết các chế độ chính, tho.
Stefan

Câu trả lời:


4

Một cách để di chuyển các phím bấm của chế độ có thể bằng một cái gì đó như

(let ((origmap <foo>-mode-map)
      (newmap (make-sparse-keymap)))
  (define-key newmap <prefix> origmap)
  (setq <foo>-mode-map newmap))  

Nhưng mã này sẽ thất bại nếu chạy trước khi chế độ foo được chạy. Và nó sẽ không có hiệu lực nếu chạy sau khi chế độ được nhập. Vì vậy, có lẽ bạn sẽ phải làm điều đó trong `(with-eval-after-load '-mode ...).

Ngoài ra, nếu đó là một chế độ nhỏ, mã trên sẽ không có bất kỳ ảnh hưởng nào, bởi vì bạn cũng phải làm một cái gì đó như (trong phạm vi trên let):

(setcdr (assq '<foo>-mode minor-mode-map-alist) newmap)

2
  1. Xác định khóa tiền tố cho sơ đồ bàn phím của chế độ.
  2. Xác định các khóa khác làm phiền bạn, từ sơ đồ đó.

Giả sử chế độ đó foo-modeliên kết khóa C-x ovới foo-itvà bạn không thích điều đó.

(define-key foo-mode-map (kbd "C-x o") nil)

Và giả sử bạn muốn foo-mode-maptrên khóa tiền tố <f9>:

(define-prefix-command 'foo-mode-map)
(define-key global-map (kbd "<f9>") 'foo-mode-map)

Điều này cũng sẽ khiến điều đó foo-itsẽ không khả dụng thông qua <f9> C-x o, điều này có thể tự đánh bại nếu mục tiêu là di chuyển các phím bấm ra khỏi đường trong khi vẫn có thể truy cập được thông qua khóa tiền tố.
nispio

1

Bạn có thể sửa đổi trực tiếp sơ đồ bàn phím của chế độ để di chuyển tất cả các ràng buộc dưới tiền tố bạn đã chọn:

(setcdr my-mode-map
  `(keymap (?\C-c keymap (?m keymap . ,(cdr my-mode-map)))))
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.