branch: externals/hydra
commit f45e64f7e1fe01d68c7126cf586e657446f19593
Author: Oleh Krehel <[email protected]>
Commit: Oleh Krehel <[email protected]>

    hydra.el (hydra--describe-key): Add and bind to "<f1> k"
---
 hydra-test.el | 1458 ++++++++++++++++++++++++++++-----------------------------
 hydra.el      |   10 +
 2 files changed, 734 insertions(+), 734 deletions(-)

diff --git a/hydra-test.el b/hydra-test.el
index f3c77ca57e..c60cdfa27a 100644
--- a/hydra-test.el
+++ b/hydra-test.el
@@ -34,85 +34,85 @@
    (equal
     (macroexpand
      '(defhydra hydra-error (global-map "M-g")
-       "error"
-       ("h" first-error "first")
-       ("j" next-error "next")
-       ("k" previous-error "prev")
-       ("SPC" hydra-repeat "rep" :bind nil)))
+        "error"
+        ("h" first-error "first")
+        ("j" next-error "next")
+        ("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.")
-       (quote
-        (keymap
-         (32 . hydra-repeat)
-         (107 . hydra-error/previous-error)
-         (106 . hydra-error/next-error)
-         (104 . hydra-error/first-error)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra--digit-argument)
-         (48 . hydra--digit-argument)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-error/hint nil
-         "Dynamic hint for hydra-error.")
-       (quote
-        (format
-         #("error: [h]: first, [j]: next, [k]: prev, [SPC]: rep."
-           8 9 (face hydra-face-red)
-           20 21 (face hydra-face-red)
-           31 32 (face hydra-face-red)
-           42 45 (face hydra-face-red)))))
-      (defun hydra-error/first-error nil
-        "Call the head `first-error' in the \"hydra-error\" hydra.
+       (set
+        (defvar hydra-error/params nil
+          "Params of hydra-error.")
+        '(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.")
+        '(("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.")
+        '(keymap
+          (32 . hydra-repeat)
+          (107 . hydra-error/previous-error)
+          (106 . hydra-error/next-error)
+          (104 . hydra-error/first-error)
+          (kp-subtract . hydra--negative-argument)
+          (kp-9 . hydra--digit-argument)
+          (kp-8 . hydra--digit-argument)
+          (kp-7 . hydra--digit-argument)
+          (kp-6 . hydra--digit-argument)
+          (kp-5 . hydra--digit-argument)
+          (kp-4 . hydra--digit-argument)
+          (kp-3 . hydra--digit-argument)
+          (kp-2 . hydra--digit-argument)
+          (kp-1 . hydra--digit-argument)
+          (kp-0 . hydra--digit-argument)
+          (57 . hydra--digit-argument)
+          (56 . hydra--digit-argument)
+          (55 . hydra--digit-argument)
+          (54 . hydra--digit-argument)
+          (53 . hydra--digit-argument)
+          (52 . hydra--digit-argument)
+          (51 . hydra--digit-argument)
+          (50 . hydra--digit-argument)
+          (49 . hydra--digit-argument)
+          (48 . hydra--digit-argument)
+          (45 . hydra--negative-argument)
+          (21 . hydra--universal-argument)
+          (f1
+           keymap
+           (107 . hydra--describe-key))))
+       (set
+        (defvar hydra-error/hint nil
+          "Dynamic hint for hydra-error.")
+        '(format
+          #("error: [h]: first, [j]: next, [k]: prev, [SPC]: rep."
+            8 9 (face hydra-face-red)
+            20 21 (face hydra-face-red)
+            31 32 (face hydra-face-red)
+            42 45 (face hydra-face-red))))
+       (defun hydra-error/first-error nil
+         "Call the head `first-error' in the \"hydra-error\" hydra.
 
 The heads for the associated hydra are:
 
@@ -122,33 +122,33 @@ The heads for the associated hydra are:
 \"SPC\":    `hydra-repeat'
 
 The body can be accessed via `hydra-error/body', which is bound to \"M-g\"."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote first-error))
-              (hydra--call-interactively-remap-maybe
-               (function first-error)))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-error/next-error nil
-        "Call the head `next-error' in the \"hydra-error\" hydra.
+           (setq hydra-curr-body-fn
+                 'hydra-error/body))
+         (condition-case err
+             (progn
+               (setq this-command
+                     'first-error)
+               (hydra--call-interactively-remap-maybe
+                #'first-error))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-error/hint
+          'hydra-error)
+         (hydra-set-transient-map
+          hydra-error/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil))
+       (defun hydra-error/next-error nil
+         "Call the head `next-error' in the \"hydra-error\" hydra.
 
 The heads for the associated hydra are:
 
@@ -158,33 +158,32 @@ The heads for the associated hydra are:
 \"SPC\":    `hydra-repeat'
 
 The body can be accessed via `hydra-error/body', which is bound to \"M-g\"."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote next-error))
-              (hydra--call-interactively-remap-maybe
-               (function next-error)))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-error/previous-error nil
-        "Call the head `previous-error' in the \"hydra-error\" hydra.
+           (setq hydra-curr-body-fn
+                 'hydra-error/body))
+         (condition-case err
+             (progn
+               (setq this-command 'next-error)
+               (hydra--call-interactively-remap-maybe
+                #'next-error))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-error/hint
+          'hydra-error)
+         (hydra-set-transient-map
+          hydra-error/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil))
+       (defun hydra-error/previous-error nil
+         "Call the head `previous-error' in the \"hydra-error\" hydra.
 
 The heads for the associated hydra are:
 
@@ -194,46 +193,45 @@ The heads for the associated hydra are:
 \"SPC\":    `hydra-repeat'
 
 The body can be accessed via `hydra-error/body', which is bound to \"M-g\"."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote previous-error))
-              (hydra--call-interactively-remap-maybe
-               (function previous-error)))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           nil)
-         nil))
-      (unless (keymapp
-               (lookup-key
-                global-map
-                (kbd "M-g")))
-        (define-key global-map (kbd "M-g")
+           (setq hydra-curr-body-fn
+                 'hydra-error/body))
+         (condition-case err
+             (progn
+               (setq this-command
+                     'previous-error)
+               (hydra--call-interactively-remap-maybe
+                #'previous-error))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-error/hint
+          'hydra-error)
+         (hydra-set-transient-map
+          hydra-error/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
           nil))
-      (define-key global-map [134217831 104]
-       (quote hydra-error/first-error))
-      (define-key global-map [134217831 106]
-       (quote hydra-error/next-error))
-      (define-key global-map [134217831 107]
-       (quote
-        hydra-error/previous-error))
-      (defun hydra-error/body nil
-        "Call the body in the \"hydra-error\" hydra.
+       (unless (keymapp
+                (lookup-key
+                 global-map
+                 (kbd "M-g")))
+         (define-key global-map (kbd "M-g")
+           nil))
+       (define-key global-map [134217831 104]
+         'hydra-error/first-error)
+       (define-key global-map [134217831 106]
+         'hydra-error/next-error)
+       (define-key global-map [134217831 107]
+         'hydra-error/previous-error)
+       (defun hydra-error/body nil
+         "Call the body in the \"hydra-error\" hydra.
 
 The heads for the associated hydra are:
 
@@ -243,109 +241,108 @@ The heads for the associated hydra are:
 \"SPC\":    `hydra-repeat'
 
 The body can be accessed via `hydra-error/body', which is bound to \"M-g\"."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-error/body)))
-        (hydra-show-hint
-         hydra-error/hint
-         (quote hydra-error))
-        (hydra-set-transient-map
-         hydra-error/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore nil))
            (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
+           (setq hydra-curr-body-fn
+                 'hydra-error/body))
+         (hydra-show-hint
+          hydra-error/hint
+          'hydra-error)
+         (hydra-set-transient-map
+          hydra-error/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil)
+         (setq prefix-arg
+               current-prefix-arg))))))
 
 (ert-deftest hydra-blue-toggle ()
   (should
    (equal
     (macroexpand
      '(defhydra hydra-toggle (:color blue)
-       "toggle"
-       ("t" toggle-truncate-lines "truncate")
-       ("f" auto-fill-mode "fill")
-       ("a" abbrev-mode "abbrev")
-       ("q" nil "cancel")))
+        "toggle"
+        ("t" toggle-truncate-lines "truncate")
+        ("f" auto-fill-mode "fill")
+        ("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.")
-       (quote
-        (keymap
-         (113 . hydra-toggle/nil)
-         (97 . hydra-toggle/abbrev-mode-and-exit)
-         (102 . hydra-toggle/auto-fill-mode-and-exit)
-         (116 . hydra-toggle/toggle-truncate-lines-and-exit)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra--digit-argument)
-         (48 . hydra--digit-argument)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-toggle/hint nil
-         "Dynamic hint for hydra-toggle.")
-       (quote
-        (format
-         #("toggle: [t]: truncate, [f]: fill, [a]: abbrev, [q]: cancel."
-           9 10 (face hydra-face-blue)
-           24 25 (face hydra-face-blue)
-           35 36 (face hydra-face-blue)
-           48 49 (face hydra-face-blue)))))
-      (defun hydra-toggle/toggle-truncate-lines-and-exit nil
-        "Call the head `toggle-truncate-lines' in the \"hydra-toggle\" hydra.
+       (set
+        (defvar hydra-toggle/params nil
+          "Params of hydra-toggle.")
+        '(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.")
+        '(("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.")
+        '(keymap
+          (113 . hydra-toggle/nil)
+          (97 . hydra-toggle/abbrev-mode-and-exit)
+          (102 . hydra-toggle/auto-fill-mode-and-exit)
+          (116 . hydra-toggle/toggle-truncate-lines-and-exit)
+          (kp-subtract . hydra--negative-argument)
+          (kp-9 . hydra--digit-argument)
+          (kp-8 . hydra--digit-argument)
+          (kp-7 . hydra--digit-argument)
+          (kp-6 . hydra--digit-argument)
+          (kp-5 . hydra--digit-argument)
+          (kp-4 . hydra--digit-argument)
+          (kp-3 . hydra--digit-argument)
+          (kp-2 . hydra--digit-argument)
+          (kp-1 . hydra--digit-argument)
+          (kp-0 . hydra--digit-argument)
+          (57 . hydra--digit-argument)
+          (56 . hydra--digit-argument)
+          (55 . hydra--digit-argument)
+          (54 . hydra--digit-argument)
+          (53 . hydra--digit-argument)
+          (52 . hydra--digit-argument)
+          (51 . hydra--digit-argument)
+          (50 . hydra--digit-argument)
+          (49 . hydra--digit-argument)
+          (48 . hydra--digit-argument)
+          (45 . hydra--negative-argument)
+          (21 . hydra--universal-argument)
+          (f1
+           keymap
+           (107 . hydra--describe-key))))
+       (set
+        (defvar hydra-toggle/hint nil
+          "Dynamic hint for hydra-toggle.")
+        '(format
+          #("toggle: [t]: truncate, [f]: fill, [a]: abbrev, [q]: cancel."
+            9 10 (face hydra-face-blue)
+            24 25 (face hydra-face-blue)
+            35 36 (face hydra-face-blue)
+            48 49 (face hydra-face-blue))))
+       (defun hydra-toggle/toggle-truncate-lines-and-exit nil
+         "Call the head `toggle-truncate-lines' in the \"hydra-toggle\" hydra.
 
 The heads for the associated hydra are:
 
@@ -355,20 +352,19 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-toggle/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body))
-        (progn
-          (setq this-command
-                (quote toggle-truncate-lines))
-          (hydra--call-interactively-remap-maybe
-           (function
-            toggle-truncate-lines))))
-      (defun hydra-toggle/auto-fill-mode-and-exit nil
-        "Call the head `auto-fill-mode' in the \"hydra-toggle\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-toggle/body)
+         (progn
+           (setq this-command
+                 'toggle-truncate-lines)
+           (hydra--call-interactively-remap-maybe
+            #'toggle-truncate-lines)))
+       (defun hydra-toggle/auto-fill-mode-and-exit nil
+         "Call the head `auto-fill-mode' in the \"hydra-toggle\" hydra.
 
 The heads for the associated hydra are:
 
@@ -378,19 +374,19 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-toggle/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body))
-        (progn
-          (setq this-command
-                (quote auto-fill-mode))
-          (hydra--call-interactively-remap-maybe
-           (function auto-fill-mode))))
-      (defun hydra-toggle/abbrev-mode-and-exit nil
-        "Call the head `abbrev-mode' in the \"hydra-toggle\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-toggle/body)
+         (progn
+           (setq this-command
+                 'auto-fill-mode)
+           (hydra--call-interactively-remap-maybe
+            #'auto-fill-mode)))
+       (defun hydra-toggle/abbrev-mode-and-exit nil
+         "Call the head `abbrev-mode' in the \"hydra-toggle\" hydra.
 
 The heads for the associated hydra are:
 
@@ -400,19 +396,19 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-toggle/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body))
-        (progn
-          (setq this-command
-                (quote abbrev-mode))
-          (hydra--call-interactively-remap-maybe
-           (function abbrev-mode))))
-      (defun hydra-toggle/nil nil
-        "Call the head `nil' in the \"hydra-toggle\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-toggle/body)
+         (progn
+           (setq this-command
+                 'abbrev-mode)
+           (hydra--call-interactively-remap-maybe
+            #'abbrev-mode)))
+       (defun hydra-toggle/nil nil
+         "Call the head `nil' in the \"hydra-toggle\" hydra.
 
 The heads for the associated hydra are:
 
@@ -422,14 +418,14 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-toggle/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-toggle/body)))
-      (defun hydra-toggle/body nil
-        "Call the body in the \"hydra-toggle\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-toggle/body))
+       (defun hydra-toggle/body nil
+         "Call the body in the \"hydra-toggle\" hydra.
 
 The heads for the associated hydra are:
 
@@ -439,106 +435,105 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-toggle/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-toggle/body)))
-        (hydra-show-hint
-         hydra-toggle/hint
-         (quote hydra-toggle))
-        (hydra-set-transient-map
-         hydra-toggle/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore nil))
            (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
+           (setq hydra-curr-body-fn
+                 'hydra-toggle/body))
+         (hydra-show-hint
+          hydra-toggle/hint
+          'hydra-toggle)
+         (hydra-set-transient-map
+          hydra-toggle/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil)
+         (setq prefix-arg
+               current-prefix-arg))))))
 
 (ert-deftest hydra-amaranth-vi ()
   (should
    (equal
     (macroexpand
      '(defhydra hydra-vi
-       (:pre
-        (set-cursor-color "#e52b50")
-        :post
-        (set-cursor-color "#ffffff")
-        :color amaranth)
-       "vi"
-       ("j" next-line)
-       ("k" previous-line)
-       ("q" nil "quit")))
+        (:pre
+         (set-cursor-color "#e52b50")
+         :post
+         (set-cursor-color "#ffffff")
+         :color amaranth)
+        "vi"
+        ("j" next-line)
+        ("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.")
-       (quote
-        (keymap
-         (113 . hydra-vi/nil)
-         (107 . hydra-vi/previous-line)
-         (106 . hydra-vi/next-line)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra--digit-argument)
-         (48 . hydra--digit-argument)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-vi/hint nil
-         "Dynamic hint for hydra-vi.")
-       (quote
-        (format
-         #("vi: j, k, [q]: quit."
-           4 5 (face hydra-face-amaranth)
-           7 8 (face hydra-face-amaranth)
-           11 12 (face hydra-face-teal)))))
-      (defun hydra-vi/next-line nil
-        "Call the head `next-line' in the \"hydra-vi\" hydra.
+       (set
+        (defvar hydra-vi/params nil
+          "Params of hydra-vi.")
+        '(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.")
+        '(("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.")
+        '(keymap
+          (113 . hydra-vi/nil)
+          (107 . hydra-vi/previous-line)
+          (106 . hydra-vi/next-line)
+          (kp-subtract . hydra--negative-argument)
+          (kp-9 . hydra--digit-argument)
+          (kp-8 . hydra--digit-argument)
+          (kp-7 . hydra--digit-argument)
+          (kp-6 . hydra--digit-argument)
+          (kp-5 . hydra--digit-argument)
+          (kp-4 . hydra--digit-argument)
+          (kp-3 . hydra--digit-argument)
+          (kp-2 . hydra--digit-argument)
+          (kp-1 . hydra--digit-argument)
+          (kp-0 . hydra--digit-argument)
+          (57 . hydra--digit-argument)
+          (56 . hydra--digit-argument)
+          (55 . hydra--digit-argument)
+          (54 . hydra--digit-argument)
+          (53 . hydra--digit-argument)
+          (52 . hydra--digit-argument)
+          (51 . hydra--digit-argument)
+          (50 . hydra--digit-argument)
+          (49 . hydra--digit-argument)
+          (48 . hydra--digit-argument)
+          (45 . hydra--negative-argument)
+          (21 . hydra--universal-argument)
+          (f1
+           keymap
+           (107 . hydra--describe-key))))
+       (set
+        (defvar hydra-vi/hint nil
+          "Dynamic hint for hydra-vi.")
+        '(format
+          #("vi: j, k, [q]: quit."
+            4 5 (face hydra-face-amaranth)
+            7 8 (face hydra-face-amaranth)
+            11 12 (face hydra-face-teal))))
+       (defun hydra-vi/next-line nil
+         "Call the head `next-line' in the \"hydra-vi\" hydra.
 
 The heads for the associated hydra are:
 
@@ -547,34 +542,33 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-vi/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-vi/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote next-line))
-              (hydra--call-interactively-remap-maybe
-               (function next-line)))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-vi/hint
-         (quote hydra-vi))
-        (hydra-set-transient-map
-         hydra-vi/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (set-cursor-color "#e52b50")
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           (set-cursor-color "#ffffff"))
-         (quote warn)))
-      (defun hydra-vi/previous-line nil
-        "Call the head `previous-line' in the \"hydra-vi\" hydra.
+           (setq hydra-curr-body-fn
+                 'hydra-vi/body))
+         (condition-case err
+             (progn
+               (setq this-command 'next-line)
+               (hydra--call-interactively-remap-maybe
+                #'next-line))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-vi/hint
+          'hydra-vi)
+         (hydra-set-transient-map
+          hydra-vi/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            (set-cursor-color "#ffffff"))
+          'warn))
+       (defun hydra-vi/previous-line nil
+         "Call the head `previous-line' in the \"hydra-vi\" hydra.
 
 The heads for the associated hydra are:
 
@@ -583,34 +577,34 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-vi/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-vi/body)))
-        (condition-case err
-            (progn
-              (setq this-command
-                    (quote previous-line))
-              (hydra--call-interactively-remap-maybe
-               (function previous-line)))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-vi/hint
-         (quote hydra-vi))
-        (hydra-set-transient-map
-         hydra-vi/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (set-cursor-color "#e52b50")
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           (set-cursor-color "#ffffff"))
-         (quote warn)))
-      (defun hydra-vi/nil nil
-        "Call the head `nil' in the \"hydra-vi\" hydra.
+           (setq hydra-curr-body-fn
+                 'hydra-vi/body))
+         (condition-case err
+             (progn
+               (setq this-command
+                     'previous-line)
+               (hydra--call-interactively-remap-maybe
+                #'previous-line))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-vi/hint
+          'hydra-vi)
+         (hydra-set-transient-map
+          hydra-vi/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            (set-cursor-color "#ffffff"))
+          'warn))
+       (defun hydra-vi/nil nil
+         "Call the head `nil' in the \"hydra-vi\" hydra.
 
 The heads for the associated hydra are:
 
@@ -619,15 +613,15 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-vi/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-vi/body)))
-      (defun hydra-vi/body nil
-        "Call the body in the \"hydra-vi\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (set-cursor-color "#e52b50")
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-vi/body))
+       (defun hydra-vi/body nil
+         "Call the body in the \"hydra-vi\" hydra.
 
 The heads for the associated hydra are:
 
@@ -636,101 +630,101 @@ The heads for the associated hydra are:
 \"q\":    `nil'
 
 The body can be accessed via `hydra-vi/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (set-cursor-color "#e52b50")
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-vi/body)))
-        (hydra-show-hint
-         hydra-vi/hint
-         (quote hydra-vi))
-        (hydra-set-transient-map
-         hydra-vi/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (set-cursor-color "#e52b50")
+         (let ((hydra--ignore nil))
            (hydra-keyboard-quit)
-           (set-cursor-color "#ffffff"))
-         (quote warn))
-        (setq prefix-arg
-              current-prefix-arg))))))
+           (setq hydra-curr-body-fn
+                 'hydra-vi/body))
+         (hydra-show-hint
+          hydra-vi/hint
+          'hydra-vi)
+         (hydra-set-transient-map
+          hydra-vi/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            (set-cursor-color "#ffffff"))
+          'warn)
+         (setq prefix-arg
+               current-prefix-arg))))))
 
 (ert-deftest hydra-zoom-duplicate-1 ()
   (should
    (equal
     (macroexpand
      '(defhydra hydra-zoom ()
-       "zoom"
-       ("r" (text-scale-set 0) "reset")
-       ("0" (text-scale-set 0) :bind nil :exit t)
-       ("1" (text-scale-set 0) nil :bind nil :exit t)))
+        "zoom"
+        ("r" (text-scale-set 0) "reset")
+        ("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.")
-       (quote
-        (keymap
-         (114 . hydra-zoom/lambda-r)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra-zoom/lambda-0-and-exit)
-         (48 . hydra-zoom/lambda-0-and-exit)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-zoom/hint nil
-         "Dynamic hint for hydra-zoom.")
-       (quote
-        (format
-         #("zoom: [r 0]: reset."
-           7 8 (face hydra-face-red)
-           9 10 (face hydra-face-blue)))))
-      (defun hydra-zoom/lambda-r nil
-        "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
+       (set
+        (defvar hydra-zoom/params nil
+          "Params of hydra-zoom.")
+        '(nil nil))
+       (set
+        (defvar hydra-zoom/docstring nil
+          "Docstring of hydra-zoom.")
+        "zoom")
+       (set
+        (defvar hydra-zoom/heads nil
+          "Heads for hydra-zoom.")
+        '(("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.")
+        '(keymap
+          (114 . hydra-zoom/lambda-r)
+          (kp-subtract . hydra--negative-argument)
+          (kp-9 . hydra--digit-argument)
+          (kp-8 . hydra--digit-argument)
+          (kp-7 . hydra--digit-argument)
+          (kp-6 . hydra--digit-argument)
+          (kp-5 . hydra--digit-argument)
+          (kp-4 . hydra--digit-argument)
+          (kp-3 . hydra--digit-argument)
+          (kp-2 . hydra--digit-argument)
+          (kp-1 . hydra--digit-argument)
+          (kp-0 . hydra--digit-argument)
+          (57 . hydra--digit-argument)
+          (56 . hydra--digit-argument)
+          (55 . hydra--digit-argument)
+          (54 . hydra--digit-argument)
+          (53 . hydra--digit-argument)
+          (52 . hydra--digit-argument)
+          (51 . hydra--digit-argument)
+          (50 . hydra--digit-argument)
+          (49 . hydra-zoom/lambda-0-and-exit)
+          (48 . hydra-zoom/lambda-0-and-exit)
+          (45 . hydra--negative-argument)
+          (21 . hydra--universal-argument)
+          (f1
+           keymap
+           (107 . hydra--describe-key))))
+       (set
+        (defvar hydra-zoom/hint nil
+          "Dynamic hint for hydra-zoom.")
+        '(format
+          #("zoom: [r 0]: reset."
+            7 8 (face hydra-face-red)
+            9 10 (face hydra-face-blue))))
+       (defun hydra-zoom/lambda-r nil
+         "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
 
 The heads for the associated hydra are:
 
@@ -739,33 +733,32 @@ The heads for the associated hydra are:
 \"1\":    `(text-scale-set 0)'
 
 The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (condition-case err
-            (hydra--call-interactively-remap-maybe
-             (function
-              (lambda nil
-               (interactive)
-               (text-scale-set 0))))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-zoom/lambda-0-and-exit nil
-        "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
+           (setq hydra-curr-body-fn
+                 'hydra-zoom/body))
+         (condition-case err
+             (hydra--call-interactively-remap-maybe
+              #'(lambda nil
+                  (interactive)
+                  (text-scale-set 0)))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-zoom/hint
+          'hydra-zoom)
+         (hydra-set-transient-map
+          hydra-zoom/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil))
+       (defun hydra-zoom/lambda-0-and-exit nil
+         "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
 
 The heads for the associated hydra are:
 
@@ -774,19 +767,18 @@ The heads for the associated hydra are:
 \"1\":    `(text-scale-set 0)'
 
 The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-zoom/body))
-        (hydra--call-interactively-remap-maybe
-         (function
-          (lambda nil
-           (interactive)
-           (text-scale-set 0)))))
-      (defun hydra-zoom/body nil
-        "Call the body in the \"hydra-zoom\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-zoom/body)
+         (hydra--call-interactively-remap-maybe
+          #'(lambda nil
+              (interactive)
+              (text-scale-set 0))))
+       (defun hydra-zoom/body nil
+         "Call the body in the \"hydra-zoom\" hydra.
 
 The heads for the associated hydra are:
 
@@ -795,100 +787,100 @@ The heads for the associated hydra are:
 \"1\":    `(text-scale-set 0)'
 
 The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore nil))
            (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
+           (setq hydra-curr-body-fn
+                 'hydra-zoom/body))
+         (hydra-show-hint
+          hydra-zoom/hint
+          'hydra-zoom)
+         (hydra-set-transient-map
+          hydra-zoom/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil)
+         (setq prefix-arg
+               current-prefix-arg))))))
 
 (ert-deftest hydra-zoom-duplicate-2 ()
   (should
    (equal
     (macroexpand
      '(defhydra hydra-zoom ()
-       "zoom"
-       ("r" (text-scale-set 0) "reset")
-       ("0" (text-scale-set 0) :bind nil :exit t)
-       ("1" (text-scale-set 0) nil :bind nil)))
+        "zoom"
+        ("r" (text-scale-set 0) "reset")
+        ("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.")
-       (quote
-        (keymap
-         (114 . hydra-zoom/lambda-r)
-         (kp-subtract . hydra--negative-argument)
-         (kp-9 . hydra--digit-argument)
-         (kp-8 . hydra--digit-argument)
-         (kp-7 . hydra--digit-argument)
-         (kp-6 . hydra--digit-argument)
-         (kp-5 . hydra--digit-argument)
-         (kp-4 . hydra--digit-argument)
-         (kp-3 . hydra--digit-argument)
-         (kp-2 . hydra--digit-argument)
-         (kp-1 . hydra--digit-argument)
-         (kp-0 . hydra--digit-argument)
-         (57 . hydra--digit-argument)
-         (56 . hydra--digit-argument)
-         (55 . hydra--digit-argument)
-         (54 . hydra--digit-argument)
-         (53 . hydra--digit-argument)
-         (52 . hydra--digit-argument)
-         (51 . hydra--digit-argument)
-         (50 . hydra--digit-argument)
-         (49 . hydra-zoom/lambda-r)
-         (48 . hydra-zoom/lambda-0-and-exit)
-         (45 . hydra--negative-argument)
-         (21 . hydra--universal-argument))))
-      (set
-       (defvar hydra-zoom/hint nil
-         "Dynamic hint for hydra-zoom.")
-       (quote
-        (format
-         #("zoom: [r 0]: reset."
-           7 8 (face hydra-face-red)
-           9 10 (face hydra-face-blue)))))
-      (defun hydra-zoom/lambda-r nil
-        "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
+       (set
+        (defvar hydra-zoom/params nil
+          "Params of hydra-zoom.")
+        '(nil nil))
+       (set
+        (defvar hydra-zoom/docstring nil
+          "Docstring of hydra-zoom.")
+        "zoom")
+       (set
+        (defvar hydra-zoom/heads nil
+          "Heads for hydra-zoom.")
+        '(("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.")
+        '(keymap
+          (114 . hydra-zoom/lambda-r)
+          (kp-subtract . hydra--negative-argument)
+          (kp-9 . hydra--digit-argument)
+          (kp-8 . hydra--digit-argument)
+          (kp-7 . hydra--digit-argument)
+          (kp-6 . hydra--digit-argument)
+          (kp-5 . hydra--digit-argument)
+          (kp-4 . hydra--digit-argument)
+          (kp-3 . hydra--digit-argument)
+          (kp-2 . hydra--digit-argument)
+          (kp-1 . hydra--digit-argument)
+          (kp-0 . hydra--digit-argument)
+          (57 . hydra--digit-argument)
+          (56 . hydra--digit-argument)
+          (55 . hydra--digit-argument)
+          (54 . hydra--digit-argument)
+          (53 . hydra--digit-argument)
+          (52 . hydra--digit-argument)
+          (51 . hydra--digit-argument)
+          (50 . hydra--digit-argument)
+          (49 . hydra-zoom/lambda-r)
+          (48 . hydra-zoom/lambda-0-and-exit)
+          (45 . hydra--negative-argument)
+          (21 . hydra--universal-argument)
+          (f1
+           keymap
+           (107 . hydra--describe-key))))
+       (set
+        (defvar hydra-zoom/hint nil
+          "Dynamic hint for hydra-zoom.")
+        '(format
+          #("zoom: [r 0]: reset."
+            7 8 (face hydra-face-red)
+            9 10 (face hydra-face-blue))))
+       (defun hydra-zoom/lambda-r nil
+         "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
 
 The heads for the associated hydra are:
 
@@ -897,33 +889,32 @@ The heads for the associated hydra are:
 \"1\":    `(text-scale-set 0)'
 
 The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore t))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (condition-case err
-            (hydra--call-interactively-remap-maybe
-             (function
-              (lambda nil
-               (interactive)
-               (text-scale-set 0))))
-          ((quit error)
-           (message
-            (error-message-string err))))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore t))
            (hydra-keyboard-quit)
