Défilement horizontal dans le terminal

12

Il y a donc, je crois, 2 questions à ce sujet. Tous ont à voir avec tail -fet donc les gens donnent la réponse tangente de «utiliser moins».

J'en ai besoin pour tout, pour chaque commande, etc. Le problème est que je dois exécuter beaucoup de fenêtres de console et même avec plusieurs moniteurs, je dois encore les réduire. En conséquence, à peu près chaque sortie est supprimée par le retour à la ligne et difficile à lire.

Une solution suggérée est echo -ne '\e[?7l', qui fonctionne quelque peu. Le problème maintenant, est-il possible d'obtenir des barres de défilement sur une console?

Ubuntu 12.10, Terminal

srcspider
la source
À titre d'exemple (en réponse à tous les commentaires «ce n'est pas ainsi que fonctionnent les terminaux»!), Je voudrais souligner que la console Ubuntu pour Windows prend en charge cette fonctionnalité. Les applications telles que lset mceditfonctionnent correctement, car la largeur de l'écran et la largeur du tampon sont traitées séparément.
cz

Réponses:

10

Ce que vous demandez, c'est un terminal de largeur infinie, dont une partie est affichée. Ce n'est pas comment les terminaux fonctionnent traditionnellement ni comment les applications s'attendent à ce qu'ils fonctionnent.

Par exemple, si le terminal a une largeur infinie, comment les applications visuelles sont-elles censées fonctionner lorsqu'elles veulent afficher quelque chose au milieu de l'écran?

Cependant, vous pouvez utiliser GNU screen(vous êtes censé pouvoir attacher une session d'écran à partir de plusieurs terminaux de différentes tailles afin que l'écran sache comment afficher une petite fenêtre d'un terminal plus grand) et définir la screenlargeur des fenêtres à quelque chose très grandes, puis tromper les applications visuelles en pensant que la largeur de l'écran est celle d'origine.

Comme (à l'intérieur screen)

c=$COLUMNS # assuming your shell has that variable
screen -X width -w 1000
stty cols "$c"

Certaines applications visuelles fonctionneront bien, d'autres pas si bien (pour une installation lorsqu'elles font un positionnement relatif ou lorsqu'elles reposent sur l'enveloppement du terminal). vimsemble fonctionner correctement.

Ensuite, pour faire défiler et copier-coller des données, la seule option est d'utiliser screenle mode de copie de . ( <prefix>]) et déplacez le curseur (voir info -f screen -n Movementpour vous déplacer en mode copie ).

tmux peut avoir des capacités similaires.

Cet terminatorémulateur de terminal (basé sur java), qui n'est pas terminatorcelui fourni avec ubuntu, fait exactement cela avec une largeur de terminal infinie:

  • les lignes ne sont jamais enveloppées
  • les applications visuelles sont informées que la largeur de l'écran est celle qui tient dans la fenêtre, pas l'infini.
  • cela fonctionnerait également mieux que la screensolution basée ci-dessus dans la mesure où son entrée terminfo affirme qu'il ne fait pas de retour à la ligne afin que les applications en soient conscientes, et BS au début de la ligne ne passe pas à la fin de la ligne précédente.
Stéphane Chazelas
la source
Je suis déjà dans un environnement GUI donc si je veux ouvrir un fichier dans un éditeur visuel, je peux simplement en lancer un depuis le terminal. Il est plus facile de les copier que dans un terminal de toute façon, car vous ne pouvez pas vraiment facilement sélectionner simplement un bloc dans un terminal sans qu'il soit coupé. Des screen -X width -w 1000retours en cours No screen session found., des idées?
srcspider
@srcspider Comme je l'ai dit, vous devez le faire à l'intérieur screen. Commencez d' screenabord.
Stéphane Chazelas
ok je pense que je vous comprends maintenant, en gros je devrais courirscreen -X width -w 1000 <mycommand>
srcspider
1
@srcspider. No. screenest un émulateur de terminal basé sur un terminal. Vous devez donc le démarrer d'abord comme vous auriez besoin de le démarrer xtermou d' gnome-terminalabord, en exécutant la screencommande. Ensuite, à l'intérieur de ce nouvel émulateur de terminal, vous exécutez cette screen -Xcommande pour indiquer screende modifier la largeur de sa fenêtre. Voir aussi ma réponse modifiée pour l' terminatorémulateur que je pense que vous préférerez.
Stéphane Chazelas
Merci! Même si d'une manière ou d'une autre je ne les fais pas travailler, au moins maintenant je sais pourquoi je ne peux pas les faire travailler comme ça.
srcspider
6

Bien qu'Emacs soit principalement un éditeur et un IDE¹, il correspond très bien à votre problème. Vous pouvez exécuter un programme dans une fenêtre Emacs et Emacs l'affiche dans un terminal stupide de largeur et de hauteur infinies. Si le curseur se trouve à la fin de la mémoire tampon, la fenêtre défile lorsque le programme produit une sortie; si vous déplacez le curseur, la fenêtre restera sur place à mesure que la sortie augmentera.

Tapez M-x shell RET(ie Alt+ x shell Return) pour démarrer un shell dans un tampon Emacs. Tapez C-u M-x shell RETou M-1 M-x shell RETpour démarrer un autre shell. Vous pouvez exécuter un programme dans chaque shell et organiser les tampons dans plusieurs fenêtres comme vous le souhaitez.

¹ On dit parfois que c'est un meilleur système d'exploitation qu'un éditeur, mais seulement par des gens qui ne l'utilisent pas - c'est juste une blague.

Gilles 'SO- arrête d'être méchant'
la source