O tmux não passa corretamente sequências de seta de deslocamento ctrl

2

O tmux não passa corretamente as seqüências de seta de deslocamento do ctrl. Ele não funciona no emacs, e quando eu uso sed -n l , vejo que a sequência de escape da tecla de seta é exibida sozinha, em vez da sequencia completa

Por exemplo, ctrl-shift-right passa como ^[[C (que é o mesmo que a seqüência de escape da tecla direita), em vez de ^[OC (fora do tmux).

Alguma ideia de como resolver isso? Note que a tecla ctrl-arrow (sem shift) e a shift-arrow (sem ctrl) passam corretamente.

Meu arquivo .tmux.conf é:

# Changes prefix from Ctrl-b to Alt-a
unbind C-b
set -g prefix M-a

set-option -g default-terminal "xterm-256color"




# choosing windows with Alt-#
bind -n M-0 select-window -t 0
bind -n M-1 select-window -t 1
bind -n M-2 select-window -t 2
bind -n M-3 select-window -t 3
bind -n M-4 select-window -t 4
bind -n M-5 select-window -t 5
bind -n M-6 select-window -t 6
bind -n M-7 select-window -t 7
bind -n M-8 select-window -t 8
bind -n M-9 select-window -t 9


setw -g monitor-activity on
set -g visual-activity on

set-window-option -g window-status-current-bg white

set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on


# Toggle mouse on
bind m \
    set -g mode-mouse on \;\
    set -g mouse-resize-pane on \;\
    set -g mouse-select-pane on \;\
    set -g mouse-select-window on \;\
    display 'Mouse: ON'

# Toggle mouse off
bind M \
    set -g mode-mouse off \;\
    set -g mouse-resize-pane off \;\
    set -g mouse-select-pane off \;\
    set -g mouse-select-window off \;\
    display 'Mouse: OFF'

# disable selecting panes with mouse (because enabling mess with copy-paste)
set-option -g mouse-select-pane off


# display status bar message for 4 sec
set-option -g display-time 4000


# Start windows and panes at 1, not 0
set -g base-index 1
set -g pane-base-index 1


# enable shift-arrow keys
set-window-option -g xterm-keys on

# start default shell
set-option -g default-shell $SHELL

# support for escape char for vi
set -s escape-time 0
    
por Yuval Atzmon 05.02.2016 / 18:26

1 resposta

2

Parece que tmux está fazendo a coisa certa para o seu exemplo:

For example, ctrl-shift-right passes as ^[[C (which is the same as the escape sequence of the right key), instead of ^[OC (outside tmux).

porque a conotação usual dessa sequência é que é o mesmo que o movimento do cursor enviado do host. Um parâmetro zero é o mesmo que um parâmetro ausente, que é um .

O terminal não foi identificado; xterm não faz isso. Para controle deslocamento seta para a direita , xterm pode enviar ^[[1;6C . Nesse caso, tmux absorve a seqüência de escape enviada, porque não está na tabela de chaves conhecidas no estilo xterm que ela conhece. Em tmux , o arquivo xterm-keys.c contém uma tabela com o comentário:

/*                                                     
 * xterm-style function keys append one of the following values before the last
 * character:
 *
 * 2 Shift
 * 3 Alt
 * 4 Shift + Alt                               
 * 5 Ctrl
 * 6 Shift + Ctrl
 * 7 Alt + Ctrl
 * 8 Shift + Alt + Ctrl
 *
 * Rather than parsing them, just match against a table.
 *
 * There are three forms for F1-F4 (\033O_P and \033O1;_P and \033[1;_P).
 * We accept any but always output the latter (it comes first in the table).
 */
    
por 05.02.2016 / 23:24