-           nil)
-         nil))
-      (defun hydra-zoom/lambda-0-and-exit nil
-        "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
+           (setq hydra-curr-body-fn
+                 'hydra-zoom/body))
+         (condition-case err
+             (hydra--call-interactively-remap-maybe
+              #'(lambda nil
+                  (interactive)
+                  (text-scale-set 0)))
+           ((quit error)
+            (message
+             (error-message-string err))))
+         (hydra-show-hint
+          hydra-zoom/hint
+          'hydra-zoom)
+         (hydra-set-transient-map
+          hydra-zoom/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil))
+       (defun hydra-zoom/lambda-0-and-exit nil
+         "Call the head `(text-scale-set 0)' in the \"hydra-zoom\" hydra.
 
 The heads for the associated hydra are:
 
@@ -932,19 +923,18 @@ The heads for the associated hydra are:
 \"1\":    `(text-scale-set 0)'
 
 The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (hydra-keyboard-quit)
-        (setq hydra-curr-body-fn
-              (quote hydra-zoom/body))
-        (hydra--call-interactively-remap-maybe
-         (function
-          (lambda nil
-           (interactive)
-           (text-scale-set 0)))))
-      (defun hydra-zoom/body nil
-        "Call the body in the \"hydra-zoom\" hydra.
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (hydra-keyboard-quit)
+         (setq hydra-curr-body-fn
+               'hydra-zoom/body)
+         (hydra--call-interactively-remap-maybe
+          #'(lambda nil
+              (interactive)
+              (text-scale-set 0))))
+       (defun hydra-zoom/body nil
+         "Call the body in the \"hydra-zoom\" hydra.
 
 The heads for the associated hydra are:
 
@@ -953,24 +943,24 @@ The heads for the associated hydra are:
 \"1\":    `(text-scale-set 0)'
 
 The body can be accessed via `hydra-zoom/body'."
-        (interactive)
-        (require (quote hydra))
-        (hydra-default-pre)
-        (let ((hydra--ignore nil))
-          (hydra-keyboard-quit)
-          (setq hydra-curr-body-fn
-                (quote hydra-zoom/body)))
-        (hydra-show-hint
-         hydra-zoom/hint
-         (quote hydra-zoom))
-        (hydra-set-transient-map
-         hydra-zoom/keymap
-         (lambda nil
+         (interactive)
+         (require 'hydra)
+         (hydra-default-pre)
+         (let ((hydra--ignore nil))
            (hydra-keyboard-quit)
-           nil)
-         nil)
-        (setq prefix-arg
-              current-prefix-arg))))))
+           (setq hydra-curr-body-fn
+                 'hydra-zoom/body))
+         (hydra-show-hint
+          hydra-zoom/hint
+          'hydra-zoom)
+         (hydra-set-transient-map
+          hydra-zoom/keymap
+          (lambda nil
+            (hydra-keyboard-quit)
+            nil)
+          nil)
+         (setq prefix-arg
+               current-prefix-arg))))))
 
 (ert-deftest defhydradio ()
   (should (equal
diff --git a/hydra.el b/hydra.el
index d8770019ce..31d66824b7 100644
--- a/hydra.el
+++ b/hydra.el
@@ -352,6 +352,7 @@ Exitable only through a blue head.")
 ;;* Universal Argument
 (defvar hydra-base-map
   (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "<f1> k") 'hydra--describe-key)
     (define-key map [?\C-u] 'hydra--universal-argument)
     (define-key map [?-] 'hydra--negative-argument)
     (define-key map [?0] 'hydra--digit-argument)
@@ -413,6 +414,15 @@ Exitable only through a blue head.")
                          ((eq arg '-) nil)
                          (t '-))))
 
+(defun hydra--describe-key ()
+  "Forward to `describe-key'.
+Call order: the hydra body, `hydra--describe-key', the head."
+  (interactive)
+  (lv-delete-window)
+  (let ((hydra-hint-display-type 'message))
+    (call-interactively 'describe-key)
+    (hydra-keyboard-quit)))
+
 ;;* Repeat
 (defvar hydra-repeat--prefix-arg nil
   "Prefix arg to use with `hydra-repeat'.")

Reply via email to