web-dev-qa-db-ja.com

xtermがテキストを正しく折り返さない

Gnome-terminal列とxterm列の両方を構成しています(どちらを使用するかはまだ選択していません)。修正したい問題がいくつかあります。

  • 入力領域は表示領域よりも小さい(列が少ない)ようです
  • 入力したテキストは、最後に到達しても次の行に折り返されません。同じ行に戻って、プロンプトを上書きします。

(これが関係する場合に備えて、PS1でカスタムbashプロンプトを設定しました)

$ 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 ------------------------------------------------>

結果は、xtermとgnome-terminal3.4.1.1の両方で同じです。

ご覧のとおり、stty -aコマンドの出力は画面の端まで届きますが、入力はそれほど遠くありません。

列を非常に大きな数に設定することで、目的の結果が得られることがわかりました。例:

$ stty cols 1800

これにより、両方の問題が修正されます。この問題を解決するための正しい方法ですか?これはプログラムからの出力を「壊す」のでしょうか?これまでにtopstty -aを試しましたが、これらは問題ないようです。

コメントで要求された詳細情報

ファイルへの入力をcatすると、列は実際にはターミナルウィンドウの幅全体に広がることがわかりました。

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

これは、端末ではなく、列の数を制限しているのは実際にはbashであることを意味しますか?もしそうなら、bashの列数を変更する方法は?

5
mulllhausen

~/.bashrcのプロンプト定義でANSIコードを適切にエスケープしていない可能性があります

たとえば、PS1は次のようになります。

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

...シェル自体の幅の前に、ひどく折り返されます。

ASCIIエスケープ文字の前と定義ターミネータの後に角かっこを配置すると、これが修正され、予想される円記号が生成されます。

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

つまり、\033\[\033になり、mm\]になります

(私は少し前にこれを自分で学びました ここ )。

8
JulianOliver

コメントですでに指摘されているように、あなたの質問は、「明確化」した後でも、不明確で「不完全」です。たとえば、あなたはまだあなたがプログラム/アプリケーション/ターミナルエミュレータまたはターミナルのtypeを参照しているxtermを参照しているのかどうかを言っていません(つまり、$ TERMを入力したときに得られる値。それでも、答えを提供しようとします。少なくとも、正しい方向に導くためです。

Bashプロンプトをカスタマイズしたという事実を考えると、これが問題の原因になると思います。 関連するディスカッションの数 、参照、bashをカスタマイズした後にユーザーが遭遇する頻繁な行折り返しの問題に関する情報があります。これは、ほとんどの場合、 ANSIカラーコードのエスケープ の問題のようです。もう少し stackoverflowに関するQ&A

繰り返しますが、これを実現するためのオプションがいくつかあるため、howカスタマイズを行ったかどうかはわかりません(sttyの出力では何もわかりません)。ただし、default settingsおよびfilesbackupを実行した場合は、それが最初のアクションになります。または、shopt -s checkwinsizeを試して選択されていることを確認することもできます。または、shopt -pだけで、-sのいずれかのbashオプションのリストが表示されます。 selectedまたは-unselected。また、特にログインシェルの場合は、マニュアルページをチェックして、これらのいくつかについてのアイデアを入手してください。

最後に、質問をするときはもう少し具体的にしてください。またはさらに良いことに、すでに尋ねられている可能性のある同様の質問を前に検索してください。

1
ILMostro_7