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

1574
GlinesMome

Я использую 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: ù 

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

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

3

2 ответа на вопрос

6
Chris Johnsen

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

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

Спасибо за ваш ответ, часть run-shell не работает, но я скоро обновлю tmux. GlinesMome 11 лет назад 0
Проблема с командой `run-shell` могла заключаться в том, что я использовал` ~ / bin / tmux` вместо простого `tmux` (я отредактировал ответ; я также выкопал бинарный файл 1.6 и убедился, что он работает с ним в отдельном экземпляре сервера). Chris Johnsen 11 лет назад 0
Так что же синтаксис , если я хочу , чтобы связать `разделенного окна -h` на Prefix, Control+ ù? fauve 8 лет назад 0
1
Lefo

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

пример

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

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

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

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

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

bind-key 0x011B select-window -t 2 

Похожие вопросы