hack のためのネタ帳, etc,,,

状況

PS1 を plain にする際
PS1="\e]0;${SHELL##*/}\a$ "
のようにして、Xterm Control Sequences でタイトルバーに "bash" と表示させると共に、プロンプトはシンプルに "$ " ようにしてたんだけど、history をたどると、
$ ls | cat | cat | cat
...
$ ls
...
$ ■
[↑]
$ ls■
[↓]
$ ■
[↑]
$ ls■
[↑]
$ ls | cat | cat | cat■
[↓]
$ ls | cat | ■
[↑]
$ ls | cat |  | cat | cat | cat■
[↓]
$ ls | cat | ■
[↓]
$ ls | cat ■
[↑]
$ ls | cat ls■
[↑]
$ ls | cat ls | cat | cat | cat■
みたいになって、参照した history 9 文字分消えなくなる。

原因

どうも "\e]0;bash" の長さと "$ " の長さを拾っているらしい。

解決方法

bash の manpage で PROMPTING のところ引くと
\[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
\] end a sequence of non-printing characters
って説明があって、
どうも "\[" と "\]" で囲った部分は非表示扱いされてカーソル位置の計算にカウントされないようだ。

従って、以下のようにするのが正解だったらしい。
PS1="\[\e]0;${SHELL##*/}\a\]$ "

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Wiki内検索

フリーエリア

編集にはIDが必要です