Chỉ nhìn thấy điều này ngay bây giờ, nhưng đây là những gì tôi đã làm. Kết quả cuối cùng là tôi muốn làm như sau: (hook-up-modes my-lisps 'standard-lisp-environment)
.
Để thực hiện việc này, tôi xác định sau defvar
s.
(defvar my-lisps "clojure lisp emacs-lisp cider-repl")
(defun standard-lisp-environment()
(paredit-mode 1)
(rainbow-delimiters-mode 1)
(eldoc-mode 1))
Tôi muốn có append lisp -mode-móc vào lisps tôi sử dụng vì vậy tôi đã điều sau đây:
(defun append-suffix (suffix phrases)
"take SUFFIX and append it to each of the PHRASES."
(mapcar #'(lambda (phrase) (concat phrase suffix)) phrases))
để ("clojure" "ngọng") => ("clojure -mode-hook "" lisp-mode-hook ").
Bây giờ chúng ta có thể dễ dàng có này, chúng ta cần những biểu tượng độc giả của họ, mà chúng tôi dễ dàng nhận được từ
(defun symbols-from-strings (strings)
"Given a list of strings, get their symbol values"
(mapcar #'intern strings))
Và rồi cuối cùng chúng tôi có các hình thức tương tự được đăng ở trên:
(defun multiple-mode-add-hook (modes hook)
"Given a list of x-mode-hook symbols in MODE, add the HOOK to them."
(mapc (lambda (mode) (add-hook mode hook)) modes))
Những tất cả hoạt động trên loại có ý nghĩa đối với chúng, danh sách các chuỗi, danh sách các ký hiệu blah-mode-hook, v.v. Vì vậy, bây giờ chúng ta cần một hàm người dùng tốt đẹp mà chúng ta có thể làm việc.
(defun hook-up-modes (strings hook)
(let ((modes (symbols-from-strings
(append-suffix "-mode-hook" (split-string strings)))))
(multiple-mode-add-hook modes hook)))
Bây giờ điều này sẽ khá rõ ràng: Chúng tôi tạo các chế độ từ danh sách chuỗi giới hạn không gian và áp dụng móc cho nó.Ngoài ra, vì tôi đã định nghĩa một môi trường lisp tiêu chuẩn, tất cả các lisps của tôi hoạt động tương tự, và tôi có thể dễ dàng tháo móc sau nếu tôi muốn. Sau đó, mã thực sự hoạt động là cụm từ siêu đơn giản (hook-up-modes my-lisps 'standard-lisp-environment)
.
Hoàn hảo, cảm ơn! Như một ốp, tôi đã nhầm lẫn về các chế độ chính - mỗi người trong số họ bật ra một "trình đơn ngữ cảnh" riêng biệt trên nhấp chuột. Dù bằng cách nào, giải pháp của bạn hoạt động hoàn hảo. –
Tôi đặc biệt khuyên bạn không nên thêm biểu thức 'lambda' vào móc. Một lý do là nó thực sự khó để xem những gì một cái móc chứa khi nghiên cứu nội dung của nó. Một lý do khác là khi bạn sửa đổi móc, cả phiên bản mới và mọi phiên bản cũ đều có mặt (trừ khi bạn cẩn thận tháo phiên bản cũ), điều này có thể dẫn đến các hiệu ứng thú vị. – Lindydancer
@Lindydancer tôi hoàn toàn đồng ý, nhưng điều này chỉ dành cho mục đích trình diễn. Dù sao, thay đổi thành chức năng riêng biệt. –