Nói tóm lại, điều này sẽ giải quyết vấn đề cho bạn:
(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
(global-set-key (kbd "C-i") 'forward-word)
dài hơn phiên bản:
Từ Emacs Lisp tài liệu về function keys:
Trong ASCII, Ci và < TAB> giống với ký tự . Nếu thiết bị đầu cuối có thể phân biệt giữa chúng, Emacs truyền tải sự khác biệt cho các chương trình Lisp bằng cách trình bày trước đây là số nguyên 9 và sau đó là tab biểu tượng .
Hầu hết thời gian, không hữu ích khi phân biệt hai. Vì vậy, thông thường local-function-key-map (xem Bản dịch Keymaps) được thiết lập để ánh xạ tab thành 9. Do đó, một ràng buộc khóa cho mã ký tự 9 (ký tự C-i) cũng áp dụng cho tab. Tương tự như vậy đối với các ký hiệu khác trong nhóm này, . Chức năng đọc cũng tương tự như vậy chuyển đổi các sự kiện này thành các ký tự .
Vì vậy, một khi bạn làm những điều sau đây, bạn có thể thấy sự khác biệt trong tổ hợp phím:
(setq local-function-key-map (delq '(kp-tab . [9]) local-function-key-map))
;; this is C-i
(global-set-key (kbd "C-i") (lambda() (interactive) (message "C-i")))
;; this is <tab> key
(global-set-key (kbd "<tab>") (lambda() (interactive) (message "<tab>")))
Lưu ý, mỗi chế độ thiết lập các hình TAB bindings khác nhau, vì vậy bạn có thể cần phải làm tùy chỉnh cho mỗi chế độ mà bạn quan tâm.
Version phụ thuộc:
Các công trình trên cho Emacs 23,1. Từ tệp tin TIN TỨC:
Các chuỗi phím chức năng hiện được ánh xạ bằng cách sử dụng biến địa phương 'chức năng-bản đồ', . Điều này kế thừa từ chức năng biến toàn cầu-key-map, mà không được sử dụng trực tiếp nữa.
Có nghĩa là, trong các phiên bản 22 trở lên, bạn có thể nhận được hiệu ứng tương tự bằng cách sử dụng biến function-key-map
. Tôi đã thử nghiệm điều này và thấy nó hoạt động với Emacs 21.
(setq local-function-key-map (delq '(kp-tab . [9]) function-key-map))
(global-set-key (kbd "C-i") 'forward-word)
Khi tôi thử mã này, tôi gặp lỗi khi địa phương-chức năng-key-map bị vô hiệu. Bất kỳ suy nghĩ về lý do tại sao nó sẽ bị vô hiệu? – Steve
@Steve Biến được định nghĩa trong Emacs 23, tôi đã cập nhật câu trả lời với phiên bản 22 và cũ hơn. –
Điều này đã không chính xác làm việc cho tôi. Không có bất kỳ thay đổi nào, khóa 'tab' đã bị bỏ cấm. Tôi đã thử thực hiện "khóa toàn cầu" thứ 2 cho, một phần đã giải quyết được vấn đề, nhưng ngăn tab hoàn thành trong minibuffer. Sử dụng giải pháp của Caio dưới đây dường như làm các trick. –
mksuth