core-lib: refactor add-hook!

This commit is contained in:
Henrik Lissner 2017-01-28 02:04:35 -05:00
parent d7db99a1ef
commit c71b8ac438

View file

@ -39,27 +39,21 @@ Examples:
(unless func-or-forms (unless func-or-forms
(error "add-hook!: FUNC-OR-FORMS is empty")) (error "add-hook!: FUNC-OR-FORMS is empty"))
(let* ((val (car func-or-forms)) (let* ((val (car func-or-forms))
(quoted (eq (car-safe hook) 'quote)) (quoted-p (eq (car-safe hook) 'quote))
(hook (if quoted (cadr hook) hook)) (hook (if quoted-p (cadr hook) hook))
(funcs (if (eq (car-safe val) 'quote) (funcs (if (eq (car-safe val) 'quote)
(if (cdr-safe (cadr val)) (if (cdr-safe (cadr val))
(cadr val) (cadr val)
(list (cadr val))) (list (cadr val)))
(list func-or-forms))) (list func-or-forms))))
(forms '())) (macroexp-progn
(mapc (lambda (f) (mapcar (lambda (f)
(let ((func (if (symbolp f) `(quote ,f) `(lambda (&rest _) ,@func-or-forms)))) (let ((func (if (symbolp f) `(quote ,f) `(lambda (&rest _) ,@func-or-forms))))
(mapc (lambda (h) (macroexp-progn
(push `(add-hook ',(if quoted h (intern (format "%s-hook" h))) ,func) forms)) (mapcar (lambda (h)
(-list hook)))) `(add-hook ',(if quoted-p h (intern (format "%s-hook" h))) ,func))
funcs) (-list hook)))))
(macroexp-progn forms))) funcs))))
;; TODO
(defmacro add-lambda-hook! (hooks func-name &rest forms))
;; TODO
(defmacro remove-hooks! (hooks &rest funcs))
(defmacro associate! (mode &rest rest) (defmacro associate! (mode &rest rest)
"Associate a major or minor mode to certain patterns and project files." "Associate a major or minor mode to certain patterns and project files."