tmux: пытается связать ключ utf8

Я использую tmux 1.6 с konsole на Fedora 17 i686.

У меня есть клавиатура azerty (с акцентированными символами), и я хочу, чтобы ton bind нажимал клавишу "ù".

Я сделал следующее ~/.tmux.conf:

setw -g utf8 on
bind-key ù split-window -h

Но когда я запускаю tmux, у меня появляется следующая ошибка:

/home/glines/.tmux.conf: 2: unknown key: ù

Есть ли способ связать этот ключ?

За вашу помощь, спасибо заранее.

2 ответа

Решение

К сожалению, tmux поддерживает только одиночные 8-битные значения в привязках клавиш.

Если вы использовали 8-битное кодирование (фиксированной длины) (например, ISO 8859-1, ISO 8859-15 и т. Д.), То связывание должно работать. Однако если вы используете UTF-8, ваш ù (U+00F9) кодируется как два байта (C3 B9), и tmux отклоняет его как неизвестное имя ключа (если ключ длиннее одного байта (после удаления его) префиксы модификаторов), он обрабатывается как имя специального ключа, например F1, PageUp, KP0, так далее.).


Хотя, если вы в отчаянии, есть грубый взлом, который вы можете попробовать:

tmux bind-key -r $(printf '\303') display 'c3 prefix binding hack' \; \
     bind-key -r $(printf '\271') split-window -h

Это нарушает функциональность "повторного" связывания, используя его, чтобы оставаться в "режиме префикса", игнорируя при этом первый байт кодировки UTF-8 ù (шестнадцатеричный C3 B9, восьмеричный 303 271).

Первый байт ù (восьмеричный 303) связан с фиктивной командой, а второй байт (восьмеричный 271) связан с целевой командой. Для этого необходимо, чтобы вы не установили tmux repeat-time параметр в ноль (чтобы отключить повторение), и имеет побочный эффект, оставляя tmux в режиме повтора для repeat-time миллисекунды (по умолчанию 500 мс) после ввода префиксаPre (этот побочный эффект обычно будет заметен только в том случае, если вы сразу же набираете клавишу со стрелкой (с или без элемента управления или мета) после префиксаù- эти клавиши являются единственными привязками по умолчанию, которые являются " повторяемые").

В приведенном выше примере используется printf Команда оболочки для генерации необходимых байтов, но это не будет работать в вашем .tmux.conf, Если бы вы работали с tmux 1.7, вы могли бы написать это так (в вашем .tmux.conf):

bind-key -r 0xC3 display 'c3 prefix binding hack'
bind-key -r 0xB9 split-window -h

Однако этот синтаксис шестнадцатеричного ключа не работает в tmux 1.6. Итак, вам нужно либо расположить необработанные байты непосредственно в файле (ваш текстовый редактор может с этим бороться, и легко ошибиться), либо использовать оболочку, чтобы помочь вам:

run-shell "tmux bind-key -r $(printf '\\303') display 'c3 prefix binding hack' \\; bind-key -r $(printf '\\271') split-window -h"

Замечания: run-shell выполняет свою команду асинхронно, поэтому привязки могут быть недоступны сразу после запуска вашего первого сеанса.

Начиная с tmux 2.3 динамическое связывание, как объяснил Крис Джонсен, больше не является обязательным и даже не работает. Чтобы связать любой символ UTF-8, просто используйте его значение Unicode в 0x нотации.

пример

Допустим, вы хотите привязать префиксě (маленький E с Caron) к окну 2.

Для начала нужно узнать значение Unicode ě (обратите внимание, что это не зависит от кодовой последовательности UTF-8).

Вы можете использовать, например, python3 чтобы преобразовать символ UTF-8 в значение Юникода:

$ python3
>>> hex(ord('ě'))
'0x11b'

Теперь, когда вы знаете значение Unicode ě является 0x011B просто добавьте эту строку в ваш конфигурационный файл tmux:

bind-key 0x011B select-window -t 2
Другие вопросы по тегам