tmux: Versuch, den utf8-Schlüssel zu binden

1684
GlinesMome

Ich verwende tmux 1.6 mit konsole auf Fedora 17 i686.

Ich habe eine Azerty-Tastatur (mit akzentuierten Zeichen), und ich möchte die Taste "ù" binden.

Ich habe folgende ~ / .tmux.conf gemacht:

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

Beim Ausführen von tmux habe ich jedoch die folgende Fehlermeldung:

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

Gibt es eine Möglichkeit, diesen Schlüssel zu binden?

Vielen Dank für Ihre Hilfe.

3

2 Antworten auf die Frage

6
Chris Johnsen

Leider unterstützt tmux nur einzelne 8-Bit-Werte in seinen Schlüsselbindungen.

Wenn Sie eine 8-Bit-Codierung (feste Länge) (z. B. ISO 8859-1, ISO 8859-15 usw.) verwendet haben, sollte die Bindung funktionieren. Wenn Sie UTF-8 verwenden, wird Ihr ù (U + 00F9) jedoch als zwei Bytes (C3 B9) codiert und von tmux als unbekannter Schlüsselname zurückgewiesen (wenn ein Schlüssel länger ist als ein einzelnes Byte (nachdem er entfernt wurde) Modifikator Präfixe), wird er als der Name eines speziellen Schlüssels zB verarbeitet F1, PageUp, KP0, etc.).


Wenn Sie verzweifelt sind, gibt es einen groben Hack, den Sie ausprobieren könnten:

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

Dies missbraucht die "Repeat" -Bindungsfunktion, indem sie dazu verwendet wird, im "Präfix-Modus" zu bleiben, während das erste Byte der UTF-8-Codierung von ù (Hex C3 B9, Oktal 303 271) grundsätzlich ignoriert wird.

Das erste Byte von ù (Oktal 303) ist an einen Dummy-Befehl gebunden, und das zweite Byte (Oktal 271) ist an den Zielbefehl gebunden. Dies setzt voraus , dass Sie die tmux-repeat-time Option nicht auf null gesetzt haben (um das Wiederholen zu deaktivieren), und es hat den Nebeneffekt, dass tmux für repeat-timeMillisekunden (Standardeinstellung 500ms) nach der Eingabe im Wiederholungsmodus verbleibt Prefixù(dieser Nebeneffekt ist normalerweise nur der Fall) bemerkbar, wenn Sie sofort eine Pfeiltaste (mit oder ohne Controloder Meta) danach Prefixùeingeben - diese Tasten sind die einzigen Standardbindungen, die „wiederholbar“ sind.

Das obige Beispiel verwendet den printfShell-Befehl, um die erforderlichen Bytes zu generieren, dies funktioniert jedoch nicht in Ihren .tmux.conf. Wenn Sie tmux 1.7 ausgeführt haben, können Sie es so schreiben (in Ihrem .tmux.conf):

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

Diese Hex-Schlüsselsyntax funktioniert jedoch nicht in tmux 1.6. Daher müssen Sie entweder dafür sorgen, dass sich die rohen Bytes direkt in der Datei befinden (Ihr Texteditor kann Sie darüber streiten, und es ist leicht, einen Fehler zu machen) oder Sie verwenden eine Shell, um Sie zu unterstützen:

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

Hinweis: Der run-shellBefehl wird asynchron ausgeführt, sodass die Bindungen möglicherweise nicht sofort nach dem Start Ihrer ersten Sitzung verfügbar sind.

Vielen Dank für Ihre Antwort, der Run-Shell-Teil funktioniert nicht, aber ich werde tmux bald aktualisieren. GlinesMome vor 11 Jahren 0
Das Problem beim 'run-shell'-Befehl war möglicherweise, dass ich ~ / bin / tmux anstelle von' tmux 'verwendet habe (ich habe die Antwort bearbeitet; ich habe auch eine 1.6-Binärdatei ausgegraben und überprüft, dass sie damit funktioniert in einer separaten Serverinstanz). Chris Johnsen vor 11 Jahren 0
Also , was ist die Syntax , wenn ich `Split-Fenster binden will -h` auf Prefix, Control+ ù? fauve vor 8 Jahren 0
1
Lefo

Seit Tmux 2.3 ist eine dynamische Umbindung nach Chris Johnsen nicht mehr nötig und funktioniert auch nicht. Um ein beliebiges UTF-8-Zeichen zu binden, verwenden Sie einfach den Unicode-Wert in 0xNotation.

Beispiel

PrefixěAngenommen, Sie möchten (kleines E mit caron) an Fenster 2 binden .

Zuerst müssen Sie den Unicode-Wert von ermitteln ě(beachten Sie, dass dies von der UTF-8-Codefolge abweicht).

Sie können zB python3UTF-8-Zeichen in den Unicode-Wert konvertieren:

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

Wenn Sie nun wissen, dass der Unicode-Wert von ěist 0x011B, fügen Sie einfach diese Zeile zu Ihrer tmux-Konfigurationsdatei hinzu:

bind-key 0x011B select-window -t 2