2013-07-25 34 views
6

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ì?

+1

Đó 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. –

Trả lời

4

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ề.

+0

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

+0

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. –

+2

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

3

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.

+0

Cảm ơn thông tin của bạn! Tôi sẽ đi với cách phân biệt. – ironsand

Các vấn đề liên quan