Как связать <Control> <Arrowkey> в Mutt?

9

Я застрял здесь:

Можно ли связать одно из <enter>, <backspace>, <up>, <down>, <left>, <right>вместе с контролем?

\C<foo>появляется как |foo>в справке и ^<up>не связан.
'\C<foo>, '\C <foo>'Не работают, тоже ( то же самое с , "а).

<control> не существует

На самом деле вы можете появиться ^<foo>в справке, но только если вы отобразите ^<foo>, что не совсем то, что я хочу. ;)

Profpatsch
источник

Ответы:

5

Во-первых, вам нужно определить, отправляет ли ваш терминал различные escape-последовательности для этих комбинаций клавиш. Приложения, работающие в терминалах, получают символы ввода, а не ключи. Функциональные клавиши кодируются как управляющие символы или как escape-последовательности, начинающиеся с escape-символа (который вы можете написать как \eв привязке ключа).

Чтобы увидеть escape-последовательность, отправленную комбинацией клавиш в терминале, нажмите Ctrl+ Vв командной строке, затем нажмите комбинацию клавиш. Например, если я нажимаю Ctrl+ V Ctrl+ Leftв приглашении оболочки, я вижу ^[O5D. ^[является escape-символом, поэтому мне нужно привязать \eO5DMutt, чтобы он реагировал на Ctrl+ Left:

bind editor \eO5D backward-word

Некоторые терминалы отправляют одну и ту же escape-последовательность для одного и того же ключа с разными модификаторами. Если это так, вам нужно выяснить, как изменить поведение терминала или переключиться на другой терминал.

Жиль "ТАК - перестань быть злым"
источник
Звучит хорошо, но это не работает. \eэто управляющий ключ, а не управляющий символ ...
Profpatsch
@Profpatsch Странно, эта привязка работает для меня. Я использую Mutt 1.5 с тех пор навсегда, может быть, 1.4 работает по-другому? Это работает, если вы используете \eв макросе macro editor \e[O5D \eb:?
Жиль "ТАК - перестань быть злым"
1
Я на Терминаторе, когда я Ctrl+Downполучаю ^[[1;5B, я получаю , это не работает bind index \e[1;5B commandи не с этим \e1;5B тоже. О, я работаю с Mutt 1.5.21 (Arch.;)
Profpatsch
1
@Profpatsch Хорошо, я могу воспроизвести это. Там , кажется, ограничение до 5 символов: bind editor \e[1\;5 backward-wordработает для меня (и вставляет дополнительную , Dкогда я вхожу ESC [ 1 ; 5 D), но bind editor \e[1\;5D backward-wordприводит к ESC [ 1 ; 5 Dничего не делая. Я вижу ограничение в 8 символов в исходном коде ( MAX_SEQ), но ничего, что могло бы вызвать 5 символов.
Жиль "ТАК - перестань быть злым"
@Profpatsch Обходной путь - заставить ваш терминал отправлять более короткие последовательности. Я не знаю, поддерживает ли Терминатор это.
Жиль "ТАК - перестань быть злым"
15

Я нашел правильный ответ здесь :

Внутри дурака используйте команду

:exec what-key

Затем, нажав нужную клавишу (например, Ctrl + стрелка), вы можете узнать, как ссылаться на любую клавишу. В моем случае я получаю <C-Up>Ctrl + Up.

Alexis
источник
4
Если вам удалось использовать :exec what-keyэту информацию для получения этой информации, но затем не удалось определить «какую клавишу» нажать для выхода из what-keyкоманды, последовательность клавиш для выхода - это Ctrl-g.
KDN
@KDN: Спасибо. Было немного неловко. ;)
Текин
@KDN Ctrl-gиспользуется для отмены команд в emacs и многих оболочках unix.
Джангид