Emacs เป็นซอฟต์แวร์ที่ขยายได้มาก มันสามารถเป็น text editor, อีเมลคลายเอ็นต์ และ USENET reader ด้วย Elfeed คุณยังสามารถใช้ Emacs เป็น RSS feed reader ได้อีกด้วย
Elfeed คืออะไร?
Elfeed เป็น RSS feed reader ที่เบาแต่ทรงพลัง เขียนสำหรับ Emacs ใช้ระบบ tag-based แบบง่ายในการจัดเรียง RSS feeds ไม่ chỉนั้น ยังมีระบบ "hook-based" tagging อันทรงพลังที่ให้คุณ auto-tag feeds ตามเนื้อหาได้
ทำให้ Elfeed เหมาะสำหรับผู้ที่ติดตาม RSS feeds เยอะและมองหาวิธีจัดเรียง feeds อัตโนมัติ
ทำไมถึงใช้ Feedreader ใน Emacs?
Emacs ทำงานบนแนวคิด interoperability (ความสามารถในการทำงานร่วมกัน) Emacs รับข้อมูลและอนุญาตให้ตีความได้หลายวิธี
แม้คุณจะใช้ Emacs แค่แก้ไขข้อความ แต่การเข้าถึงอีเมลขณะแก้ไขข้อความ เช่นกัน ช่วยให้คุณใช้ข้อความที่กำลังเขียนในอีเมลที่กำลังเขียนได้อย่างราบรื่น
นี่คือเหตุผลที่การนำ RSS feed reader มาใส่ใน Emacs น่าสนใจ มันจะให้คุณใช้ความสามารถแก้ไขข้อความอันทรงพลังของ Emacs เพื่อจัดการ feeds และฟังก์ชันอื่นๆ ใน Emacs
การติดตั้ง Elfeed บน Emacs
การติดตั้ง Elfeed ง่ายมาก มีใน GNU ELPA repository เข้าถึงได้โดยไม่ต้องแก้ไข init.el
ติดตั้ง Elfeed: กด Alt + X เพื่อเปิด command buffer พิมพ์ package-install ให้ชื่อแพ็กเกจ elfeed กด Enter Emacs จะดาวน์โหลดซอร์สโค้ด Elfeed และคอมไพล์ทันที
การตั้งค่า RSS Feed แรกใน Emacs
หลังติดตั้งแล้ว เข้าถึง Elfeed โดยกด Alt + X พิมพ์ elfeed จะโหลด Elfeed buffer ว่าง
มี 2 วิธีเพิ่ม RSS feed เข้า Elfeed:
- แก้ไข init.el file ด้วยตนเอง
- ภายใน Emacs
เพิ่ม RSS Feed ด้วยตนเองใน Elfeed
เพิ่ม feed URLs ใน init.el ได้ง่าย เพราะ Elfeed มีตัวแปร elfeed-feeds ที่ติดตาม บอก Elfeed ว่า feed ไหนต้อง fetch และแสดงในหน้าสรุป
ตัวอย่างจาก init.el ของผม:
(setq elfeed-feeds '("https://feeds.maketecheasier.com/MakeTechEasier" "https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" "https://old.reddit.com/r/f1technical.rss"))
Setq เป็นฟังก์ชัน Emacs ตั้งค่าตัวแปร ในที่นี้ตั้งค่า elfeed-feeds ด้วยลิงก์ feed 3 รายการ
Elfeed จะเพิ่มลิงก์เหล่านั้นเข้า database ภายใน และโหลดครั้งหน้าที่รันโปรแกรม
เพิ่ม RSS Feed ภายใน Emacs
อีกวิธีคือให้ Elfeed รับ feed links ขณะรันอยู่ อัปเดต feed roster ได้โดยไม่ต้องโหลด Emacs ใหม่
กด Alt + X เปิด command buffer พิมพ์ elfeed-add-feed กด Enter Elfeed จะขอ URL ของ feed ที่ต้องการโหลด
ตัวอย่างผม ใส่ feed URL ของเราเพื่อรับอัปเดตบทความเทคโนโลยีทุกวัน
คัดลอก feed URL กด Ctrl + Y ใน URL prompt เพื่อวางลิงก์ใน Emacs กด Enter เพื่อยืนยัน
วิธี Auto-tag และ Filter Feeds ใน Emacs
นอกจากรายการและดู RSS feeds แล้ว Elfeed ยังทำฟังก์ชันอื่นๆ ให้คุณปรับแต่ง feed list ได้ละเอียด
ฟีเจอร์นึงคือ automatic tagging ให้ tag RSS entries ที่มาจาก feed เฉพาะทันที
ตัวอย่าง หากมีหลาย feeds เรื่องหัวข้อเดียวกัน สามารถตั้งให้ทุก feed มี tag เดียวกัน ทำให้จัดเรียงหลาย feeds ในหน้าสรุปได้ง่ายและเข้าใจง่าย
แก้ไข RSS feeds ใน init.el ดูตัวอย่างสั้นนี้:
(setq elfeed-feeds '(("https://feeds.maketecheasier.com/MakeTechEasier" tech news) ("https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" tech) ("https://old.reddit.com/r/f1technical.rss" tech f1)))
เพื่อ auto-tag RSS feed ต้องทำ 2 อย่างกับรูปแบบ elfeed-feeds เริ่มต้น:
- หุ้ม feed link ด้วยวงเล็บ บอก elfeed-feeds ว่ารายการนี้มีหลายส่วน
- ให้คำที่จะเป็น tag สำหรับลิงก์นั้น รองรับหลาย tags คั่นด้วยช่องว่าง
การ Filter RSS Feed ใน Elfeed
Tags นี้ทำงานร่วมกับระบบ filtering อันทรงพลังของ Elfeed ให้จัดกลุ่ม RSS feeds โดยอาศัย tags เพียงอย่างเดียว
ตัวอย่าง หากมี feeds tagged ว่า "news", "news tech", "news gaming" Elfeed ให้จัดกลุ่มทั้งหมดภายใต้ tag "news"
Filter feed list: กด S ขณะอยู่ใน Elfeed เพื่อเปิด filter prompt ค่าเริ่มต้น:
@6-months-ago +unread
- สัญลักษณ์
@บ่งชี้ช่วงวันที่ อาจเป็นวันที่แน่นอน เช่น "2022-02-22" หรือสัมพัทธ์ เช่น "3-days-ago" - สัญลักษณ์
+เป็น tag operator บอก Elfeed ให้รวม feeds ที่มี tag นี้โดยเฉพาะ
พิจารณา RSS feed ต่อไป:
[0](setq elfeed-feeds [1] '(("https://feeds.maketecheasier.com/MakeTechEasier" tech news) [2] ("https://solar.lowtechmagazine.com/feeds/all-en.atom.xml" tech) [3] ("https://old.reddit.com/r/f1technical.rss" tech f1) [4] ("https://www.autosport.com/rss/f1/photos/" f1) [5] ("https://www.philstar.com/rss/world" news)))
กรอง tag "tech" พิมพ์ +tech ใน filter prompt จะแสดง 3 ลิงก์แรก หากเพิ่ม +news จะแสดงลิงก์ที่ 1 และ 5
รู้แล้วคุณสามารถกรองได้เฉพาะเจาะจง เช่น ต้องการ tech ทั้งหมดแต่ไม่รวม f1 พิมพ์:
+tech -f1
วิธี Auto-tag Feeds ตาม URL
อีกวิธี auto-tag RSS entries ใน Elfeed คือจัดเรียงตาม URL เหมาะหากใช้ Elfeed สมัคร feeds ที่มีโครงสร้าง URL คล้ายกัน
ใช้ elfeed-new-entry-hook ของ Elfeed นี่คือ hook function ที่รันคำสั่ง custom ตามเงื่อนไข ฟังก์ชันนี้จะรันทุกครั้งที่เพิ่ม entry ด้วย elfeed-add-feed
ใช้ elfeed-make-tagger ภายใน hook นี้ ฟังก์ชันทั่วไปที่ tag links ตาม options ที่ตั้งค่า การรวมทั้งสองฟังก์ชันเพื่อ auto-tagging อาจเป็นแบบนี้:
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "medium\\.com" :add '(medium)))
ฟังก์ชันนี้จะ auto-tag ลิงก์ที่มี slug "medium.com"
สามารถเฉพาะเจาะจงได้มากขึ้น เช่น tag ตาม URL และกรอง entry ที่เก่ากว่า 3 เดือน:
(add-hook 'elfeed-new-entry-hook (elfeed-make-tagger :feed-url "medium\\.com" :before "3 months ago" :add 'medium))
วิธีสร้าง Custom Colors และ Fonts สำหรับ Tags
นอกจาก auto-tagging แล้ว ยังปรับแต่งลักษณะ Elfeed ตาม tag ได้ เหมาะหากต้องการให้ feeds ที่มี tag เฉพาะเด่นออกไป
ต้อง redefine ฟังก์ชัน elfeed-search-face-alist คำสั่งที่ Elfeed ใช้เปลี่ยนลักษณะ summary buffer ใช้ defface และ push:
- defface สร้าง "face" ใหม่สำหรับ Emacs "face" คือชุดค่าที่อาจมีทั้ง font และสีพื้นหลัง
- push เพิ่ม definition เข้าไปในคำสั่งที่มีอยู่ใน Emacs
รวมฟังก์ชันทั้งสองเพื่อสร้าง custom "face" สำหรับ Elfeed ตัวอย่าง face นี้ highlight tag f1 สีแดง:
(defface elfeed-face-tag-f1 '((t :foreground "#f00")) "This is a custom font face for the F1 tag in Elfeed.") (push '(f1 elfeed-face-tag-f1) elfeed-search-face-alist)
ยินดีด้วย! ตอนนี้คุณรู้วิธีใช้ Emacs เป็น RSS reader ด้วย Elfeed รวมถึงปรับแต่งและทำให้ Elfeed อัตโนมัติให้เหมาะกับความต้องการ RSS feeds ของคุณ
หากการอภิปรายนี้ทำคุณคิดว่าสามารถทำอะไรเพิ่มเติมกับ Emacs ได้ อ่านบทความเรื่อง best productivity packages for Emacs
คำถามที่พบบ่อย
1. ลบ feed ใน Elfeed ยังไง?
ลบ feed ได้ 2 วิธี: ลบ entry ของ feed ใน init.el หรือใช้ customize function ของ Emacs
วิธีแรก: ลบ feed URL ในตัวแปร elfeed-feeds วิธีที่สอง: กด Alt + X เปิด command buffer พิมพ์ customize จะเปิดหน้าต่าง customize
พิมพ์ elfeed-feeds ในกล่องค้นหา จะแสดง feeds ที่สมัครอยู่ คลิกปุ่ม DEL ข้างลิงก์ feed ที่ต้องการลบ แล้วคลิก Apply และ Save ด้านล่าง
2. เพิ่ม feeds ใน Elfeed แล้วไม่ refresh ทำไง?
Elfeed ไม่ auto-refresh feed links ให้ กด Shift + G เพื่อเริ่มอัปเดต feeds ที่สมัครอยู่ทั้งหมด
หากต้องการอัปเดต feed เฉพาะตัว ใช้ฟังก์ชัน elfeed-update-feed
3. Auto tags ไม่ทำงาน แก้ยังไง?
ส่วนใหญ่เพราะมี tags ขัดแย้งสำหรับ feed เดียวกัน เกิดได้หากใส่ feed URL เดียวกันใน manual และ automatic feeds
แก้โดยลบ manual entry ใน init.el หรือ automatic feed entry ใน customize buffer ของ Emacs