267 votes

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

Comment puis-je configurer GNU screen pour permettre à la roulette de la souris de se déplacer dans le tampon de retour de défilement ? J'ai essayé de chercher sur Google, mais la plupart des résultats concernaient l'utilisation de la molette de défilement par les applications intégrées à screen.

0 votes

JesperE - Pouvez-vous changer la réponse choisie ? Je me suis embrouillé, et les commentaires ont raison, l'autre réponse est bien meilleure.

0 votes

Je n'utilise pas l'écran aujourd'hui, mais les votes positifs semblent assez convaincants :)

376voto

Pistos Points 8997

Je crois que vous pouvez simplement ajouter une ligne comme celle-ci à vos ~/.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 -r pour le rattacher, puis ls plusieurs fois, et essayez de faire défiler les pages en arrière. Cela fonctionne pour moi.


Quelle est cette magie ? Eh bien, consultons les pages du 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

28 votes

J'ai suivi la suggestion de Pistos, et cela fonctionne partiellement. Comme il le décrit, je peux entrer quelques commandes (pour produire une sortie suffisante 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, en gros), 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 passez d'une fenêtre de screen à une autre (^A-n, ^A-p), votre tampon de défilement est perturbé. Le contenu de n'importe quelle fenêtre dans laquelle vous basculez sera simplement "rangé" dans votre tampon de retour de défilement. Cela le diminue vraiment.

0 votes

Le comportement que vous décrivez se produit effectivement, même pour moi. Je m'en accommode ; j'alterne simplement entre la molette de défilement et le mode Copie.

23 votes

Mais cela défile dans l'historique des commandes. Je veux faire défiler le tampon de sortie.

75voto

sleske Points 29978

A l'écran, vous devez d'abord passer en "mode scrollback" (ou "mode copie") pour pouvoir vous déplacer dans le tampon de scrollback : combinaison de touches Ctrl - a Esc ou Ctrl - a Ctrl - [ . Vous pouvez ensuite faire défiler l'historique en utilisant les touches Haut et Bas (ou Ctrl - b , Ctrl - f pour déplacer une page).

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

Quant à faire défiler le tampon de défilement sans entrer d'abord en mode défilement, ce 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.

24 votes

Oui, je suis au courant du mode scrollback. J'espérais ne pas avoir à entrer manuellement en mode Scrollback pour pouvoir utiliser la souris. Merci.

4 votes

Le "mode Scrollback" est un terme plutôt officieux, selon moi. :) Ctrl+a Esc entrera dans la mode de copie ce mode a toujours été appelé ainsi, car son but premier est de permettre de copier du texte dans les deux sens. La possibilité de faire défiler le texte 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.

3 votes

@syntaxerror : Eh bien, la documentation l'appelle "mode copie/réflexion", et mentionne un "tampon de rétroaction" ( gnu.org/software/screen/manual/screen.html#Copier-et-Coller ), donc je suppose que nous avons tous deux raison :-). Quoi qu'il en soit, j'ai ajouté "mode copie" à ma réponse.

24voto

Tommi R. Points 186

L'excellent article auquel Jon Z fait référence n'est plus disponible, mais j'ai pu en pêcher la version texte dans le cache de Google. Je le sauvegarde ici au cas où Google le supprimerait également à l'avenir. L'article original a été publié par Mikael Ståldal, il faut donc rendre à César ce qui appartient à César.

--

Comment utiliser la molette de la souris dans GNU Screen

GNU Screen prend en charge le retour par défilement, mais par défaut, vous devez utiliser des touches maladroites pour l'utiliser. J'aimerais pouvoir utiliser Shift-PageUp, Shift-PageDown et la molette de la souris pour faire défiler les pages, comme on peut 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

Puis ajoutez 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 suis pas sûr que cela fonctionne dans d'autres émulateurs de terminal.

Notez que cela désactive la prise en charge normale du défilement dans xterm, vous ne pourrez faire défiler que si vous utilisez Screen. Vous pourriez vouloir démarrer xterm comme ceci pour toujours utiliser Screen :

xterm -e screen

13voto

Jesse Crossen Points 3244

Pour OS X (Snow Leopard), la procédure suivante a fonctionné pour moi :

http://slaptijack.com/system-administration/mac-os-x-terminal-and-gnu-screen-scrollback/

En bref, il s'agit d'ajouter les éléments suivants à ~/.screenrc sur l'hôte distant (celui sur lequel vous exécutez screen) :

defscrollback 5000
termcapinfo xterm* ti@:te@

12voto

edench Points 51

Et pour utiliser la molette de défilement 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

0 votes

Génial, ceci en combinaison avec l'astuce screenrc a fait ma journée car j'utilise awesomewm et les terminaux sont ma vie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X