Вам буде зручніше в X11 Emacs, який може приймати введення з клавіатури та відображати текст, не проходячи кодування та декодування терміналу . Основна причина використовувати редактор текстового режиму - це запустити його всередині екрана або tmux на віддаленій машині, але завдяки Tramp зазвичай простіше редагувати віддалений файл у вашому локальному Emacs. Якщо говорити, ви можете робити все, що завгодно, доки ваш емулятор терміналу співпрацює, що стосується Xterm.
Коли ви натискаєте клавішу або комбінацію клавіш у терміналі, вона передається програмі, що працює в терміналі, як послідовність одного або декількох символів. Наприклад, коли ви натискаєте a, програма отримує a
. Коли ви натискаєте Enter, програма отримує символ CR
(aka ^M
(вимовляється "control-emm"), також номер символу 13, він \r
або \015
). Комбінації клавіш, що включають Alt, як правило, передаються як символ ESC
(а.ка. ^[
aka \e
або \033
) з подальшим послідовністю для ключа або комбінації клавіш без Alt. Функціональні клавіші та інші комбінації клавіш передаються у вигляді послідовностей, що починаються з \e[
або \eO
.
Послідовності виходу не повністю стандартизовані, і термінали зазвичай ігнорують певні атрибути для певних клавіш. Наприклад, гіпер і супер модифікатори зазвичай ігноруються. Ви можете побачити, що ваш термінал надсилає для комбінації клавіш, натиснувши клавішу Ctrl+, Vа потім комбінацію клавіш у запиті оболонки, C-q
або C-h c
після цього комбінацію клавіш у Emacs.
Xterm дозволяє налаштовувати керуючі послідовності для кожного ключа з допомогою X ресурсів . Більшість установок читають ресурси з ~/.Xresources
моменту запуску X, і ви можете завантажити файл вручну xrdb -merge ~/.Xresources
.
XTerm.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, 5
for Ctrl, 3
for Meta, 8
for Ctrl+ Meta, і додати 1 for + Shift- no, це не дуже послідовно).
Вам доведеться вказати модифікатори Hyper та Super через їх кількість, як Mod1
через Mod5
. Запустіть, xmodmap -pm
щоб побачити відображення ключів до модифікаторів. Наприклад, якщо Super_L
прив’язаний до Mod5, то наступний рядок (використовуйте цей точний випадок) визначає прив'язку для Super+ Space:
~Ctrl ~Meta Mod5 <Key> space: string("\033[32;16~") \n\
Emacs переводить послідовності втечі у своє внутрішнє представлення ключів через input-decode-map
абоlocal-function-key-map
(або function-key-map
перед Emacs 23).
(define-key local-function-key-map "\033[32;16~" [(super ?\ )])
Цей пост зроблений з 80% переробленого матеріалу з Чи є Linux-термінали, які можуть обробляти всі комбінації клавіш?