Как интерпретировать / анализировать ввод с клавиатуры и мыши через * nix TTY / эмуляторы терминала? - PullRequest
0 голосов
/ 05 мая 2020

Я пишу приложение командной строки для систем * nix. Я хочу превратить байты в stdin в события устройства ввода, такие вещи, как «нажатие левой кнопки», «тик / движение колеса прокрутки вверх», «нажатие ctrl-alt-shift-leftarrow» и т. Д. Я хотел бы сделать это для используемых в настоящее время виртуальных терминалов, например xterm, gnome-terminal, консоли ядра linux (Ctrl-Alt-F1..6), tmux, любого из вышеперечисленных по s sh и т. Д.

Я совершенно счастлив, что приспособился только к ~ 99% того, что люди делают за последние ~ 10-20 лет, то есть если кто-то подключает физический VT100 к своей машине, а мое приложение этого не делает не работаю над этим, я нормально с этим. Однако я хотел бы в полной мере использовать возможности xterm и друзей, и я хотел бы, насколько это возможно, иметь возможность знать, что означают байты на stdin.

Как это сделать этот? Другими словами, как мне приблизительно переопределить подсистему ввода ncurses? -key escape-последовательности и кодировки без префиксов, как известно, трудно устранить неоднозначность, особенно когда Mx кодируется так же, как ES C, за которым следует x; -)

Эта незначительная проблема была устранена к соглашению пользовательского интерфейса командной строки, пусть будет так, но более тревожно: скажем, я хочу создать базу данных известных escape-последовательностей (и карту из контекста, например, $TERM value, в срез базы данных), и если мой программа получает неизвестную входную последовательность, я ее пропускаю. Как узнать, где заканчивается escape-последовательность? Насколько я могу судить, это нелегко. Мне нужны односимвольные горячие клавиши для команд, но я не хочу, чтобы их запускали неизвестные escape-последовательности.

Насколько я могу судить, это примерно невозможно.

Моя лучшая идея - действовать эмпирически: составить список всех эмуляторов терминала, которые я знаю, скормить каждому из них все допустимые вводы ключей X11 и посмотреть, что получится на другом конце. В той степени, в которой эмуляторы терминала настраиваются в сопоставлении X-key-to-stdio-bytes, это будет очень мягко. Но насколько я могу разобраться в этом мире, это примерно то, что есть terminfo.

...