2 คะแนน โดย GN⁺ 2024-10-04 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • การตั้งค่าสีของเทอร์มินัลเป็นปัญหาที่ยากสำหรับหลายคน โดยเฉพาะคู่สี "ตัวอักษรสีน้ำเงินบนพื้นหลังสีดำ" ที่มักถูกพูดถึงว่าอ่านยาก
  • สี ANSI มีทั้งหมด 16 สี และเทอร์มินัลอีมูเลเตอร์แต่ละตัวอาจตีความสีเหล่านี้ต่างกันได้

ปัญหา 1: ตัวอักษรสีน้ำเงินบนพื้นหลังสีดำ

  • ข้อความสีน้ำเงินบนพื้นหลังสีดำอ่านได้ยาก
  • สี ANSI ไม่มีมาตรฐานตายตัว จึงอาจแสดงผลต่างกันไปในแต่ละเทอร์มินัล

ปัญหา 1.5: สีเหลืองอ่อนบนพื้นหลังสีขาว

  • สีเหลืองอ่อนบนพื้นหลังสีขาวแทบอ่านไม่ออกเลย
  • เพื่อแก้ปัญหาเรื่องคอนทราสต์ของสี สามารถปรับชุดสีของเทอร์มินัลอีมูเลเตอร์ใหม่ได้

วิธีปรับชุดสี

  • วิธีที่ 1: ตั้งค่าในเทอร์มินัลอีมูเลเตอร์ : เทอร์มินัลอีมูเลเตอร์สมัยใหม่ส่วนใหญ่มีฟังก์ชันสำหรับปรับชุดสี
  • วิธีที่ 2: รันเชลล์สคริปต์ : สามารถใช้ ANSI escape code เพื่อเปลี่ยนสีของเทอร์มินัลได้

ปัญหา 2: โปรแกรมที่ใช้ 256 สี

  • โปรแกรมอย่าง fd ใช้ชุดสีแบบขยาย 256 สี ซึ่งอาจทำให้คอนทราสต์ของสีแย่ได้
  • เครื่องมือสมัยใหม่บางตัวรองรับธีมแบบกำหนดเอง จึงทำงานร่วมกับธีมเทอร์มินัลที่หลากหลายได้ดี

ปัญหา 3: สีเทาในธีม Solarized

  • สีเทาในธีม Solarized ส่งผลต่อสีของไดเรกทอรีและไฟล์ที่รันได้
  • ธีม Solarized แบบดั้งเดิมใช้สีเทา แต่เวอร์ชัน base16 ที่ปรับแก้แล้วใช้สีที่สว่างกว่า

ปัญหา 4: ธีม vim ที่ไม่เข้ากับพื้นหลังของเทอร์มินัล

  • หากสีพื้นหลังของธีม vim ไม่ตรงกับธีมเทอร์มินัล อาจเกิดขอบคั่นขึ้นมาได้

ปัญหา 5: การตั้งค่าสีพื้นหลังของโปรแกรม

  • โปรแกรมอย่าง ngrok อาจตั้งค่าสีพื้นหลังที่ไม่ต้องการ
  • สคริปต์ base16-shell ตั้งค่าสี #16 เป็นสีส้มสว่างเพื่อเพิ่มสีเพิ่มเติม

ปัญหา 6: ตั้งค่า TERM ผิด

  • หากตั้งค่าตัวแปรสภาพแวดล้อม TERM ไม่ถูกต้อง สีอาจแสดงผลไม่ถูกต้อง

ปัญหา 7: ความยากในการเลือกสีที่ดี

  • ผู้ที่มีภาวะตาบอดสีอาจหาชุดสีที่เหมาะสมได้ยาก
  • หากสีพื้นหลังกับสีเคอร์เซอร์คล้ายกันเกินไป ก็อาจมองหาเคอร์เซอร์ได้ยาก

ปัญหา 8: ปัญหาสีของ nethack/mc

  • โปรแกรมอย่าง nethack หรือ midnight commander อาจคาดหวังธีมสีเฉพาะแบบหนึ่ง
  • สามารถแก้ปัญหาได้โดยเปลี่ยนพาเลตต์สีก่อนเริ่มโปรแกรม

ปัญหา 9: ปิดการใช้สีเมื่อเขียนลงไพป์

  • คำสั่งอย่าง fd | less จะปิดการแสดงสี
  • สามารถใช้ unbuffer fd | less -r เพื่อดูสีได้

ปัญหา 10: สีที่ไม่ต้องการของ ls และคำสั่งอื่น ๆ

  • สามารถปิดการใช้สีของ ls หรือปรับแต่งสีเองได้

ปัญหา 11: ปัญหาสีใน vim

  • การตั้งค่าสีของ vim มีสองแนวทางคือใช้สี ANSI และใช้สีแบบ 24 บิต
  • ตั้งแต่ปี 2016 เป็นต้นมา vim รองรับสีแบบ 24 บิตแล้ว

