Scorri l'output della shell con il mouse in tmux


256

Lo scorrimento del mouse non funziona in tmux come funziona quando eseguo shell senza tmux (in Gnome Terminal). Sembra che tmux mandi eventi di scorrimento del mouse come se avessi premuto i tasti Su / Giù. Ma voglio che scorra attraverso la cronologia di output della shell . C'è un modo per far funzionare tmux in questo modo?

Nota: so scorrere con la tastiera (grazie a un'altra domanda qui).

Ho provato lo scorrimento del mouse in due versioni di tmux:


1
Penso che la risposta di bukzor risolva il tuo problema con tmux 1.5 e successivi.
kynan,

Risposte:


252

Per scorrere all'interno della cronologia dell'output Dovresti usare ^b+ [ Puoi quindi usare M + V per scorrere verso l'alto e ^ V per scorrere verso il basso. Non so se puoi usare il reale PgUpe PgDowncomunque. Il mio terminale non invia queste chiavi a tmux. Invece scorre se stesso e non la storia di tmux.

Per uscire dalla modalità copia, premere ESC

Per usare il mouse in questa modalità (chiamata modalità copia) premere ^b+ : e inserire quanto segue:

setw -g mouse on

Nota: in tmux <2.1, l'opzione è stata denominata mode-mousee nonmouse

Ora quando passi alla modalità di copia puoi usare il mouse per scorrere attraverso di essa. È possibile inserire questo comando nel proprio ~ / .tmux.conf se lo si desidera, caricandolo ogni volta che si esegue tmux.

Aggiornamento: a partire da tmux 1.5 questa opzione consente di utilizzare automaticamente la rotella di scorrimento per passare alla modalità copia e scorrere indietro nel buffer di scorrimento tmux. Non è necessario prima colpire Ctrl-B+ [più. Scorrendo nuovamente verso il basso fino al prompt, la modalità di copia termina automaticamente.


1
Si noti che potrebbe essere necessario ricaricare il file di configurazione se si dispone già di un server tmux in esecuzione. blog.sanctum.geek.nz/reloading-tmux-config tmux file-sorgente ~ / .tmux.conf
Allan Nienhuis

7
Non funziona per me su OS X.
Ain

2
@Ain - Ora ci sono 11 versioni principali di OS X. Di quale versione stiamo parlando esattamente?
Ramhound,

10
Per tmux> = 2.1, vedi la risposta di @DannyRe (attualmente abbastanza in basso).
Joelostblom,

3
set -g mouse onha lavorato per me su macOS tmux 2.1
Miguel Mota il

123

Ci sono alcune modifiche per Tmux 2.1

  • La modalità mouse è stata riscritta. Ora non ci sono più opzioni per:

    • Mouse-ridimensionamento-lastra di vetro
    • Mouse-select-riquadro
    • Mouse-select-finestra
    • Modalità-topo

    Invece c'è solo un'opzione: 'mouse' che attiva completamente il supporto del mouse.

Sarebbe

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'"

6
Grazie, ora selezionare i riquadri, ecc. Funziona, ma lo scorrimento non funziona. Per far funzionare nuovamente lo scorrimento, utilizzare questo: github.com/NHDaly/tmux-scroll-copy-mode
Mahdi

1
fantastico - funziona anche su cygwin - tmux su WINDOWS 7
GWD

@Mahdi Questo sembra non funzionare su osx. Qualche suggerimento?
DiTTD

2
bindnon sembra più necessario su tmux 2.3
Theron Luhn il

2
+1 per set -g mouse on. Il commento precedente è corretto. Il legame non è più necessario.
Dakusan,

63

La versione corrente di tmux (1.5) consente semplicemente di attivare l'opzione modalità mouse e di scorrere con la rotellina del 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.

Nel mio .tmux.conf:

set-window-option -g mode-mouse on

Questo è il comportamento che vuoi davvero! Lo scorrimento del mouse abilita la modalità copia, non solo lo scorrimento del buffer alternativo della shell. Questo è stato finalmente l'incentivo a passare dallo schermo al cinema per me. Esiste un'opzione per ottenere lo stesso comportamento anche con Shift + PgUp?
kynan,

1
@kynan: Personalmente premo solo C-A PgUpper farlo. È possibile associare il tasto di scorrimento pagina direttamente a tmux bind-key -n PPage copy-mode -u. Il segno simile dovrebbe funzionare per shift + pageup se lo scolleghi dal tuo terminale locale.
bukzor,

1
Ciò si traduce in un comportamento strano in cui, quando torno indietro alla riga di comando, ottengo un carattere aggiuntivo inserito nella CLI, che di solito provoca il mio primo comando non corretto. È abbastanza fastidioso.
Chris R,

Si noti che, tuttavia, ciò funziona correttamente per l'attivazione dello scorrimento con il mouse, provoca un comportamento strano quando si seleziona il testo da incollare con il clic centrale. Ho finito per preferire Cb pg-up / down (impostazione predefinita) poiché il compromesso non era accettabile.
h7r

@ChrisR Lo capisco anche un po 'e non è abbastanza coerente. È un [M [M # [M [M # [M [M # [M [M # [M tipo di stringa?
Elijah Lynn

53

Prova questo nel tuo .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

Tratto da http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY


+1 per l' escape-timeimpostazione
Dakusan,

Per chiunque si stia chiedendo, il file .tmux.conf si trova nella tua home directory.
user2647513

15

Qualcuno (da una fonte che ho perso) ha suggerito di aggiungere quanto segue a ~.tmux.conf:

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

Non ho idea di come funzioni o cosa faccia, ma ora mi permette di scorrere con la rotellina del mouse all'interno di una sessione di tmux senza dover accedere alla modalità di copia di tmux; Scorro la rotella e BAM! Funziona. Nota che sto usando terminal.app, ma ricordo che l'OP ha dato la risposta specificatamente per l'uso con gnome-terminal.


1
Jed, grazie! Il tuo consiglio funziona anche su gnome-terminal. Proverò a utilizzare questa configurazione per qualche tempo. Ma ha uno svantaggio: lo scorrimento del mouse ora non funziona come previsto less. Se carico lessall'interno tmux, lo scorrimento del mouse non scorre il file aperto less. Scorre l'intero terminale. Stranamente, vimsi comporta come previsto all'interno tmuxdella configurazione.
user31494

2
Si noti che a partire da tmux 1.5 questo è sostituito setw -g mode-mouse ondall'opzione, che esegue lo scrollback della modalità copia usando la rotellina del mouse.
kynan,

3
La spiegazione è che questa opzione disabilita il blocco dello scorrimento nella schermata alternativa del terminale, il che è auspicabile nella maggior parte dei casi poiché le applicazioni che richiedono il buffer dello schermo alternativo (vi, less, tmux ecc.) Forniscono le proprie capacità di scorrimento. La sostituzione di questo blocco in tmux consente di scorrere il buffer dello schermo alternativo del terminale che non fornisce il risultato desiderato in tutti tranne alcuni casi. Vedi questa risposta per un preventivo dalla man xtermspiegazione della schermata alternativa.
kynan,

Purtroppo, questo non funziona in iTerm
Suan il

Ho avuto risultati positivi con questo in iTerm 2
Keith Smiley

5

tmux 2.1 introduce nuovi collegamenti del mouse.

Ho scritto questi legami proprio oggi. Associa perfettamente la rotellina del mouse alle frecce quando non è in Vim, perché Vim è in grado di interpretare i codici grezzi della rotellina del mouse (per scopi come la scelta della finestra di Vim da scorrere in base a quale si trova il mouse).

Questo significa che possiamo finalmente usare il mouse solo per visualizzare più pagine man e quant'altro accetta i tasti freccia. È possibile estendere e concatenare la iflogica come necessario per implementare più logica per le proprie applicazioni.

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"

Con questa nuova funzionalità di associazione delle ruote è possibile eseguire lo script della rotellina del mouse per eseguire qualsiasi comportamento sensibile al contesto che ti piace.


Ora sto solo giocando con l'idea di far fare alla rotellina del mouse sul bordo del riquadro qualcosa di interessante. Probabilmente quello che farò non è mappare la ruota sul bordo, ma mapparla per scorrere le finestre di tmux una volta eseguita sulla linea di stato.
Steven Lu,

Qual è il link al tuo Github? Mi piacerebbe tenere il passo con i tuoi sforzi! Un'altra caratteristica che sto cercando è fare doppio clic per copiare la parola negli Appunti X, come fa al di fuori di Tmux.
joeytwiddle,

@joeytwiddle Consiglio vivamente github.com/NHDaly/tmux-better-mouse-mode , vedi la mia altra risposta
Steven Lu

3

Gnome-terminal esegue alcuni trucchi per tradurre gli eventi di scorrimento del mouse in tasti freccia Su e Giù in condizioni di scorrimento "normale" limitato. Ad esempio, quando si visualizza un testo usando less(questo accade in particolare quando stai leggendo un uomo), è possibile scorrere il contenuto utilizzando j, ke tasti freccia. Ma anche , con gnome-terminal, puoi farlo con lo scorrimento del mouse, grazie al trucco citato.

Quindi immagino tmuxfaccia un po 'di "cattura" del terminale proprio come less- e lo stesso meccanismo si gnome-terminalinserisce: lo scorrimento del mouse si traduce in pressioni dei tasti freccia su / giù.

È possibile disattivare questa funzione nelle impostazioni del profilo e ottenere lo scorrimento regolare in qualsiasi circostanza. Basta deselezionare la casella di controllo ultima nella scheda "scrolling": la casella di controllo.


Grazie per la spiegazione, uldtko! Ma non aiuta con il problema di scorrimento del mouse. Sì, con l'opzione disattivata, gnome-terminalinterrompe l'invio di triple ^[[Ae con ^[[Bil mouse. È più bello tmux(niente di brutto ^[[A^[[A^[[Ain alcuni programmi, niente brutti comandi-cronologia-scorrimento), ma ora lesssmette di scorrere con il mouse.
user31494

1
Ukranian? (indovinando dai ipersonaggi)
dotancohen

1

https://github.com/NHDaly/tmux-better-mouse-mode

Implementazione configurabile e ricca di funzionalità del controllo del mouse per nuovi tmux. altamente raccomandato.

Probabilmente vuoi usare

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

con esso anche.


L'ho installato ma non sono più in grado di evidenziare e copiare il testo con il mouse. Sei in grado di farlo?
jonathanking

Sì, probabilmente hai altri tmux config relativi al mouse che sono in conflitto con esso.
Steven Lu

0

Puoi combinare le idee vincolanti delle altre risposte per ottenere un comportamento di scorrimento abbastanza soddisfacente: funziona in vim modifiche automaticamente alla modalità di copia nel terminale ed esce quando raggiungi il fondo ti consente ancora di usare la rotellina del mouse in man, less e journalctl.

Il mio codice:

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'"

puoi aggiungere altri comandi che richiedono i tasti freccia per scorrere nella parte 'man' di grep -e

ho aggiunto più volte i tasti di invio, quindi un segno di spunta sulla rotellina del mouse farà scorrere 4 righe alla volta


0

Se sei già in una sessione di tmux puoi eseguire il comando

set mouse on

Promemoria: per eseguire i comandi, utilizzare quindi il prefisso :.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.