Sunday, January 29, 2006

ใช้ emacs ช่วยทำ syntax highlight สำหรับ code ที่แสดงใน blog

เมื่อก่อนผมใช้วิธีเขียน jedit plugin สำหรับ generate syntax highlight


ปัจจุบัน หลังจากเปลี่ยนมาใช้ emacs แล้ว
ก็เลยเปลี่ยนวิธีด้วย
หันมาใช้ htmlize แทน

แต่ก็ยังไม่ค่อยสะดวกอยู่ตรงที่
เนื่องจาก htmlize มัน generate เป็น html เต็มๆให้เลย
ก็เลยต้องใช้ mouse คอยลากเฉพาะบริเวณที่ต้องการอีกที

วันนี้ หลังจากเริ่มปีกกล้าขาแข็งกับ clisp
ก็เลยลองเขียน elisp ดู

เป็น function ที่ช่วย copy เฉพาะบริเวณที่เราต้องการ ลง clipboard

(defun my-hook ()
(let ((pos_1 (search-forward "<pre>"))
(pos_2 (search-forward "</pre>")))
(kill-region pos_1 (- pos_2 6))
(kill-this-buffer)))

(add-hook 'htmlize-after-hook 'my-hook)


การทำงานก็ง่ายๆ
เริ่มด้วยการ define function my-hook ขึ้นมา
กำหนดให้ pos_1 คือ ตำแหน่งที่มีคำว่า <pre> อยู่
ส่วน pos_2 ก็คือ ตำแหน่งที่มีคำว่า </pre>
จากนั้น ก็ใช้ kill-region เพื่อ copy text ที่อยู่ระหว่าง pos1 กับ pos2 ลง clipboard
จบด้วยการก็ปิด buffer ที่ htmlize เปิด

สุดท้ายก็ add function ของเราลงไปใน hook ที่ htmlize เตรียมไว้ให้

Related link from Roti

No comments: