branch: master commit 7b78b37f6ae1588e7c91c0edb4ae341f4bad868c Merge: f31d537 440c41c Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
Merge commit '440c41cc3f5137d694211719abaa38c0193a08a2' from hydra --- packages/hydra/hydra-examples.el | 7 ++++++ packages/hydra/hydra.el | 40 +++++++++++++++++++++---------------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/packages/hydra/hydra-examples.el b/packages/hydra/hydra-examples.el index c07bd8e..c1b02df 100644 --- a/packages/hydra/hydra-examples.el +++ b/packages/hydra/hydra-examples.el @@ -81,5 +81,12 @@ Works best if you have not more than 4 windows.") "A three-headed hydra for jumping between \"errors\". Useful for e.g. `occur', `rgrep' and the like.") +(defvar hydra-example-windmove + '(("h" windmove-left) + ("j" windmove-down) + ("k" windmove-up) + ("l" windmove-right)) + "A four-headed hydra for `windmove'.") + (provide 'hydra-examples) ;;; hydra-examples.el ends here diff --git a/packages/hydra/hydra.el b/packages/hydra/hydra.el index 932cea2..5ef69ee 100644 --- a/packages/hydra/hydra.el +++ b/packages/hydra/hydra.el @@ -5,7 +5,7 @@ ;; Author: Oleh Krehel <ohwoeo...@gmail.com> ;; Maintainer: Oleh Krehel <ohwoeo...@gmail.com> ;; URL: https://github.com/abo-abo/hydra -;; Version: 0.3.0 +;; Version: 0.3.1 ;; Keywords: bindings ;; Package-Requires: ((cl-lib "0.5")) @@ -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)