Jak powiązać prefiks tmux z Super?

20

Uważam nawet, że jestem Ctrl+bbardzo emacspodobny, ale rozumiem o co chodzi. Zastanawiam się, czy mógłbym powiązać go z jednym naciśnięciem klawisza, którego nie używam w inny sposób? mianowicie Super_L(znany również jako lewy klawisz Windows. dlaczego mówię, że Super_L startuje xevw terminalu i wciskam ten klawisz)

ksenoterracid
źródło

Odpowiedzi:

15

Super_Ljest klawiszem X. Tmux działa w terminalu. Emulator terminala należy do przekształcenia klucza w sekwencję znaków. Musisz więc skonfigurować zarówno emulator terminala, jak i tmux.

Patrząc na dokumentację tmux, prefiks może być znaną nazwą klucza z opcjonalnym modyfikatorem. Możesz więc ustawić prefiks tmux na kombinację klawiszy, której nie używasz, powiedzmy M-F12, i poproś terminal, aby wysłał sekwencję znaków M-F12po naciśnięciu Super_L. Z trochę więcej pracy, można użyć klucza klawiatura prawdopodobnie nie ma (tmux akceptuje F13poprzez F20kluczowymi nazwami, ale muszą być zadeklarowane w terminfo).

Po stronie emulatora terminala Super_Lnależy wygenerować sekwencję klawiszy \e\e[24~(for M-F12) lub \e[34~(for F20) (gdzie \ejest znak zmiany znaczenia). Jak to zrobić, zależy od emulatora terminala (a niektóre nie są wystarczająco konfigurowalne, aby to zrobić). W Xterm odbywa się to za pośrednictwem zasobów X:

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

Możesz trafić w zaczep, który Super_Lzwykle jest modyfikatorem, a klawisze modyfikatora nie zawsze działają, gdy wymagany jest niemodyfikator. Jeśli nie chcesz Super_Lbyć modyfikatorem, możesz go usunąć lub (mniej myląco) użyć innego klucza dla klucza fizycznego. Można to zrobić za pomocą xmodmap (staromodnego i prostego do zrozumienia), poprzez xkb (nowoczesny, słabo udokumentowany, wydajny i złożony sposób), a może za pomocą narzędzia konfiguracyjnego GUI środowiska graficznego.

Gilles „SO- przestań być zły”
źródło
czy działałoby to tylko w X? np. jeśli zdalnie wykonałem ostrzał do mojego systemu bez przekazywania X, to nie działałoby.
ksenoterrakid,
2
@xenoterracide: albo nie rozumiem twojego pytania, albo nie rozumiesz mojej odpowiedzi. Super_Ljest kluczem X, więc prawdopodobnie masz gdzieś serwer X (jeśli logowałeś się z systemu Windows, przypuszczam, że nazwałbyś go lewym klawiszem Windows). Tmux działa w terminalu i odczytuje dane wejściowe jako bajty, a klawisze funkcyjne są tłumaczone na sekwencje specjalne. Zdalne logowanie jest przezroczyste, ssh po prostu przesyła bajty tworzące sekwencję ucieczki.
Gilles „SO- przestań być zły”
1
Po prostu wypróbowałem to na komputerze Mac, a inni mogą zaoszczędzić trochę czasu. Wygląda na to, że iTerm2 nie obsługuje wysyłania F13-F20. Zobacz code.google.com/p/iterm2/issues/detail?id=1630
Balu
3

Nie możesz Wiążące klucz będzie wywołać cmd_bind_key_parsefunkcję z cmd-bind-key.cktórej z kolei (w końcu) wezwanie key_string_get_modifiersod 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     } 

tmux.cZawiera klawisz modyfikujący #definedeklaracji i z tego pliku mamy:

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

Na pierwszy rzut oka jednak modyfikacja nie wygląda na zbyt trudną; może projekt weekendowy (słynne ostatnie słowa;))?

gvkv
źródło
3
brakuje ci tutaj kroku: tmux to program w trybie tekstowym, odczytuje sekwencje klawiszy, a nie X klawiszy. Jest to więc możliwe, odpowiednio konfigurując emulator terminala i tmux.
Gilles „SO- przestań być zły”
2

Nie byłem w stanie ustawić prefiksu niestandardowego klucza modyfikującego, ale udało mi się zdefiniować powiązania tmux w połączeniu z niestandardowym kluczem modyfikującym w Gnome w połączeniu z Metacity. Na przykład, aby zmapować Mod4+ ki Mod4+, jaby przejść odpowiednio do bieżącego panelu w górę lub w dół:

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"

Pozwala to na powiązania tmux w połączeniu np. Z klawiszem Windows. Coś wzdłuż tych linii działa dla każdego menedżera okien, który pozwala zdefiniować globalne skróty klawiaturowe (Compiz, KWin itp.).

Ton van den Heuvel
źródło