Клавиатуры отправляют события на компьютер. Событие говорит «сканировать код nnn вниз» или «сканировать код nnn вверх». На другом конце цепочки приложения, работающие в терминале, ожидают ввода в виде последовательности символов.
Когда вы нажимаете A, клавиатура отправляет информацию «код сканирования 38 вниз». Драйвер консоли ищет свою таблицу ключей и преобразует ее в «символ a».
Когда вы нажимаете клавишу или комбинацию клавиш, которая не приводит к символу, информация должна быть закодирована в виде символов. Несколько клавиш и комбинаций клавиш имеют соответствующие управляющие символы, например, Ctrl + A отправляет символ ␁ (значение байта 1), Return отправляет символ ␍ (Ctrl + M, значение байта 13) и т. Д.
Большинство функциональных клавиш не имеют соответствующего символа и вместо этого отправляют последовательность символов, которая начинается с символа ␛ (escape, значение байта 27). Например, клавиша Up переводится в escape-последовательность ␛ [A (три символа: escape, открывающая скобка, заглавная A).
Кажется, что приглашение "gerrit gsql" является "тупым" и не понимает большинство escape-последовательностей, поэтому просто отображает escape-последовательность. Для символа gly символа нет, поэтому он отображается как ^ [. Знак ^ традиционно используется в качестве префикса для управляющих символов, а escape - ^ [из-за его байтового значения: это байтовое значение [, минус 64.