Khi bạn nhấn một phím hoặc tổ hợp phím trong một thiết bị đầu cuối, nó được truyền đến ứng dụng đang chạy trong thiết bị đầu cuối dưới dạng một chuỗi gồm một hoặc nhiều ký tự. Ví dụ, khi bạn nhấn a, ứng dụng sẽ nhận được a
. Khi bạn nhấn Enter, ứng dụng sẽ nhận được ký tự CR
(hay còn gọi là ^M
(phát âm là control control-emmiêu), còn gọi là ký tự số 13, aka \r
hay \015
). Các tổ hợp phím liên quan Altthường được truyền dưới dạng ký tự ESC
(a.ka. ^[
aka \e
hoặc \033
) theo sau là chuỗi cho tổ hợp phím hoặc khóa không có Alt. Các phím chức năng và các tổ hợp phím khác được truyền dưới dạng các chuỗi thoát bắt đầu bằng \e[
hoặc \eO
.
Các chuỗi thoát không được chuẩn hóa hoàn toàn và các thiết bị đầu cuối thường bỏ qua các thuộc tính nhất định cho các khóa nhất định. Ví dụ: Ctrl+ Shift+ letterthường được truyền chính xác như Ctrl+ lettertheo mặc định.
Bạn có thể thấy những gì thiết bị đầu cuối của bạn gửi cho một tổ hợp phím bằng cách nhấn Ctrl+ Vtheo sau là tổ hợp phím đó trong dấu nhắc shell hoặc C-q
hoặc C-h c
theo sau là tổ hợp phím trong Emacs.
Với một số trình giả lập thiết bị đầu cuối, bạn có thể định cấu hình các chuỗi thoát cho mỗi khóa. Trên xterm, điều này được thực hiện thông qua các nguồn tài nguyên X . Hầu hết các thiết lập đọc tài nguyên từ ~/.Xresources
khi X bắt đầu và bạn có thể tải tệp theo cách thủ công xrdb -merge ~/.Xresources
.
Term.VT100.translations: #override \n\
Ctrl ~Shift ~Meta <key>Return: string("\033[73;5~") \n\
Ctrl Shift ~Meta <key>percent: string("\033[37;6~")
Một quy ước chung sử dụng các chuỗi thoát của biểu mẫu ESC [ number1 ; number2 ~
cho các phím chức năng với các sửa đổi. number1
chỉ ra phím chức năng ( 15
để 24
cho F5tới F12- vì những lý do lịch sử, F1 qua F4có trình tự thoát khác nhau) và number2
chỉ ra các sửa đổi ( 2
cho Shift, 5
cho Ctrl, 3
cho Meta, 8
cho Ctrl+ Meta, và thêm 1 + Shift- không có, nó không phải là rất phù hợp).
Emacs chuyển các chuỗi thoát thành biểu diễn khóa bên trong của nó thông qua input-decode-map
hoặclocal-function-key-map
(hoặc function-key-map
trước Emacs 23).
(define-key local-function-key-map "\033[73;5~" [(control return)])
(define-key local-function-key-map "\033[37;6~" [(control ?L)])
infocmp $TERM
?