จะทำอย่างไร: ขีดเส้นใต้ตัวหนาตัวเอียงขีดเส้นใต้สีพื้นหลังและขนาดใน Gnome Terminal


58

วิธีการ: ขีดเส้นใต้ตัวหนาตัวเอียงขีดทับและสีในอาคาร Gnome

กล้า

ตัวเอียง

ขีดเส้นใต้

s̶t̶r̶i̶k̶e̶̶i̶t̶̶l̶i̶k̶̶e̶̶i̶t̶s̶̶h̶o̶t

สี

background

font <(เป็นขาวดำถ้าคุณไม่สามารถบอกได้)

ขนาด


1
และต้องการเปลี่ยนแปลงอะไร พรอมต์ข้อความที่คุณป้อนผลลัพธ์ของคำสั่งของคุณหรือไม่
Radu Rădeanu

ส่งออก PS1 จริง แม้ว่าฉันจะชอบเสียงก้องพื้นฐานเช่นกัน
Akiva

1
หากรองรับ "จาง ๆ " ฉันจะสลับ :(
Jürgen A. Erhard

คำตอบ:


75

เทอร์มินัล ANSI / VT100 และเทอร์มินัลอีมูเลเตอร์ไม่เพียง แต่สามารถแสดงข้อความขาวดำ พวกเขาสามารถแสดงสีและข้อความที่จัดรูปแบบได้เนื่องจากการหลีกเลี่ยงลำดับ ลำดับเหล่านั้นประกอบด้วยอักขระ Escape (มักแสดงโดย "^ [" หรือ "Esc") ตามด้วยอักขระอื่น ๆ : "Esc [FormatCodem"

ใน Bash สามารถรับอักขระด้วยไวยากรณ์ต่อไปนี้:

\e
\033
\x1B

ป้อนคำอธิบายรูปภาพที่นี่

คำสั่ง (เพื่อคัดลอกง่ายวาง):

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"

แหล่งที่มา (รวมถึงรหัสสีเบื้องหน้า / พื้นหลังทุกประเภท): http://misc.flogisoft.com/bash/tip_colors_and_formatting


ฉันเพิ่มขนาดตัวอักษรและพื้นหลังเพิ่มอีกสามรายการ เป็นไปได้เหล่านี้หรือไม่
Akiva

1
@Akiva คุณสามารถเปลี่ยนสีพื้นหลังได้อย่างง่ายดาย (ดูหัวข้อเฉพาะ) เกี่ยวกับขนาดฉันไม่คิดว่ามันเป็นไปได้ สำหรับแบบอักษรการตั้งค่าเดียวคือค่า gconf ทั่วโลก ( /apps/gnome-terminal/profiles/Default/font)
Sylvain Pineau

1
@dashesy: ​​ตามen.wikipedia.org/wiki/ANSI_escape_code , 53 ควรทำ overline แต่ใน terminal ของฉันไม่ได้ทำอะไรเลย
Sylvain Pineau

1
@egmont ฉันจำได้ว่าฉันต้องการที่จะใช้มันในPS1(ใน gnome-terminal จริง ๆ ) เพราะขีดเส้นใต้ชนิดของการผสมในข้อความด้านล่างมันทำให้อ่านยากขึ้นและแน่นอนว่าการนัดหยุดงานผ่านดูผิดไป การมีบรรทัดจะช่วยให้จำคำสั่งก่อนหน้าเมื่อเลื่อนขึ้น (เช่นสี)
dashesy

1
@dashesy ขอบคุณก็จริงกรณีใช้เย็นสวย :) ความคืบหน้า Gnome ขั้วมีการติดตามที่นี่
egmont

26

เพื่อขยายคำตอบของ Sylvain ผู้ช่วยบางฟังก์ชั่น:

ansi()          { echo -e "\e[${1}m${*:2}\e[0m"; }
bold()          { ansi 1 "$@"; }
italic()        { ansi 3 "$@"; }
underline()     { ansi 4 "$@"; }
strikethrough() { ansi 9 "$@"; }
red()           { ansi 31 "$@"; }

แล้วก็

ป้อนคำอธิบายรูปภาพที่นี่


20

