it-swarm-pt.tech

Como faço para vincular o prefixo tmux a um Super?

Eu acho mesmo Ctrl+b ser muito emacs gosto, mas eu entendo o ponto. Estou me perguntando se eu poderia vinculá-lo a um único pressionamento de tecla de uma tecla que não uso de outra forma. nomeadamente Super_L (também conhecida como tecla esquerda do Windows. Por isso digo Super_L start xev em um terminal e pressiono essa tecla)

21
xenoterracide

Super_L é um X keysym. Tmux é executado em um terminal. Cabe ao emulador de terminal transformar um keysym em uma sequência de caracteres. Portanto, você teria que configurar o emulador de terminal e o tmux.

Olhando a documentação do tmux, o prefixo pode ser apenas um nome de chave conhecido com um modificador opcional. Portanto, você pode definir o prefixo tmux para uma combinação de teclas que você não usa, diga M-F12, e faça com que seu terminal envie a sequência de caracteres para M-F12 quando você pressiona Super_L. Com um pouco mais de trabalho, você poderia usar uma tecla que seu teclado provavelmente não possui (o tmux aceita F13 através F20 como nomes de chave, mas eles devem ser declarados em terminfo).

No lado do emulador de terminal, você teria que providenciar Super_L para gerar a sequência de teclas \e\e[24~ (para M-F12) ou \e[34~ (para F20) (Onde \e é o caractere de escape). Como fazer isso depende do emulador de terminal (e alguns não são configuráveis ​​o suficiente para fazer isso). Com o xterm, isso é feito por meio de recursos X:

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

Você pode encontrar um obstáculo que Super_L normalmente é um modificador, e as teclas modificadoras nem sempre funcionam quando um não modificador é necessário. Se você não quer Super_L para ser um modificador, você pode retirar seu modificador ou (menos confuso) usar um símbolo de tecla diferente para a tecla física. Isso pode ser feito através do xmodmap (antigo e simples de entender), através do xkb (a forma moderna, mal documentada, poderosa e complexa) ou talvez através da ferramenta de configuração de GUI do seu ambiente de desktop.

16

Você não pode. Vincular uma tecla irá chamar o cmd_bind_key_parse função de cmd-bind-key.c que por sua vez irá (eventualmente) chamar key_string_get_modifiers de 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     } 

O tmux.c contém a tecla modificadora #define declarações e desse arquivo temos:

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 superfície, porém, não parece muito difícil de modificar; talvez um projeto de fim de semana (últimas palavras famosas;))?

3
gvkv

Não fui capaz de definir um prefixo para uma tecla modificadora personalizada, mas consegui definir ligações tmux em combinação com uma tecla modificadora personalizada no Gnome em combinação com Metacity. Por exemplo, para mapear Mod4 +k e Mod4 +j para mover para o painel atual para cima e para baixo, respectivamente:

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"

Isso permite ligações tmux em combinação com, por exemplo, a tecla Windows. Algo nesse sentido funciona para qualquer gerenciador de janelas que permita definir atalhos de teclado globais (Compiz, KWin, etc.).

2
Ton van den Heuvel