Bagaimana caranya: menggarisbawahi, tebal, miring, dicoret, dan diwarnai di Terminal Gnome?
Mencolok
Miring
menggarisbawahi
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(itu mono jika kamu tidak tahu)
Bagaimana caranya: menggarisbawahi, tebal, miring, dicoret, dan diwarnai di Terminal Gnome?
Mencolok
Miring
menggarisbawahi
s̶t̶r̶i̶k̶e̶ ̶i̶t̶ ̶l̶i̶k̶̶e̶ ̶i̶t̶s̶ ̶h̶o̶t
background
font
<(itu mono jika kamu tidak tahu)
Jawaban:
Terminal ANSI / VT100 dan emulator terminal tidak hanya dapat menampilkan teks hitam putih; mereka dapat menampilkan warna dan teks yang diformat terima kasih untuk menghindari urutan. Urutan-urutan tersebut terdiri dari karakter Escape (sering diwakili oleh "^ [" atau "Esc") diikuti oleh beberapa karakter lain: "Esc [FormatCodem".
Di Bash, karakter dapat diperoleh dengan sintaks berikut:
\e
\033
\x1B
Perintah-perintah (untuk copy-paste mudah):
echo -e "\e[1mbold\e[0m"
echo -e "\e[3mitalic\e[0m"
echo -e "\e[4munderline\e[0m"
echo -e "\e[9mstrikethrough\e[0m"
echo -e "\e[31mHello World\e[0m"
echo -e "\x1B[31mHello World\e[0m"
Sumber (termasuk semua jenis kode warna latar depan / latar belakang): http://misc.flogisoft.com/bash/tip_colors_and_formatting
/apps/gnome-terminal/profiles/Default/font
)
PS1
(di gnome-terminal sebenarnya) karena menggarisbawahi semacam dicampur dalam teks di bawah ini membuatnya lebih sulit untuk dibaca, dan tentu saja mogok-melalui tampak salah. Memiliki garis di sana akan membantu melihat perintah sebelumnya ketika menggulir ke atas (begitu juga warna).
Untuk memperluas jawaban Sylvain, beberapa fungsi pembantu:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
Kemudian
Sesuatu yang belum dibahas adalah kombinasi dari dua atau tiga parameter, misalnya tebal dan garis bawah , dalam warna yang telah ditentukan. Ini dicapai dengan sintaks 3 arah, misalnya:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
akan menyebabkan "ini adalah tes" untuk dicetak dalam warna kuning ( 33m
), miring ( 3m
) DAN bergaris bawah ( 4m
).
Perhatikan bahwa tidak perlu mengulang \e[
setiap waktu.
Perhatikan juga bahwa (sama dengan Sylvain) saya juga menambahkan \e[0m
pengaturan ulang setiap waktu, karena jika tidak warna kuning dan gaya font akan tetap aktif di terminal! Tidak perlu dikatakan bahwa Anda benar-benar harus berhati-hati untuk mendapatkan ini diatur ulang dalam skrip, karena pengguna yang menggunakan skrip Anda mungkin tidak menyukainya jika skrip Anda secara permanen mengubah pengaturan warna + gaya mereka di terminal!
Terminal GNOME 3.28 (VTE 0.52), memulai debutnya di Ubuntu 18.04 LTS, menambahkan dukungan untuk beberapa gaya lagi termasuk keriting dan garis bawah berwarna seperti yang terlihat di Kitty, overline seperti yang terlihat di Konsole, dan akhirnya semua atribut blink yang paling disukai atau dibenci semua orang juga.
Ini juga secara otomatis bekerja di emulator terminal berbasis VTE lainnya (misalnya Tilix, Terminator, terminal Xfce4, Guake dll.), Mengingat bahwa VTE setidaknya pada versi 0,52.
Berikut adalah daftar yang menunjukkan urutan pelarian standar, serta penambahan Terminal (VTE) GNOME. Perhatikan bahwa untuk setiap urutan pembukaan, saya juga menunjukkan urutan penutupan properti itu saja, bukan generik \e[m
atau \e[0m
yang menonaktifkan semua mode khusus.
echo -e '\e[1mbold\e[22m'
echo -e '\e[2mdim\e[22m'
echo -e '\e[3mitalic\e[23m'
echo -e '\e[4munderline\e[24m'
echo -e '\e[4:1mthis is also underline (new in 0.52)\e[4:0m'
echo -e '\e[21mdouble underline (new in 0.52)\e[24m'
echo -e '\e[4:2mthis is also double underline (new in 0.52)\e[4:0m'
echo -e '\e[4:3mcurly underline (new in 0.52)\e[4:0m'
echo -e '\e[5mblink (new in 0.52)\e[25m'
echo -e '\e[7mreverse\e[27m'
echo -e '\e[8minvisible\e[28m <- invisible (but copy-pasteable)'
echo -e '\e[9mstrikethrough\e[29m'
echo -e '\e[53moverline (new in 0.52)\e[55m'
echo -e '\e[31mred\e[39m'
echo -e '\e[91mbright red\e[39m'
echo -e '\e[38:5:42m256-color, de jure standard (ITU-T T.416)\e[39m'
echo -e '\e[38;5;42m256-color, de facto standard (commonly used)\e[39m'
echo -e '\e[38:2::240:143:104mtruecolor, de jure standard (ITU-T T.416) (new in 0.52)\e[39m'
echo -e '\e[38:2:240:143:104mtruecolor, rarely used incorrect format (might be removed at some point)\e[39m'
echo -e '\e[38;2;240;143;104mtruecolor, de facto standard (commonly used)\e[39m'
echo -e '\e[46mcyan background\e[49m'
echo -e '\e[106mbright cyan background\e[49m'
echo -e '\e[48:5:42m256-color background, de jure standard (ITU-T T.416)\e[49m'
echo -e '\e[48;5;42m256-color background, de facto standard (commonly used)\e[49m'
echo -e '\e[48:2::240:143:104mtruecolor background, de jure standard (ITU-T T.416) (new in 0.52)\e[49m'
echo -e '\e[48:2:240:143:104mtruecolor background, rarely used incorrect format (might be removed at some point)\e[49m'
echo -e '\e[48;2;240;143;104mtruecolor background, de facto standard (commonly used)\e[49m'
echo -e '\e[21m\e[58:5:42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[21m\e[58;5;42m256-color underline (new in 0.52)\e[59m\e[24m'
echo -e '\e[4:3m\e[58:2::240:143:104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58:2:240:143:104mtruecolor underline (new in 0.52) (might be removed at some point) (*)\e[59m\e[4:0m'
echo -e '\e[4:3m\e[58;2;240;143;104mtruecolor underline (new in 0.52) (*)\e[59m\e[4:0m'
(*) Nilai Truecolor untuk garisbawah sedikit didekati.
Dan yang agak aneh yang tidak cocok dengan gambar ini, karena lebih fungsional daripada gaya, namun mungkin layak disebutkan di sini, adalah dukungan hyperlink yang dirancang bersama dengan iTerm2, tersedia sejak Terminal GNOME 3.26 (VTE 0.50) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Ganti urutan hard-coded ini dengan:
tput smul # set underline
tput rmul # remove underline
tput smso # set bold on
tput rmso # remove bold
tput setaf 1 #red
tput setaf 2 #green
...
tput cup 0 0 # move to pos 0,0
Lihat "man terminfo" dan "man tput" untuk deskripsi lengkap dari perintah ini.
Contoh:
function f_help
{
c_green=$(tput setaf 2 2>/dev/null)
c_reset=$(tput sgr0 2>/dev/null)
c_bold=$(tput smso 2>/dev/null)
echo "${c_bold}DESCRIPTION${c_reset} : .... ${c_green}My green text${c_reset}My plain text"
}