Это последовательности символов, отправленные вашим терминалом при нажатии данной клавиши. Ничего общего с bash или readline как таковым, но вы захотите узнать, какую последовательность символов посылает данная клавиша или комбинация клавиш, если вы хотите сконфигурировать readlineчто-то сделать при нажатии данной клавиши.
Когда вы нажимаете Aклавишу, обычно терминалы отправляют aсимвол (0x61). Если вы нажмете <Ctrl-I>или <Tab>, то обычно отправляете ^Iсимвол, также известный как TABили \t(0x9). Большинство функциональных и навигационных клавиш обычно посылают последовательность символов, которая начинается с ^[(control- [), также известного как ESCили \e(0x1b, 033 восьмеричное), но точная последовательность изменяется от терминала к терминалу.
Лучший способ узнать, что посылает клавиша или комбинация клавиш для вашего терминала, - запустить sed -n lи набрать его, а затем Enterна клавиатуре. Тогда вы увидите что-то вроде:
$ sed -n l
^[[1;5A
\033[1;5A$
Первая строка вызвана локальным терминалом, echoвыполняемым терминальным устройством (это может быть ненадежно, поскольку настройки терминального устройства могут повлиять на это).
Вторая строка выводится sed. $Не должны быть включены, это только , чтобы показать вам , где конец линии.
Выше это означает , что Ctrl-Up(который я нажал) отправить 6 символов ESC, [, 1, ;, 5и A(0x1b 0x5b 0x31 0x3B 0x35 0x41)
База terminfoданных записывает количество последовательностей для ряда общих ключей для ряда терминалов (на основе $TERMзначения).
Например:
TERM=rxvt tput kdch1 | sed -n l
Скажет вам, какая последовательность перехода отправляется rxvtпосле нажатия Deleteклавиши.
Вы можете посмотреть, какой ключ соответствует данной последовательности с вашим текущим терминалом infocmp(здесь предполагается, что ncursesinfocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Комбинации клавиш, например Ctrl-Up, не имеют соответствующих записей в terminfoбазе данных, поэтому, чтобы узнать, что они отправляют, либо прочитайте исходный код или документацию для соответствующего терминала, либо попробуйте это с помощью sed -n lметода, описанного выше.
bind -p.