Emacs คือ "ครัวที่มีทุกอย่าง" ของความยืดหยุ่น (kitchen sink of extensibility) เริ่มต้นสร้างเป็น text editor เรียบง่ายคล้าย nano แต่ปัจจุบัน Emacs มักถูกมองว่าเป็น Lisp interpreter ที่ทำอะไรได้ทุกอย่าง
Emacs สามารถเป็นเว็บเบราว์เซอร์ โปรแกรมเล่นเพลง และแม้แต่ window manager บทความนี้พูดถึง 5 แพ็กเกจที่เพิ่มประสิทธิภาพการทำงาน และวิธีติดตั้งใน vanilla Emacs
Vanilla Emacs
การติดตั้ง Emacs แบบ minimal เหมาะสมพอสมควร มี tutorial ใช้งานง่ายสอนพื้นฐานการใช้เป็น text editor
ยังมี documentation mode อันทรงพลังอธิบายฟังก์ชันแต่ละตัว และสำคัญคือ มีระบบจัดการแพ็กเกจอันทรงพลัง ติดตั้ง extensions ของบุคคลที่สามจากภายในตัวเองได้
วิธีติดตั้งแพ็กเกจ Emacs
ติดตั้งแพ็กเกจบุคคลที่สามใน Emacs ง่ายมาก แค่เปิด command buffer พิมพ์คำสั่ง กด Alt + x พิมพ์ list-packages จะเปิดหน้าต่างแสดงแพ็กเกจทั้งหมดที่ติดตั้งได้
หน้าต่างนี้ทำงานคล้าย Emacs buffer ปกติ ค้นหาด้วย Ctrl + s เคลื่อนที่ด้วยการควบคุม Emacs มาตรฐาน เช่น Ctrl + n และ Ctrl + p
ติดตั้งซอฟต์แวร์ใน list-packages แค่กด Enter หรือคลิกชื่อแพ็กเกจในรายการ ในกรณีของผม ต้องการติดตั้ง ledger-mode
ค้นหาชื่อแพ็กเกจที่ต้องการ เลือกแล้วกด Enter เปิด buffer แยกแสดงรายละเอียดแพ็กเกจ
ใน buffer นี้เห็นข้อมูลแพ็กเกจที่เลือก และนี่คือที่ติดตั้งแพ็กเกจ ย้าย cursor ไป buffer นั้นด้วย Ctrl + x + o กด Enter ที่ปุ่ม 'Install' หรือคลิกปุ่ม "Install" ด้วยเมาส์
ELPA และ MELPA: Repository แพ็กเกจสำหรับ Emacs
สำคัญคือ Emacs มี 2 แหล่งหลักสำหรับแพ็กเกจ แรก ELPA (Emacs Lisp Package Archive) repository แพ็กเกจที่ดูแลโดยนักพัฒนา Emacs โดยตรง
ELPA มีแพ็กเกจพื้นฐานและเสถียร ที่ดูแลโดยนักพัฒนาหรือใช้โดยผู้ใช้ Emacs ส่วนใหญ่
อีก repository คือ MELPA (Milkypostman's Emacs Lisp Package Archive) ชุมชน Emacs ระดับกว้างดูแล repository ภายนี้ที่มีแพ็กเกจเกือบหมดสำหรับ Emacs อัปเดตตลอดเวลาสำหรับเวอร์ชันใหม่
อย่างไรก็ตาม MELPA ไม่ใช่ค่าเริ่มต้นใน Emacs เพื่อเพิ่ม repository ใส่บรรทัดนี้ในไฟล์ "init.el":
(require 'package) (add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t) (package-initialize)
โค้ด Lisp นี้โหลดแพ็กเกจ "package.el" ใน Emacs แล้วแก้ไขรายการ archive ภายในด้วยฟังก์ชัน "add-to-list" กรณีนี้เพิ่ม MELPA archive และ URL ให้ Emacs ใช้
คำสั่งสุดท้ายคือ package-initialize บ่งบอกว่าเริ่มต้นแพ็กเกจ "package.el" แล้ว Emacs โหลด ELPA และ MELPA ได้
ด้านล่างคือคำอธิบาย 5 แพ็กเกจ Emacs ที่เป็นประโยชน์
1. Org Mode
Org Mode เป็นโปรแกรมกว้างขวาง ในแก่นคือโหมดจัดตารางเวลาและจัดระเบียบสำหรับ Emacs พร้อม syntax ที่直观และ feature-rich ช่วยให้ติดตามงานได้สะอาดและมีโครงสร้าง
Syntax นี้ยังถูกนำมาใช้โดยผู้ใช้ Emacs มากมายสำหรับจดบันทึกและเผยแพร่ ฟีเจอร์ org-export-dispatch ให้ส่งออกไฟล์ org เป็นหลายรูปแบบ เช่น LaTeX, HTML และ OpenDocument
เพิ่มเติม Org Mode ยืดหยุ่นสูง ผู้ใช้ Org นำโหมดไปใช้กับโปรแกรมต่างๆ และฟีเจอร์/extensions ใหม่ๆ
ดาวน์โหลด Org mode จาก ELPA repository ติดตั้งเสร็จ สามารถใช้ Org mode ทันทีโดยสร้างไฟล์ .org
2. Magit
ถ้าคุณเป็นโปรแกรมเมอร์ อาจรู้จัก git version control system โปรแกรมติดตามการเปลี่ยนแปลงไฟล์ชุดหนึ่ง มีประโยชน์มากในพัฒนาซอฟต์แวร์ ที่ต้องการหลายเวอร์ชันของไฟล์เพื่อ debug และ deploy การเปลี่ยนแปลงได้ง่าย
Magit คือ git client สำหรับ Emacs โปรแกรมเต็มรูปแบบจัดการ git repositories จากภายใน Emacs ฟีเจอร์หลักคือ commit ไฟล์และ traverse commit history ได้ราบรื่นขณะแก้ไขใน buffer
Magit เป็น one-stop-shop สำหรับทุกอย่างเกี่ยวกับ git ใน Emacs เพราะฉะนั้น Magit เป็นหนึ่งในแพ็กเกจที่สำคัญที่สุดสำหรับโปรแกรมเมอร์ที่ใช้ Emacs
ดาวน์โหลด Magit จาก MELPA repository
3. Evil Mode
Evil ย่อมาจาก Extensible Vi Layer โหมดที่ใช้ keybindings แบบ Vim ใน Emacs มีประโยชน์ถ้าคุณเป็นผู้ใช้ Vim กลุ่มใหญ่ก่อนเข้ามา Emacs มี basic Vi motion keys ทั้งหมด และ Vim keys เพิ่มเติม เช่น ciw, ci" และ ci<
สำคัญคือ Evil จะไม่แทนที่ keybindings เริ่มต้นของ Emacs ทั้งหมด พฤติกรรมของ Evil คล้ายการตั้ง set -o vi ใน shell เพียงเพิ่มชั้นจำลอง Vi เหนือ Emacs จึงยังใช้ keybindings เริ่มต้นได้ เช่น Alt + x, Ctrl + x และ Ctrl + f
Evil มีใน MELPA repository ติดตั้งสำหรับ Emacs client ง่าย แค่เพิ่มโค้ด 2 บรรทัดใน init.el เพื่อเริ่มใช้:
(require 'evil) (evil-mode 1)
4. Focus Mode
Focus คือ extension เรียบง่ายสำหรับ Emacs ที่ highlight ข้อความที่กำลังทำงาน โดยเปลี่ยนสีข้อความที่ไม่ได้เลือกอย่างต่อเนื่อง
เพิ่มเติม Focus highlight ส่วนต่างๆ และรูปแบบข้อความได้อัจฉริยะ Focus ทำงานกับเขียนแบบ essay ที่ใช้ประโยคและย่อหน้า แต่ก็ทำงานกับเขียนโปรแกรมที่ใช้ฟังก์ชันและวงเล็บได้เช่นกัน
เพราะฉะนั้น Focus มีประโยชน์มากสำหรับนักเขียนและโปรแกรมเมอร์ ที่ต้องการให้ย่อหน้าหรือบล็อกโค้ดที่กำลังทำงานโดดเด่น
Focus มีใน MELPA repository ติดตั้งเสร็จ เปิดใช้งานง่ายด้วย Alt + x พิมพ์ focus-mode
5. Darkroom
คล้าย Focus, Darkroom เป็น extension "เน้นโฟกัส" แต่เน้นนักเขียนมากกว่าโปรแกรมเมอร์ Darkroom สร้างสภาพแวดล้อมไร้สิ่งรบกวน โดยลบข้อมูลที่ไม่จำเป็นรอบเฟรม Emacs รวมถึง menu bars, scroll bars และ mode line
เพิ่มเติม Darkroom จัดกึ่งกลางและจำกัดข้อความรอบ 80 คอลัมน์ มีประโยชน์มากสำหรับเขียนและ proofread essay เนื่องจากมองตาไปที่ส่วนเดียวของหน้าจอ ทำให้อ่านง่าย
Darkroom ปรับแต่งได้ ปรับ margin เริ่มต้นของข้อความด้วย darkroom-increase-margins และ darkroom-decrease-margins
Darkroom มีใน ELPA repository โหมดเปิดใช้งานง่ายด้วย Alt + x พิมพ์ darkroom-mode ใน command buffer
ยินดีด้วย! ตอนนี้คุณรู้จักแพ็กเกจ Emacs ที่เป็นประโยชน์บางส่วน ที่อาจปรับปรุง workflow ประสิทธิภาพของคุณอย่างมาก หากอยากเรียนรู้เทคนิคง่ายๆ เพิ่มประสิทธิภาพใน Linux เรามีบทความให้
คำถามที่พบบ่อย
1. MELPA ปลอดภัยไหม?
ปลอดภัย! มี maintainer เล็กน้อยเท่านั้นที่เพิ่มแพ็กเกจใน MELPA archive ส่ง pull request ให้ maintainer ตรวจสอบและอนุมัติ กระบวนการนี้รับรองว่าแพ็กเกจทุกตัวใน MELPA ปลอดภัยสำหรับผู้ใช้ทั่วไป
2. เว็บ MELPA บอกว่าแพ็กเกจเป็น bleeding edge แพ็กเกจของฉัน会壊れる?
โอกาสน้อยมาก แพ็กเกจจาก MELPA สร้างตลอดเวลาเพื่อเช็คว่าทำงานได้
แต่หากกังวลโอกาสน้อยที่แพ็กเกจจะแตก MELPA มี stable branch ที่อัปเดตน้อยกว่า แพ็กเกจที่นี่ทดสอบกับ Emacs เวอร์ชันปัจจุบัน ใช้ MELPA-Stable โดยแก้ "init.el" เป็น:
(require 'package) (add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t) (package-initialize)
3. ไม่ต้องการแพ็กเกจนี้แล้ว ถอนติดตั้งใน Emacs ยังไง?
ด้านล่างหน้า list-packages จะเห็นแพ็กเกจที่ติดตั้งแล้ว ค้นหาได้ด้วย Ctrl + s พิมพ์ "installed"
เลือกแพ็กเกจที่จะถอน กด Enter คลิกปุ่ม "Delete" ใน buffer คำอธิบาย Emacs จะลบแพ็กเกจออกจากระบบอัตโนมัติ
สังเกต: กระบวนการนี้ไม่ลบ config ที่ทำใน init.el เช่น เพิ่ม config สำหรับแพ็กเกจ X ต้องลบ config นั้นด้วยตนเอง