Если говорить о типичном потоке событий Unix / Linux, картина примерно следующая.
Программа эмулятора терминала получает события X, такие как та или иная кнопка, другая кнопка отпускается. Эти события можно отслеживать, например, с помощью утилиты xev . Затем эмулятор терминала преобразует эти события в escape-последовательности .
Этот перевод не сделан в камне. Это можно настроить. Разные эмуляторы терминала настроены по-разному. Например, перевод xterm может быть установлен в .Xdefaults , например:
XTerm*VT100*Translations:#override \
Ctrl<Key>Left: string(0x1B) string(OD) \n\
Ctrl<Key>Right: string(0x1B) string(OC) \n\
Примечание 0x1B, которое является ESC. ESC также печатается как ^ [.
Теперь zsh использует zle (и bash использует библиотеку readline для той же цели)
который интерпретирует некоторые последовательности для перемещения по строке ввода и выполнения действий редактирования.
Следующие тексты должны содержать более подробную информацию.
Описание редактора Zsh Line
Статья в Википедии о escape-последовательностях
и
Последовательности управления Xterm