Utilisation de la molette de défilement dans l'écran GNU

255

Comment configurer l'écran GNU pour permettre à la molette de défilement de la souris de défiler dans le tampon de défilement? J'ai essayé de Google à ce sujet, mais la plupart des hits étaient sur la façon d'autoriser les applications à l'intérieur de l'écran à utiliser la molette de défilement.

JesperE
la source
JesperE - Pouvez-vous changer la réponse choisie? Je suis devenu confus, et les commentaires sont corrects, l'autre réponse est bien meilleure.
Geoff
Ne pas utiliser d'écran de nos jours, mais les votes positifs semblent assez convaincants. :)
JesperE

Réponses:

360

Je pense que vous pouvez simplement ajouter une ligne comme celle-ci à votre ~/.screenrc:

termcapinfo xterm* ti@:te@

Où "xterm *" est une correspondance globale de votre TERM actuel. Pour confirmer que cela fonctionne, ^ A ^ D pour vous détacher de votre écran, puis screen -d -rpour le reconnecter, puis lsplusieurs fois, et essayez de revenir en arrière. Ça marche pour moi.


Quelle est cette magie? Eh bien, consultons les pages de manuel.

screen(1) dit:

termcapinfo term terminal-tweaks [window-tweaks]
  [..]
  The first argument specifies which terminal(s) should be affected by this
  definition. You can specify multiple terminal names by separating them with
  `|'s. Use `*' to match all terminals and `vt*' to match all terminals that
  begin with "vt".
  [..]
  Some examples:

      termcap xterm*  LP:hs@

  Informs screen that all terminals that begin with `xterm' have firm
  auto-margins that allow the last position on the screen to be updated (LP),
  but they don't really have a status line (no 'hs' -  append  `@'  to turn
  entries off).  Note that we assume `LP' for all terminal names that start
  with "vt", but only if you don't specify a termcap command for that terminal.

De termcap(5):

String capabilities
    [..]
    te   End program that uses cursor motion
    ti   Begin program that uses cursor motion
Pistos
la source
28
J'ai suivi la suggestion de Pistos, et cela fonctionne partiellement. Comme il le décrit, je peux entrer certaines commandes (pour produire suffisamment de sortie pour faire défiler l'écran), puis utiliser la molette de la souris pour faire défiler les lignes précédentes. En fait, j'utilise l'écran via Konsole dans KDE (xterm à onglets, essentiellement), et la barre de défilement de la fenêtre Konsole fonctionne de la même manière. Mais il y a un problème: si vous basculez entre les fenêtres de l'écran (^ An, ^ Ap), votre tampon de défilement est foiré. Le contenu de toutes les fenêtres dans lesquelles vous basculez sera simplement «glissé» dans votre tampon de défilement. Cela le diminue vraiment.
Ryan B. Lynch,
22
Mais cela défile dans l'historique des commandes. Je veux faire défiler le tampon de sortie.
JesperE
15
@JesperE: Je l'ai également fait défiler l'historique des commandes (j'utilise le terminal GNOME d'Ubuntu). Je l'ai corrigé en allant dans Edition -> Préférences de profil -> Défilement et en décochant "Utiliser les touches pour faire défiler sur un écran alternatif". Notez que j'avais encore besoin d'utiliser le correctif de Pistos.
Michael Krebs
2
En plus de travailler dans OS X Lion, cela fonctionne également dans Putty, iSSH et Prompt (par Panic). Cette ligne doit être présente dans tous les fichiers .screenrc!
funroll
20
Cela permet au défilement dans le terminal de ne pas défiler dans la session écran. C'est-à-dire que si vous travaillez avec des régions divisées ou changez de fenêtre, vous ne pourrez pas revenir en arrière dans cette région et à la place, vous défilerez dans la sortie du terminal et verrez la sortie telle qu'elle était avant de diviser la région ou de changer la fenêtre .
g_daniel
69

Dans l'écran, vous devez d'abord entrer en "mode de défilement" (ou "mode de copie") pour pouvoir faire défiler dans le tampon de défilement: combinaison de touches Ctrl- a Esc, ou Ctrl- a Ctrl- [. Ensuite, vous pouvez faire défiler l'historique à l'aide des touches Haut et Bas (ou Ctrl- b, Ctrl- fpour déplacer une page).

Dans ce mode, votre molette devrait également fonctionner, si elle fonctionne dans d'autres applications. Vous terminez le "mode de défilement" avec Esc.

Quant au défilement du tampon de défilement sans entrer d'abord en mode de défilement, cela n'est probablement pas possible sans modifier l'écran. Je n'ai jamais entendu parler d'un moyen d'accéder au tampon de défilement, en dehors du mode de défilement.

sleske
la source
21
Oui, je connais le mode de défilement. J'espérais que je n'aurais pas à entrer manuellement en mode de défilement pour utiliser la souris. Merci.
JesperE
4
"Mode de défilement" est plutôt un terme non officiel à mon humble avis. :) Ctrl + a Esc entrera en mode copie ; ce mode a toujours été appelé ainsi, car son objectif principal est de permettre de copier du texte dans les deux sens. La possibilité de faire défiler avec la molette de la souris en mode copie (nb. Ne fonctionne pas pour moi) doit plutôt être considérée comme une sorte de "gadget supplémentaire", mais pas comme le but principal de ce mode.
erreur de syntaxe
1
@syntaxerror: Eh bien, les docs l'appellent "mode copie / défilement" et mentionnent un "tampon de défilement" ( gnu.org/software/screen/manual/screen.html#Copy-and-Paste ), donc je suppose que nous ' re tous les deux à droite :-). Quoi qu'il en soit, j'ai ajouté le "mode copie" à ma réponse.
sleske
Génial! Je voulais le faire aussi, mais avant de déranger ces vieilles réponses, je suis connu pour avoir demandé en premier (même si je suis conscient que les règles SO / SE ne le prescrivent pas, mais c'est le problème avec les règles non écrites.)
syntaxerror
Cela aurait dû être la réponse officielle. Merci :)
Linh
24

L'excellent article auquel Jon Z fait référence n'est plus disponible, mais j'ai pu en pêcher la version texte uniquement à partir du cache Google. Je l'enregistre ici au cas où Google abandonnerait cela également à l'avenir. Le message d'origine a été écrit par Mikael Ståldal, donc le crédit est dû.

-

Comment utiliser la molette de la souris dans l'écran GNU

L'écran GNU prend en charge le défilement arrière, mais par défaut, vous devez utiliser des touches maladroites pour l'utiliser. Je voudrais pouvoir utiliser Shift-PageUp, Shift-PageDown et la molette pour faire défiler, tout comme vous pouvez le faire dans xterm.

Il n'a pas été facile de configurer Screen pour cela, et cela implique une coopération avec l'émulateur de terminal. Mais j'ai finalement réussi à trouver une solution qui fonctionne plutôt bien. Ajoutez ceci à votre fichier ~ / .Xresources (vous devez vous déconnecter pour que cela prenne effet):

XTerm*saveLines: 0
XTerm*vt100.translations: #override \n\
  Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  Lock @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  @Num_Lock Ctrl <Btn4Down>: string(0x1b) string("[25S") \n\
  <Btn4Down>: string(0x1b) string("[5S") \n\
  Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  Lock @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  @Num_Lock Ctrl <Btn5Down>: string(0x1b) string("[25T") \n\
  <Btn5Down>: string(0x1b) string("[5T") \n\
  Shift <KeyPress> Prior: string(0x1b) string("[25S") \n\
  Shift <KeyPress> Next: string(0x1b) string("[25T") \n

Ajoutez ensuite ceci à votre fichier ~ / .screenrc:

defscrollback 1000

# Scroll up
bindkey -d "^[[5S" eval copy "stuff 5\025"
bindkey -m "^[[5S" stuff 5\025

# Scroll down
bindkey -d "^[[5T" eval copy "stuff 5\004"
bindkey -m "^[[5T" stuff 5\004

# Scroll up more
bindkey -d "^[[25S" eval copy "stuff \025"
bindkey -m "^[[25S" stuff \025

# Scroll down more
bindkey -d "^[[25T" eval copy "stuff \004"
bindkey -m "^[[25T" stuff \004

Cela fonctionne dans xterm. Je ne sais pas si cela fonctionne dans d'autres émulateurs de terminaux.

Notez que cela désactive le support de défilement normal dans xterm, vous ne pourrez faire défiler que lorsque vous utilisez Screen. Vous voudrez peut-être démarrer xterm comme ceci pour toujours utiliser Screen:

xterm -e screen
Tommi R.
la source
11

Et pour utiliser la molette dans un VIM à l'intérieur de GNU Screen:

[.vimrc]

set mouse=a             " hold shift to copy xterm
set ttymouse=xterm2     " necessary for gnu screen & mouse
edench
la source
Génial, ceci en combinaison avec l'astuce screenrc a fait ma journée depuis que j'utilise awesomewm et les terminaux sont ma vie
Fotios
7

Appuyez sur Ctrl+ asuivi de[

La barre de titre de votre terminal devrait maintenant indiquer le mode Copie.

Maintenant, les touches fléchées et la molette de la souris devraient fonctionner comme prévu.

Pour revenir à la normale, appuyez sur Échap ou appuyez sur Entrée plusieurs fois.

Peter Crotty
la source
5

Définir la TERMvariable à la vt100place de xtermavant d'exécuter l'écran fonctionne également.
Je l'utilise depuis longtemps, fonctionne comme un charme.

Ajoutez ceci à votre .bashrc:

# make scrollbar / wheel scrolling work when running screen in gnome-terminal (or other)
if [ "$TERM" = "xterm" ]; then
  export TERM=vt100
fi

-

Pour référence, mon .screenrca ceci (pas nécessaire pour cet AFAIK):

# Extend the vt100 desciption by some sequences.
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
citronnelle
la source
Définir la variable d'environnement TERM comme décrit (avant d'exécuter l'écran) a fonctionné pour moi. C'est aussi simple que de saisir "export TERM = vt100". Merci beaucoup. PS: je suis sur un Mac, ssh dans une box Linux et là je lance l'écran.
Daniel K.
Comme mentionné ci-dessus, cela ne fonctionne pas comme prévu. Oui, vous pouvez faire défiler, mais votre tampon de défilement est remplacé lorsque vous changez de fenêtre.
Halsafar
solution très sous-estimée
MolbOrg
4

Les éléments suivants ont fonctionné pour moi dans Cygwin et Putty: Modifier .screenrc et ajouter

terminfo xterm* ti=:te=
Torbjör Weiland
la source
3

Si les réponses ci-dessus ne fonctionnent pas pour vous, assurez-vous que vous n'avez pas de légende ou l' option AlwaysLastline définie dans votre .screenrc. Si vous les avez, cela ne fonctionnera pas:

termcapinfo xterm* ti@:te@

Si vous avez besoin de ces informations, vous pouvez essayer de les définir dans le titre de votre terminal (avec termcapinfo)

nachocab
la source
0

La solution lors de l'utilisation de "Ubuntu 16.04.2 LTS" est la suivante:

une). Mettez à jour $ HOME / .screenrc comme les réponses précédentes l'ont spécifié:

termcapinfo xterm* ti@:te@

b). Utilisez "Paramètres". "Applications préférées" pour modifier le terminal par défaut en xterm, en sélectionnant celui "X Terminal" dans la liste déroulante.

Quelques notes superflues

  • Aucun des autres terminaux, y compris l'installation de "lxterminal", n'a fonctionné pour moi, même lorsque j'ai modifié la ligne termcapinfo en "*" au lieu de "xterm *".

  • En cliquant sur le bouton de menu dans le coin supérieur gauche de l'écran, vous pouvez obtenir la boîte de dialogue Paramètres à l'aide de la 3e icône dans le coin inférieur droit.

Malcolm Boekhoff
la source