ฉันกำลังทำงานเพื่อปรับแต่งการกำหนดค่า emacs ของฉันซึ่งฉันสามารถสร้างฟังก์ชั่นแบบโต้ตอบสำหรับธีมทั้งหมดที่ฉันมีในรายการ
ด้านล่างนี้เป็นเวอร์ชั่นที่เรียบง่ายของสิ่งปลูกสร้างที่ฉันพยายามจะทำงาน
;; List containing names of functions that I want to create
(setq my/defun-list '(zz-abc
zz-def
zz-ghi))
;; Elisp macro to create an interactive defun whose name
;; is passed as the macro argument
(defmacro my/create-defun (defun-name)
`(defun ,defun-name ()
(interactive)
(let ((fn-name (symbol-name ',defun-name)))
(message "Testing creation of function %s" fn-name))))
;; Loop to call the above macro for each element in the list
;; DOES *NOT* WORK
(dolist (name my/defun-list)
(my/create-defun name))
แต่ถ้าฉันคลี่วงด้วยตนเองมันทำงานได้:
;; WORKS
(my/create-defun zz-abc)
(my/create-defun zz-def)
(my/create-defun zz-ghi)
แต่ด้านล่างไม่ได้ทำงานที่ฉันผ่านในชื่อสัญลักษณ์ (ซึ่งอาจเป็นสิ่งที่เกิดขึ้นเมื่อวนรอบ unrolls ด้วยตัวเอง) จดเครื่องหมายคำพูดก่อนอาร์กิวเมนต์ของแมโคร
;; DOES *NOT* WORK
(my/create-defun 'zz-abc)
(my/create-defun 'zz-def)
(my/create-defun 'zz-ghi)
ปรับปรุง
ขอบคุณ@wvxvw ในที่สุดฉันก็ได้งานนี้มา !
ตามที่ @wvxvw แนะนำฉันจะไม่ถูกสร้างเป็นชุดสำหรับกรณีการใช้งานทุกกรณี นี่เป็นกรณีการใช้งานพิเศษที่มีชื่อธีมXYZ
ฉันต้องการสร้าง defun ที่เรียกload-theme/XYZ
ว่าทำงาน
- ปิดการใช้งานชุดรูปแบบอื่น ๆ ทั้งหมดที่อาจใช้งานอยู่
- โทร
load-theme
หาXYZ
- ทำสิ่งที่กำหนดเองเพิ่มเติมที่เกี่ยวข้องกับชุดรูปแบบนั้น ฉันผ่านการตั้งค่าที่กำหนดเองสำหรับแต่ละธีมผ่านอ
my/themes
ลิส
cons
es เท่านั้นแต่ฉันวางแผนที่จะแปลงรายการเหล่านั้นด้วยรายการคุณสมบัติที่กำหนดเองสำหรับแต่ละชุดรูปแบบ
(my/create-defun name)
3 ครั้ง, ดังนั้นคุณควรไขฟังก์ชั่นที่เรียกว่าname
3 ครั้ง
defuns
ได้รับอนุญาตให้เป็นแบบฟอร์มระดับบนสุด (ในแง่ที่ว่าทุกสิ่งที่ใช้กับแบบฟอร์มระดับบนสุดจะใช้กับเนื้อหาของด้วย) แต่ฉันจะถามเหตุผลของการสร้างฟังก์ชั่นในลักษณะดังกล่าว: ทำไมไม่มีพูดว่ามีตารางมีลูกแกะเป็นค่า?progn
progn
progn