Tema terminal saya dulu seperti ini,
Tetapi saya pikir bisikan itu membuang banyak ruang. Dan kemudian saya mendapat ide bahwa saya bisa membersihkan prompt setiap kali saya menjalankan perintah. Saya menggunakan bash, salah satu solusinya adalah menggunakan preexec_invoke_exec
fungsi.
Saya menggunakan perintah berikut untuk membersihkan karakter prompt terakhir:
echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"
Sehingga terminal sangat bersih, seperti ini,
Tapi sekarang masalah saya adalah, akan ada masalah jika saya ingin menggunakan perintah multi dalam satu baris , katakanlah, ketika saya gunakan for i in ...
.
Ini adalah versi lengkap dari fungsi di .bashrc saya,
preexec () { echo -ne "\033[1A\033[K\033[1A\033[K\033[31;1m$ \033[0m"; echo -n "$1"; echo -ne " \033[37;2m["; echo -n "$2"; echo -ne "]\033[0m\n"; }
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
[ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND
local this_command=`history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g"`;
local this_pwd=`pwd`;
preexec "$this_command" "$this_pwd"
}
trap 'preexec_invoke_exec' DEBUG
zsh
...
for i in $(seq 1 10); do ls; done
dengan fungsinya, output dari perintah iterasi akan "ditelan" sehingga untuk berbicara. Jadi OP ingin membersihkan perilaku sambil mengaktifkan prompt itu. Alasan mengapa saya mendukung hal ini adalah minat untuk kesadaran akan shell, kegunaan, umpan balik, dan portabilitas. Tautan yang saya berikan pada komentar saya sebelumnya mengarah ke pos pada pengguna super - mereka pergi ke masalah menghubungkan potongan ini, jadi itu adalah prototipe yang mengemulasi fungsionalitas zsh asli (yang menurut saya menarik), dalam bentuk fungsi perangkap sini.