Это последовательности символов, отправленные вашим терминалом при нажатии данной клавиши. Ничего общего с 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
(здесь предполагается, что ncurses
infocmp):
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Комбинации клавиш, например Ctrl-Up, не имеют соответствующих записей в terminfo
базе данных, поэтому, чтобы узнать, что они отправляют, либо прочитайте исходный код или документацию для соответствующего терминала, либо попробуйте это с помощью sed -n l
метода, описанного выше.
bind -p
.