
Как мне привязать клавиши Tabи ShiftTabна экране? Моя проблема в том, что я не знаю, что передать команде экрана, bind
чтобы обозначить эти нажатия клавиш.
Кстати, я в курсеЭкран GNU: перемещение между регионамино ответа там нет.
Все нижеперечисленное завершается ошибкой -X: bind: character, ^x, or (octal) \032 expected
:
screen -X bind "\033[Z" focus up
screen -X bind "^[[Z" focus up
screen -X bind "\t" focus up
screen -X bind \033[Z focus up
screen -X bind ^[[Z focus up
screen -X bind \t focus up
То же самое, если я нажму , CtrlA:чтобы ввести команду.
решение1
В отличие от bindkey
случая, когда можно указать последовательности символов, с помощью bind
, единственный способ — это использовать , bind -k CAP
где CAP является termcap
ключевой возможностью.
Например,
bind -k ku focus up
работает, чтобы связать последовательность символов, отправленных Upна focus up
. Для backtab это должно быть:
bind -k kB focus up
К сожалению, по какой-то причине это не работает. Не уверен, почему. Моя первая интерпретация была неверной. Похоже, это как-то связано с ncurses
неправильной обработкой эквивалента termcap kcbt
:
$ infocmp -1 | grep Z
cbt=\E[Z,
kcbt=\E[Z,
$ infocmp -1C | grep Z
:bt=\E[Z:\
(kcbt не переводится как kB).
Если я добавлю к своему ~/.screenrc
:
termcapinfo * kr=\E[Z
bind -k kr focus up
То есть, если я скажу, screen
что что бы ни былохозяинtermincal ( *
), F63( kr
) посылает \E[Z
, и привязывается F63к focus up
, тогда это работает. Однако обратите внимание, что нажатие Shift+Tabсейчас посылаетв пределах экрана \EOC
, которая является последовательностью символов, которую использует эмулятор терминала,экранреализует (в отличие от хост-терминала) отправляет на F63.
решение2
bindkey -k kB stuff ^[OZ
bind -k kB focus up
В моем случае проблема в том, что строка, вставленная при нажатии Ctrl+ A- Shift+, Tabнаходится ^[[Z
после Ctrl+ A, что переводится как
^[
войти в режим копирования/прокрутки[
прервать- а потом покажи
Z
т. е. стандартная последовательность символов escape в стиле VT100 конфликтует с последовательностью символов режима копирования/прокрутки. Поэтому я добавил привязку клавиш для имени backtab termcap, kB
чтобы изменить строку, вставленную в буфер ввода при нажатии Shift+, на .Tab^[OB
См. раздел «ВВОДНЫЙ ПЕРЕВОД» на странице руководства по экрану.