[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/hydra e01a79e4b7 24/46: hydra.el (defhydra): Declare "/
From: |
Stefan Monnier |
Subject: |
[elpa] externals/hydra e01a79e4b7 24/46: hydra.el (defhydra): Declare "/params" and "/docstring" |
Date: |
Tue, 25 Oct 2022 22:27:21 -0400 (EDT) |
branch: externals/hydra
commit e01a79e4b771e6ac5579132bbc9aa88154dbf070
Author: Oleh Krehel <ohwoeowho@gmail.com>
Commit: Oleh Krehel <ohwoeowho@gmail.com>
hydra.el (defhydra): Declare "/params" and "/docstring"
* hydra-test.el: Update tests.
Re #185
---
hydra-test.el | 322 +++++++++++++++++++++++++++++++++-------------------------
hydra.el | 37 ++++++-
2 files changed, 218 insertions(+), 141 deletions(-)
diff --git a/hydra-test.el b/hydra-test.el
index 4e77b7ade0..eed1163935 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -40,6 +40,35 @@
("k" previous-error "prev")
("SPC" hydra-repeat "rep" :bind nil)))
'(progn
+ (set
+ (defvar hydra-error/params nil
+ "Params of hydra-error.")
+ (quote (global-map "M-g")))
+ (set
+ (defvar hydra-error/docstring nil
+ "Docstring of hydra-error.")
+ "error")
+ (set
+ (defvar hydra-error/heads nil
+ "Heads for hydra-error.")
+ (quote
+ (("h"
+ first-error
+ "first"
+ :exit nil)
+ ("j"
+ next-error
+ "next"
+ :exit nil)
+ ("k"
+ previous-error
+ "prev"
+ :exit nil)
+ ("SPC"
+ hydra-repeat
+ "rep"
+ :bind nil
+ :exit nil))))
(set
(defvar hydra-error/keymap nil
"Keymap for hydra-error.")
@@ -72,27 +101,6 @@
(48 . hydra--digit-argument)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
- (set
- (defvar hydra-error/heads nil
- "Heads for hydra-error.")
- (quote
- (("h"
- first-error
- "first"
- :exit nil)
- ("j"
- next-error
- "next"
- :exit nil)
- ("k"
- previous-error
- "prev"
- :exit nil)
- ("SPC"
- hydra-repeat
- "rep"
- :bind nil
- :exit nil))))
(set
(defvar hydra-error/hint nil
"Dynamic hint for hydra-error.")
@@ -268,6 +276,35 @@ The body can be accessed via `hydra-error/body', which is
bound to \"M-g\"."
("a" abbrev-mode "abbrev")
("q" nil "cancel")))
'(progn
+ (set
+ (defvar hydra-toggle/params nil
+ "Params of hydra-toggle.")
+ (quote
+ (nil
+ nil
+ :exit t
+ :foreign-keys nil)))
+ (set
+ (defvar hydra-toggle/docstring nil
+ "Docstring of hydra-toggle.")
+ "toggle")
+ (set
+ (defvar hydra-toggle/heads nil
+ "Heads for hydra-toggle.")
+ (quote
+ (("t"
+ toggle-truncate-lines
+ "truncate"
+ :exit t)
+ ("f"
+ auto-fill-mode
+ "fill"
+ :exit t)
+ ("a"
+ abbrev-mode
+ "abbrev"
+ :exit t)
+ ("q" nil "cancel" :exit t))))
(set
(defvar hydra-toggle/keymap nil
"Keymap for hydra-toggle.")
@@ -300,23 +337,6 @@ The body can be accessed via `hydra-error/body', which is
bound to \"M-g\"."
(48 . hydra--digit-argument)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
- (set
- (defvar hydra-toggle/heads nil
- "Heads for hydra-toggle.")
- (quote
- (("t"
- toggle-truncate-lines
- "truncate"
- :exit t)
- ("f"
- auto-fill-mode
- "fill"
- :exit t)
- ("a"
- abbrev-mode
- "abbrev"
- :exit t)
- ("q" nil "cancel" :exit t))))
(set
(defvar hydra-toggle/hint nil
"Dynamic hint for hydra-toggle.")
@@ -456,6 +476,30 @@ The body can be accessed via `hydra-toggle/body'."
("k" previous-line)
("q" nil "quit")))
'(progn
+ (set
+ (defvar hydra-vi/params nil
+ "Params of hydra-vi.")
+ (quote
+ (nil
+ nil
+ :exit nil
+ :foreign-keys warn
+ :post (set-cursor-color "#ffffff")
+ :pre (set-cursor-color "#e52b50"))))
+ (set
+ (defvar hydra-vi/docstring nil
+ "Docstring of hydra-vi.")
+ "vi")
+ (set
+ (defvar hydra-vi/heads nil
+ "Heads for hydra-vi.")
+ (quote
+ (("j" next-line "" :exit nil)
+ ("k"
+ previous-line
+ ""
+ :exit nil)
+ ("q" nil "quit" :exit t))))
(set
(defvar hydra-vi/keymap nil
"Keymap for hydra-vi.")
@@ -487,16 +531,6 @@ The body can be accessed via `hydra-toggle/body'."
(48 . hydra--digit-argument)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
- (set
- (defvar hydra-vi/heads nil
- "Heads for hydra-vi.")
- (quote
- (("j" next-line "" :exit nil)
- ("k"
- previous-line
- ""
- :exit nil)
- ("q" nil "quit" :exit t))))
(set
(defvar hydra-vi/hint nil
"Dynamic hint for hydra-vi.")
@@ -637,6 +671,32 @@ The body can be accessed via `hydra-vi/body'."
("0" (text-scale-set 0) :bind nil :exit t)
("1" (text-scale-set 0) nil :bind nil :exit t)))
'(progn
+ (set
+ (defvar hydra-zoom/params nil
+ "Params of hydra-zoom.")
+ (quote (nil nil)))
+ (set
+ (defvar hydra-zoom/docstring nil
+ "Docstring of hydra-zoom.")
+ "zoom")
+ (set
+ (defvar hydra-zoom/heads nil
+ "Heads for hydra-zoom.")
+ (quote
+ (("r"
+ (text-scale-set 0)
+ "reset"
+ :exit nil)
+ ("0"
+ (text-scale-set 0)
+ ""
+ :bind nil
+ :exit t)
+ ("1"
+ (text-scale-set 0)
+ nil
+ :bind nil
+ :exit t))))
(set
(defvar hydra-zoom/keymap nil
"Keymap for hydra-zoom.")
@@ -666,24 +726,6 @@ The body can be accessed via `hydra-vi/body'."
(48 . hydra-zoom/lambda-0-and-exit)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
- (set
- (defvar hydra-zoom/heads nil
- "Heads for hydra-zoom.")
- (quote
- (("r"
- (text-scale-set 0)
- "reset"
- :exit nil)
- ("0"
- (text-scale-set 0)
- ""
- :bind nil
- :exit t)
- ("1"
- (text-scale-set 0)
- nil
- :bind nil
- :exit t))))
(set
(defvar hydra-zoom/hint nil
"Dynamic hint for hydra-zoom.")
@@ -788,6 +830,32 @@ The body can be accessed via `hydra-zoom/body'."
("0" (text-scale-set 0) :bind nil :exit t)
("1" (text-scale-set 0) nil :bind nil)))
'(progn
+ (set
+ (defvar hydra-zoom/params nil
+ "Params of hydra-zoom.")
+ (quote (nil nil)))
+ (set
+ (defvar hydra-zoom/docstring nil
+ "Docstring of hydra-zoom.")
+ "zoom")
+ (set
+ (defvar hydra-zoom/heads nil
+ "Heads for hydra-zoom.")
+ (quote
+ (("r"
+ (text-scale-set 0)
+ "reset"
+ :exit nil)
+ ("0"
+ (text-scale-set 0)
+ ""
+ :bind nil
+ :exit t)
+ ("1"
+ (text-scale-set 0)
+ nil
+ :bind nil
+ :exit nil))))
(set
(defvar hydra-zoom/keymap nil
"Keymap for hydra-zoom.")
@@ -817,24 +885,6 @@ The body can be accessed via `hydra-zoom/body'."
(48 . hydra-zoom/lambda-0-and-exit)
(45 . hydra--negative-argument)
(21 . hydra--universal-argument))))
- (set
- (defvar hydra-zoom/heads nil
- "Heads for hydra-zoom.")
- (quote
- (("r"
- (text-scale-set 0)
- "reset"
- :exit nil)
- ("0"
- (text-scale-set 0)
- ""
- :bind nil
- :exit t)
- ("1"
- (text-scale-set 0)
- nil
- :bind nil
- :exit nil))))
(set
(defvar hydra-zoom/hint nil
"Dynamic hint for hydra-zoom.")
@@ -1194,62 +1244,62 @@ _f_ auto-fill-mode: %`auto-fill-function
(ert-deftest hydra-compat-colors-2 ()
(should
(equal
- (macroexpand
- '(defhydra hydra-test (:color amaranth)
- ("a" fun-a)
- ("b" fun-b :color blue)
- ("c" fun-c :color blue)
- ("d" fun-d :color blue)
- ("e" fun-e :color blue)
- ("f" fun-f :color blue)))
- (macroexpand
- '(defhydra hydra-test (:color teal)
- ("a" fun-a :color red)
- ("b" fun-b)
- ("c" fun-c)
- ("d" fun-d)
- ("e" fun-e)
- ("f" fun-f))))))
+ (cddr (macroexpand
+ '(defhydra hydra-test (:color amaranth)
+ ("a" fun-a)
+ ("b" fun-b :color blue)
+ ("c" fun-c :color blue)
+ ("d" fun-d :color blue)
+ ("e" fun-e :color blue)
+ ("f" fun-f :color blue))))
+ (cddr (macroexpand
+ '(defhydra hydra-test (:color teal)
+ ("a" fun-a :color red)
+ ("b" fun-b)
+ ("c" fun-c)
+ ("d" fun-d)
+ ("e" fun-e)
+ ("f" fun-f)))))))
(ert-deftest hydra-compat-colors-3 ()
(should
(equal
- (macroexpand
- '(defhydra hydra-test ()
- ("a" fun-a)
- ("b" fun-b :color blue)
- ("c" fun-c :color blue)
- ("d" fun-d :color blue)
- ("e" fun-e :color blue)
- ("f" fun-f :color blue)))
- (macroexpand
- '(defhydra hydra-test (:color blue)
- ("a" fun-a :color red)
- ("b" fun-b)
- ("c" fun-c)
- ("d" fun-d)
- ("e" fun-e)
- ("f" fun-f))))))
+ (cddr (macroexpand
+ '(defhydra hydra-test ()
+ ("a" fun-a)
+ ("b" fun-b :color blue)
+ ("c" fun-c :color blue)
+ ("d" fun-d :color blue)
+ ("e" fun-e :color blue)
+ ("f" fun-f :color blue))))
+ (cddr (macroexpand
+ '(defhydra hydra-test (:color blue)
+ ("a" fun-a :color red)
+ ("b" fun-b)
+ ("c" fun-c)
+ ("d" fun-d)
+ ("e" fun-e)
+ ("f" fun-f)))))))
(ert-deftest hydra-compat-colors-4 ()
(should
(equal
- (macroexpand
- '(defhydra hydra-test ()
- ("a" fun-a)
- ("b" fun-b :exit t)
- ("c" fun-c :exit t)
- ("d" fun-d :exit t)
- ("e" fun-e :exit t)
- ("f" fun-f :exit t)))
- (macroexpand
- '(defhydra hydra-test (:exit t)
- ("a" fun-a :exit nil)
- ("b" fun-b)
- ("c" fun-c)
- ("d" fun-d)
- ("e" fun-e)
- ("f" fun-f))))))
+ (cddr (macroexpand
+ '(defhydra hydra-test ()
+ ("a" fun-a)
+ ("b" fun-b :exit t)
+ ("c" fun-c :exit t)
+ ("d" fun-d :exit t)
+ ("e" fun-e :exit t)
+ ("f" fun-f :exit t))))
+ (cddr (macroexpand
+ '(defhydra hydra-test (:exit t)
+ ("a" fun-a :exit nil)
+ ("b" fun-b)
+ ("c" fun-c)
+ ("d" fun-d)
+ ("e" fun-e)
+ ("f" fun-f)))))))
(ert-deftest hydra--pad ()
(should (equal (hydra--pad '(a b c) 3)
@@ -1407,7 +1457,7 @@ _w_ Worf: % -8`hydra-tng/worf^^
_h_ Set phasers to
(should (equal (eval
(cadr
(nth 2
- (nth 3
+ (nth 5
(macroexpand
'(defhydra hydra-info (:color blue
:columns 3)
@@ -1470,7 +1520,7 @@ t: info-to"
(should (equal (eval
(cadr
(nth 2
- (nth 3
+ (nth 5
(macroexpand
'(defhydra hydra-foo (:color blue)
"Silly hydra"
@@ -1498,7 +1548,7 @@ y: back | b: up
(should (equal (eval
(cadr
(nth 2
- (nth 3
+ (nth 5
(macroexpand
'(defhydra hydra-rectangle (:body-pre
(rectangle-mark-mode 1)
:color pink
@@ -1563,7 +1613,7 @@ o: ok | s: string
(should (equal (eval
(cadr
(nth 2
- (nth 3
+ (nth 5
(macroexpand
'(defhydra hydra-window-order
(:color red :timeout 4)
diff --git a/hydra.el b/hydra.el
index 49066e9bd2..1739dd752c 100644
--- a/hydra.el
+++ b/hydra.el
@@ -441,6 +441,21 @@ Return DEFAULT if PROP is not in H."
((blue teal) t)
(t nil)))))
+(defun hydra--normalize-body (body)
+ "Put BODY in a normalized format.
+Add :exit and :foreign-keys if they are not there.
+Remove :color key. And sort the plist alphabetically."
+ (let ((plist (cddr body)))
+ (plist-put plist :exit (hydra--body-exit body))
+ (plist-put plist :foreign-keys (hydra--body-foreign-keys body))
+ (let* ((alist0 (cl-loop for (k v) on plist
+ by #'cddr collect (cons k v)))
+ (alist1 (assq-delete-all :color alist0))
+ (alist2 (cl-sort alist1 #'string<
+ :key (lambda (x) (symbol-name (car x))))))
+ (append (list (car body) (cadr body))
+ (mapcan (lambda (x) (list (car x) (cdr x))) alist2)))))
+
(defalias 'hydra--imf #'list)
(defun hydra-default-pre ()
@@ -1192,6 +1207,7 @@ result of `defhydra'."
(setq docstring "")))
(when (keywordp (car body))
(setq body (cons nil (cons nil body))))
+ (setq body (hydra--normalize-body body))
(condition-case-unless-debug err
(let* ((keymap-name (intern (format "%S/keymap" name)))
(body-name (intern (format "%S/body" name)))
@@ -1274,12 +1290,14 @@ result of `defhydra'."
"An %S Hydra must have at least one blue head in order to exit"
body-foreign-keys)))
`(progn
- ;; create keymap
- (set (defvar ,keymap-name
+ (set (defvar ,(intern (format "%S/params" name))
nil
- ,(format "Keymap for %S." name))
- ',keymap)
- ;; declare heads
+ ,(format "Params of %S." name))
+ ',body)
+ (set (defvar ,(intern (format "%S/docstring" name))
+ nil
+ ,(format "Docstring of %S." name))
+ ,docstring)
(set (defvar ,(intern (format "%S/heads" name))
nil
,(format "Heads for %S." name))
@@ -1288,6 +1306,12 @@ result of `defhydra'."
(cl-remf (cl-cdddr j) :cmd-name)
j))
heads))
+ ;; create keymap
+ (set (defvar ,keymap-name
+ nil
+ ,(format "Keymap for %S." name))
+ ',keymap)
+ ;; declare heads
(set
(defvar ,(intern (format "%S/hint" name)) nil
,(format "Dynamic hint for %S." name))
@@ -1338,6 +1362,9 @@ result of `defhydra'."
(hydra--complain "Error in defhydra %S: %s" name (cdr err))
nil)))
+(defun hydra--prop (name prop-name)
+ (symbol-value (intern (concat (symbol-name name) prop-name))))
+
(defmacro defhydradio (name _body &rest heads)
"Create radios with prefix NAME.
_BODY specifies the options; there are none currently.
- [elpa] externals/hydra 6eaf10f52c 05/46: hydra-test.el (hydra-format-5): Fix failing test, (continued)
- [elpa] externals/hydra 6eaf10f52c 05/46: hydra-test.el (hydra-format-5): Fix failing test, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 462202d7fc 11/46: hydra.el (hydra--doc): Fixup, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra ab67b29835 01/46: Declare the third argument of `defhydra’ as a (potential) docstring., Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 1deed8a00e 09/46: fix typo in readme, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 03eeea324c 10/46: Make first line of hydra docstrings more informative., Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 62e0f37462 14/46: hydra-test.el: Fix tests for previous commit, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 5b8f662992 16/46: hydra.el (hydra--format): Allow e.g. "M-?" in docstring, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 44b42598ee 18/46: Fix Typos, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra d071278fcc 20/46: hydra.el (hydra--format): Fix off-by-one, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 5c5b9ca326 21/46: Silence byte-compiler on Emacs 25, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra e01a79e4b7 24/46: hydra.el (defhydra): Declare "/params" and "/docstring",
Stefan Monnier <=
- [elpa] externals/hydra f0745366ff 34/46: hydra.el (hydra--hint-from-matrix-1): Extract, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 1dab16cd2a 35/46: hydra.el (hydra--hint-from-matrix): Prep to return list, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 8119d82fe9 13/46: hydra.el (hydra--make-defun): require hydra, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 1e72f96a14 15/46: hydra.el (defhydra): Add :base-map option to body plist, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra df3025f7e3 04/46: hydra.el (hydra-key-regex): Add "\\", Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 49611c1509 07/46: hydra.el (hydra--generate-matrix): Refactor, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra e228432bb6 08/46: hydra.el (hydra--hint-from-matrix): Adjust for "%" in key, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra 87cc74b264 17/46: hydra.el (hydra--format): Make no docstring equivalent to :hint nil, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra cf96140079 12/46: hydra-test.el: Regenerate tests for the last commit, Stefan Monnier, 2022/10/25
- [elpa] externals/hydra c30e04d3f6 19/46: lv.el (lv-window): Turn off display-line-numbers, Stefan Monnier, 2022/10/25