Коли ви натискаєте клавішу або комбінацію клавіш у терміналі, вона передається програмі, що працює в терміналі, як послідовність одного або декількох символів. Наприклад, коли ви натискаєте a, програма отримує a
. Коли ви натискаєте Enter, програма отримує символ CR
(ака ^M
(вимовляється "control-emm"), також номер символу 13, він \r
або \015
). Комбінації клавіш, що включають Alt, зазвичай передаються як символ ESC
(а.ка. ^[
aka \e
або \033
) з подальшим послідовністю для ключа або комбінації клавіш без Alt. Функціональні клавіші та інші комбінації клавіш передаються у вигляді послідовностей, що починаються з \e[
або \eO
.
Послідовності виходу не повністю стандартизовані, і термінали зазвичай ігнорують певні атрибути для певних клавіш. Наприклад, Ctrl+ Shift+ letterчасто передається точно так само Ctrl+ letterза замовчуванням.
Ви можете побачити, що ваш термінал надсилає для комбінації клавіш, натиснувши клавішу Ctrl+, Vа потім комбінацію клавіш у запиті оболонки або, C-q
або C-h c
слідуючи за комбінацією клавіш у Emacs.
За допомогою деяких термінальних емуляторів ви можете налаштувати послідовності евакуації для кожної клавіші. На Xterm, це робиться через X ресурсів . Більшість установок читають ресурси з ~/.Xresources
моменту запуску X, і ви можете завантажити файл вручну 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~")
Загальна умова використовує послідовності виходу форми ESC [ number1 ; number2 ~
для функціональних клавіш з модифікаторами. number1
вказує функціональну клавішу ( 15
to 24
for F5to F12- з історичних причин, F1 через F4мають різні послідовності відходу) і number2
вказує на модифікатор ( 2
for Shift, 3
for Meta, 5
for Ctrl, 7
for Ctrl+ Meta, і додати 1 для Shiftпринаймні одного з Ctrlабо Meta).
Emacs переводить послідовності втечі у своє внутрішнє представлення ключів через input-decode-map
абоlocal-function-key-map
(або function-key-map
перед 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
?