Question Faire défiler la sortie du shell avec la souris dans tmux


Le défilement de la souris ne fonctionne pas dans tmux la façon dont cela fonctionne lorsque je lance shell sans tmux (dans le terminal Gnome). Il semble que tmux envoie des événements de défilement de la souris comme si j'appuyais sur les touches Haut / Bas. Mais je veux qu'il défile dans la coquille sortie histoire. Est-il possible de faire fonctionner tmux comme ça?

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

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


222
2017-11-12 14:02


origine


Je pense que la réponse de bukzor résout votre problème pour tmux 1.5 et plus récent. - kynan


Réponses:


Pour faire défiler l'historique de la sortie que vous utiliseriez ^b + [  Vous pouvez ensuite utiliser M + V pour augmenter la page et ^ V pour la page suivante. Je ne sais pas si vous pouvez utiliser le vrai PgUp et PgDown bien que. Mon terminal n'envoie pas ces clés au tmux. Au lieu de cela, il se défile et non pas l’historique du tmux.

Pour quitter le mode de copie, appuyez sur ESC

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

setw -g mouse on

Note: Dans tmux <2.1, l’option a été nommée mode-mouse, et pas mouse

Maintenant, lorsque vous changez de mode de copie, vous pouvez utiliser votre souris pour la faire défiler. Vous pouvez mettre cette commande dans votre fichier ~ / .tmux.conf si vous le souhaitez pour le charger à chaque fois que vous exécutez tmux.

Mettre à jour: Depuis tmux 1.5, cette option permet d'utiliser automatiquement la molette de défilement en mode copie et de faire défiler le tampon de défilement tmux. Il n'est pas nécessaire de frapper d'abord Ctrl-B + [ plus Revenir à l'invite permet également de mettre automatiquement fin au mode copie.


206
2017-12-01 18:48



Notez que vous devrez peut-être recharger le fichier de configuration si vous avez déjà un serveur tmux en cours d'exécution. blog.sanctum.geek.nz/reloading-tmux-config  fichier source tmux ~ / .tmux.conf - Allan Nienhuis
Ne pas travailler pour moi sur OS X. - Ain
@Ain - Il existe maintenant 11 versions principales d'OS X. De quelle version parle-t-on exactement? - Ramhound
Pour tmux> = 2.1, voir la réponse de @DannyRe (actuellement assez loin en bas). - Joel Ostblom
set -g mouse on travaillé pour moi sur macOS tmux 2.1 - Miguel Mota


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: la souris qui active le support de la souris. entièrement.

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

111
2017-10-19 11:02



Merci, maintenant, en sélectionnant les volets, etc., mais pas le défilement. Pour que le défilement fonctionne à nouveau, utilisez ceci: github.com/NHDaly/tmux-scroll-copy-mode - Mahdi
génial - cela fonctionne même sur cygwin - tmux sur WINDOWS 7 - WD11
@Mahdi Cela ne semble pas fonctionner sur osx. Des indices? - SolidSnake
@SolidSnake: Je ne me souviens pas avoir rencontré de problèmes en utilisant ce plugin. Cela a bien fonctionné, j'ai activé le mode souris puis je l'ai installé. Vous devriez recharger votre configuration de tmux en utilisant tmux source-file ~/.tmux.conf - Mahdi
bind ne semble plus être nécessaire sur tmux 2.3 - Theron Luhn


La version actuelle de tmux (1.5) vous permet simplement d'activer l'option mode-mouse et de faire défiler 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 fichier .tmux.conf:

set-window-option -g mode-mouse on

61
2017-11-15 20:05



C'est le comportement que vous voulez vraiment! Défilement de la souris permettant le mode de copie, et pas seulement le tampon alternatif du shell. C'était finalement l'incitation à passer de écran à tmux pour moi. Existe-t-il une option pour obtenir le même comportement avec Shift + PgUp? - kynan
@kynan: Personnellement, je presse juste C-A PgUp pour faire ça. Vous pouvez lier la clé de page directement avec tmux bind-key -n PPage copy-mode -u. La même chose devrait fonctionner pour shift + pageup si vous le détachez de votre terminal local. - bukzor
Cela se traduit par un comportement étrange où, lorsque je reviens à la ligne de commande, j'obtiens un caractère supplémentaire inséré dans la CLI, ce qui entraîne généralement un mauvais fonctionnement de ma première commande. C'est assez ennuyant. - Chris R
Notez que, même si cela fonctionne bien pour déclencher le défilement avec la souris, cela provoque un comportement étrange lors de la sélection du texte à coller avec un clic du milieu. J'ai fini par pringering C-b pg-up / down (le défaut) puisque le compromis n'était pas acceptable. - h7r
@ChrisR Je comprends cela un peu et ce n'est pas tout à fait cohérent. Est-ce un [M [M # [M [M # [M [M [[M [M type de chaîne? - Elijah Lynn


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

Pris à partir de http://brainscraps.wikia.com/wiki/Extreme_Multitasking_with_tmux_and_PuTTY


