2 คะแนน โดย GN⁺ 2024-01-31 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

แค่อยากทำให้ Emacs ดูสวยขึ้น — การใช้สี 24 บิตในเทอร์มินัล

  • ชุมชน Emacs ยังคงคึกคัก และมีฟีเจอร์สมัยใหม่อย่างการเติมโค้ดอัตโนมัติและการตรวจสอบชนิดข้อมูลแบบอินไลน์ผ่าน LSP
  • ในสภาพแวดล้อมแบบกราฟิก Emacs รองรับสี 24 บิตโดยอัตโนมัติ แต่ในเทอร์มินัลจะไม่เป็นเช่นนั้น

ANSI escape code

  • เทอร์มินัลฮาร์ดแวร์ยุคแรกมีโค้ดควบคุมที่ไม่เข้ากันระหว่างกัน และ ANSI ได้เข้ามาทำให้สิ่งเหล่านี้เป็นมาตรฐาน
  • ผ่าน SGR (Select Graphics Rendition) จึงสามารถตั้งค่าคุณสมบัติการแสดงผลตัวอักษรได้หลากหลาย

สี 3, 4 และ 8 บิต

  • เมื่อเริ่มมีการนำสีมาใช้ เดิมมีสีพื้นฐาน 8 สี และภายหลังได้เพิ่มสีสว่างเข้าไปจนรวมเป็น 16 สี
  • ในปี 1999 Todd Larason ได้เพิ่มแพตช์ให้ xterm รองรับสี 256 สี

การรองรับสี 24 บิตมาจากไหน?

  • วิธีส่งค่าสี 8 บิตและ 24 บิตไปยังเทอร์มินัลที่รองรับนั้นมีการบันทึกเอกสารไว้อย่างดี
  • จากกระบวนการทำมาตรฐาน ANSI ในยุค 70 และต่อมา ISO 8613-6 (ITU T.416) ในยุค 90 ได้กำหนดให้ 38 และ 48 เป็นโหมดสี foreground และ background แบบขยาย

Terminfo

  • Terminfo เป็นฐานข้อมูลความสามารถของเทอร์มินัล และผ่านตัวแปรสภาพแวดล้อม TERM โปรแกรมจะรู้ว่าควรใช้ระเบียน terminfo ใด
  • xterm-256color และ xterm-direct รองรับสี 256 สีและสีแบบ RGB ตามลำดับ

การตั้งค่า TERM: ปัญหาเครื่องหมายอัฒภาค

  • เนื่องจากหลายเทอร์มินัลรองรับเฉพาะไวยากรณ์แบบอัฒภาค จึงต้องตรวจสอบให้แน่ใจว่าได้ตั้งค่า TERM ไว้อย่างถูกต้อง

การตั้งค่า Emacs

  • Emacs มีเอกสารอธิบายวิธีตรวจจับการรองรับ truecolor
  • RGB เป็นความสามารถด้านสีพื้นฐานของ Emacs โดยจะค้นหาสตริง setf24 และ setb24 ก่อน

เทอร์มินัลแบบซ้อนกัน

  • เวิร์กโฟลว์ทั่วไปมักใช้งานเทอร์มินัลหลายชั้นซ้อนกัน
  • ทุกเลเยอร์ต้องเข้าใจสี 24 บิตและแปลงค่าได้อย่างถูกต้อง

โปรแกรมจำลองเทอร์มินัลแบบกราฟิก

  • เทอร์มินัลส่วนใหญ่ตั้งค่า TERM เป็นค่าเริ่มต้นที่เหมาะสม หรือให้ผู้ใช้ override ได้

ssh

  • ssh จะส่งต่อค่า TERM ไปยังโฮสต์ปลายทาง

tmux

  • ภายใน tmux ควรตั้งค่า TERM เป็นค่าอย่าง tmux-direct

