Làm thế nào tôi có thể thay thế Cc trên toàn cầu bằng một ràng buộc quan trọng khác?


7

Tổ hợp phím C-ckhông thuận tiện để nhập bố cục bàn phím tôi sử dụng và tôi đang cố gắng thay đổi nó trên toàn cầu. Mục tiêu là để thay thế mọi lần xuất hiện C-cbằng một ràng buộc khác <apps> d, chẳng hạn như gửi tin nhắn trong Gnus <apps> d <apps> d, việc biên dịch trong auxtex sẽ giống nhau và khóa tiền tố người dùng C-ccũng sẽ luôn như vậy <apps> d. Phím <apps>nằm <f19>trên bàn phím của tôi.

Đọc hướng dẫn, có vẻ như tôi cần sử dụng key-translation map. Nó thực hiện rất tốt công việc với bản dịch của <f19>để<apps>

(define-key key-translation-map (kbd "<f19>") (kbd "<apps>"))
(global-set-key (kbd "<apps> s") 'save-buffer)

Thật không may, nó không hoạt động khi tôi muốn làm điều này cho C-c.

(define-key key-translation-map (kbd "<apps> d") (kbd "C-c"))

Khi tôi cố gắng sử dụng, tôi nhận được

<apps> d is undefined

và nếu tôi tìm nó ( C-h k), tôi thấy

<apps> d (translated from <f19> d) is undefined

Có cách nào để làm cho công việc này?


Một phỏng đoán, một bản đồ tương tự ( input-decode-map) có tài liệu này trong tài liệu của nó: "Các sự kiện đến từ các ràng buộc trong 'input-decode-map' không tự tìm kiếm trong 'input-decode-map'." Điều này có ý nghĩa, nếu bạn nghĩ về nó: đây sẽ là một cách để ngăn chặn các bản dịch vô hạn.
wvxvw

Câu trả lời:


2

Vấn đề trong nỗ lực của bạn là appsxuất phát từ một bản dịch thông qua key-translation-mapvà đầu ra này không được tìm kiếm theo key-translation-mapcách đệ quy. Nếu bạn bỏ qua appshoàn toàn và làm việc f19trực tiếp, nó sẽ hoạt động.

(global-set-key (kbd "<f19> s") 'save-buffer)
(define-key key-translation-map (kbd "<f19> d") (kbd "C-c"))

Nếu bạn muốn sử dụng appsbí danh, bạn có thể sử dụng thực tế là có hai bản đồ dịch tương tự: input-decode-mapkey-translation-map. Sử dụng input-decode-mapđể khai báo các phím chức năng ảo tương ứng với các chuỗi phím được gửi bởi bàn phím của bạn, ví dụ: bản dịch từ f19sang apps. Sử dụng key-translation-mapđể thực hiện một bản dịch nội bộ trong Emacs, ví dụ từ từ apps dđến C-c.

(define-key input-decode-map (kbd "<f19>") (kbd "<apps>"))
(global-set-key (kbd "<apps> s") 'save-buffer)
(define-key key-translation-map (kbd "<apps> d") (kbd "C-c"))

Cảm ơn bạn, điều này làm việc tuyệt vời. Tôi đã thử sử dụng local-function-key-mapvà nó cũng hoạt động. Có một lý do cho việc sử dụng cái này hơn cái kia?
brab

Sự khác biệt với local-function-key-maplocal-function-key-mapcó thể được ghi đè bằng một ràng buộc toàn cầu hoặc cục bộ cho apps d. Nghĩ về nó có thể là một tính năng chứ không phải là một lỗi.
Gilles 'SO- đừng trở nên xấu xa'
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.