51
2017-10-24 16:55



+1 pour escape-time réglage - Dakusan


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 n'ai aucune idée de la façon dont cela fonctionne ou de ce qu'il fait, mais cela me permet maintenant de faire défiler la molette de la souris dans une session tmux sans avoir à entrer dans le mode de copie de tmux; Je fais juste 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 spécifiquement pour gnome-terminal.


14
2018-06-22 17:10



Jed, merci! Votre conseil fonctionne aussi dans gnome-terminal. Je vais essayer d'utiliser cette configuration pendant un certain temps. Mais il a un inconvénient: le défilement de la souris ne fonctionne plus comme prévu dans less. Si je charge less à l'intérieur tmux, le défilement de la souris ne fait pas défiler le fichier ouvert dans less. Il fait défiler tout le terminal. Étrangement, vim se comporte comme prévu à l'intérieur tmux avec votre configuration. - user31494
Notez qu'à partir de tmux 1.5, cela est remplacé par le setw -g mode-mouse on option, qui ne copie le mode défilement avec la molette de la souris. - kynan
L'explication est que cette option désactive le verrouillage de défilement sur l'écran alternatif du terminal, ce qui est souhaitable dans la plupart des cas puisque les applications demandant le tampon d'écran alternatif (vi, less, tmux etc.) fournissent leurs propres fonctions de défilement. Le remplacement de ce verrou dans tmux permet le défilement le tampon d'écran alternatif du terminal ce qui ne donne pas le résultat souhaité dans presque tous les cas. Voir cette réponse pour une citation de man xterm expliquant l'écran alternatif. - kynan
Hélas, cela ne fonctionne pas dans iTerm - Suan
J'ai eu des résultats positifs avec cela dans iTerm 2 - Keith Smiley


tmux 2.1 introduit de nouvelles liaisons de souris.

J'ai écrit ces liens juste maintenant aujourd'hui. Il lie de manière transparente la molette de la souris aux flèches lorsqu'il n'est pas dans Vim, car Vim est capable d'interpréter les codes de molette de la souris brute (par exemple, choisir la fenêtre Vim à défiler en fonction de votre souris).

Cela signifie que nous pouvons enfin utiliser la souris uniquement pour voir plusieurs pages de manuel et tout ce qui accepte les touches fléchées. Vous pouvez étendre et enchaîner les if la logique 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 liaison de roue, il est possible de créer un script sur la molette de la souris pour effectuer tout comportement sensible au contexte que vous aimez.


5
2017-12-15 23:44



Je suis maintenant en train de jongler avec l'idée de faire faire à mousewheel sur la bordure de la fenêtre quelque chose d'intéressant. Ce que je ferai probablement, ce n’est pas de mapper la roue à la frontière, mais de la mapper pour faire défiler les fenêtres tmux une fois que la ligne d’état est terminée. - Steven Lu
Quel est le lien vers votre Github? Je voudrais rester au courant de vos efforts! Une autre fonctionnalité que je recherche est de faire un double-clic pour copier le mot dans le presse-papier X, comme en dehors de Tmux. - joeytwiddle
@joeytwiddle Je recommande vivement github.com/NHDaly/tmux-better-mouse-mode, voir mon autre réponse - Steven Lu


Gnome-terminal effectue de la supercherie 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 restreint "habituel". Par exemple, lorsque vous affichez du texte en utilisant less (cela se produit en particulier lorsque vous lisez un homme), vous pouvez faire défiler le contenu en utilisant j, ket les touches fléchées. Mais aussi, avec gnome-terminal, vous pouvez le faire avec le défilement de la souris, grâce à l'astuce mentionnée.

Donc je suppose tmux fait une "capture" du terminal comme less - et le même mécanisme dans gnome-terminal coups de pied: le défilement de la souris se traduit par des 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écochez simplement la dernière case dans l'onglet "défilement": the checkbox.


3
2017-12-07 07:03



Merci pour l'explication, Uldtko! Mais cela ne facilite pas le problème de défilement de la souris. Oui, avec l'option désactivée, gnome-terminal arrête l'envoi triple ^[[A et ^[[B sur le défilement de la souris. C'est plus beau tmux (pas moche ^[[A^[[A^[[A dans certains programmes, pas de défilement de l'historique des commandes), mais maintenant less arrête de faire défiler le défilement de la souris. - user31494
Ukrainien? (deviner par le ipersonnages) - dotancohen


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.


0
2018-01-02 23:48





Vous pouvez combiner les idées de liaison des autres réponses pour obtenir un comportement de défilement assez satisfaisant: travaille dans vim passe automatiquement en mode copie dans le terminal et le quitte lorsque vous atteignez le bas vous permet toujours d'utiliser votre mousewheel dans man, less et journalctl.

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 fléchées pour faire défiler la partie grep -e 'man'

J'ai ajouté les touches d'envoi plusieurs fois, de sorte qu'une coche sur la molette de défilement fera défiler 4 lignes à la fois.


0
2018-02-12 23:02