Bisakah saya menyorot baris prompt saat ini di zsh?

8

Apakah mungkin untuk menyorot (mengatur warna latar belakang) untuk seluruh baris prompt di zsh? Dalam konfigurasi emacs saya, saya memiliki garis tempat kursor duduk dengan warna yang sedikit berbeda dengan latar belakang jendela, yang merupakan bantuan visual yang luar biasa. Saya bertanya-tanya apakah mungkin untuk melakukan hal yang sama di terminal / zsh prompt saya, sehingga secara efektif "menarik garis" di bawah semua yang telah dijalankan.

Saya sudah mencoba pengaturan PROMPT='%{$bg[grey]%}# 'di saya .zshrctetapi sorot hanya meluas sejauh yang saya ketik, tidak ke tepi terminal.

Apakah yang saya coba capai mungkin?

Phillip B Oldham
sumber

Jawaban:

1

Coba atur RPROMPT ke spasi. Hitungan spasi harus lebar terminal (minus #dan karakter lainnya.)

Chris Warrick
sumber
1
dapatkah Anda menentukan perintah yang tepat?
kirill_igum
1

Anda dapat melakukan apa pun yang Anda inginkan dengan baris perintah * - aspek yang bermasalah adalah membatalkannya sesudahnya. Saya berasumsi Anda tidak ingin setiap baris yang pernah memiliki prompt ditampilkan dengan warna hilight Anda.

Hampir akan lebih mudah untuk menghapus baris sesudahnya, tetapi kemudian Anda tidak memiliki perintah. Mungkin hapus prompt lalu echo perintah (dengan pseudo-prompt seperti $). Anda bisa meminta prompt mulai dengan urutan penyimpanan kursor ANSI ESC [s, kemudian dalam precmdmengembalikannya ESC [udan menghapus semuanya setelah kursor ESC [0J, kemudian mengulangi perintah (saya tidak ingat bagaimana cara mendapatkan perintah dari dalam precmd).

* Ini adalah jawaban yang tidak lengkap, saya tidak tahu bagaimana membuatnya hilight perintah dalam warna latar belakang yang berbeda.

Random832
sumber
1

Jika saya berubah greymenjadi white, teladan Anda sebenarnya bekerja untuk saya.

Terminal apa yang Anda gunakan? Mungkin menangani warna latar belakang menghapus secara berbeda?

Berikut ini beberapa alternatif untuk dicoba:

Berikan seluruh garis prompt latar belakang abu-abu:

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

(harus sama dengan contoh Anda, tetapi cara penulisan yang berbeda.)

Cetak baris sebelum konfirmasi:

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

(Jika Anda berubah "\n"menjadi "\r", itu harus menggarisbawahi baris saat ini, tapi itu sepertinya tidak berhasil. Saya kira zsh menghapus baris saat ini saat mencetak prompt, yang mana yang membawa saya ke solusi pertama.)

Buat perintah (yaitu semua yang Anda ketik) tebal:

setopt promptsubst
preexec() {
    tput sgr0
}
PS1="# $(tput bold)"
Mikel
sumber