tmux - role para cima / baixo com shift + page para cima / baixo em um painel

12

Eu gostaria de poder rolar para cima / para baixo em um determinado painel com a mesma tecla de atalho que o xterm, ou seja, SHIFT + Page Up / Down.

Por exemplo, se a janela do tmux é dividida em 2 painéis verticais, eu poderia rolar em um dos dois com o teclado enquanto o outro não rola.

É possível?

Aqui está o meu tmux.conf:

set -g status off
set -g prefix C-o
unbind C-b
bind C-o send-prefix

# settings -------------------------------------------------------------

setw -g utf8 on
setw -g xterm-keys on
set -g default-terminal "screen-256color"

set-option -g set-titles on
set-option -g set-titles-string '[#S:#I #H] #W'

# auto-set window title
setw -g automatic-rename
setw -g aggressive-resize on

# vim keybinds
set-option -g status-keys vi
set-window-option -g mode-keys vi

# scroll inside the current pane
#bind-key k page-up
#bind-key l page-down

# mouse
set -g mode-mouse on
setw -g mouse-select-window on
setw -g mouse-select-pane on

# scrollback buffer n lines
set -g history-limit 100000

# fixes shift-pageup/shift-pagedown
set -g terminal-overrides 'xterm*:smcup@:rmcup@'
set -g visual-activity on

# faster key repetition
set -s escape-time 0

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

# alt+directions navigates through panes
bind-key -n M-left select-pane -L
bind-key -n M-right select-pane -R
bind-key -n M-up select-pane -U
bind-key -n M-down select-pane -D
    
por user1610662 15.01.2014 / 20:27

3 respostas

7

Para rolar para cima, você pode fazer:

bind -n S-Pageup copy-mode -u

O texto acima não parece funcionar em um Mac, então testei com:

bind -n S-Up copy-mode -u

Tanto quanto eu posso dizer, depois de pressionar S-Up, você pode continuar usando S-Up ou apenas page-up para manter a rolagem para cima. Você pode usar page-down para rolar para baixo. Estas não são exatamente as combinações de teclas que você estava procurando, então eu peço desculpas. Isso deve aproximar você do seu objetivo, espero.

EDITAR:

Acabei de testar com:

bind -n Pageup copy-mode -u

e isso permite que você use apenas page-up e page-down.

    
por 06.06.2014 / 17:36
4

Sim, eu sei que essa pergunta é antiga, mas não está tão longe nos resultados do Google e passei muito tempo para descobrir como fazer isso simplesmente porque quase nenhum resultado do Google continha uma resposta, apenas perguntas.

AFAIK apenas um painel rola quando está no modo de cópia. Para entrar no modo de cópia você pode usar prefix-[ e depois rolar usando C-up e C-down ou você pode definir seus próprios atalhos de teclado (no arquivo de configuração) que no modo emacs tem esta aparência:

bind-key -t emacs-copy -n S-PPage halfpage-up
bind-key -t emacs-copy -n S-NPage halfpage-down

Isto irá definir as combinações de teclas Shift + PageUp e Shift + PageDown para rolar meia página para cima respectivamente para baixo quando no modo de cópia . Quando você está usando o modo vi, você precisa alterá-lo para algo assim:

bind-key -t vi-copy -n S-PPage halfpage-up
bind-key -t vi-copy -n S-NPage halfpage-down

Agora, se você quiser entrar no modo de cópia "automaticamente" e não quiser usar prefix-[ , adicione a seguinte linha ao seu arquivo de configuração:

bind-key -t root -n S-PPage copy-mode -u

Isto abriria o modo de cópia e rolaria uma página (completa) para cima ao pressionar Shift + PageUp no Modo de Edição (modo padrão). Para abrir apenas o modo de cópia sem rolar uma página, simplesmente omita o -u . E se você quiser rolar uma página inteira para cima / baixo ou apenas uma linha, você pode usar as palavras-chave page-up , scroll-up ou usar um dos comandos

tmux list-keys -t vi-copy
tmux list-keys -t emacs-copy

para ver uma lista completa de opções para usar e atalhos de teclado padrão.

    
por 06.08.2016 / 19:13
2

Aqui está uma solução que deve funcionar apenas com sua memória muscular, permitindo que você use Shift + PageUp e Shift + PageDown como você faria no terminal normal.

bind -n Pageup copy-mode -u
bind -n S-Pageup copy-mode -u
bind -n S-Pagedown send-keys Pagedown

Se você estiver usando o Vim, você vai querer habilitar esta ligação condicionalmente ou isso irá bagunçar as coisas quando você usar PageUp , etc no vim dentro do tmux.

is_vim="ps -o state= -o comm= -t '#{pane_tty}' \
    | grep -iqE '^[^TXZ ]+ +(\S+\/)?g?(view|n?vim?x?)(diff)?$'"
bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u"
bind -n S-Pagedown send-keys Pagedown

(Graças à solução do @mjwhitta, que isso refina)

    
por 08.04.2017 / 08:40