3

Я использую 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 ответа2

6

К сожалению, 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 мс) после того, как вы набрали Prefix ù (этот побочный эффект обычно будет заметен только в том случае, если вы сразу же набираете клавишу со стрелкой (с или без Control или Meta) после префикса ù - эти клавиши являются единственными привязками по умолчанию, которые являются «повторяемыми»).

Приведенный выше пример использует команду оболочки 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 выполняет свою команду асинхронно, поэтому привязки могут быть недоступны сразу после запуска вашего первого сеанса.

1

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

пример

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

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

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

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

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

bind-key 0x011B select-window -t 2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .