Como vinculo o prefixo tmux a um Super?

18

Acho que até o Ctrl + b é muito emacs , mas eu entendo o ponto. Eu estou querendo saber se eu poderia vinculá-lo a uma única tecla de uma chave que eu não uso outro sábio? ou seja, Super_L (também conhecida como a tecla do lado esquerdo do Windows. por que eu digo Super_L inicie xev em um terminal e pressione essa tecla)

    
por xenoterracide 05.09.2010 / 19:09

4 respostas

15

Super_L é um X keysym. O Tmux é executado em um terminal. Cabe ao seu emulador de terminal transformar um keysym em uma sequência de caracteres. Então você teria que configurar tanto o seu emulador de terminal quanto o tmux.

Examinando 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 como 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-F12 quando você pressionar Super_L . Com um pouco mais de trabalho, você poderia usar uma chave que seu teclado provavelmente não tem (o tmux aceita F13 a F20 como nomes de chaves, mas eles precisam ser declarados em terminfo).

No lado do emulador de terminal, você teria que organizar Super_L para gerar a seqüência de teclas \e\e[24~ (para M-F12 ) ou \e[34~ (para F20 ) (onde \e é a saída personagem). Como fazer isso depende do emulador de terminal (e alguns não são configuráveis o suficiente para fazer isso). Com o xterm, é feito através de recursos do X:

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

Você pode acertar 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 quiser que Super_L seja um modificador, pode retirar seu modificador ou (menos confusamente) usar um keysym diferente para a chave física. Isso pode ser feito através do xmodmap (antiquado e simples de entender), através do xkb (a maneira moderna, mal documentada, poderosa e complexa), ou talvez através da ferramenta de configuração GUI do seu ambiente de trabalho.

    
por 06.09.2010 / 23:13
3

Você não pode. Vincular uma chave chamará a função cmd_bind_key_parse 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] != '
106     /* Key modifier bits. */
107     #define KEYC_ESCAPE 0x2000
108     #define KEYC_CTRL 0x4000
109     #define KEYC_SHIFT 0x8000
110     #define KEYC_PREFIX 0x10000 
') && (*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 o chave modificadora #define declarações e desse arquivo temos:

/* Find modifiers. */
105     int
106     key_string_get_modifiers(const char **string)
107     {
108         int modifiers;
109         
110         modifiers = 0;
111         while (((*string)[0] != '
106     /* Key modifier bits. */
107     #define KEYC_ESCAPE 0x2000
108     #define KEYC_CTRL 0x4000
109     #define KEYC_SHIFT 0x8000
110     #define KEYC_PREFIX 0x10000 
') && (*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 }

Na superfície, não parece muito difícil de modificar; talvez um fim de semana (famosas últimas palavras;)) projeto?

    
por 06.09.2010 / 05:38
2

Não consegui definir um prefixo para uma chave modificadora personalizada, mas consegui definir ligações tmux em combinação com uma chave modificadora personalizada sob o Gnome em combinação com o 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 do tmux em combinação com, por exemplo, a tecla do Windows. Algo ao longo dessas linhas funciona para qualquer gerenciador de janelas que permita definir atalhos de teclado globais (Compiz, KWin, etc.).

    
por 02.03.2011 / 00:57
-1

Parece que você quer isso: link

    
por 23.11.2011 / 13:34