Làm thế nào để làm: gạch chân, in đậm, in nghiêng, gạch ngang, màu sắc, nền và kích thước trong Gnome Terminal?


58

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

Màu sắc

background

font <(nó đơn điệu nếu bạn không thể nói)

kích thước


1
Và chính xác những gì muốn thay đổi? Lời nhắc, văn bản bạn nhập, đầu ra của lệnh của bạn?
Radu Rădeanu

xuất PS1 thực sự. Mặc dù tôi cũng thích nó cho tiếng vang cơ bản.
Akiva

1
Nếu nó hỗ trợ "Mờ", tôi sẽ chuyển. :(
Jürgen A. Erhard

Câu trả lời:


75

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

nhập mô tả hình ảnh ở đây

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


Tôi đã thêm ba cái nữa cho kích thước, phông chữ và nền. Là những điều có thể?
Akiva

1
@Akiva Bạn có thể dễ dàng thay đổi màu nền (Xem chuyên mục ). Về kích thước, tôi không nghĩ rằng nó có thể. Đối với phông chữ, cài đặt duy nhất là giá trị gconf toàn cầu ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau

1
@dashesy: ​​Theo en.wikipedia.org/wiki/ANSI_escape_code , 53 nên thực hiện quá mức. Nhưng trong thiết bị đầu cuối của tôi không làm gì cả.
Sylvain Pineau

1
@egmont Tôi nhớ tôi muốn sử dụng nó trong 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).
bảnh bao

1
@dashesy Cảm ơn, đây thực sự là một trường hợp sử dụng khá tuyệt vời :) Tiến trình của Gnome-terminal được theo dõi tại đây .
egmont

26

Để 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 đó

nhập mô tả hình ảnh ở đây


20

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 đậmgạ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[0mcà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!


16

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[mhoặc \e[0mvô 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\\'

Đây là một ảnh chụp màn hình chứng minh kết quả: Kết xuất trong gnome-terminal 3.28


2
Ảnh chụp màn hình kết quả sẽ rất đáng yêu, đối với những người trong chúng ta không có các phiên bản gnome-terminal / vte này.
Marius Gedminas

@MariusGedminas Xong.
egmont

Câu trả lời tuyệt vời! Cảm ơn đã dành thời gian để thu thập tất cả những điều này! Tôi tự hỏi nếu họ cũng làm việc trên iTerm2 (sẽ cố gắng tự kiểm tra điều đó trong thời gian ngắn ...)
filbranden

2

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.