Tôi đang làm việc để tối ưu hóa cấu hình emacs của mình , nơi tôi có thể tự động tạo các chức năng tương tác cho tất cả các chủ đề tôi có trong danh sách.
Dưới đây là phiên bản đơn giản hóa của cấu trúc tôi đang cố gắng thực hiện.
;; 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))
Nhưng nếu tôi hủy đăng ký vòng lặp theo cách thủ công, nó sẽ hoạt động:
;; WORKS
(my/create-defun zz-abc)
(my/create-defun zz-def)
(my/create-defun zz-ghi)
Nhưng bên dưới không hoạt động khi tôi chuyển vào các tên biểu tượng (có thể là những gì đang xảy ra khi vòng lặp tự kiểm soát). Lưu ý các trích dẫn trước các đối số vĩ mô.
;; DOES *NOT* WORK
(my/create-defun 'zz-abc)
(my/create-defun 'zz-def)
(my/create-defun 'zz-ghi)
Cập nhật
Nhờ sự giúp đỡ của @wvxvw , cuối cùng tôi cũng đã làm việc này !
Như @wvxvw gợi ý, tôi sẽ không tạo ra các đợt giảm giá hàng loạt cho bất kỳ và mọi trường hợp sử dụng. Đây là trường hợp sử dụng đặc biệt trong đó đối với một chủ đề có tên XYZ
, tôi muốn tạo một defun được gọi là load-theme/XYZ
công việc của
- Vô hiệu hóa tất cả các chủ đề khác có thể hoạt động
- Gọi
load-theme
choXYZ
- Làm một số công cụ tùy chỉnh hơn liên quan đến chủ đề đó; Tôi chuyển qua các cài đặt tùy chỉnh cho từng chủ đề thông qua
my/themes
alist.
cons
es nhưng tôi dự định chuyển đổi chúng thành danh sách với các thuộc tính tùy chỉnh cho từng chủ đề.
(my/create-defun name)
3 lần, vì vậy bạn nên kết thúc việc xác định hàm gọi là name
3 lần.
defuns
vào trong aprogn
.progn
được phép là một hình thức cấp cao nhất (theo nghĩa là mọi thứ áp dụng cho các hình thức cấp cao nhất đều áp dụng cho nội dung củaprogn
quá). Nhưng tôi sẽ đặt câu hỏi về lý do của việc tạo các hàm theo cách như vậy: tại sao không có, ví dụ, có một bảng có lambdas làm giá trị?