emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/hydra 9ca93bdffb 28/46: hydra.el (defhydra+): Add


From: Stefan Monnier
Subject: [elpa] externals/hydra 9ca93bdffb 28/46: hydra.el (defhydra+): Add
Date: Tue, 25 Oct 2022 22:27:21 -0400 (EDT)

branch: externals/hydra
commit 9ca93bdffb651839c055d90ce45653ac0dc35d44
Author: Oleh Krehel <ohwoeowho@gmail.com>
Commit: Oleh Krehel <ohwoeowho@gmail.com>

    hydra.el (defhydra+): Add
    
    * hydra-test.el (hydra-extend): Add test.
    
    Fixes #185
---
 hydra-test.el | 22 ++++++++++++++++++++++
 hydra.el      | 15 +++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/hydra-test.el b/hydra-test.el
index eed1163935..2fb98a0b14 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -1656,6 +1656,28 @@ k: ↑ window |                            |               
      |
                    512 513 (face hydra-face-red)
                    578 579 (face hydra-face-blue)))))
 
+(defhydra hydra-extendable ()
+  "extendable"
+  ("j" next-line "down"))
+
+(ert-deftest hydra-extend ()
+  (should (equal (macroexpand
+                  '(defhydra+ hydra-extendable ()
+                    ("k" previous-line "up")))
+                 (macroexpand
+                  '(defhydra hydra-extendable ()
+                    "extendable"
+                    ("j" next-line "down")
+                    ("k" previous-line "up")))))
+  (should (equal (macroexpand
+                  '(defhydra+ hydra-extendable ()
+                    ("k" previous-line "up" :exit t)))
+                 (macroexpand
+                  '(defhydra hydra-extendable ()
+                    "extendable"
+                    ("j" next-line "down")
+                    ("k" previous-line "up" :exit t))))))
+
 (provide 'hydra-test)
 
 ;;; hydra-test.el ends here
diff --git a/hydra.el b/hydra.el
index 87e7376301..39dc8156db 100644
--- a/hydra.el
+++ b/hydra.el
@@ -1364,6 +1364,21 @@ result of `defhydra'."
      (hydra--complain "Error in defhydra %S: %s" name (cdr err))
      nil)))
 
+(defmacro defhydra+ (name body &optional docstring &rest heads)
+  "Redefine an existing hydra by adding new heads.
+Arguments are same as of `defhydra'."
+  (declare (indent 1))
+  (unless (stringp docstring)
+    (setq heads
+          (cons docstring heads))
+    (setq docstring nil))
+  `(defhydra ,name ,(or body (hydra--prop name "/params"))
+     ,(or docstring (hydra--prop name "/docstring"))
+     ,@(cl-delete-duplicates
+        (append (hydra--prop name "/heads") heads)
+        :key #'car
+        :test #'equal)))
+
 (defun hydra--prop (name prop-name)
   (symbol-value (intern (concat (symbol-name name) prop-name))))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]