tcsh 複数行プロンプトで改行文字を使用するにはどうすればよいですか?

tcsh 複数行プロンプトで改行文字を使用するにはどうすればよいですか?

想像する

  1. 私は複数行のプロンプトを使用するのが好きです。
set prompt="${bold}${green}%M${white}:${red}%c5${unbold} \n${white}% "
  1. 私はしばしばWindowsの電子メールにターミナル行をコピー/貼り付けます。

質問

tcshは端末に実際の改行文字を印刷しないようです。改行を生成するのに十分な空白文字を印刷するようです。これにより、Windowsの電子メールに貼り付けると、プロンプトの2cd行が新しい行に配置されなくなります。代わりに、私は多くの空白文字を取得します。

私は次のXresourceを持っています:

xterm*trimSelection:      true
xterm*highlightSelection: true

この種のキャッチを使用すると、何が間違っているかを簡単に確認できます。 ls出力に改行文字がどのように表示されるかを確認してください。しかし、プロンプトの最初の行は実際に改行を引き起こすのに十分なスペースですが、改行文字ではありません。また、3回クリック(行)を選択すると、「複数行」プロンプトが実際には空白を含む1行であることが明らかになりました。

tcshフォーキング/再コンパイルがありません。この問題を解決する方法を知っている人はいますか?

ありがとうございます!
——マイヤーズ

プロンプトの最初の行に改行文字の代わりにスペースが含まれています。

ベストアンサー1

tl;dr これを~/.tcshrcまたはに追加します~/.cshrc

settc am no

その結果、意図しない不快な結果の1つは、複数行で囲まれた長いコマンドが選択時に改行文字を挿入することです。どちらが悪いかを判断するのはユーザーの役割です。


tcsh実行してみると、script(1)正確に何をしているのかがわかります。

$ script -qc tcsh
tcsh% set prompt = "foo\nbar% "
foo
bar% exit
exit
$ cat -v typescript
...
foo^[[80G  ^Mbar% exit^M^M

tcsh最後の列に移動するために、プロンプト内の改行を変換します(hpa/ch \e[80Gエスケープを介して)。その後に2つのスペースとキャリッジリターンが続きます(tcshこれだけが可能です。実際の列はcshそうではありません)。MoveToLine()その機能をご覧ください。ソースコード

何らかの理由で、他の端末エミュレータは、設定に関係なく、xterm行全体が空白で埋められたかのように最後の列に移動すると解釈します。highlightSelection

迅速で汚れた修正は、tcsh端末に自動マージンがないと信じるようにすることです。これがsettc am noまさにこのコマンドが行うことです。

おすすめ記事