Ü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 XYZ
adlı 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-theme
içinXYZ
- Bu temayla ilgili daha özel şeyler yapmak; Her tema için özel ayarları
my/themes
alist üzerinden iletiyorum.
cons
es 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 name
3 kez denilen bir işlevi tanımlamak gerekir .
defuns
iç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?