목록에있는 모든 테마에 대해 대화 형 기능을 동적으로 만들 수있는 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)
그러나 아래는 기호 이름을 전달하는 곳에서 작동하지 않습니다 (루프 자체가 풀릴 때 발생하는 것일 수 있습니다). 매크로 인수 앞에 따옴표를 적어 둡니다.
;; 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
). 그러나 나는 그런 식으로 함수를 생성하는 이론적 근거에 의문을 제기 할 것이다.