summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Dudebout <nicolas.dudebout@gmail.com>2013-09-17 09:58:57 -0400
committerNicolas Dudebout <nicolas.dudebout@gmail.com>2013-09-24 12:23:08 -0400
commitfd8af80f08c7fd3bc938c458482e618dff6717b2 (patch)
treed5a26784c50c2306c2517d537ee413068d338191
parent6fdeb0c0448e5bf247c18e27a71717b6aafb655c (diff)
downloademacs-fd8af80f08.tar.gz
Enables using variables and functions as arguments
This change an extra level on indirection for two cases: + when an association or an alist is required, it is possible to pass a variable containing an association or an alist + when a sexp to be evaluated is required, it is possible to pass a function instead
-rw-r--r--lisp/use-package/use-package.el32
1 files changed, 22 insertions, 10 deletions
diff --git a/lisp/use-package/use-package.el b/lisp/use-package/use-package.el
index d817db119a9..ec2436e730b 100644
--- a/lisp/use-package/use-package.el
+++ b/lisp/use-package/use-package.el
@@ -438,6 +438,18 @@ Return the list of recognized keywords."
(error "Unrecognized keyword: %s" keyword))))
(plist-keys args)))
+(defun plist-get-sexp (plist prop)
+ (let ((sexp-or-function (plist-get plist prop)))
+ (if (functionp sexp-or-function)
+ (funcall sexp-or-function)
+ sexp-or-function)))
+
+(defun plist-get-value (plist prop)
+ (let ((value-or-symbol (plist-get plist prop)))
+ (if (symbolp value-or-symbol)
+ (symbol-value value-or-symbol)
+ value-or-symbol)))
+
(defmacro use-package (name &rest args)
"Use a package with configuration options.
@@ -464,15 +476,15 @@ For full documentation. please see commentary.
:ensure loads package using package.el if necessary."
(use-package-validate-keywords args) ; error if any bad keyword, ignore result
(let* ((commands (plist-get args :commands))
- (pre-init-body (plist-get args :pre-init))
- (init-body (plist-get args :init))
- (config-body (plist-get args :config))
+ (pre-init-body (plist-get-sexp args :pre-init))
+ (init-body (plist-get-sexp args :init))
+ (config-body (plist-get-sexp args :config))
(diminish-var (plist-get args :diminish))
(defines (plist-get args :defines))
- (idle-body (plist-get args :idle))
- (keybindings )
- (mode-alist )
- (interpreter-alist )
+ (idle-body (plist-get-sexp args :idle))
+ (keybindings-alist (plist-get-value args :bind))
+ (mode-alist (plist-get-value args :mode))
+ (interpreter-alist (plist-get-value args :interpreter))
(predicate (plist-get args :if))
(pkg-load-path (plist-get args :load-path))
(defines-eval (if (null defines)
@@ -553,19 +565,19 @@ For full documentation. please see commentary.
#'(lambda (binding)
`(bind-key ,(car binding)
(quote ,(cdr binding))))
- (plist-get args :bind))
+ keybindings-alist)
(funcall init-for-commands
#'(lambda (mode)
`(add-to-list 'auto-mode-alist
(quote ,mode)))
- (plist-get args :mode))
+ mode-alist)
(funcall init-for-commands
#'(lambda (interpreter)
`(add-to-list 'interpreter-mode-alist
(quote ,interpreter)))
- (plist-get args :interpreter)))
+ interpreter-alist))
`(progn
,@(mapcar