Подтвердить что ты не робот

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

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

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

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

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

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

4b9b3361

Ответ 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 не могут иметь параметры. Кроме того, обычные последовательности для ключей обычно не имеют числового параметра, поэтому также добавляется параметр placeholder (?) 1:

Up отправляет ^[[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, имеет несколько предварительно сконфигурированных ключей, но вам, вероятно, придется добавить большинство из них самостоятельно. Вы можете перейти к списку ключей, нажав элемент 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 имеют возможность "видеть" ваши желаемые комбинации клавиш.