Algumas mudanças + setas não funcionam no tmux?

3

Estou tentando personalizar o tmux para que

  • Ctrl-Arrows são usadas para seleção de painéis
  • As setas de deslocamento são usadas para redimensionar o painel
  • Alt-Arrows (esquerda, direita) são usadas para seleção de janela

... todos estão funcionando corretamente, exceto Shift-Up e Shift-Down. (Curiosamente, Shift-Left e Shift-Right funcionam como esperado).

Isto está executando o tmux 2.0 dentro do xfce4-terminal (embora eu também tenha visto este problema no Ubuntu, usando o programa de terminal padrão do Ubuntu.)

Existe algo que não estou fazendo corretamente? Aqui está todo o conteúdo do meu arquivo .tmux.conf:

# split <h>orizontal and <v>ertical
bind-key h split-window -v
bind-key v split-window -h

# Use Ctrl-arrow keys without prefix key to switch panes
bind -n C-Up    select-pane -U
bind -n C-Down  select-pane -D
bind -n C-Left  select-pane -L
bind -n C-Right select-pane -R

# Use Shift-arrow keys without prefix key to resize panes
bind -n S-Up    resize-pane -U
bind -n S-Down  resize-pane -D
bind -n S-Left  resize-pane -L
bind -n S-Right resize-pane -R

# Use Alt-arrow keys without prefix key to switch windows
bind -n M-Left  previous-window
bind -n M-Right next-window

# No delay for escape key press
set -sg escape-time 0

# Reload tmux config
bind-key r source-file ~/.config/.tmux.conf \; display-message "Configuration reloaded"
    
por Ryan V. Bissell 08.05.2015 / 07:46

1 resposta

3

É improvável que o problema esteja relacionado a alguma diferença no modo de aplicação versus modo normal , porque xterm envia a mesma sequência de caracteres para teclas de cursor deslocadas e não-deslocadas .

Uma pista para o problema é que os vários itens ctrl são todos recursos estendidos xterm . tmux usa algumas tabelas:

  • um lista chaves especiais que provavelmente não serão encontradas em uma entrada de terminal
  • as outras capacidades do terminal de listas que podem ser obtidas de uma entrada de banco de dados de terminal regular.

Para o último, essas linhas da tabela tmux são relevantes:

    { TTYC_KDN2, TTYCODE_STRING, "kDN" },
    { TTYC_KDN3, TTYCODE_STRING, "kDN3" },
    { TTYC_KDN4, TTYCODE_STRING, "kDN4" },
    { TTYC_KDN5, TTYCODE_STRING, "kDN5" },
    { TTYC_KDN6, TTYCODE_STRING, "kDN6" },
    { TTYC_KDN7, TTYCODE_STRING, "kDN7" },
    { TTYC_KEND, TTYCODE_STRING, "kend" },

    { TTYC_KLFT2, TTYCODE_STRING, "kLFT" },
    { TTYC_KLFT3, TTYCODE_STRING, "kLFT3" },
    { TTYC_KLFT4, TTYCODE_STRING, "kLFT4" },
    { TTYC_KLFT5, TTYCODE_STRING, "kLFT5" },
    { TTYC_KLFT6, TTYCODE_STRING, "kLFT6" },
    { TTYC_KLFT7, TTYCODE_STRING, "kLFT7" },

    { TTYC_KRIT2, TTYCODE_STRING, "kRIT" },
    { TTYC_KRIT3, TTYCODE_STRING, "kRIT3" },
    { TTYC_KRIT4, TTYCODE_STRING, "kRIT4" },
    { TTYC_KRIT5, TTYCODE_STRING, "kRIT5" },
    { TTYC_KRIT6, TTYCODE_STRING, "kRIT6" },
    { TTYC_KRIT7, TTYCODE_STRING, "kRIT7" },
    { TTYC_KUP2, TTYCODE_STRING, "kUP" },
    { TTYC_KUP3, TTYCODE_STRING, "kUP3" },
    { TTYC_KUP4, TTYCODE_STRING, "kUP4" },
    { TTYC_KUP5, TTYCODE_STRING, "kUP5" },
    { TTYC_KUP6, TTYCODE_STRING, "kUP6" },
    { TTYC_KUP7, TTYCODE_STRING, "kUP7" },

    { TTYC_RI, TTYCODE_STRING, "ri" },

A maioria dessas linhas (em tty-term.c ) são xterm extensões. As strings das chaves de cursor deslocadas podem ser fornecidas por "kUP" , "kDN" , "kLFT" , "kRGT" - bem como "kri" e "kind" .

Os dois últimos são problemáticos:

  • tmux tem uma entrada de tabela para "ri" (a cadeia enviada para o terminal) mas nenhuma para "kri" e "kind" (suas teclas de cursor para cima / baixo)
  • porque (n) curses wgetch verá apenas o primeiro recurso com um determinado valor na lista de strings, o banco de dados ncurses define apenas uma possibilidade.
  • kUP e kDN são extensões, não capacidades padrão, então ncurses define "kri" e "kind" , que são padrão.

O problema não está na configuração, mas sim em um simples bug em tmux , que pode ser corrigido adicionando entradas a essa tabela. Algo parecido com isto (não testado) é uma maneira de proceder:

    { TTYC_KUP2, TTYCODE_STRING, "kri" },
    { TTYC_KDN2, TTYCODE_STRING, "kind" },
    
por 08.05.2015 / 12:54

Tags