Bagaimana cara melakukannya: garis bawah, tebal, miring, dicoret, warna, latar belakang, dan ukuran di Terminal Gnome?

58

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

Warna

background

font <(itu mono jika kamu tidak tahu)

ukuran

Akiva
sumber
1
Dan apa sebenarnya yang ingin diubah? Prompt, teks yang Anda masukkan, output dari perintah Anda?
Radu Rădeanu
ekspor PS1 sebenarnya. Meskipun saya suka itu untuk gema dasar juga.
Akiva
1
Jika itu mendukung "Faint", saya akan beralih. :(
Jürgen A. Erhard

Jawaban:

75

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

masukkan deskripsi gambar di sini

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

Sylvain Pineau
sumber
Saya menambahkan tiga lagi untuk ukuran, font, dan latar belakang. Apakah ini mungkin?
Akiva
1
@Akiva Anda dapat dengan mudah mengubah warna latar belakang (Lihat dedicated bagian ). Mengenai ukuran, saya pikir itu tidak mungkin. Untuk font, satu-satunya pengaturan adalah nilai gconf global ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau
1
@dashesy: ​​Menurut en.wikipedia.org/wiki/ANSI_escape_code , 53 harus melakukan overline. Tetapi di terminal saya tidak melakukan apa-apa.
Sylvain Pineau
1
@egmont Saya ingat saya ingin menggunakannya dalam 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).
dashesy
1
@dashesy Terima kasih, ini sebenarnya case use yang sangat keren :) Gnome-terminal progress dilacak di sini .
egmont
26

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

masukkan deskripsi gambar di sini

glenn jackman
sumber
20

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[0mpengaturan 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!

kesalahan sintaks
sumber
16

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[matau \e[0myang 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\\'

Berikut screenshot yang menunjukkan hasilnya: Rendering di terminal gnome 3.28

egmont
sumber
2
Tangkapan layar hasilnya akan menyenangkan, bagi kita yang tidak memiliki versi gnome-terminal / vte ini.
Marius Gedminas
@MariusGedminas Done.
egmont
Jawaban yang luar biasa! Terima kasih telah meluangkan waktu untuk mengumpulkan semua ini! Saya ingin tahu apakah mereka juga bekerja pada iTerm2 (akan mencoba untuk memeriksa sendiri untuk waktu dekat ...)
filbranden
2

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" }

FCA
sumber