Wie binde ich das tmux-Präfix an ein Super?

20

Ich finde es sogar Ctrl+bsehr emacsähnlich, aber ich verstehe den Punkt. Ich frage mich, ob ich es an einen einzelnen Tastendruck eines Schlüssels binden könnte, den ich nicht auf andere Weise benutze. Nämlich Super_L(auch als linke Windows-Taste bekannt. Warum sage ich Super_L, starte xevin einem Terminal und drücke diese Taste ? )

Xenoterracid
quelle

Antworten:

15

Super_List ein X-Keysym. Tmux läuft in einem terminal. Es liegt an Ihrem Terminal-Emulator, ein Schlüsselwort in eine Zeichenfolge umzuwandeln. Sie müssten also sowohl Ihren Terminalemulator als auch tmux konfigurieren.

In der tmux-Dokumentation kann das Präfix nur ein bekannter Schlüsselname mit einem optionalen Modifikator sein. Sie können also das tmux-Präfix auf eine Tastenkombination setzen, die Sie beispielsweise nicht verwenden M-F12, und Ihr Terminal veranlassen, die Zeichenfolge zu senden, M-F12wenn Sie drücken Super_L. Mit etwas mehr Arbeit könnten Sie eine Taste verwenden, die Ihre Tastatur wahrscheinlich nicht hat (tmux akzeptiert F13through F20als Tastennamen , sie müssen jedoch in terminfo deklariert werden).

Auf der Seite des Terminal-Emulators müssten Sie veranlassen Super_L, dass die Tastenfolge \e\e[24~(für M-F12) oder \e[34~(für F20) generiert wird (wo \eist das Escape-Zeichen). Wie das geht, hängt vom Terminal-Emulator ab (und einige sind dafür nicht konfigurierbar). Bei xterm erfolgt dies über X-Ressourcen:

! Make Super_L act as Meta+F12
XTerm.VT100.translations:       #override \
    <Key>Super_L:  string("\033\033[24~")

Sie können einen Haken treffen, der Super_Lnormalerweise ein Modifikator ist, und die Modifikatortasten funktionieren nicht immer, wenn ein Nicht-Modifikator erforderlich ist. Wenn Sie kein Super_LModifikator sein möchten , können Sie den Modifikator entfernen oder (weniger verwirrend) einen anderen Schlüssel für den physischen Schlüssel verwenden. Dies kann über xmodmap (altmodisch und einfach zu verstehen), über xkb (die moderne, schlecht dokumentierte, leistungsstarke und komplexe Methode) oder möglicherweise über das GUI-Konfigurationstool Ihrer Desktop-Umgebung erfolgen.

Gilles 'SO - hör auf böse zu sein'
quelle
würde das dann nur in X funktionieren? Beispiel: Wenn ich ohne X-Weiterleitung aus der Ferne auf mein System zugreifen würde, würde dies nicht funktionieren.
Xenoterracide
2
@xenoterracide: Entweder verstehe ich Ihre Frage nicht oder Sie verstehen meine Antwort nicht. Super_List ein X-Keysym, also haben Sie vermutlich irgendwo einen X-Server (wenn Sie sich unter Windows angemeldet haben, würden Sie den Schlüssel vermutlich den linken Windows-Schlüssel nennen). Tmux läuft in einem Terminal und liest seine Eingabe als Byte, wobei Funktionstasten in Escape-Sequenzen übersetzt werden. Ein Remote-Login ist transparent. Ssh überträgt nur die Bytes, aus denen die Escape-Sequenz besteht.
Gilles 'SO- hör auf böse zu sein'
1
Ich habe es gerade auf einem Mac ausprobiert und ich könnte anderen etwas Zeit sparen. Es sieht so aus, als ob iTerm2 das Senden von F13-F20 nicht unterstützt. Siehe code.google.com/p/iterm2/issues/detail?id=1630
balu am
3

Das kannst du nicht. Eine Schlüssel Bindung wird die Anruf - cmd_bind_key_parseFunktion aus , cmd-bind-key.cdie wiederum (schließlich) Anruf key_string_get_modifiersvon key-string.c:

/* Find modifiers. */
105     int
106     key_string_get_modifiers(const char **string)
107     {
108         int modifiers;
109         
110         modifiers = 0;
111         while (((*string)[0] != '\0') && (*string)[1] == '-') {
112             switch ((*string)[0]) {
113                 case 'C':
114                 case 'c':
115                 modifiers |= KEYC_CTRL;
116                 break;
117                 case 'M':
118                 case 'm':
119                 modifiers |= KEYC_ESCAPE;
120                 break;
121                 case 'S':
122                 case 's':
123                 modifiers |= KEYC_SHIFT;
124                 break;
125             }
126             *string += 2;
127         }
128         return (modifiers);
129     } 

Die tmux.centhält die Modifizierertastendeklarationen #defineund aus dieser Datei haben wir:

106     /* Key modifier bits. */
107     #define KEYC_ESCAPE 0x2000
108     #define KEYC_CTRL 0x4000
109     #define KEYC_SHIFT 0x8000
110     #define KEYC_PREFIX 0x10000 

An der Oberfläche sieht es jedoch nicht allzu schwierig aus, Änderungen vorzunehmen. vielleicht ein wochenendprojekt (berühmte letzte worte;))?

gvkv
quelle
3
Ihnen fehlt hier ein Schritt: tmux ist ein Programm im Textmodus, das Tastensequenzen und keine X-Keys liest. Es ist also tatsächlich möglich, sowohl den Terminalemulator als auch tmux richtig zu konfigurieren.
Gilles 'SO- hör auf böse zu sein'
2

Ich war nicht in der Lage, einem benutzerdefinierten Modifikatorschlüssel ein Präfix zuzuweisen, aber es gelang mir, unter Gnome in Kombination mit Metacity tmux-Bindungen in Kombination mit einem benutzerdefinierten Modifikatorschlüssel zu definieren. Um beispielsweise Mod4+ kund Mod4+ zuzuordnen und jzum aktuellen Bereich nach oben bzw. unten zu wechseln, gehen Sie wie folgt vor:

gconftool-2 --set /apps/metacity/keybinding_commands/command_1 --type string "tmux select-pane -D"
gconftool-2 --set /apps/metacity/keybinding_commands/command_2 --type string "tmux select-pane -U"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_1 --type string "<Mod4>j"
gconftool-2 --set /apps/metacity/global_keybindings/run_command_2 --type string "<Mod4>k"

Dies ermöglicht tmux-Bindungen in Kombination mit beispielsweise der Windows-Taste. Etwas in diese Richtung funktioniert für jeden Fenstermanager, der die Definition globaler Tastaturkürzel (Compiz, KWin usw.) ermöglicht.

Ton van den Heuvel
quelle