ผู้ใช้ Emacs ใน Terminal ฝ่าฟันปัญหาคีย์ลัดและค้นพบความเป็นไปได้ใหม่ๆ

ทีมชุมชน BigGo
ผู้ใช้ Emacs ใน Terminal ฝ่าฟันปัญหาคีย์ลัดและค้นพบความเป็นไปได้ใหม่ๆ

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

ความท้าทายของคีย์ลัดใน Terminal

การรัน Emacs ในโหมดเทอร์มินัลนำเสนอความท้าทายเฉพาะตัวที่ผู้ใช้ GUI ไม่เคยพบเจอ ปัญหาพื้นฐานเกิดจากวิธีที่เทอร์มินัลเอมูเลเตอร์จัดการกับการป้อนข้อมูลจากแป้นพิมพ์ก่อนที่ข้อมูลจะไปถึง Emacs เอง คีย์ผสมที่ซับซ้อนอย่างเช่น Ctrl+Backspace มักจะถูกแปลงหรือหายไประหว่างทางจากเทอร์มินัลไปยังแอปพลิเคชัน ปัญหานี้เห็นได้ชัดยิ่งขึ้นสำหรับผู้ใช้ที่มีเลย์เอาต์แป้นพิมพ์ที่ไม่ใช่ QWERTY หรือภาษาที่ต้องใช้ตัวอักษรที่มีเครื่องหมาย

ผู้ใช้หนึ่งคนได้สรุปความรู้สึกของชุมชนเกี่ยวกับข้อจำกัดของเทอร์มินัลได้อย่างสมบูรณ์แบบ: ฉันไม่เคยเข้าใจจริงๆ กับการรัน Emacs ในเทอร์มินัล แต่เลือกที่จะรันเทอร์มินัลภายใน GUI Emacs แทน มุมมองนี้เน้นย้ำว่าผู้ใช้จำนวนมากชอบการฝังฟังก์ชันการทำงานของเทอร์มินัลไว้ภายในสภาพแวดล้อม Emacs แบบกราฟิกมากกว่าวิธีการแบบตรงกันข้าม

โซลูชันเกิดใหม่และโปรโตคอล Terminal

ชุมชนได้รวมตัวกันรอบๆ โซลูชันทางเทคนิคหลายอย่างเพื่อปรับปรุงประสบการณ์ Emacs ในเทอร์มินัล Kitty Keyboard Protocol (KKP) ได้ปรากฏขึ้นเป็นแนวทางที่มีความหวัง โดยผู้ใช้รายงานความสำเร็จในการใช้มันกับเทอร์มินัลเอมูเลเตอร์อย่างเช่น Kitty และ Ghostty โปรโตคอลนี้เปิดใช้งานการตรวจจับคีย์ที่เชื่อถือได้มากขึ้นและแม้แต่การแมปคีย์ลัดซูเปอร์และสลับคีย์ปรับค่า - ฟังก์ชันการทำงานที่ก่อนหน้านี้ไม่น่าเชื่อถือในสภาพแวดล้อมเทอร์มินัล

อย่างไรก็ตาม การนำโซลูชันเทอร์มินัลเฉพาะบางตัวไปใช้ได้จุดประกายการโต้เถียงของตัวเอง ผู้ใช้บางคนแสดงความกังวลเกี่ยวกับการเก็บข้อมูลเทเลเมทรีในเทอร์มินัลเอมูเลเตอร์บางตัว โดยชี้ให้เห็นว่า Kitty โทรศัพท์กลับบ้าน โดยส่งข้อมูลไปยังเซิร์ฟเวอร์ด้วยการเลือกไม่ส่งข้อมูลเทเลเมทรี แทนที่จะเป็นการเลือกส่ง สิ่งนี้ทำให้สมาชิกในชุมชนบางส่วนหันไปสำรวจเทอร์มินัลทางเลือกที่เคารพความเป็นส่วนตัวในขณะที่ยังคงความเข้ากันได้กับโปรโตคอลแป้นพิมพ์

Terminal Emulators สำหรับ Emacs

  • Kitty: รองรับโปรโตคอล KKP และข้อความขนาดผันแปรได้ แต่มีการเก็บข้อมูลการใช้งานแบบ opt-out
  • Ghostty: เข้ากันได้กับ KKP เป็นทางเลือกที่เน้นความเป็นส่วนตัว
  • iTerm2 (macOS): เข้ากันได้กับ KKP แต่อาจไม่รายงานปุ่ม Super
  • ตัวเลือกในตัว: M-x shell (พื้นฐาน), vterm (ประสิทธิภาพสูง), eat (การจัดการปุ่มกดที่ดีกว่า)

สถาปัตยกรรม Client-Server และการบูรณาการกับระบบ

