zshで現在のプロンプト行を強調表示できますか?


8

プロンプトの行全体を強調表示する(背景色を設定する)ことはできますzshか?私のemacs構成では、カーソルがウィンドウの背景とわずかに異なる色で配置されている行があり、これは視覚的に非常に役立ちます。私のターミナル/ zshプロンプトで同じことを実行できるかどうか疑問に思っています。これにより、実行されたすべてのものの下で効果的に「線を引く」ことができます。

私はPROMPT='%{$bg[grey]%}# '自分で設定を試しました.zshrcが、ハイライトは入力した範囲までしか広がりません。ターミナルの端までは伸びません。

私が達成しようとしていることは可能ですか?

回答:


1

RPROMPTをスペースに設定してみてください。スペースの数は、端末の幅(#およびその他の文字を除いたもの)です。


1
正確なコマンドを指定できますか?
kirill_igum

1

あなたはプロンプトライン*であなたがやりたいことを何でもすることができます-問題のある側面はそれを後で取り消すことです。私はあなたがハイライトカラーで表示されたプロンプトがあったすべての1行が欲しくないと思います。

後で行を削除する方が簡単ですが、コマンドはありません。おそらくプロンプトを削除してからコマンドをエコーし​​ます(などの疑似プロンプトを使用$)。プロンプトをANSIカーソル保存シーケンスESC [sで開始し、それをprecmd復元しESC [uてカーソルの後のすべてをクリアしてからESC [0J、コマンドをエコーすることができます(内部からコマンドを取得する方法を思い出しませんprecmd)。

*これは不完全な答えです。コマンドを別の背景色でハイライト表示する方法がわかりません。


1

私がに変更greyした場合white、あなたの例は実際に私のために機能します。

どの端末を使用していますか?おそらくそれは背景色の消去を異なる方法で処理しますか?

ここにいくつかの代替手段があります:

プロンプトライン全体に灰色の背景を付けます。

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="$(tput setab 7)# "

(例と同じにする必要がありますが、書き方が異なります。)

プロンプトの前に行を印刷します。

precmd() {
    tput smul
    for ((n=0; n<COLUMNS; n++)) { printf " "; }
    printf "\n"
}
preexec() {
    tput sgr0
}

(に変更"\n"する"\r"と、現在の行に下線が引かれますが、それ機能しないようです。zshがプロンプトを印刷するときに現在の行を消去すると思います。これが最初の解決策につながります。)

コマンド(つまり、入力するすべてのもの)を太字にします。

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.