บางสิ่งที่ยังไม่ครอบคลุมคือการรวมกันของพารามิเตอร์สองหรือสามอย่างเช่นตัวหนาและขีดเส้นใต้ในสีที่กำหนดไว้ล่วงหน้า นี่คือความสำเร็จโดยไวยากรณ์ 3 ทางตัวอย่างเช่น:

~$ printf "\e[3;4;33mthis is a test\n\e[0m"

จะทำให้ "นี่คือการทดสอบ" ที่จะพิมพ์ในสีเหลือง ( 33m), ตัวเอียง ( 3m) และขีดเส้นใต้ ( 4m)
โปรดทราบว่าไม่จำเป็นต้องทำซ้ำ\e[ทุกครั้ง
โปรดทราบด้วยว่า (เหมือน Sylvain) ฉันยังได้เพิ่มการ\e[0mตั้งค่าใหม่ทุกครั้งเพราะไม่เช่นนั้นสีเหลืองและรูปแบบตัวอักษรจะยังคงทำงานในเทอร์มินัล! ไม่จำเป็นต้องพูดว่าคุณต้องระวังสิ่งเหล่านี้เพื่อรีเซ็ตสคริปต์เนื่องจากผู้ใช้ที่ใช้สคริปต์ของคุณอาจไม่ชอบถ้าสคริปต์ของคุณปรับเปลี่ยนการตั้งค่าสี + สไตล์ในเทอร์มินัลอย่างถาวร !


16

เทอร์มินัล GNOME 3.28 (VTE 0.52) เปิดตัวครั้งแรกใน Ubuntu 18.04 LTS เพิ่มการรองรับอีกหลายสไตล์รวมถึงการขีดเส้นใต้ที่เป็นลอนและสีตามที่เห็นในคิตตี้, overline เท่าที่เห็นใน Konsole

สิ่งเหล่านี้ยังทำงานในเทอร์มินัลอีมูเลเตอร์ VTE อื่น ๆ โดยอัตโนมัติ (เช่น Tilix, Terminator, Xfce4-terminal, Guake ฯลฯ ) โดยที่ VTE นั้นเป็นรุ่นอย่างน้อย 0.52

นี่คือรายการที่แสดงให้เห็นถึงลำดับการหลีกเลี่ยงมาตรฐานรวมถึงส่วนเพิ่มเติม (VTE) ของเทอร์มินัล GNOME โปรดทราบว่าสำหรับทุกลำดับการเปิดฉันยังแสดงลำดับการปิดของคุณสมบัตินั้นเท่านั้นไม่ใช่แบบทั่วไป\e[mหรือ\e[0mที่ปิดใช้งานโหมดพิเศษทั้งหมด

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'

(*) ค่า Truecolor สำหรับการขีดเส้นใต้มีค่าประมาณเล็กน้อย

และสิ่งที่แปลกเล็กน้อยที่ไม่พอดีกับภาพนี้เนื่องจากมีฟังก์ชั่นมากกว่าสไตล์ แต่ก็น่าจะกล่าวถึงที่นี่คือการเชื่อมโยงหลายมิติที่สนับสนุนการออกแบบร่วมกับ iTerm2 ซึ่งมีอยู่ตั้งแต่ GNOME Terminal 3.26 (VTE 0.50) :

echo -e '\e]8;;http://askubuntu.com\e\\hyperlink\e]8;;\e\\'

นี่คือภาพหน้าจอที่แสดงผลลัพธ์: แสดงผลใน gnome-terminal 3.28


2
ภาพหน้าจอของผลลัพธ์น่ารักสำหรับพวกเราที่ไม่มีเวอร์ชัน gnome-terminal / vte
Marius Gedminas

@MariusGedminas เรียบร้อยแล้ว
egmont

คำตอบที่ยอดเยี่ยม! ขอบคุณที่สละเวลารวบรวมสิ่งเหล่านี้! ฉันสงสัยว่าพวกเขายังทำงานกับ iTerm2 (จะลองตรวจสอบด้วยตัวเองในไม่ช้า ... )
filbranden

2

แทนที่ลำดับฮาร์ดโค้ดเหล่านี้โดย:

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

อ้างถึง "man terminfo" และ "man tput" สำหรับคำอธิบายที่สมบูรณ์ของคำสั่งเหล่านี้

ตัวอย่าง:

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.