ผู้ใช้ Emacs ที่มีประสบการณ์หลายคนได้ก้าวข้ามการใช้งาน emacs -nw แบบง่ายๆ ไปสู่การตั้งค่า client-server ที่ซับซ้อน แนวทางการบูรณาการกับ systemd ซึ่ง Emacs ทำงานเป็นเดมอนพื้นหลังและผู้ใช้เชื่อมต่อผ่าน emacsclient ได้รับความนิยมเนื่องจากความเร็วและประสิทธิภาพ สถาปัตยกรรมนี้ขจัดความล่าช้าในการเริ่มต้นและเปิดใช้งานการสร้างเฟรมทันทีในขณะที่รักษาสถานะของเซสชัน

ชุมชนได้ปรับปรุงแนวทางนี้เพิ่มเติมโดยการรัน Emacs server แยกกันสำหรับอินเทอร์เฟซ GUI และเทอร์มินัล ซึ่งช่วยให้ผู้ใช้สามารถรักษาการกำหนดค่าที่แตกต่างกันสำหรับแต่ละสภาพแวดล้อม - รักษาธีมเทอร์มินัลให้เป็นสีเข้มอย่างสม่ำเสมอในขณะที่อนุญาตให้ธีม GUI เปลี่ยนแปลงได้ตลอดทั้งวัน ดังที่ผู้ใช้หนึ่งคนอธิบาย การแยกนี้ช่วยแก้ปัญหาความรำคาญที่การเปลี่ยนแปลง เช่น ธีม ถูกสะท้อนบนไคลเอ็นต์และทุกเฟรมที่เชื่อมต่อกับมัน

คำสั่ง Emacs ทั่วไปสำหรับ Terminal

  • emacs -nw - เปิด Emacs ในโหมด terminal (ไม่มีหน้าต่าง)
  • emacsclient -t - เชื่อมต่อไปยัง Emacs server ที่มีอยู่แล้วใน terminal
  • emacs-nox - Emacs ที่คอมไพล์โดยไม่รองรับ GUI
  • systemctl --user start emacsd.service - เริ่มต้น Emacs ในรูปแบบ user service

การจำลอง Terminal ภายใน Emacs

ที่น่าสนใจคือ ผู้ใช้ Emacs GUI จำนวนมากใช้วิธีการตรงกันข้าม - คือการรันเทอร์มินัลเอมูเลเตอร์ภายใน Emacs นั่นเอง แพ็คเกจอย่าง vterm และ eat (Emulate A Terminal) ได้พัฒนาจนสามารถให้การจำลองเทอร์มินัลประสิทธิภาพสูงโดยตรงภายในบัฟเฟอร์ของ Emacs ผู้ใช้รายงานว่า eat โดยเฉพาะนั้นทำงานได้ดีเยี่ยมในสภาพแวดล้อมเทอร์มินัลด้วย การกะพริบน้อยลงมาก และดูเหมือนจะจัดการกับการส่งต่อคีย์ได้ดีกว่ามาก เมื่อเทียบกับทางเลือกอื่นๆ

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

โปรโตคอลทางเทคนิคที่สำคัญ

  • KKP (Kitty Keyboard Protocol): ช่วยให้สามารถตรวจจับคีย์ได้อย่างน่าเชื่อถือในเทอร์มินัล
  • OSC-52: โปรโตคอลเทอร์มินัลสำหรับการเข้าถึงคลิปบอร์ดใน nox builds
  • Child Frames: ฟีเจอร์เทอร์มินัลที่กำลังจะมาถึงสำหรับองค์ประกอบ UI แบบลอยตัว
  • Systemd Services: วิธีการสำหรับรัน Emacs เป็น daemon ในพื้นหลัง

การพัฒนาภายหน้าและความตื่นเต้นของชุมชน

ประสบการณ์ Emacs ในเทอร์มินัลยังคงพัฒนาต่อไปโดยมีฟีเจอร์ที่จะมาถึงสร้างความตื่นเต้นอย่างมีนัยสำคัญ แมสเตอร์บรานช์ของ Emacs ตอนนี้สนับสนุน child frames ในโหมดเทอร์มินัลแล้ว ซึ่งเป็นพัฒนาการที่สมาชิกชุมชนหนึ่งเน้นย้ำว่าทำให้ เปิดใช้งานเมนูเติมข้อความอัตโนมัติแบบลอยได้, กล่องแจ้งเตือน, ปฏิสัมพันธ์แบบกล่องข้อความ - ความเป็นไปได้ที่น่าสนใจทั้งหมดที่เรามีใน GUI มานานแล้ว

ความก้าวหน้านี้อาจลดช่องว่างของฟีเจอร์ระหว่าง Emacs เทอร์มินัลและกราฟิกลงอย่างมาก โดยนำองค์ประกอบ UI ที่ซับซ้อนมาสู่ผู้ใช้เทอร์มินัล นอกจากนี้ เทอร์มินัลอย่าง Kitty ได้แนะนำความสามารถข้อความขนาดแปรผัน ซึ่งในที่สุดอาจเปิดใช้งานการปรับขนาดฟอนต์ต่อเฟรมใน Emacs เทอร์มินัล - ซึ่งเป็นฟีเจอร์ที่ปัจจุบันมีเฉพาะในเวอร์ชัน GUI

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

อ้างอิง: Emacs in the terminal: keybindings, client and more