ปัญหาอื่น ๆ

  • ปัญหาที่เกิดจากการผสมกันของหลายโปรแกรมรับมือได้ยาก

ผลของ base16

  • สามารถตั้งค่าสีได้สำเร็จโดยใช้ base16-shell และ base16-vim
  • แต่อาจยังมีข้อจำกัดจากธีมในตัวที่มีให้เลือกน้อยและปัญหาของการตั้งค่าสี ANSI

เครื่องมือธีมสีอื่น ๆ

  • มีเครื่องมือสร้างธีมสีอย่าง rootloops.sh
  • ธีมสียอดนิยมได้แก่ catpuccin, Monokai, Gruvbox, Dracula เป็นต้น

สรุปของ GN⁺

  • การตั้งค่าสีของเทอร์มินัลมีความซับซ้อน แต่ฟังก์ชันคอนทราสต์ขั้นต่ำช่วยแก้ปัญหาได้หลายอย่าง
  • สามารถปรับปรุงประสบการณ์ผู้ใช้ได้ด้วยการใช้ธีมสีและเครื่องมือต่าง ๆ
  • การตั้งค่าสีของเทอร์มินัลอาจแตกต่างกันไปตามความชอบและความต้องการของแต่ละคน
  • โปรเจกต์อื่นที่มีฟังก์ชันคล้ายกันและน่าแนะนำ ได้แก่ Solarized, Gruvbox เป็นต้น.

1 ความคิดเห็น

 
GN⁺ 2024-10-04
ความคิดเห็นจาก Hacker News
  • พบว่าธีมสว่างแสดงผลต่างจากธีมมืดเล็กน้อยบนหน้าจอและการตั้งค่าที่หลากหลาย นี่เป็นปัญหาร้ายแรงเมื่อย้ายธีมไปใช้กับคอมพิวเตอร์หลายเครื่อง

    • อาจเกิดปัญหาเมื่อสลับไปใช้คอนโซล Linux หรือ BSD ที่รองรับฟอนต์และสีกัดจำกัด เคยใช้ fbterm เพื่อให้ได้ความสามารถของเทอร์มินัลที่พอใช้ได้โดยไม่ต้องพึ่ง X แต่ fbterm เองก็มีปัญหาเช่นกัน ตอนตั้งค่าสีของ vim จึงต้องเตรียมธีมสำรองไว้สำหรับคอนโซลที่ความสามารถจำกัด
  • ธีมสีเริ่มต้นของ terminal emulator ไม่ดีนักจึงควรเปลี่ยน ส่วนตัวชอบธีม Solarized

    • ควรหลีกเลี่ยงเครื่องมือ CLI ที่ใช้ escape sequence สีแบบ 8 บิตหรือ 24 บิต เพราะอาจไม่เป็นมิตรกับผู้ใช้ การที่นักพัฒนาตั้งธีมสีมาให้เป็นค่าเริ่มต้นก็ไม่ได้ช่วยอะไร
  • อยากใช้ธีมสว่าง แต่หลายโปรแกรมใช้สีที่ปรับมาสำหรับพื้นหลังมืดจึงยอมแพ้ไป ตอนนี้ใช้ธีม ANSI บนพื้นหลังมืดเพื่อให้คอนทราสต์เพียงพอ

  • ควรใช้ algorithm APCA แบบใหม่เพื่อตรวจสอบสี โดย APCA คำนึงถึงขนาดฟอนต์ น้ำหนักฟอนต์ สีพื้นหน้า/พื้นหลัง แสงโดยรอบ ฯลฯ

  • บางคนก็อยากปิดการใช้สีทั้งหมด ส่วนตัวก็อยากลองเหมือนกัน แต่ก็ชอบสีสวย ๆ ด้วย

  • ค่า frame-background-mode ของ Emacs อาจตั้งผิดจนทำให้สีดูไม่ดี

  • ใช้ธีมสี FlatUI ที่ปรับแต่งเล็กน้อยอยู่ และใช้งานได้โดยไม่มีปัญหาใหญ่

  • สีน้ำเงินของป้ายไฟนีออนหรือป้ายชื่อ LED เป็นสีที่รบกวนสายตาที่สุดในตอนกลางคืน มองจากไกล ๆ จะดูพร่าและโฟกัสไม่เข้า

  • สนใจเรื่องสีของเทอร์มินัลน้อยลงแล้ว และการปรับสีไม่ได้ส่งผลบวกต่อประสิทธิภาพการทำงาน แค่ปรับคอนทราสต์พื้นหลังของธีม 'pro' เริ่มต้นใน Apple Terminal เล็กน้อย

  • เคยใช้เวลากับการเลือกสีเทอร์มินัลไปมาก แต่ตอนนี้ใช้ข้อความสีดำบนพื้นหลังสีขาว ตอนกลางวันไม่แสบตา และตอนกลางคืนใช้ f.lux เพื่อลดความล้าของดวงตา