Khi tôi liên kết một hàm với C-i
. Có vẻ như tab
bị ràng buộc với hàm. Tại sao điều đó xảy ra? Nó được công nhận cùng một chìa khóa trong Emacs?Quan hệ C-i và tab trong Emacs là gì?
Trả lời
Họ tình cờ được gắn trong thiết lập mặc định, nhưng nó không phải theo cách này:
(keyboard-translate ?\C-i ?\C-j)
Bây giờ C-i
sẽ làm một dòng mới, trong khi tab
sẽ vẫn thụt lề.
thú vị, tại sao họ dịch 'C-i' thành' TAB' thay vì chỉ ràng buộc 'C-i' thành hàm 'indent line'? – Ben
Tôi nghĩ rằng đó là bởi vì C-i và TAB cũng giống nhau, và họ và giữ cho mọi thứ nhất quán. –
Lý do lịch sử. Trong một thiết bị đầu cuối đơn giản, khóa TAB đã gửi cùng mã khóa như Ctrl-i. – Lindydancer
Tách TAB trên thiết bị đầu cuối văn bản gửi mã C-i
(là chữ ascii char có tên TAB) vào ứng dụng, do đó, theo số tty C-i
và TAB thường không thể phân biệt được. Emacs theo mặc định duy trì sự tương đương này trong môi trường GUI bằng cách ánh xạ sự kiện tab
đến C-i
khi không có ràng buộc cho tab
(điều này được thực hiện trong function-key-map
). Vì vậy, hầu hết các gói phải ràng buộc các lệnh của chúng với char TAB (tức là C-i
) thay vì cho sự kiện tab
, do đó, nó hoạt động tốt như nhau dưới một tty hoặc theo GUI. Nhưng nếu bạn muốn phân biệt hai, nó rất dễ dàng: chỉ cần ràng buộc lệnh bạn muốn sự kiện tab
và ánh xạ từ tab
đến C-i
sẽ không xảy ra nữa.
Cảm ơn thông tin của bạn! Tôi sẽ đi với cách phân biệt. – ironsand
Đó là mã thoát cho 'tab'. I E. trong các thiết bị đầu cuối cũ không phải lúc nào cũng có khóa tab, do đó, để nhập một ký tự tab, sự kết hợp của 'điều khiển' và' i' đã được sử dụng. Tương tự, 'C-m' tương đương với' enter' - có vẻ như một chút lãng phí của các keybindings, nhưng đó là cách nó hoạt động. –