Come associare il prefisso tmux a un Super?


20

Trovo persino Ctrl+bdi essere molto emacssimile ma capisco il punto. Mi chiedo se potrei associarlo a un singolo tasto di una chiave che non uso altro saggio? vale a dire Super_L(noto anche come il tasto Windows sinistro. per il motivo per cui dico Super_L avviare xevin un terminale e premere quel tasto)

Risposte:


15

Super_Lè un X keysym. Tmux funziona in un terminale. Spetta al tuo emulatore di terminale trasformare un keysym in una sequenza di caratteri. Quindi dovresti configurare sia l'emulatore di terminale che tmux.

Guardando la documentazione di tmux, il prefisso può essere solo un nome chiave noto con un modificatore opzionale. Quindi puoi impostare il prefisso tmux su una combinazione di tasti che non usi, diciamo M-F12, e ottenere che il tuo terminale invii la sequenza di caratteri per M-F12quando premi Super_L. Con un po 'più di lavoro, è possibile utilizzare una chiave che la tastiera non ha probabilmente (tmux accetta F13attraverso F20come nomi di chiave, ma devono essere dichiarati in terminfo).

Sul lato dell'emulatore di terminale, dovresti disporre Super_Ldi generare la sequenza di tasti \e\e[24~(for M-F12) o \e[34~(for F20) (dov'è \eil carattere di escape). Come farlo dipende dall'emulatore di terminale (e alcuni non sono abbastanza configurabili per farlo). Con xterm, è fatto attraverso X risorse:

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

Puoi colpire un problema che Super_Lnormalmente è un modificatore e i tasti modificatori non funzionano sempre quando è richiesto un non modificatore. Se non vuoi Super_Lessere un modificatore, puoi toglierne il modificatore o (in modo meno confuso) usare un keysym diverso per la chiave fisica. Questo può essere fatto tramite xmodmap (vecchio stile e semplice da capire), tramite xkb (il modo moderno, scarsamente documentato, potente e complesso), o forse attraverso lo strumento di configurazione della GUI dell'ambiente desktop.


funzionerebbe solo in X allora? ad es. se avessi sgusciato nel mio sistema da remoto senza l'inoltro X non avrebbe funzionato.
xenoterracide,

2
@xenoterracide: o non capisco la tua domanda o non capisci la mia risposta. Super_Lè un X keysym, quindi presumibilmente hai un X server da qualche parte (se stavi accedendo da Windows, suppongo che chiameresti il ​​tasto il tasto Windows sinistro). Tmux funziona in un terminale e legge il suo input come byte, con i tasti funzione tradotti in sequenze di escape. Un accesso remoto è trasparente, ssh trasmette solo i byte che compongono la sequenza di escape.
Gilles 'SO- smetti di essere malvagio' l'

1
Ho appena provato questo su un Mac e potrei salvare altri un po 'di tempo. Sembra che iTerm2 non supporti l'invio di F13-F20. Vedi code.google.com/p/iterm2/issues/detail?id=1630
balu,

3

Non puoi. Associare un tasto chiamerà la cmd_bind_key_parsefunzione da cmd-bind-key.ccui a sua volta (eventualmente) chiamerà key_string_get_modifiersda 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     } 

Il tmux.ccontiene la chiave modificatore di #definedichiarazioni e da quel file che abbiamo:

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

In superficie, tuttavia, non sembra troppo difficile da modificare; forse un fine settimana (ultime parole famose;)) progetto?


3
ti manca un passaggio qui: tmux è un programma in modalità testo, legge sequenze di tasti, non X tastiere. Quindi è effettivamente possibile, configurando correttamente l'emulatore di terminale e tmux.
Gilles 'SO- smetti di essere malvagio' il

2

Non sono stato in grado di impostare un prefisso su un tasto modificatore personalizzato, ma sono riuscito a definire i collegamenti tmux in combinazione con un tasto modificatore personalizzato in Gnome in combinazione con Metacity. Ad esempio, per mappare Mod4+ ke Mod4+ jper passare rispettivamente al riquadro corrente su e giù:

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"

Ciò consente di associare tmux in combinazione con, ad esempio, il tasto Windows. Qualcosa del genere funziona per qualsiasi gestore di finestre che consente di definire scorciatoie da tastiera globali (Compiz, KWin, ecc.).


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.