Como vincular o prefixo tmux a um Super?

20

Acho até Ctrl+bmuito emacsparecido, mas entendo o ponto. Eu estou querendo saber se eu poderia vinculá-lo a um único pressionamento de tecla que eu não uso de outra maneira? ou seja Super_L(também conhecida como tecla esquerda do Windows. por que digo Super_L iniciar xevem um terminal e pressionar essa tecla)

xenoterracida
fonte

Respostas:

15

Super_Lé um chaveiro X. O TMux é executado em um terminal. Cabe ao seu emulador de terminal transformar um teclado em uma sequência de caracteres. Então você teria que configurar o seu emulador de terminal e o tmux.

Observando a documentação do tmux, o prefixo pode ser apenas um nome de chave conhecido com um modificador opcional. Assim, você pode definir o prefixo tmux para uma combinação de teclas que não usa, digamos M-F12, e fazer com que seu terminal envie a sequência de caracteres para M-F12quando você pressionar Super_L. Com um pouco mais de trabalho, você pode usar uma chave que o seu teclado provavelmente não tem (tmux aceita F13através F20de nomes-chave, mas eles têm de ser declaradas em terminfo).

No lado do emulador de terminal, você teria que organizar para Super_Lgerar a sequência de teclas \e\e[24~(for M-F12) ou \e[34~(for F20) (onde \eestá o caractere de escape). Como fazer isso depende do emulador de terminal (e alguns não são configuráveis ​​o suficiente para fazê-lo). Com o xterm, isso é feito através dos recursos X:

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

Você pode encontrar um problema que Super_Lnormalmente é um modificador, e as teclas modificadoras nem sempre funcionam quando um não-modificador é necessário. Se você não quiser Super_Lser um modificador, poderá retirá-lo ou (menos confusamente) usar um keyym diferente para a chave física. Isso pode ser feito através do xmodmap (antiquado e simples de entender), do xkb (a maneira moderna, mal documentada, poderosa e complexa) ou talvez da ferramenta de configuração da GUI do ambiente de desktop.

Gilles 'SO- parar de ser mau'
fonte
isso funcionaria apenas no X então? por exemplo, se eu invocasse meu sistema remotamente sem o encaminhamento do X, não funcionaria.
Xenoterracide
2
@xenoterracide: ou eu não entendo sua pergunta ou você não entende minha resposta. Super_Lé um chaveiro X, então você provavelmente possui um servidor X em algum lugar (se estivesse efetuando login no Windows, suponho que chamaria a chave de chave esquerda do Windows). O Tmux é executado em um terminal e lê sua entrada como bytes, com as teclas de função traduzidas em seqüências de escape. Um login remoto é transparente, o ssh apenas transmite os bytes que compõem a sequência de escape.
Gilles 'SO- stop be evil'
11
Tentei isso apenas em um Mac e posso economizar tempo para outras pessoas. Parece que o iTerm2 não suporta o envio de F13-F20. Consulte code.google.com/p/iterm2/issues/detail?id=1630
balu em
3

Você não pode. Encadernação uma chave irá chamar a cmd_bind_key_parsefunção a partir da cmd-bind-key.cqual, por sua vez vai (finalmente) chamada key_string_get_modifiersa partir 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.ccontém as #definedeclarações da chave modificadora 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 (famosas últimas palavras;))?

gvkv
fonte
3
você está perdendo um passo aqui: o tmux é um programa em modo texto, que lê sequências de teclas, não academias de teclas X. Portanto, é realmente possível, configurando o emulador de terminal e o tmux corretamente.
Gilles 'SO- stop be evil'
2

Não consegui definir um prefixo para uma chave modificadora personalizada, mas consegui definir ligações do tmux em combinação com uma chave modificadora personalizada no Gnome em combinação com o Metacity. Por exemplo, para mapear Mod4+ ke Mod4+ jpara 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 chave do Windows. Algo nesse sentido funciona para qualquer gerenciador de janelas que permita definir atalhos de teclado globais (Compiz, KWin, etc.).

Ton van den Heuvel
fonte