मैं अपने emacs config को अनुकूलित करने पर काम कर रहा हूं जहां मैं गतिशील रूप से उन सभी विषयों के लिए इंटरैक्टिव फ़ंक्शन बना सकता हूं जो मेरे पास एक सूची में हैं।
नीचे निर्माण का एक सरलीकृत संस्करण है जो मैं काम करने की कोशिश कर रहा हूं।
;; 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)
लेकिन नीचे काम नहीं करता है, जहां मैं प्रतीक नामों में पास करता हूं (जो कि संभवतया तब होता है जब लूप अपने आप से अनियंत्रित हो जाता है)। मैक्रो तर्कों से पहले उद्धरणों पर ध्यान दें।
;; DOES *NOT* WORK
(my/create-defun 'zz-abc)
(my/create-defun 'zz-def)
(my/create-defun 'zz-ghi)
अपडेट करें
@Wvxvw की मदद के लिए धन्यवाद , आखिरकार मुझे यह काम मिल गया !
जैसा कि @wvxvw सुझाव देता है, मैं किसी भी और हर उपयोग के मामले के लिए बैच-जेनरिंग डिफ्यूज़ नहीं बनूंगा। यह एक विशेष उपयोग का मामला था XYZ
, जहां नाम के एक विषय के लिए , मैं एक डिफ्यूजन उत्पन्न करना चाहता हूं जिसे नाम दिया load-theme/XYZ
गया है
- अन्य सभी विषयों को सक्रिय करना जो सक्रिय हो सकते हैं
- के लिए बुला
load-theme
रहा हैXYZ
- उस विषय से संबंधित कुछ और कस्टम चीजें करना; मैं
my/themes
एलिस्ट के माध्यम से प्रत्येक थीम के लिए कस्टम सेटिंग्स में पास करता हूं ।
cons
es शामिल हैं, लेकिन मैं प्रत्येक विषय के लिए कस्टम गुणों वाली सूचियों में परिवर्तित करने की योजना बना रहा हूं।
(my/create-defun name)
3 बार कॉल किया है, इसलिए आपको name
3 बार नामक फ़ंक्शन को परिभाषित करना चाहिए ।
defuns
अंदर डाल दोprogn
।progn
को शीर्ष-स्तरीय रूप होने की अनुमति दी जाती है (इस अर्थ में कि शीर्ष-स्तरीय रूपों पर लागू होने वाली हर चीजprogn
भी सामग्री पर लागू होती है)। लेकिन मैं इस तरह से कार्यों के निर्माण के औचित्य पर सवाल उठाऊंगा: क्यों नहीं, कहते हैं, मान के रूप में लंबोदर के साथ एक मेज है?