Терминалы были аппаратными устройствами, которые состояли из клавиатуры и устройства вывода (первоначально принтер для распечатки, позже монитор CRT). К большому компьютеру может быть подключено несколько удаленных терминалов. Каждый терминал будет иметь протокол для эффективной связи с компьютером, для терминалов на основе ЭЛТ это включает наличие специальных «управляющих последовательностей» для изменения положения курсора, стирания частей текущей строки / экрана, переключения в альтернативный полноэкранный режим. ..
Эмулятор терминала - это приложение, эмулирующее один из этих старых терминалов. Он позволяет выполнять такие функции, как позиционирование курсора, установка цветов переднего плана и фона, ... Эмуляторы терминала пытаются эмулировать определенный протокол терминала, но каждый из них имеет свой набор особенностей и отклонений.
Системы Unix имеют базы данных, описывающие терминалы и эмуляторы терминалов, поэтому приложения абстрагируются от конкретного используемого терминала (или эмулятора терминала). Более старая база данных - termcap(5)
, а terminfo(5)
- более новая база данных. Эти базы данных позволяют приложениям запрашивать возможности используемого терминала. Возможности могут быть логическими, числовыми или даже строковыми, например: если конкретный тип терминала имеет / поддерживает клавишу F12, он будет иметь возможность «key_f12» (длинное имя terminfo), «kf12» (короткое имя terminfo), «F2» (имя termcap), описывающее строку, которую создает ключ. Попробуйте это с: tput kf12 | od -tx1
.
Поскольку программирование непосредственно с помощью возможностей может быть громоздким, приложения обычно используют библиотеку более высокого уровня, такую как curses / ncurses, slang и т. Д. *
Существует специальная переменная среды с именем TERM
, которая сообщает приложениям, с каким типом терминала они общаются. Эта переменная должна иметь точный тип терминала, если он существует в базе данных, для достижения наилучших результатов. Это просто сообщает приложению, какой точный протокол и отклонения протокола понимает терминал. Изменение TERM
переменной не изменяет тип терминала, оно просто меняет тип терминала, с которым приложение думает, что оно говорит.
Все это говорит о том, что Ctrl+arrow
- это поведение xterm (зависит от параметра конфигурации), которое вообще не отражается в базах данных terminfo / termcap, поэтому большинство приложений об этом не знают. В любом случае, либо ваш эмулятор терминала (в вашем случае pyte
) его поддерживает, либо нет.
Если ваше основное приложение - bash
или другое приложение, использующее библиотеку readline
, вы можете использовать backward-word
readline (Meta-b / Alt-b / ESC b по умолчанию, настраивается в inputrc
) вместо.