Как мне узнать, какую escape-последовательность нужно отправить моему терминалу?

Я использую терминальное приложение на OSX для подключения к Ubuntu (12.04, я думаю). У меня есть терминал с настройками по умолчанию xerm-256. В этом режиме терминал отправляет последовательность \033OQ при нажатии F2. Однако для Shift-F2 или Control-F2 нет сопоставления. Также не заданы последовательности для Shift-Left, Shift-Right, Control-Left, Control-Right и т. Д. Мне нужны некоторые из этих клавиш, чтобы время от времени управлять функциями в различных программах. Взять к примеру бёбу. Shift-F2 и Control-F2 используются для разделения экрана по вертикали и горизонтали. В tmux клавиши со стрелками используются с shift и control для изменения размеров панелей.

Моя проблема в том, что я не знаю, какую последовательность должен послать терминал. Как мне узнать, какими должны быть эти последовательности? Я знаю, что могу нажать Control-v, а затем клавишу, чтобы получить полученный код, но это не то, что мне нужно. Мне не нужно видеть, какая последовательность отправляется. Мне нужно знать, какую последовательность мне нужно отправить.

Например, моя левая стрелка отправляет ^[OD. Мой левый контроль посылает ^[[5D]. Однако мои клавиши вверх и вниз не имеют различий. Мой пух посылает ^[OB, а Control-down также отправляет ^[OB. Та же проблема с моим ключом вверх. То же самое со сдвигом или без него.

Есть ли где-нибудь список со всеми ключами и кодами, особенно с такими модификаторами, как shift, control, alt/option?

Как я могу узнать, какова ожидаемая последовательность, чтобы я мог отправить то, что нужно?

1 ответ

Решение

XTerm

Поскольку вы рекламируете, что используете xterm (через значение TERM), вы, скорее всего, захотите отправить последовательности, которые xterm отправит для этих ключей. Документация ctlseqs от xterm описывает эти конкретные модифицированные последовательности клавиш в нижней части раздела функциональных клавиш в стиле ПК:

… Xterm распознает модификаторы функциональных клавиш, которые являются параметрами, добавляемыми перед последним символом последовательности управления.

    2 Shift
    3 Alt
    4 Shift + Alt
    5 Control
    6 Control + Shift
    ⋮

Примеры

F5 отправляет ^[[15~так Shift-F5 должен отправить ^[[15;2~ (т.е. добавить ;2 перед финальным персонажем)

Клавиши со стрелками и первые четыре функциональные клавиши немного отличаются. Они часто используют основанные на SS3 последовательности (начиная с ^[O); их необходимо изменить на эквиваленты на основе CSI (начиная с ^[[) поскольку последовательности SS3 не могут иметь параметров. Кроме того, нормальные последовательности для ключей обычно не имеют числового параметра, поэтому заполнитель (?) 1 Параметр также добавлен:

Вверх отправляет ^[[A или же ^[OA, так Shift+Up должен отправить ^[[1;2A (т.е. переключиться на CSI и добавить 1;2 перед финальным персонажем)

F1 отправляет ^[OP, так Shift+F1 должен отправить ^[[1;2P (т.е. переключиться на CSI, добавить 1;2 перед финальным персонажем)

Вы также можете посмотреть исходный код различных эмуляторов терминала, чтобы узнать, что они делают. Например, соответствующие биты tmux находятся в его xterm-keys.c файл

конфигурация

Поскольку ваш эмулятор терминала не отправляет все последовательности, которые вы хотите поддерживать, вам придется настроить его для этого. Встроенный эмулятор терминала, который поставляется с OS X, Terminal, имеет несколько предварительно настроенных ключей, но вам, вероятно, придется добавить большинство из них самостоятельно. Вы можете получить доступ к списку клавиш, вызвав пункт меню " Терминал" > " Настройки"…, выбрав вкладку " Настройки " верхнего уровня, выбрав соответствующий профиль и перейдя на вкладку " Клавиатура ". Оттуда вы можете добавлять и удалять ключевые определения. Например, вы можете определить F2 с shift в send string to shell: (SIC) и введите ESC, а затем [1;2Q в текстовое поле строки (ESC будет отображаться как \033, это нормально).

Примечание. Изменение определения Option-Right и Option-Left может повлиять на работу некоторых программ (например, оболочек и Emacs) с этими нажатиями клавиш. Конфигурация по умолчанию отправляет ESC-f и ESC-b, которые представляют собой нажатия клавиш в стиле Emacs для обратного слова и прямого слова, которые по умолчанию понимают многие программы. Эта конфигурация кажется мне обратной; оболочка (и другие программы) должна быть настроена на распознавание правильных модифицированных последовательностей клавиш со стрелками.

Вы также можете попробовать другой эмулятор терминала. iTerm 2 имеет встроенную поддержку для большинства этих модифицированных ключей (возможно, не вариантов Control+Fn), поэтому будет меньше настроек для ручной настройки.

Кроме того, обратите внимание, что OS X имеет некоторые общесистемные сочетания клавиш, определенные для некоторых комбинаций Control-Fx (см. Системные настройки, Клавиатура, Сочетания клавиш, Клавиатура и ввод текста). Вам нужно будет отключить некоторые из этих сочетаний клавиш, чтобы у терминала или iTerm была возможность "увидеть" нужные вам комбинации клавиш.

Другие вопросы по тегам