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

Przewijanie wyjścia powłoki za pomocą myszy w tmux

Przewijanie myszki nie działa w tmux w taki sposób, jak działa, gdy uruchamiam powłokę bez tmuxa (w Terminalu Gnome). Wygląda na to, że tmux wysyła zdarzenia przewijania myszy tak jakbym naciskał klawisze góra/dół. Ale chcę, aby przewijał historię wyjścia powłoki. Czy istnieje sposób, aby tmux działał w ten sposób?

Uwaga: Wiem jak przewijać za pomocą klawiatury (dzięki inne pytanie tutaj).

Próbowałem przewijać myszką w dwóch wersjach tmuxa:

Odpowiedzi (10)

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

Aby przewijać w historii wyjścia użyłbyś ^b + [ Możesz wtedy użyć M+V aby przewijać stronę w górę i ^V aby przewijać stronę w dół. Nie wiem czy możesz użyć prawdziwych PgUp i PgDown. Mój terminal nie wysyła tych klawiszy do tmuxa. Zamiast tego, przewija on sam siebie, a nie historię tmuxa.

Aby wyjść z trybu kopiowania, wciśnij ESC

Aby używać myszki w tym trybie (zwanym trybem kopiowania) wciśnij ^b + : i wprowadź następujące dane:

setw -g mouse on

Uwaga: W tmuxie 2.1 opcja ta nosiła nazwę mode-mouse, a nie mouse

Teraz po przejściu do trybu kopiowania możesz używać myszki do przewijania. Możesz umieścić tą komendę w ~/.tmux.conf, jeśli chcesz, aby ładowała się przy każdym uruchomieniu tmuxa.

Update: Od tmux 1.5 ta opcja powoduje, że użycie kółka przewijania automatycznie przełącza w tryb kopiowania i przewija bufor tmux scrollback. Nie jest już konieczne, aby najpierw uderzyć Ctrl-B + [. Przewijanie w dół do znaku zachęty również automatycznie kończy tryb kopiowania.

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

Jest kilka zmian dla Tmux 2.1

  • Mouse-mode został napisany od nowa. Teraz nie ma już opcji dla:

Byłoby to

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

Obecna wersja tmuxa (1.5) pozwala po prostu ustawić opcję mode-mouse na włączoną, i pozwala na przewijanie kółkiem myszy.

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.

W moim .tmux.conf:

set-window-option -g mode-mouse on
```.
59
59
59
2012-10-24 16:55:07 +0000

Spróbuj tego w swoim .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

Pobrane z http://brainscraps.wikia.com/wiki/ExtremeMultitasking ztmux i_PuTTY

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

Ktoś (ze źródła, które zgubiłem) zasugerował dodanie następującego do ~.tmux.conf:

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

Nie mam pojęcia, jak to działa ani co robi, ale to teraz pozwala mi przewijać kółkiem myszy wewnątrz sesji tmux bez konieczności wchodzenia w tryb kopiowania tmuxa; po prostu przewijam kółko i BAM! to działa. Zauważ, że używam terminal.app, ale pamiętam, że OP dał odpowiedź specjalnie do użycia z gnome-terminal.

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

tmux 2.1 wprowadza nowe bindowanie myszki.

Napisałem te bind'y właśnie dzisiaj. Bezproblemowo wiąże kółko myszy ze strzałkami, kiedy nie jest w Vimie, ponieważ Vim jest w stanie interpretować surowe kody kółka myszy (dla celów takich jak wybór okna Vima do przewijania w zależności od tego, nad którym z nich znajduje się mysz).

Oznacza to, że w końcu możemy używać myszy tylko do przeglądania wielu stron mana i czegokolwiek innego, co akceptuje klawisze strzałek. Możesz rozszerzać i łańcuchować logikę if jak to konieczne, aby zaimplementować więcej logiki dla swoich aplikacji.

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"

Dzięki tej nowej możliwości wiązania kółka, możliwe jest skryptowanie kółka myszy, aby wykonywało dowolne zachowanie zależne od kontekstu.

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

Jeśli jesteś już w sesji tmux, możesz uruchomić komendę

set mouse on

Przypomnienie: aby uruchomić komendy, użyj prefiksu, a następnie :.

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

Gnome-terminal robi pewną zgrabną sztuczkę tłumacząc zdarzenia przewijania myszy na klawisze strzałek w górę i w dół w warunkach ograniczonego “zwykłego” przewijania. Na przykład, gdy oglądasz jakiś tekst używając less (zdarza się to w szczególności, gdy czytasz człowieka), możesz przewijać zawartość używając j, k i klawiszy strzałek. Ale również, z gnome-terminal, można to zrobić za pomocą przewijania myszką, dzięki wspomnianej sztuczce.

Zgaduję więc, że tmux wykonuje pewne “przechwytywanie” terminala tak samo jak less - i ten sam mechanizm w gnome-terminal działa: przewijanie myszką przekłada się na naciskanie klawiszy strzałek góra/dół.

Możesz wyłączyć tę funkcję w ustawieniach profilu i uzyskać regularne przewijanie w każdych okolicznościach. Wystarczy odznaczyć ostatnie pole wyboru w zakładce “przewijanie”:

.

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

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

Konfigurowalna i bogata w funkcje implementacja sterowania myszą dla nowszych tmuxów. wysoce zalecane.

Prawdopodobnie będziesz chciał użyć

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

również z nim.

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

Możesz połączyć wiążące pomysły z innych odpowiedzi, aby uzyskać całkiem satysfakcjonujące zachowanie przewijania: działa w vim zmienia się na tryb kopiowania automatycznie w terminalu i wychodzi z niego po osiągnięciu dna nadal pozwala na użycie kółka myszy w man, less i journalctl.

Mój kod:

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

możesz dodać inne polecenia, które wymagają klawiszy strzałek do przewijania w części grep -e ‘man’

dodałem send-keys wiele razy, więc jedno kliknięcie na kółku myszy przewinie 4 linie naraz