Cách thực hiện: gạch chân, in đậm, in nghiêng, gạch ngang và màu sắc trong Gnome Terminal?
Dũng cảm
In nghiêng
und̲e̲r̲l̲i̲n̲e̲
st̶r̶i̶k̶e̶ i̶t̶ l̶i̶k̶̶e̶ i̶t̶s̶ h̶o̶t
background
font
<(nó đơn điệu nếu bạn không thể nói)
Cách thực hiện: gạch chân, in đậm, in nghiêng, gạch ngang và màu sắc trong Gnome Terminal?
Dũng cảm
In nghiêng
und̲e̲r̲l̲i̲n̲e̲
st̶r̶i̶k̶e̶ i̶t̶ l̶i̶k̶̶e̶ i̶t̶s̶ h̶o̶t
background
font
<(nó đơn điệu nếu bạn không thể nói)
Câu trả lời:
Các thiết bị đầu cuối và trình giả lập thiết bị đầu cuối ANSI / VT100 không chỉ có thể hiển thị văn bản đen trắng; chúng có thể hiển thị màu sắc và văn bản được định dạng nhờ các chuỗi thoát. Các chuỗi đó bao gồm ký tự Escape (thường được biểu thị bằng "^ [" hoặc "Esc") theo sau là một số ký tự khác: "Esc [FormatCodem".
Trong Bash, ký tự có thể thu được bằng các cú pháp sau:
\e
\033
\x1B
Các lệnh (để sao chép dễ dàng dán):
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"
Nguồn (bao gồm tất cả các loại mã màu nền trước / nền): http://misc.flogisoft.com/bash/tip_colors_and_formatted
/apps/gnome-terminal/profiles/Default/font
)
PS1
(trong gnome-terminal trên thực tế) vì loại gạch dưới của hỗn hợp trong văn bản dưới nó làm cho nó khó khăn hơn để đọc, và dĩ nhiên cuộc tấn công qua nhìn chỉ sai. Có một dòng ở đó sẽ giúp phát hiện các lệnh trước đó khi cuộn lên (màu sắc cũng vậy).
Để mở rộng câu trả lời của Sylvain, một số chức năng của người trợ giúp:
ansi() { echo -e "\e[${1}m${*:2}\e[0m"; }
bold() { ansi 1 "$@"; }
italic() { ansi 3 "$@"; }
underline() { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red() { ansi 31 "$@"; }
Sau đó
Một cái gì đó chưa được đề cập là sự kết hợp của hai hoặc ba tham số, ví dụ in đậm và gạch chân , trong một màu được xác định trước. Điều này đạt được bằng cú pháp 3 chiều, ví dụ:
~$ printf "\e[3;4;33mthis is a test\n\e[0m"
sẽ khiến "đây là một bài kiểm tra" được in bằng màu vàng ( 33m
), in nghiêng ( 3m
) VÀ gạch chân ( 4m
).
Lưu ý rằng không cần thiết phải lặp lại \e[
mỗi lần.
Cũng lưu ý rằng (giống với Sylvain) Tôi cũng đã thêm \e[0m
cài đặt để đặt lại mỗi lần, vì nếu không, màu vàng và kiểu phông chữ sẽ vẫn hoạt động trong thiết bị đầu cuối! Không cần phải nói rằng bạn nhất định phải coi chừng những điều này để được đặt lại trong tập lệnh, bởi vì người dùng sử dụng tập lệnh của bạn có thể không thích nó nếu tập lệnh của bạn sửa đổi vĩnh viễn cài đặt màu + kiểu của họ trong thiết bị đầu cuối!
Thiết bị đầu cuối Gnome 3.28 (VTE 0.52), ra mắt trong Ubuntu 18.04 LTS, cũng hỗ trợ thêm một vài kiểu bao gồm các đường viền xoăn và màu như đã thấy trong Kitty, đường viền như đã thấy trong Konsole, và cuối cùng là thuộc tính nháy mắt được yêu thích hoặc ghét nhiều của mọi người.
Chúng cũng tự động hoạt động trong mọi trình giả lập thiết bị đầu cuối dựa trên VTE khác (ví dụ: Tilix, Terminator, Xfce4-terminal, Guake, v.v.), với điều kiện VTE ít nhất là ở phiên bản 0.52.
Dưới đây là danh sách trình bày các chuỗi thoát tiêu chuẩn, cũng như các bổ sung của Gnome Terminal (VTE). Lưu ý rằng đối với mỗi chuỗi mở, tôi cũng chỉ hiển thị chuỗi đóng của thuộc tính đó, thay vì chung chung \e[m
hoặc \e[0m
vô hiệu hóa tất cả các chế độ đặc biệt.
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'
(*) Giá trị Truecolor cho phần gạch chân hơi gần đúng.
Và một điều hơi kỳ lạ không phù hợp với bức ảnh này, vì nó có nhiều chức năng hơn là một phong cách, nhưng có lẽ đáng nói ở đây, là hỗ trợ siêu liên kết được đồng thiết kế với iTerm2, có sẵn từ Gnome Terminal 3.26 (VTE 0.5) :
echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'
Thay thế các chuỗi mã hóa cứng này bằng cách:
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
Tham khảo "man terminfo" và "man tput" để biết mô tả đầy đủ về các lệnh này.
Thí dụ :
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"
}