2010-11-12 14:02:16 +0000 2010-11-12 14:02:16 +0000
271
271

Scorrere l'uscita della shell con il mouse in tmux

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

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

Ho provato lo scorrimento con il mouse in due versioni di tmux:

Risposte (10)

264
264
264
2010-12-01 18:48:45 +0000

Per scorrere all'interno della cronologia dell'output useresti ^b + [ Puoi poi usare M+V per andare su e ^V per andare giù. Non so se puoi usare i veri PGUp e PGDown però. Il mio terminale non invia questi tasti al tmux. Invece fa scorrere se stesso e non la cronologia del 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 si chiamava mode-mouse, e non mouse

Ora quando si passa alla modalità copia si può usare il mouse per scorrerla. Puoi mettere questo comando nel tuo ~/.tmux.conf se vuoi, così da caricarlo ogni volta che lanci tmux.

Aggiornamento: A partire da tmux 1.5 questa opzione fa sì che usando la rotella di scorrimento si passi automaticamente alla modalità copia e si scorra indietro il buffer di scrollback di tmux. Non è più necessario premere prima Ctrl-B + [. Scorrere indietro fino al prompt termina automaticamente anche la modalità copia.

127
127
127
2015-10-19 11:02:01 +0000

Ci sono alcuni cambiamenti per Tmux 2.1

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

che 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'"
64
64
64
2011-11-15 20:05:50 +0000

La versione attuale di tmux (1.5) permette semplicemente di impostare l'opzione mode-mouse su on, e permette di scorrere con la rotella 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
59
59
59
2012-10-24 16:55:07 +0000

Provate questo nel vostro .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

preso da http://brainscraps.wikia.com/wiki/ExtremeMultitaskingcontmuxe_PuTTY

16
16
16
2011-06-22 17:10:05 +0000

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

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

Non ho idea di come funzioni o cosa faccia, ma questo ora mi permette di scorrere con la rotella del mouse all'interno di una sessione tmux senza dover entrare nella modalità copia di tmux; devo solo scorrere la rotella e BAM! funziona. Notare che sto usando terminal.app, ma ricordo che l'OP ha dato la risposta specificamente per l'uso con gnome-terminal.

5
5
5
2015-12-15 23:44:29 +0000

tmux 2.1 introduce nuovi binding del mouse.

Ho scritto questi binding proprio oggi. Si lega senza soluzione di continuità la rotella del mouse alle frecce quando non si è in Vim, perché Vim è in grado di interpretare i codici grezzi della rotella del mouse (per scopi come scegliere quale finestra di Vim scorrere per voi a seconda di quale si trova sopra il vostro mouse).

Questo significa che possiamo finalmente usare il mouse solo per visualizzare più pagine man e qualsiasi altra cosa accetti i tasti freccia. Potete estendere e concatenare la logica di if come necessario per implementare più logica per le vostre 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 capacità di legare la rotellina del mouse è possibile scriptarla per fare qualsiasi comportamento sensibile al contesto che si voglia.

5
5
5
2019-04-23 15:29:55 +0000

Se siete già in una sessione tmux potete eseguire il comando

set mouse on

Promemoria: per eseguire i comandi, usate il vostro prefisso e poi :.

3
3
3
2010-12-07 07:03:31 +0000

Gnome-terminal fa qualche bel trucco traducendo gli eventi di scorrimento del mouse in tasti freccia su e giù in condizioni di limitato scorrimento “usuale”. Per esempio, quando si visualizza del testo usando less (questo accade in particolare quando si sta leggendo un uomo), si può scorrere il contenuto usando j, k, e i tasti freccia. Ma anche, con gnome-terminal, potete farlo con lo scorrimento del mouse, grazie al trucco menzionato.

Quindi credo che tmux faccia un po’ di “cattura” del terminale proprio come less - e lo stesso meccanismo di gnome-terminal entra in gioco: lo scorrimento del mouse si traduce nella pressione dei tasti freccia su/giù.

Puoi disattivare questa caratteristica nelle impostazioni del profilo e ottenere lo scorrimento regolare in ogni circostanza. Basta deselezionare l'ultima casella di controllo nella scheda “scrolling”:

.

1
1
1
2018-01-02 23:48:52 +0000

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

Implementazione configurabile e ricca di funzionalità del controllo del mouse per i tmux più recenti. altamente raccomandato.

Probabilmente vorrete usare anche

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

con esso.

0
0
0
2018-02-12 23:02:10 +0000

È possibile combinare le idee di binding dalle altre risposte per ottenere un comportamento di scorrimento abbastanza soddisfacente: funziona in vim cambia in modalità di copia automaticamente nel terminale ed esce quando si raggiunge il fondo consente ancora di utilizzare 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'"

potete aggiungere altri comandi che richiedono i tasti freccia per lo scorrimento nella parte grep -e ‘man’

ho aggiunto i tasti di invio più volte, così un tocco sulla rotellina del mouse farà scorrere 4 righe alla volta