summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--hyperquirks.lisp14
1 files changed, 9 insertions, 5 deletions
diff --git a/hyperquirks.lisp b/hyperquirks.lisp
index 36029e2..7c1f8e9 100644
--- a/hyperquirks.lisp
+++ b/hyperquirks.lisp
@@ -140,9 +140,9 @@ PLIST is any expression that evaluates to a propety list.
E.g.
(let ((me (list :name \"colin\" 'age 40 :occupation :slacker)))
- (with-plist (name age occupation) me
+ (with-plist ((my-name name) age occupation) me
(format t \"My name is ~a, and I am a ~a year old ~a~%\"
- name age occupation)))
+ my-name age occupation)))
Will print out:
My name is colin, and I am a 40 year old SLACKER
@@ -154,9 +154,13 @@ some other package.
(gensym))
(bindings
(loop for var in vars
- for keyword-var = (intern (symbol-name var) 'keyword)
- collect `(,var (or (getf ,plist-var ,keyword-var)
- (getf ,plist-var ',var))))))
+ when (consp var)
+ collect `(,(first var)
+ (or (getf ,plist-var ,(intern (symbol-name (second var)) 'keyword))
+ (getf ,plist-var ',var)))
+ else
+ collect `(,var (or (getf ,plist-var ,(intern (symbol-name var) 'keywword))
+ (getf ,plist-var ',var))))))
`(let ((,plist-var ,plist))
(let ,bindings
,@body))))