[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 64e5b91 22/27: Avoid evaling METHOD.
From: |
Oleh Krehel |
Subject: |
[elpa] master 64e5b91 22/27: Avoid evaling METHOD. |
Date: |
Sat, 24 Jan 2015 20:36:36 +0000 |
branch: master
commit 64e5b9129fcc61b18ca194af6e512cbe91122155
Author: Oleh Krehel <address@hidden>
Commit: Oleh Krehel <address@hidden>
Avoid evaling METHOD.
* hydra.el (hydra-create): Update.
METHOD doesn't need to be evaled: it's either nil, a lambda, or assume
that it's a valid keymap without evaling. This will prevent eager
macroexpansion failure for this argument.
There still is a problem with eager macroexpansion failure in HEADS
argument.
Re #9
---
hydra.el | 38 ++++++++++++++++++++++----------------
1 files changed, 22 insertions(+), 16 deletions(-)
diff --git a/hydra.el b/hydra.el
index 932cea2..4ef966c 100644
--- a/hydra.el
+++ b/hydra.el
@@ -112,20 +112,7 @@ When `(keymapp METHOD)`, it becomes:
(mapconcat
(lambda (x)
(format "\"%s\": `%S'" (car x) (cadr x)))
- heads ",\n")))
- map
- (method
- (cond ((null method)
- (unless (keymapp (global-key-binding (kbd body)))
- (global-set-key (kbd body) nil))
- 'global-set-key)
- ((keymapp (setq map (eval method)))
- (unless (keymapp (lookup-key map (kbd body)))
- (define-key map (kbd body) nil))
- `(lambda (key command)
- (define-key ,method key command)))
- (t
- method))))
+ heads ",\n"))))
`(progn
,@(cl-mapcar
(lambda (head name)
@@ -137,7 +124,8 @@ When `(keymapp METHOD)`, it becomes:
`((call-interactively #',(cadr head))
(when hydra-is-helpful
(message ,hint))
- (setq hydra-last (hydra-set-transient-map ',keymap
t))))))
+ (setq hydra-last
+ (hydra-set-transient-map ',keymap t))))))
heads names)
(defun ,(intern (format "hydra-%s-body" body)) ()
,doc
@@ -145,9 +133,27 @@ When `(keymapp METHOD)`, it becomes:
(when hydra-is-helpful
(message ,hint))
(setq hydra-last (hydra-set-transient-map ',keymap t)))
+ ,@(cond ((null method)
+ `((unless (keymapp (global-key-binding (kbd ,body)))
+ (global-set-key (kbd ,body) nil))))
+ ((or (functionp method)
+ (and (consp method)
+ (memq (car method) '(function quote))))
+ nil)
+ (t
+ `((unless (keymapp (lookup-key ,method (kbd ,body)))
+ (define-key ,method (kbd ,body) nil)))))
,@(cl-mapcar
(lambda (head name)
- `(,method ,(vconcat (kbd body) (kbd (car head))) #',name))
+ `(,@(cond ((null method)
+ (list 'global-set-key))
+ ((or (functionp method)
+ (and (consp method)
+ (memq (car method) '(function quote))))
+ (list 'funcall method))
+ (t
+ (list 'define-key method)))
+ ,(vconcat (kbd body) (kbd (car head))) #',name))
heads names))))
(provide 'hydra)
- [elpa] master e156bf2 12/27: Require cl at compile time, (continued)
- [elpa] master e156bf2 12/27: Require cl at compile time, Oleh Krehel, 2015/01/24
- [elpa] master 69bb4a4 13/27: Fix `kbd' interpretting "<tab>" char-by-char, Oleh Krehel, 2015/01/24
- [elpa] master b982fe5 14/27: Allow to add one head that disables the Hydra, Oleh Krehel, 2015/01/24
- [elpa] master c3ce0a9 15/27: `hydra-create' will also define `hydra-...-body', Oleh Krehel, 2015/01/24
- [elpa] master 8884698 17/27: Don't undefine BODY's map binding when it's a prefix, Oleh Krehel, 2015/01/24
- [elpa] master dfe1273 19/27: Simplify and improve the generated defuns, Oleh Krehel, 2015/01/24
- [elpa] master 301b500 16/27: Don't undefine BODY's global binding when it's a prefix, Oleh Krehel, 2015/01/24
- [elpa] master 42538fa 18/27: Add a `next-error'/`previous-error'/`first-error' example, Oleh Krehel, 2015/01/24
- [elpa] master dc0246e 20/27: hydra-examples.el (hydra-example-goto-error): add doc, Oleh Krehel, 2015/01/24
- [elpa] master ddd96d1 23/27: hydra-examples.el: add a `windmove' Hydra, Oleh Krehel, 2015/01/24
- [elpa] master 64e5b91 22/27: Avoid evaling METHOD.,
Oleh Krehel <=
- [elpa] master 440c41c 24/27: Bump version, Oleh Krehel, 2015/01/24
- [elpa] master cfac8bd 21/27: Prepare for the first version in GNU ELPA, Oleh Krehel, 2015/01/24
- [elpa] master 7b78b37 27/27: Merge commit '440c41cc3f5137d694211719abaa38c0193a08a2' from hydra, Oleh Krehel, 2015/01/24
- [elpa] master 685c83b 25/27: Setup git subtree add for hydra, Oleh Krehel, 2015/01/24
- [elpa] master f31d537 26/27: Add 'packages/hydra/' from commit 'cfac8bd9e73ea1e219250867b22881354fc2d56e', Oleh Krehel, 2015/01/24