Интерпретировать zsh bindkey экранированные последовательности - PullRequest
9 голосов
/ 15 марта 2011

Я обычно нахожу интересные настройки связывания клавиш zsh (с помощью команды bindkey) в Интернете. Мой вопрос заключается в том, как мне интерпретировать то, на что эти экранированные последовательности отображаются? Например, вот фрагмент из oh-my-zsh s key-bindings.zsh

bindkey "^[[H" beginning-of-line
bindkey "^[[1~" beginning-of-line
bindkey "^[[F"  end-of-line
bindkey "^[[4~" end-of-line

Есть ли ссылка на то, как представлены эти раскладки клавиш? Кроме того, это специфично для zsh или для платформы?

Мне известно, что я могу использовать либо cat, либо Ctrl-V , чтобы найти соответствующую экранированную последовательность для определенных клавиш. Учитывая, что я мог бы грубо заставить найти обратное соответствие, но это не сработало бы для клавиш, которых нет на моей клавиатуре (например, Home / End на ноутбуках Mac). Поэтому я бы предпочел методы, которые могли бы определять клавиши независимо от физической клавиатуры.

1 Ответ

5 голосов
/ 15 марта 2011

Если говорить о типичном потоке событий Unix / Linux, картина примерно следующая.

Программа эмулятора терминала получает события X, такие как та или иная кнопка, другая кнопка отпускается. Эти события можно отслеживать, например, с помощью утилиты xev . Затем эмулятор терминала преобразует эти события в escape-последовательности .

Этот перевод не сделан в камне. Это можно настроить. Разные эмуляторы терминала настроены по-разному. Например, перевод xterm может быть установлен в .Xdefaults , например:

XTerm*VT100*Translations:#override \
Ctrl<Key>Left:          string(0x1B) string(OD) \n\
Ctrl<Key>Right:          string(0x1B) string(OC) \n\

Примечание 0x1B, которое является ESC. ESC также печатается как ^ [.

Теперь zsh использует zle (и bash использует библиотеку readline для той же цели) который интерпретирует некоторые последовательности для перемещения по строке ввода и выполнения действий редактирования.

Следующие тексты должны содержать более подробную информацию.

Описание редактора Zsh Line

Статья в Википедии о escape-последовательностях

и

Последовательности управления Xterm

...