Role a saída do shell com o mouse no tmux

228

A rolagem do mouse não funciona no tmux como funciona quando eu executo o shell sem o tmux (no Terminal do Gnome) . Parece que o tmux envia eventos de rolagem do mouse como se eu tivesse pressionado as teclas Acima / Abaixo. Mas eu quero rolar pelo histórico output do shell. Existe uma maneira de fazer o tmux funcionar assim?

Nota: eu sei como rolar com o teclado (graças a outra pergunta aqui.

Eu tentei mouse rolando em duas versões do tmux:

por user31494 12.11.2010 / 15:02

9 respostas

214

Para percorrer o histórico da saída, você usaria ^b + [ Você pode então usar M + V para subir de página e ^ V para baixo. Eu não sei se você pode usar o verdadeiro PgUp e PgDown . Meu terminal não envia essas chaves para o tmux. Em vez disso, ele se rola e não o histórico do tmux.

Para sair do modo de cópia, pressione ESC

Para usar o mouse neste modo (chamado modo de cópia), pressione ^b + : e digite o seguinte:

setw -g mouse on

Nota: no tmux < 2.1, a opção foi denominada mode-mouse e não mouse

Agora, quando você mudar para o modo de cópia, você pode usar o mouse para percorrê-lo. Você pode colocar este comando em seu ~ / .tmux.conf se você quiser que ele carregue toda vez que você executar o tmux.

Atualização: A partir do tmux 1.5, esta opção faz com que o uso da roda de rolagem automaticamente mude para o modo de cópia e role de volta o buffer de rolagem do tmux. Não é necessário primeiro atingir Ctrl-B + [ . Rolando de volta para o prompt também finaliza o modo de cópia automaticamente.

    
por 01.12.2010 / 19:48
114

Existem algumas mudanças para o Tmux 2.1

  • O modo do mouse foi reescrito. Não há mais opções para:

    • mouse-redimensionar-painel
    • mouse-select-pane
    • janela de seleção do mouse
    • mode-mouse

    Em vez disso, há apenas uma opção: 'mouse' que ativa o suporte do mouse inteiramente.

Isso seria

set -g mouse on
# to enable mouse scroll, see https://github.com/tmux/tmux/issues/145#issuecomment-150736967
bind -n WheelUpPane if-shell -F -t = "#{mouse_any_flag}" "send-keys -M" "if -Ft= '#{pane_in_mode}' 'send-keys -M' 'copy-mode -e'"
    
por 19.10.2015 / 13:02
61

A versão atual do tmux (1.5) permite que você simplesmente configure a opção mode-mouse e permite que você role com a roda do mouse.

         mode-mouse [on | off]
                 Mouse state in modes.  If on, the mouse may be used to
                 enter copy mode and copy a selection by dragging, to
                 enter copy mode and scroll with the mouse wheel, or to
                 select an option in choice mode.

No meu arquivo .tmux.conf:

set-window-option -g mode-mouse on
    
por 15.11.2011 / 21:05
51

Tente isso no seu arquivo .tmux.conf

# Make mouse useful in copy mode
setw -g mode-mouse on

# Allow mouse to select which pane to use
set -g mouse-select-pane on

# Allow xterm titles in terminal window, terminal scrolling with scrollbar, and setting overrides of C-Up, C-Down, C-Left, C-Right
set -g terminal-overrides "xterm*:XT:smcup@:rmcup@:kUP5=\eOA:kDN5=\eOB:kLFT5=\eOD:kRIT5=\eOC"

# Scroll History
set -g history-limit 30000

# Set ability to capture on start and restore on exit window data when running an application
setw -g alternate-screen on

# Lower escape timing from 500ms to 50ms for quicker response to scroll-buffer access.
set -s escape-time 50

Extraído do link

    
por 24.10.2012 / 18:55
14

Alguém (de uma fonte que perdi) sugeriu adicionar o seguinte a ~.tmux.conf :

set -g terminal-overrides 'xterm*:smcup@:rmcup@'

Não tenho ideia de como funciona ou o que faz, mas isso agora me permite rolar com a roda do mouse dentro de uma sessão do tmux sem ter que entrar no modo de cópia do tmux; Eu apenas rodo a roda e BAM! funciona. Note que estou usando o terminal.app, mas lembro que o OP deu a resposta especificamente para uso com gnome-terminal .

    
por 22.06.2011 / 19:10
5

O tmux 2.1 introduz novas ligações de mouse.

Eu escrevi essas ligações agora mesmo hoje. Ele une a roda do mouse às setas quando não está no Vim, porque o Vim é capaz de interpretar os códigos brutos do mouse (para escolher qual janela do Vim percorrer para você, dependendo de qual o mouse acabou).

Isso significa que podemos finalmente usar o mouse apenas para visualizar várias páginas de manual e o que mais aceitar teclas de seta. Você pode estender e encadear a lógica if conforme necessário para implementar mais lógica para seus aplicativos.

bind -n WheelUpPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Up"
bind -n WheelDownPane if "[[ #{pane_current_command} =~ vim ]]" "select-pane -t = ; send-keys -M" "select-pane -t = ; send-keys Down"

Com esse novo recurso de ligação de roda, é possível fazer o script da roda do mouse para fazer qualquer comportamento sensível ao contexto de que você goste.

    
por 16.12.2015 / 00:44
3

O Gnome-terminal faz alguns truques que traduzem os eventos de rolagem do mouse para as teclas de seta para cima e para baixo em condições de rolagem "usual" restrita. Por exemplo, quando você visualiza algum texto usando less (isso acontece em particular quando você está lendo um homem), você pode rolar o conteúdo usando j , k e teclas de seta. Mas também , com gnome-terminal , você pode fazer isso com a rolagem do mouse, graças ao truque mencionado.

Então eu acho que tmux faz algumas "capturas" do terminal como less - e o mesmo mecanismo em gnome-terminal entra em ação: a rolagem do mouse se traduz em teclas de seta para cima / para baixo.

Você pode desativar esse recurso nas configurações de perfil e obter a rolagem normal em qualquer circunstância. Apenas desmarque a última caixa de seleção na aba "rolagem": .

    
por 07.12.2010 / 08:03
0

link

Implementação configurável e rica em recursos de controle de mouse para novos tmuxes. altamente recomendado.

Você provavelmente quer usar

set -g @emulate-scroll-for-no-mouse-alternate-buffer "on"

com isso também.

    
por 03.01.2018 / 00:48
0

Você pode combinar as ideias de ligação das outras respostas para obter um comportamento de rolagem satisfatório: trabalha no vim muda para o modo de cópia automaticamente no terminal e sai quando você alcança o fundo ainda permite que você use sua roda do mouse em man, less e journalctl.

Meu código:

bind -n WheelUpPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Up Up Up Up"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"
bind -n WheelDownPane if -t = "test $(echo #{pane_current_command} |grep -e 'man' -e 'less' -e 'journalctl')" "select-pane -t = ; send-keys Down Down Down Down"  "if-shell -F -t = '#{?mouse_any_flag,1,#{pane_in_mode}}' 'send-keys -M' 'select-pane -t = ; copy-mode -e; send-keys -M'"

você pode adicionar outros comandos que exigem teclas de seta para rolar na parte grep -e 'man'

Eu adicionei as send-keys várias vezes, então um tick na roda do mouse rolará 4 linhas de cada vez

    
por 13.02.2018 / 00:02

Tags