diff --git a/Makefile b/Makefile index 009e37230..5b0131fe4 100644 --- a/Makefile +++ b/Makefile @@ -7,19 +7,15 @@ all: install update autoloads install: init.el @$(EMACS) -l core/core.el -f 'doom/packages-install' - @$(EMACSCLIENT) -e '(doom/reload)' >/dev/null 2>&1 || true update: init.el @$(EMACS) -l core/core.el -f 'doom/packages-update' - @$(EMACSCLIENT) -e '(doom/reload)' >/dev/null 2>&1 || true -clean: init.el +autoremove: init.el @$(EMACS) -l core/core.el -f 'doom/packages-autoremove' - @$(EMACSCLIENT) -e '(doom/reload)' >/dev/null 2>&1 || true autoloads: init.el @$(EMACS) -l init.el -f 'doom/refresh-autoloads' - @$(EMACSCLIENT) -e '(doom/reload)' >/dev/null 2>&1 || true compile: init.el clean-elc @$(EMACS) -l init.el -f 'doom/byte-compile' @@ -27,15 +23,15 @@ compile: init.el clean-elc compile-lite: init.el clean-elc @$(EMACS) -l core/core.el --eval '(doom/byte-compile t)' -clean-cache: - @$(EMACS) -l core/core.el --eval '(delete-directory doom-cache-dir t)' - -clean-elc: +clean: @rm -fv init.elc @find {core,modules} -type f -iname '*.elc' -exec rm \-fv {} \; +clean-cache: + @$(EMACS) -l core/core.el --eval '(delete-directory doom-cache-dir t)' + test: - @$(EMACS) -l test/init.el -f 'doom!run-tests' + @$(EMACS) -l test/init.el -f 'doom-run-tests' init.el: @[ -f init.el ] || $(error No init.el file; create one or copy init.example.el) diff --git a/core/autoload/plist.el b/core/autoload/plist.el new file mode 100644 index 000000000..fa9458783 --- /dev/null +++ b/core/autoload/plist.el @@ -0,0 +1,44 @@ +;;; plist.el +(provide 'doom-lib-plist) + +;;;###autoload +(defmacro @plist (var action &rest args) + "A helper macro that makes dealing with doom-plist-* functions a little more concise. + +Examples: + (@plist plist &delete :x :y) + (@plist plist &get :x)" + (declare (indent defun)) + (let ((fn-sym (intern (format "doom-plist-%s" (substring (symbol-name action) 1))))) + (when (fboundp fn-sym) + (if (memq action '(&delete &put)) + `(setq ,var (,fn-sym ,var ,@args)) + `(,fn-sym ,var ,@args))))) + +;;;###autoload +(defun doom-plist-delete (plist &rest keys) + (if (apply 'doom-plist-member plist keys) + (let (forms) + (while plist + (if (and (keywordp (car plist)) (memq (car plist) keys)) + (progn + (pop plist) + (while (and plist (not (keywordp (car plist)))) + (pop plist))) + (setq forms (append forms (list (pop plist)))))) + forms) + plist)) + +;;;###autoload +(defun doom-plist-put (plist key value &rest key-values)) + +;;;###autoload +(defun doom-plist-get (plist &rest keys)) + +;;;###autoload +(defun doom-plist-member (plist &rest keys) + (--any-p (memq it plist) keys)) + + +;; (let ((a '(abc :commands 1 :config 3 4 5))) +;; (@plist a &delete :commands :config))