16 Warna dalam ZShell

11

Saya hanya bisa memanggil 8 warna di zshell prompt saya.

Contoh:

PROMPT="[%n@%{$fg[magenta]%}%m%{$reset_color%} %.]
%# "

Bekerja dengan baik. Namun,

PROMPT="[%n@%{$fg[brmagenta]%}%m%{$reset_color%} %.]
%# "

Tidak bekerja Pada dasarnya, tidak ada variasi warna "cerah" yang muncul.

Setelah melakukan penelitian, saya menemukan bahwa warna zsh disebut oleh setopt "warna".

perbuatan

echo ${(o)color}

menghasilkan output ini:

00 01 02 03 04 05 07 08 22 23 24 25 27 28 30 30 30 30 31 31 32 32 33 33 34 34 35 35 36 36
37 37 39 39 40 40 41 42 43 44 45 46 47 49 bg-black bg-blue bg-cyan bg-default bg-green
bg-magenta bg-red bg-white bg-yellow black blink blue bold conceal cyan default faint green
magenta no-blink no-conceal no-reverse no-standout no-underline none normal red reverse
standout underline white yellow

Seperti yang Anda lihat, hanya 8 warna standar yang tersedia. Saya sudah mencoba menggunakan varian "bg-", yang juga menjadikan output sebagai warna teks default.

Bantuan apa pun yang dapat Anda berikan akan sangat dihargai. Saya bisa, tentu saja, hanya menggunakan salah satu warna normal, tetapi saya tidak akan belajar apa-apa!

Tammer Ibrahim
sumber

Jawaban:

9

Emulator terminal apa yang Anda gunakan? Anda dapat memeriksa jumlah warna yang didukung dengan menjalankan echotc Co. Sebagai contoh, saya urxvtmendukung 88 warna, tetapi xtermhanya mendukung 8, dan variasi cerah tidak termasuk.

Jika saya menjalankannya, urxvtsaya dapat:

# Dark magenta/violet:
PS1="[%F{34}%n%F{reset}@%F{magenta}%m%F{reset} %.] " 
# Bright Thistle purple:
PS1="[%F{54}%n%F{reset}@%F{magenta}%m%F{reset} %.] "

Sumber: man zshall

Mischa Arefiev
sumber
4

Semua "warna" yang Anda bicarakan hanyalah urutan melarikan diri dalam suatu bentuk \e[{color_code}m. Fungsi Zsh colorstidak lebih dari menambahkan beberapa variabel array asosiatif zsh yang memetakan nama warna yang dapat dibaca manusia ke urutan pelarian terminal. Dengan demikian Anda bisa langsung menggunakan

PS1=%{$'\e[54m'%}...

atau coba jawaban @Mischa Arefiev, itu lebih mudah dibaca. Perhatikan bahwa escape sequence bekerja di shell apa saja, sementara konstruksi seperti %F{54}...hanya bekerja di zsh.

ZyX
sumber