ความเห็นของ GN⁺

  • ประเด็นสำคัญที่สุดของบทความนี้คือความต้องการของผู้ใช้ที่อยากใช้สีคุณภาพสูงแม้อยู่ในสภาพแวดล้อมเทอร์มินัล และความก้าวหน้าทางเทคนิคที่ทำให้สิ่งนี้เป็นไปได้
  • การรองรับสี 24 บิตเป็นความสามารถสำคัญที่ช่วยให้นักพัฒนามอบประสบการณ์ผู้ใช้ที่ดียิ่งขึ้นได้ โดยเฉพาะในเครื่องมืออย่างตัวแก้ไขโค้ดที่ช่วยเพิ่มความสะดวกด้านการมองเห็นอย่างมาก
  • บทความนี้น่าจะทั้งน่าสนใจและเป็นประโยชน์ต่อผู้ใช้เทอร์มินัลและ Emacs และให้ข้อมูลที่มีประโยชน์แก่ผู้ที่ต้องการประสบการณ์ด้านภาพที่ยอดเยี่ยมแม้ในสภาพแวดล้อมการทำงานแบบเทอร์มินัล

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

 
GN⁺ 2024-01-31
ความคิดเห็นจาก Hacker News
  • แสดงความคิดเห็นด้วยความทึ่งต่อความซับซ้อนของแอปพลิเคชันเทอร์มินัล และขอบคุณนักพัฒนาของแอปเทอร์มินัลอย่าง iTerm และ Kitty

    • แชร์ลิงก์ที่รวบรวมฟังก์ชันตั้งค่าสีแท็บสำหรับ iTerm และ zsh
    • ชี้ให้เห็นความซับซ้อนของอินเทอร์เฟซแบบข้อความ โดยเปรียบเทียบ terminfo กับวิธีเชื่อมต่อ HTTP หรือ SMTP ผ่าน telnet แบบเก่า
  • โดยส่วนตัวคิดว่าการปรับพาเลต 16 สีแยกตามแต่ละแอปเทอร์มินัลนั้นง่ายกว่าการทำให้โค้ดฝั่งแอปพลิเคชันตรงกับเทอร์มินัลอย่างแม่นยำ

    • ยกตัวอย่างโค้ดสำหรับตั้งค่าสีในไฟล์ .Xdefaults และไฟล์ธีม .el ที่ปรับแต่งเอง
    • กล่าวว่าด้วยวิธีนี้ สีของผลลัพธ์อย่าง ls ก็ดีขึ้นด้วย
  • คาดว่าถ้าผู้เขียนรู้จัก export COLORTERM=truecolor ก็น่าจะได้ประสบการณ์ที่ดีกว่านี้

    • ระบุว่าสิ่งนี้ถูกกล่าวถึงในเชิงอรรถของเอกสาร Emacs เรื่องการตรวจจับการรองรับ truecolor และยังปรากฏในภาพหน้าจอของ Konsole ด้วย แต่ก็อาจพลาดได้ท่ามกลางหลายชั้นของ terminal multiplexer
    • อธิบายว่าการตั้งค่านี้ช่วยข้ามการตั้งค่าที่ยุ่งยาก และไปยังขั้นที่ทำให้แอปรู้ทันทีว่าต้องการ true color
  • เน้นว่าเวลาใช้ Emacs ไม่จำเป็นต้องใช้เทอร์มินัลเสมอไป และสามารถใช้ฟรอนต์เอนด์แบบ "กราฟิก" สำหรับ MacOS, Windows, X.org หรือ Wayland ได้

    • กล่าวว่ากราฟิก Emacs ดูคล้ายกับการรันในเทอร์มินัล แต่จริง ๆ แล้วมีความสามารถหลากหลาย รวมถึงตัวดูภาพ
    • ในแบบสำรวจผู้ใช้ Emacs มีผู้ตอบ 80% ว่าใช้ฟรอนต์เอนด์แบบกราฟิก
  • ชี้ว่าการประมวลผลอาจหลงทางไปแล้ว ผ่านระบบ production ที่ยังใช้เทอร์มินัลอีมูเลเตอร์ เอดิเตอร์ และเวอร์ชันระบบปฏิบัติการจากยุค 1970

    • วิจารณ์ว่าทั้งที่คอมพิวเตอร์ทรงพลังขึ้นเป็นล้านเท่า เรายังทำงานกันในแบบเดียวกับเมื่อครึ่งศตวรรษก่อน
  • พูดติดตลกว่าอยากใช้ Cool Retro Term เพื่อทำให้ Emacs ดูเท่ขึ้น

    • แต่ก็เผยว่าในความเป็นจริงใช้ Cool Retro Term แค่สำหรับการนำเสนอเท่านั้น
    • และพบว่า Emacs ของตัวเองรองรับสี 24 บิตได้ตั้งแต่แกะกล่อง พร้อมบอกว่าการเน้นไวยากรณ์นั้นน่ารำคาญเล็กน้อย
  • พบว่าลำดับ escape แบบ ANSI มาตรฐานใช้งานได้ใน command prompt ของ Windows 10 และสี 24 บิตก็ทำงานได้ดีเช่นกัน

    • ยกตัวอย่างโค้ดสำหรับพิมพ์คำว่า "Hello" บนพื้นหลังสีแดง
  • ระบุว่าจุดที่ดีที่สุดของ Emacs เมื่อเทียบกับ vim/neovim คือการรองรับ GUI ที่ถูกปฏิบัติเป็นพลเมืองชั้นหนึ่ง

    • แม้จะมี gVim และฟรอนต์เอนด์ neovim ที่ยังไม่สมบูรณ์อีกมากมาย แต่ชอบที่ Emacs รันผ่าน GUI จริงได้เป็นค่าเริ่มต้น
    • ชี้ว่าเทอร์มินัลมีข้อจำกัดและซากประวัติศาสตร์ที่ไม่จำเป็นในยุคปัจจุบันอยู่มาก
    • กล่าวว่าหากมีปัญหาเรื่องรัน Emacs บนเซิร์ฟเวอร์ระยะไกล ก็สามารถใช้ TRAMP และ emacsclient (ไม่แน่ใจว่าทำงานผ่าน TCP หรือไม่) ได้
  • บอกว่าตัวเองคงไม่ได้ใช้ฟีเจอร์นี้ เพราะใช้การตั้งค่า Emacs ที่ใช้สีน้อยที่สุด แต่ก็อ่านแล้วเพลิดเพลินมาก

    • กล่าวว่าตัวเองชินกับสีเขียวสดของ tmux และสีน้ำตาลแดงหม่นของสีใน Emacs แล้ว
  • วิจารณ์ว่าน่าอับอายจริง ๆ ที่มาตรฐานถูกผูกไว้กับราคาสูง จนผู้คนต้องไปไกลถึงขั้นนี้โดยไม่ต้องซื้อ

    • มาตรฐานควรเข้าถึงได้สาธารณะ และแม้ในอดีตการคิดค่าใช้จ่ายสำหรับงานพิมพ์อาจสมเหตุสมผล แต่การขาย PDF ราคา $200 นั้นเหลือเชื่อจริง ๆ