Üzerinde çalışıyorum konfigürasyon dosyasında benim emacs optimize Dinamik bir listede olan tüm temalar için etkileşimli işlevler oluşturabilirsiniz nerede.
Aşağıda iş yapmaya çalıştığım yapının basitleştirilmiş bir versiyonu var.
;; 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))
Ancak döngüyü elle açarsam çalışır:
;; WORKS
(my/create-defun zz-abc)
(my/create-defun zz-def)
(my/create-defun zz-ghi)
Ama aşağıda sembol isimlerini geçtiğim yerde çalışmıyor (muhtemelen döngü kendi kendine açıldığında olan şey). Makro bağımsız değişkenlerinden önce tırnak işaretleri not alın.
;; DOES *NOT* WORK
(my/create-defun 'zz-abc)
(my/create-defun 'zz-def)
(my/create-defun 'zz-ghi)
Güncelleme
Teşekkür etmek @wvxvw s' yardım, ben nihayet bu çalışma var !
@Wvxvw'nin da belirttiği gibi, her kullanım için toplu üretme kusurları olmayacağım. Bu, adlı bir tema için işini yapan XYZadlı bir defun oluşturmak istediğim özel bir kullanım durumuyduload-theme/XYZ
- Etkin olabilecek diğer tüm temaları devre dışı bırakma
- Arama
load-themeiçinXYZ - Bu temayla ilgili daha özel şeyler yapmak; Her tema için özel ayarları
my/themesalist üzerinden iletiyorum.
conses oluşur ama ben her tema için özel özelliklere sahip listelere dönüştürmek planlıyoruz.
(my/create-defun name)3 kez aradın , bu yüzden name3 kez denilen bir işlevi tanımlamak gerekir .
defunsiçine koyunprogn.prognüst düzey bir form olmasına izin verilir (üst düzey formlar için geçerli olan her şeyin de içeriği için geçerli olduğu anlamına gelirprogn). Ama bu şekilde fonksiyon yaratmanın mantığını sorgulayacağım: neden değerler olarak lambdas içeren bir tablo yok?