tmux - role para cima / baixo com shift + página para cima / baixo em um painel

14

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

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

É 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
user1610662
fonte

Respostas:

8

Para rolar para cima, você pode:

bind -n S-Pageup copy-mode -u

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

bind -n S-Up copy-mode -u

Até onde eu sei, depois de pressionar S-Up, você pode continuar usando S-Up ou apenas subir a página para continuar a rolagem para cima. Você pode usar a página para baixo para rolar para baixo. Essas não são exatamente as combinações de teclas que você estava procurando, então 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.

mjwhitta
fonte
Embora bind -n Pageup copy-mode -ume permita pressionar PgUp para entrar no modo de cópia e rolar para cima, não posso usar o PgUp para continuar rolando para cima.
apocryphalauthor
6

Sim, eu sei que essa pergunta é antiga, mas não está tão longe nos resultados do google, e gastei muito tempo para descobrir como fazê-lo simplesmente porque quase nenhum resultado no google continha uma resposta, apenas perguntas.

AFAIK apenas um painel rola quando no modo de cópia. Para entrar no modo de cópia, você pode usar prefix-[e, em seguida, rolar usando C-upe C-downou você pode definir suas próprias combinações de teclas (no arquivo de configuração) que no modo emacs se parecem com:

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

Isso definirá as combinações de teclas Shift+ PageUpe Shift+ PageDownpara rolar meia página para cima, respectivamente, no modo de cópia . Quando você está usando o modo vi, é necessário 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-[poderá adicionar a seguinte linha ao seu arquivo de configuração:

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

Isso abriria o modo de cópia e rolaria uma página (inteira) para cima ao pressionar Shift+ PageUpno modo de edição (modo padrão). Para abrir apenas o modo de cópia sem já rolar uma página, simplesmente omita o -u. E se você quer rolar uma página inteira para cima / baixo ou apenas uma linha que você pode usar as palavras-chave page-up, scroll-upou 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 combinações de teclas padrão.

Max Matti
fonte
1
Não tenho certeza se é a versão do tmuxque estou executando ou não, mas o -tparâmetro não é reconhecido (no entanto, -T funciona) Possível erro de digitação?
Mdip
Muito provavelmente um erro de digitação, mas também não não faz sentido em conjunto com -n, como este é um atalho para-T root
smido
4

Aqui está uma solução que deve funcionar apenas com sua memória muscular, permitindo que você use Shift+ PageUpe Shift+ PageDowncomo 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, desejará habilitar condicionalmente essa ligação ou isso atrapalhará 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 da @ mjwhitta, que é refinada)

Jack Senechal
fonte
+1, mas bind -n Pageup if-shell "$is_vim" "send-keys Pageup" "copy-mode -u; send-keys Pageup"foi necessário para que o Pageup continue rolando para cima em várias impressoras.
79E09796 01/08/19