Câu trả lời:
Bạn có thể làm (define-key key-translation-map (kbd "ESC") (kbd "C-g"))
. Tôi đã làm như vậy một thời gian dài trước đây và không có vấn đề.
Chỉnh sửa để cải thiện câu trả lời theo các ý kiến:
Nếu bạn muốn giữ ESC
chức năng chính, bạn có thể làm
(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Một điều cần lưu ý là nếu Emacs bị treo bạn vẫn phải sử dụng C-g
chìa khóa vì một số lý do, nhưng điều đó hiếm khi xảy ra.
C-g
để gỡ rối nó, việc ESC
ánh xạ lại không hoạt động trong trường hợp này.
ESC
vì vậy điều này không làm phiền tôi. Nhưng nếu bạn cần nó, bạn có thể thực hiện một bản dịch khác, ví dụ(define-key key-translation-map (kbd "C-<escape>") (kbd "ESC"))
Lời khuyên của tôi sẽ là để lại ESC
một mình, bởi vì đó là một chìa khóa đặc biệt.
Theo mặc định, Emacs sử dụng ESC
(ASCII 27) làm meta-prefix-key
. Từ Cẩm nang Elisp:
'esc-map' là sơ đồ toàn cầu cho khóa tiền tố. Do đó, các định nghĩa toàn cầu của tất cả các ký tự meta thực sự được tìm thấy ở đây. Bản đồ này cũng là định nghĩa chức năng của 'Tiền tố ESC'.
và
Thay vào đó, các ký tự meta được coi cho mục đích tra cứu khóa là chuỗi hai ký tự, đầu tiên là ESC (hoặc bất cứ thứ gì hiện là giá trị của 'meta-prefix-char'). Do đó, khóa 'M-a' được thể hiện bên trong là 'ESC a' và ràng buộc toàn cầu của nó được tìm thấy tại vị trí 'a' trong 'esc-map'.
Vì vậy, để sử dụng ESC cho một cái gì đó khác, bạn sẽ cần phải đặt meta-pefix-key
thành một cái gì đó khác, và cũng ràng buộc một số khóa khác ESC-prefix
. Cũng có thể có những thay đổi khác - tôi chưa bao giờ thử điều này.
Để biết thêm về meta-prefix-char
, hãy xem Chức năng tra cứu khóa trong hướng dẫn Elisp.
ESC
. Ràng buộc một chìa khóa khác để keyboard-quit
, nếu bạn muốn. Và lưu ý rằng ESC ESC ESC
đã cung cấp cho bạn hành vi thoát mà bạn muốn - xem hướng dẫn sử dụng Emacs, Thoát khỏi nút .
meta-prefix-char
thành nil
trên OSX sẽ không vô hiệu hóa nó thành khóa tiền tố - nó sẽ chỉ tách nó khỏi khóa meta. Trên OSX với phiên bản đồ họa của Emacs, tôi muốn tách khóa thoát khỏi khóa meta - Tôi đặt (setq meta-prefix-char nil)
ngay từ đầu khởi tạo để tất cả các thư viện được tải sau đó hiểu rằng đó là điều tôi muốn. Điều này cho tôi khả năng sử dụng khóa meta làm khóa tiền tố và khóa thoát làm khóa tiền tố. Các esc-map
được xác định ở cấp mã C-nguồn trong keymap.c
. Nó có nghĩa là được sử dụng như một khóa tiền tố.
esc-map
tiền tố để duy trì các ràng buộc M- mặc định không?
(setq ns-alternate-modifier 'meta)
, làm cho meta phím alt bên trái trên bàn phím Apple. Tôi thích sử dụng phím alt bên phải để tạo các ký tự unicode bằng cài đặt mặc định của OSX: (setq ns-right-alternate-modifier 'none)
- để chèn các ký tự tiếng Tây Ban Nha, ký hiệu đoạn văn, v.v. Khi xây dựng --with-ns
, cả hai phím alt trái và phải đều được đặt thành meta. Cài đặt mặc định liên kết khóa thoát với khóa meta trên OSX bằng cách sử dụng meta-prefix-char
, 27
như bạn đã nêu.
Câu trả lời đáng yêu ở đây: https://superuser.com/a/945245/624661
Trích dẫn:
Bạn có thể sử dụng điều này trong tệp init Emacs của bạn:
;;; esc always quits
(define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)
(define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)
(global-set-key [escape] 'keyboard-quit)
Bạn muốn liên kết [escape]
, không (kbd "ESC")
, như các ràng buộc được tham chiếu bởi Ole show. Trong kho, điều này sẽ chỉ hoạt động nếu emacs khung trong một hệ thống cửa sổ. Tôi nghĩ rằng điều này đáng giá một chút giải thích.
(kdb "ESC")
thực sự có nghĩa là ký tự điều khiển ASCII ESC
và như glucas đã đề cập, bạn chắc chắn không muốn ánh xạ lại cái này. Nhưng Esckhông phải là ASCII ESC
: nó là biểu tượng escape
, ít nhất là trong môi trường đồ họa. Làm thế nào nó xảy ra mà ràng buộc (kbd "ESC")
ảnh hưởng Escsau đó? Điều này xảy ra bởi vì emacs dịch escape
sang ESC
nếu không có ràng buộc có sẵn choescape
. Loại dự phòng nếu bạn muốn (được thực hiện bằng phương tiện local-function-key-map
nếu bạn quan tâm đến những điều đó).
Do đó, khi bạn ràng buộc [escape]
, bạn an toàn và không phải lo lắng ESC
; ngoài các ràng buộc của riêng bạn, bạn chỉ cần gia tăng các keymap để nói ESC
khi nào chúng có nghĩa [escape]
.
Hmm ... tốt, gần như vậy. Tại sao những bản đồ này không được sử dụng [escape]
lần đầu tiên? Bởi vì điều này sẽ không làm việc trong một thiết bị đầu cuối. Nếu bạn muốn Esccông việc của mình trên một thiết bị như vậy, ít nhất bạn sẽ phải tùy chỉnh thiết bị đầu cuối của mình trước đó.
Câu chuyện về thiết bị đầu cuối được báo cáo trong một bài khác:
Làm thế nào để ràng buộc C- [thật? . Những gì bạn phải làm là yêu cầu thiết bị đầu cuối gửi một số chuỗi tùy chỉnh khi Escđược nhấn, sau đó ánh xạ chuỗi này đến [escape]
ở giai đoạn đầu vào trong emacs (the input-decode-map
).
Hi vọng điêu nay co ich.
universal-argument
vớiuniversal-argument-map
.