Question xterm ne pas envelopper le texte correctement


Je configure mes colonnes gnome-terminal et xterm (je n'ai toujours pas choisi celles que je vais utiliser) et j'ai quelques problèmes à corriger:

  • la zone de frappe semble être plus petite (moins de colonnes) que la zone d'affichage
  • le texte tapé ne s'emboîte pas à la ligne suivante lorsqu'il atteint la fin - il ne fait que continuer sur la même ligne, remplaçant l'invite

(J'ai défini une invite personnalisée avec PS1 au cas où cela serait pertinent)

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 7.1 (wheezy)
Release:    7.1
Codename:   wheezy
$ echo $TERM
xterm
$ stty -a
[peter@mine ~] $ stty -a
speed 38400 baud; rows 52; columns 126; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?; swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
$[peter@mine ~] $ # the column width only goes up to here ------------------------------------------------>

les résultats sont identiques à la fois dans xterm et dans gnome-terminal 3.4.1.1

et comme vous pouvez le voir, la sortie du stty -a commande va jusqu'au bord de l'écran, tandis que la saisie ne va pas aussi loin.

J'ai trouvé que je peux obtenir le résultat souhaité en définissant les colonnes sur un très grand nombre, par exemple:

$ stty cols 1800

Cela corrige les deux problèmes. Est-ce la bonne façon de résoudre ce problème? Est-ce que cela "casser" l'un des résultats des programmes? Jusqu'ici j'ai essayé top et stty -a et ça semble bien.

plus d'infos comme demandé dans les commentaires

j'ai trouvé que si je cat certaines entrées dans un fichier alors les colonnes étendent réellement toute la largeur de la fenêtre du terminal:

[peter@mine applications] $ cat > /tmp/asd
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasssssssssssssssssssssssssssssssssssssssssssssssssssssssssssqqqqqqqqqqqqqqqq
qqqq

cela signifie-t-il que c'est en fait bash qui restreint le nombre de colonnes et non le terminal? Si oui, comment modifier le nombre de colonnes dans bash?


4
2017-09-30 14:02


origine


Veuillez toujours mentionner votre système d'exploitation. xterm fonctionne sous Linux, Unix, BSD, OSX, Solaris, etc. En outre, utilisez-vous réellement le xterm émulateur de terminal? $TERM ne définit pas l'émulateur en cours d'exécution, mais uniquement son type. - terdon
ok j'ai ajouté cette information. - mulllhausen
Donc, est-ce réellement xterm ou un autre émulateur de terminal? En outre, essayez de supprimer votre PS1 personnalisé, avez-vous toujours ce problème? - terdon
Et avez-vous les mêmes problèmes si vous tapez autre chose que bash; par exemple., csh ou cat (type cat > /tmp/asdfg; se terminer par Ctrl + C ou Ctrl + D)? - Scott
merci pour les suggestions de diagnostic. Je posterai les résultats quand je rentrerai plus tard aujourd'hui. - mulllhausen


Réponses:


Il est probable que vous n’avez pas correctement échappé au code ANSI dans votre définition d’invite dans votre ~/.bashrc

Par exemple, un PS1 quelque chose comme:

    PS1='\033[1;33m>\033[0m '

... Enveloppera mal, avant la largeur de la coque elle-même.

Placer les crochets avant le caractère d'échappement ascii et après le terminateur de définition corrigera cela, ce qui entraînera un enveloppement attendu:

    PS1='\[\033[1;33m\]>\[\033[0m\] '      

C'est à dire \033 devient \[\033 et m devient m\]

(Je l'ai appris moi-même il y a quelque temps ici).


8
2018-02-11 21:27



excellent! ça a marché! j'ai utilisé \e au lieu de '\ 033' puisque ces deux sont la séquence d'échappement ascii. - mulllhausen
Voici deux liens extrêmement utiles: askubuntu.com/a/24422/334235 et linux.101hacks.com/ps1-examples/prompt-color-using-tput  Cela facilite grandement l’échappée des crochets. - phyatt


Comme cela a déjà été souligné dans les commentaires, votre question - même après avoir "clarifié" - n’est pas claire et "incomplète". Par exemple, vous ne dites toujours pas si vous êtes se référant à xterm le programme / application / émulateur de terminal ou le type de terminal (c’est-à-dire la valeur que vous obtenez lorsque vous tapez $ TERM. Quoi qu’il en soit, je tenterai d’apporter une réponse - ou du moins de vous guider dans la bonne direction.

Étant donné que vous avez personnalisé votre invite bash, je suppose que cela sera la racine de votre problème. Il y a un nombre de discussions pertinentes, des références, des informations sur les problèmes de retour à la ligne fréquemment rencontrés par les utilisateurs après la personnalisation de bash. Cela semble être, dans la plupart des cas, un problème avec échapper aux codes de couleur ANSI; un peu plus Questions et réponses sur stackoverflow.

Encore une fois, je ne suis pas sûr Comment vous avez fait la personnalisation (ça stty sortie ne me dit rien), car il existe un certain nombre d'options pour y parvenir; Cependant, si vous avez fait une sauvegarde de votre paramètres par défaut et des dossiers, cela devrait être votre première ligne d’action. Vous pouvez également essayer shopt -s checkwinsize pour vous assurer qu'il est sélectionné, ou juste shopt -p vous donnera la liste des options bash qui sont soit -s:choisi ou -u:non sélectionné. En outre, vérifiez vos pages de manuel pour avoir une idée de certaines de ces choses, en particulier si c'est votre shell de connexion.

Enfin, essayez d'être un peu plus précis lorsque vous posez des questions. ou mieux encore, faites une recherche avant pour des questions similaires qui auraient déjà été posées.


1
2017-11-04 03:48