เวลาเราเขียนโปรแกรมแล้วไปทดสอบบนหน้า Terminal ขาวๆ ดำๆ อาจจะรู้สึกเบื่อกันบ้างนะฮะ ดังนั้น บล็อกนี้จะขอเล่าวิธีใส่สีเข้าไปให้ไม่จืดชืดล่ะ

ตัวอย่างแบบ extreme อันนี้ก็อาจจะเกินไปนิด แต่เห็นภาพนะฮะ


Shell color codes

Terminal console ทำได้ดีกับการแสดงผลข้อความ ตรงนี้แหละ เราเลยสามารถเติมข้อความที่เป็นรหัสเข้าไปบอกให้มันแสดงสีๆ ได้ ซึ่งรหัสที่ว่า มันมีหน้าตาแบบนี้ฮะ \033[...m

เราจะมาดูกันว่า จะใช้ได้ยังไงบ้าง ซึ่งผมก็มีเตรียมให้แล้วทั้ง Python และ Shell script เลยฮะ

ใครใจร้อน สามารถไปดูตัวเต็มที่ repo ตามลิงก์ข้างล่างนี้เลย

GitHub - bluebirz/shell-color-codes
Contribute to bluebirz/shell-color-codes development by creating an account on GitHub.

ใช้กับ Python

In the repo, I have created a class of constants of shell color codes. It looks as below.

module

ใน repo ผมเขียน class เก็บค่าคงที่ของ shell color code เอาไว้ หน้าตาประมาณนี้ฮะ

อันนี้เป็นแค่ส่วนหนึ่งนะฮะ ของจริงมีเยอะกว่านี้ ดูใน repo ได้ฮะ

หยิบมาใช้

พอตอนจะใช้ ก็แค่ import มันเข้ามาแล้วเลือกค่า code ที่อยากได้ใส่ไว้ข้างหน้าข้อความที่ต้องการแต่งสี ข้อความนั้นก็จะเป็นสีที่กำหนดไปจนสุด string หรือเราเลือกใส่ default color code ซึ่งผมกำหนดชื่อไว้ว่า RESET ( \033[0m ) ฮะ

แบบนี้

ถ้าต้องการอ่านเพิ่มเติมเกี่ยวกับ regex ผมมีบล็อกเขียนไว้ก่อนหน้านี้แล้ว ตามลิงก์ข้างล่างนี้เลยฮะ

REGEX ไม่เล็กนะครับ
Regular Expression ถูกใช้เป็นเครื่องมือตรวจสอบและแก้ไขข้อความที่ใช้เป็นพื้นฐานสำหรับทุกภาษาโปรแกรมมิ่งเลยล่ะฮะ

ล้างค่า color code

ทีนี้ถ้าเราอยาก clear color code ทั้งหมดล่ะ ต้องมาลบเองรึเปล่า ไม่ต้องฮะ ผมก็มีเขียน function ไว้เรียบร้อยแล้วเหมือนกัน

ผมใช้ library re และ function .sub() เพื่อแทนที่ข้อความ โดยเลือก regex เป็น r"\033\[[\d;]+m" หมายความว่า ส่วนไหนของข้อความที่ขึ้นต้นด้วย \033[ ตามด้วยตัวเลขหรือ comma และจบด้วย m จะถูกแทนที่ด้วย empty string เทียบเท่าการลบส่วนนั้นทิ้งไปนั่นแหละฮะ

ผลลัพท์

เนี่ย หน้าตาตอน run ออกมาแล้ว ผมเขียนให้แสดงทั้งที่ใส่ color code และที่ล้างค่าแล้ว


ใช้กับ Shell script

รอบนี้กับ Shell ก็เขียนคล้ายกับ Python นะฮะ แต่มีจุดต่างนิดหน่อย

module

เป็นแค่ส่วนหนึ่งของที่อยู่ใน repo นะฮะ

หยิบมาใช้

เริ่มด้วย source file แล้วก็ใช้งานได้เลยฮะ อ้อ อย่าลืมเติม RESET ( \033[0m ) เมื่อจบข้อความที่ต้องการ จะได้สีกลับมาเป็นแบบเดิมฮะ

ล้างค่า color code

ใช้ regex เหมือนกัน แต่เป็น regex คนละตัวกันฮะ

รอบนี้เราจะใช้ [^[:print:]]\[[0-9;]+m เพราะว่า \033 มันเป็น non-printable character หรือตัวขระที่จะไม่แสดงออกมาบน console กลายเป็นว่า เรากำลังมองหาข้อความตรงส่วนที่ ไม่ได้ขึ้นต้นด้วย printable characters แล้วตามด้วย [ และตัวเลขหรือ comma และจบด้วย m

ใช้ sed และมี -r flag หมายถึง extended regex ฮะ

รวมกันเป็น function นี้ เพื่อใช้ลบ color codes ใน Shell นั่นเองฮะ

ผลลัพท์


References


แก้ไข

2023-08-19: เปลี่ยนจาก "Bash" เป็น "Shell" เนื่องจาก color code นี้สามาถใช้ได้กับ Shell script ไหนก็ได้ ไม่จำกัดว่าเป็นแค่ Bash ฮะ