web-dev-qa-db-fra.com

Faire défiler la sortie Shell avec la souris dans tmux

Le défilement à la souris ne fonctionne pas dans tmux comme cela fonctionne lorsque je lance Shell sans tmux (dans Gnome Terminal). Il semble que tmux envoie les événements de défilement de la souris comme si j’appuyais sur les touches haut/bas. Mais je veux qu'il défile si l'historique sortie du shell. Existe-t-il un moyen de faire fonctionner tmux comme ceci?

Note: Je sais faire défiler avec le clavier (grâce à une autre question ici).

J'ai essayé le défilement à la souris dans deux versions de tmux:

243
user31494

Pour faire défiler l'historique de la sortie Utilisez ^b + [ Vous pouvez ensuite utiliser M + V pour monter de page et ^ V pour descendre de page. Je ne sais pas si vous pouvez utiliser le réel PgUp et PgDown bien que. Mon terminal n'envoie pas ces clés au tmux. Au lieu de cela, il fait défiler lui-même et non pas l'historique.

Pour quitter le mode copie, appuyez sur ESC.

Pour utiliser votre souris dans ce mode (appelé mode copie), appuyez sur ^b + : et entrez les informations suivantes:

setw -g mouse on

Remarque: Dans tmux <2.1, l'option s'appelait mode-mouse et non mouse.

Maintenant, lorsque vous passez en mode copie, vous pouvez utiliser votre souris pour le faire défiler. Vous pouvez mettre cette commande dans votre ~/.tmux.conf si vous voulez, afin qu'elle se charge à chaque fois que vous exécutez tmux.

Mise à jour: À partir de tmux 1.5, cette option permet de passer automatiquement de la molette de défilement en mode copie et de faire défiler le tampon de défilement tmux en arrière. Il n'est plus nécessaire d'appuyer d'abord sur Ctrl-B + [. Le retour en arrière à l'invite met également fin au mode copie automatiquement.

233
Pavlo

Il y a quelques changements pour Tmux 2.1

  • Le mode souris a été réécrit. Il n'y a plus d'options pour:

    • volet de redimensionnement de la souris
    • volet de sélection de la souris
    • fenêtre de sélection de la souris
    • mode-souris

    Au lieu de cela, il n'y a qu'une seule option: "souris" qui active complètement le support de la souris.

Ce serait

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

La version actuelle de tmux (1.5) vous permet simplement d'activer l'option mode-souris et vous permet de faire défiler l'écran avec la molette de la souris.

         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.

Dans mon .tmux.conf:

set-window-option -g mode-mouse on
62
bukzor

Essayez ceci dans votre .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

Tiré de http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY

52
John L. Jegutanis

Quelqu'un (d'une source que j'ai perdue) a suggéré d'ajouter ce qui suit à ~.tmux.conf:

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

Je ne sais pas du tout comment cela fonctionne, mais cela me permet maintenant de faire défiler avec la molette de la souris à l'intérieur d'une session tmux sans avoir à passer en mode copie de tmux; Je viens de faire défiler la roue et BAM! Ça marche. Notez que j'utilise terminal.app, mais je me souviens que l'OP a donné la réponse à utiliser spécifiquement avec gnome-terminal.

14
Jed Daniels

tmux 2.1 introduit de nouvelles liaisons de souris.

J'ai écrit ces liens tout à l'heure aujourd'hui. Il lie de façon transparente la molette de la souris aux flèches lorsque vous ne vous trouvez pas dans Vim, car Vim est capable d’interpréter les codes bruts de la molette de la souris (pour choisir la fenêtre Vim à faire défiler pour vous en fonction de la souris sur laquelle est placée votre souris).

Cela signifie que nous pouvons enfin utiliser la souris uniquement pour afficher plusieurs pages de manuel et tout ce qui est compatible avec les touches fléchées. Vous pouvez étendre et chaîner la logique if si nécessaire pour implémenter plus de logique pour vos applications.

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"

Avec cette nouvelle fonctionnalité de reliure à molette, il est possible de programmer la molette de la souris pour appliquer tout comportement contextuel que vous aimez.

5
Steven Lu

Gnome-terminal fait de super astuces en traduisant les événements de défilement de la souris en touches fléchées Haut et Bas dans des conditions de défilement "habituel" restreint. Par exemple, lorsque vous affichez du texte à l'aide de less (cela se produit en particulier lorsque vous lisez un homme), vous pouvez faire défiler le contenu à l'aide de j, k et des touches de direction. Mais aussi , avec gnome-terminal, vous pouvez le faire avec le défilement à la souris, grâce au truc mentionné.

Donc, je suppose que tmux effectue une "capture" du terminal de la même manière que less - et que le même mécanisme dans gnome-terminal entre en action: le défilement de la souris se traduit par une pression sur les touches fléchées haut/bas.

Vous pouvez désactiver cette fonctionnalité dans les paramètres de profil et obtenir le défilement régulier en toutes circonstances. Désélectionnez simplement la dernière case à cocher dans l'onglet "Défilement": the checkbox.

3
ulidtko

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

Implémentation configurable et riche en fonctionnalités du contrôle de la souris pour les nouveaux tmux. hautement recommandé.

Vous voulez probablement utiliser

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

avec elle aussi.

1
Steven Lu

Vous pouvez combiner les idées de reliure des autres réponses pour obtenir un comportement de défilement assez satisfaisant: travailler dans vim change automatiquement le mode de copie dans le terminal et le quitter lorsque vous atteignez le bas vous permet toujours d’utiliser votre molette de souris en mode homme, less et journal.

Mon code:

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

vous pouvez ajouter d'autres commandes nécessitant des touches de direction pour le défilement dans la partie grep -e 'man'

j'ai ajouté les touches d'envoi plusieurs fois, donc une coche sur la molette de la souris fera défiler 4 lignes à la fois.

0
stealz