
TCSHを実行していて、コマンドを実行するたびにプロンプトを更新したいと思います。現在、バックティックでこれを行うことができると思います。
set tmpstr = `git status --untracked-files=no --porcelain`
set prompt="%{\e[35;1m%} $tmpstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
しかし、毎回ファイルの完全なリストをしたくありません。したがって、gitディレクトリがきれいかどうかを言うだけで十分です。
set tmpstr1 = `git status --untracked-files=no --porcelain`
if ("$tmpstr" == "") then
set gitstr = 'Git: Clean'
else
set gitstr = 'Git: Uncommitted GIT '
endif
set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
しかし、gitstrはコマンドではないため、更新されません。誰にも異なるアイデアがありますか?それとも、コマンドが実行されるたびに完全なifステートメントを呼び出す魔法の方法はありますか?
答え1
結局使ったprecmd
.cshrcファイルを入れて、alias precmd 'source ~/.tcsh/precmd.tcsh'
プロンプトセットをそのファイルに移動しました。
.tcsh ソース
set tmpstr = `(git status --untracked-files=no --porcelain >! ~/out ) >&! ~/out1`
#echo $tmpstr #for debugging
if !( -s ~/out ) then
if !( -s ~/out1 ) then
set gitstr = "Git: Clean"
set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
else
#echo "not in GIT"
set prompt="%{\e[35;1m%} %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
endif
else
set gitstr = "Git: Uncommitted GIT "
set prompt="%{\e[35;1m%} \$gitstr %{\e[32;1m%}%n%{\e[37m%}@%{\e[33m%}%m%{\e[37m%}:%{\e[36m%}%~%{\e[37m%}"\$"%{\e[0m%} "
endif
これにより、get状態になっていることを確認し、その状態をcmd行に報告することができます。 GITフォルダを離れるとGITのステータスは報告されません。 tmpstrで起こるいたずらは、konsoleからstderrorを削除することです。