Как связать «tab» и «shift+tab» в GNU screen?

Как связать «tab» и «shift+tab» в GNU screen?

Как мне привязать клавиши 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

См. раздел «ВВОДНЫЙ ПЕРЕВОД» на странице руководства по экрану.

Связанный контент