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

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

[elpa] externals/hyperbole eaa2ac0b13 5/7: Fix many outstanding issues f


From: ELPA Syncer
Subject: [elpa] externals/hyperbole eaa2ac0b13 5/7: Fix many outstanding issues for V8 release
Date: Mon, 27 Dec 2021 04:57:38 -0500 (EST)

branch: externals/hyperbole
commit eaa2ac0b13d8d97bf2712ed5056ab7f9685ff078
Author: Bob Weiner <rsw@gnu.org>
Commit: Bob Weiner <rsw@gnu.org>

    Fix many outstanding issues for V8 release
    
    * kotl/kotl-mode.el (kotl-mode:exchange-cells): Signal error if invalid 
type or value
        is given for a cell ref.  Also, fix setting of idstamps when label type 
is idstamp.
    
    * hmouse-tag.el (smart-lisp-find-tag): With 'show-doc' arg, if 'tag' is 
unbound, return
        nil and ignore this as a tag instead of triggering an error.
    
    * hpath.el (hpath:substitute-value): Fix to properly return unchanged 
'path' when it
        contains a PATH-type colon-separated list of directories but no 
matching path is
        found.  Previously the 'substitute-in-file-name' call would improperly 
expand the
        variable.
    
    * DEMO (Defining New Action Button Types):
      man/hyperbole.texi: (Action Button Link Types):
        Fix to refer to PYTHONLIBPATH instead of PYTHONPATH.
    
    * man/hyperbole.texi: (Smart Keys): Add description of how to activate 
Hyperbole
        with {C-h h} or change this binding.
    
    * man/hyperbole.texi: (Smart Key Bindings):
        Remove discussion of hyperbole-toggle-bindings.  Toggle hyperbole-mode 
instead.
    
    * hmouse-info.el (Info-read-index-item-name): Remove local binding of
        Info-complete-menu-buffer to fix completion when linking to Info index 
items.
    
    * hui-jmenu.el (hui-menu-sort-buffer): Replace 'with-current-buffer' with 
'with-temp-buffer'.
                   (hui-menu-buffer-mode-name): Fix to replace spaces in 
mode-names with dashes.
---
 ChangeLog          |  29 ++++++
 DEMO               |  15 ++--
 hmouse-info.el     |  11 +--
 hmouse-tag.el      |  11 ++-
 hpath.el           |  66 +++++++-------
 hui-jmenu.el       |  46 +++++-----
 hui-mini.el        |   3 +-
 hui-mouse.el       |   2 +-
 hyperbole.el       |   9 +-
 kotl/kotl-mode.el  |  65 +++++++++-----
 man/hyperbole.html | 255 ++++++++++++++++++++++++++---------------------------
 man/hyperbole.info | Bin 554577 -> 554080 bytes
 man/hyperbole.pdf  | Bin 1309176 -> 1310127 bytes
 man/hyperbole.texi | 209 ++++++++++++++++++++-----------------------
 man/version.texi   |   4 +-
 15 files changed, 382 insertions(+), 343 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index c1e75f21b0..6035f2216f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,32 @@
+2021-12-26  Bob Weiner  <rsw@gnu.org>
+
+* kotl/kotl-mode.el (kotl-mode:exchange-cells): Signal error if invalid type 
or value
+    is given for a cell ref.  Also, fix setting of idstamps when label type is 
idstamp.
+
+* hmouse-tag.el (smart-lisp-find-tag): With 'show-doc' arg, if 'tag' is 
unbound, return
+    nil and ignore this as a tag instead of triggering an error.
+
+* hpath.el (hpath:substitute-value): Fix to properly return unchanged 'path' 
when it
+    contains a PATH-type colon-separated list of directories but no matching 
path is
+    found.  Previously the 'substitute-in-file-name' call would improperly 
expand the
+    variable.
+
+* DEMO (Defining New Action Button Types):
+  man/hyperbole.texi: (Action Button Link Types):
+    Fix to refer to PYTHONLIBPATH instead of PYTHONPATH.
+
+* man/hyperbole.texi: (Smart Keys): Add description of how to activate 
Hyperbole
+    with {C-h h} or change this binding.
+
+* man/hyperbole.texi: (Smart Key Bindings):
+    Remove discussion of hyperbole-toggle-bindings.  Toggle hyperbole-mode 
instead.
+
+* hmouse-info.el (Info-read-index-item-name): Remove local binding of
+    Info-complete-menu-buffer to fix completion when linking to Info index 
items.
+
+* hui-jmenu.el (hui-menu-sort-buffer): Replace 'with-current-buffer' with 
'with-temp-buffer'.
+               (hui-menu-buffer-mode-name): Fix to replace spaces in 
mode-names with dashes.
+
 2021-12-19  Bob Weiner  <rsw@gnu.org>
 
 * hyrolo.el (hyrolo-map-level): Fix {C-h h r o} order cmd / sorting just hangs.
diff --git a/DEMO b/DEMO
index ba754ab02a..7cc94c4e6b 100644
--- a/DEMO
+++ b/DEMO
@@ -813,11 +813,10 @@ button.
 
 *** Defining New Action Button Types
 
-You can do a huge number of things with existing Action Button types
-but sometimes you may want to define your own types for more advanced
-usage.  Hyperbole let's you easily create your own Action Button link
-types without knowing Elisp, if you understand basic pattern
-replacement.
+You can do many things with existing Action Button types but sometimes you
+may want to define your own types for more advanced usage.  Hyperbole lets
+you easily create your own Action Button link types without knowing Elisp, if
+you understand basic regular expression-based pattern replacement.
 
 In your Emacs initialization file, e.g. ~/.emacs, you will add a line of
 the form:
@@ -827,11 +826,13 @@ the form:
 where:
 
     TYPE is the name of the new type you want to create;
+
     LINK-EXPR is a regular expression containing a %s
       replacement string into which Hyperbole will substitute
       the button text following the TYPE from each button activated of
       this type; alternatively, LINK-EXPR may be the name of a function
       of one argument, the button text sans the function name;
+
     Hyperbole automatically creates a doc string for the type but you can
     override this by providing an optional DOC string.
 
@@ -844,10 +845,10 @@ activated as one of these 4 kinds:
     (4) or a function or action type of one argument, the button text sans the
         function name.
 
-Let's try an example.  If you use Python and have a PYTHONPATH
+Let's try an example.  If you use Python and have a PYTHONLIBPATH
 environment variable, then pressing {C-x C-e} after this expression:
 
-   (defal pylib "${PYTHONPATH}/%s")
+   (defal pylib "${PYTHONLIBPATH}/%s")
 
 defines a new action button link type called 'pylib’ whose buttons
 take the form of:
diff --git a/hmouse-info.el b/hmouse-info.el
index 77f9e32039..96f05f2675 100644
--- a/hmouse-info.el
+++ b/hmouse-info.el
@@ -36,16 +36,17 @@ the Top node in filename.  Signal an error if a filename 
without an
 index is given."
   (let ((completion-ignore-case t)
        (Info-history-list nil)
-       Info-complete-menu-buffer
        item-name)
     (save-window-excursion
       (info)
       (setq Info-complete-menu-buffer (clone-buffer)))
     (unwind-protect
-       (progn (while (equal "" (setq item-name
-                                     (completing-read prompt 
#'Info-read-index-item-name-1 nil t))))
-              item-name)
-      (kill-buffer Info-complete-menu-buffer))))
+       (progn
+         (while (equal "" (setq item-name
+                                (completing-read prompt 
#'Info-read-index-item-name-1 nil t))))
+         item-name)
+      (kill-buffer Info-complete-menu-buffer)
+      (makunbound 'Info-complete-menu-buffer))))
 
 ;;;###autoload
 (defun smart-info ()
diff --git a/hmouse-tag.el b/hmouse-tag.el
index 2486991a47..5ea45bf68d 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -597,8 +597,9 @@ Otherwise, if a definition for the identifier is found 
within a TAGS
 file in the current directory or any of its ancestor directories, this
 jumps to the definition.
 
-Optional SHOW-DOC flag means show documentation for the tag at point
-rather than displaying its source code definition.
+With optional SHOW-DOC flag, show documentation for the tag at point
+rather than displaying its source code definition.  In this case, tag
+must be a bound or fbound symbol or it is ignored.
 
 This command assumes that its caller has already checked that the key was
 pressed in an appropriate buffer and has moved the cursor to the selected
@@ -638,7 +639,7 @@ buffer."
     (smart-lisp-find-tag nil show-doc)))
 
 (defun smart-lisp-find-tag (&optional tag show-doc)
-  "Find the definition of optional Lisp TAG (or identifier at point) or show 
its documentation with optional prefix arg SHOW-DOC non-nil.
+  "Find the definition of optional Lisp TAG (or identifier at point when TAG 
is nil) or show its documentation with optional prefix arg SHOW-DOC non-nil.
 Use `hpath:display-buffer' to show definition or documentation."
   (interactive
    (list (read-string (format "%s Lisp identifier: "
@@ -654,7 +655,9 @@ Use `hpath:display-buffer' to show definition or 
documentation."
           (cond ((fboundp tag-sym) (describe-function tag-sym))
                 ((and tag-sym (boundp tag-sym)) (describe-variable tag-sym))
                 ((facep tag-sym) (describe-face tag-sym))
-                (t (error "(smart-lisp): `%s' unbound symbol definition not 
found" tag))))
+                ;; (t (error "(smart-lisp): `%s' unbound symbol definition not 
found" tag))
+                ;; Ignore unbound symbols if displaying doc.
+                (t nil)))
          ((and elisp-flag (fboundp 'find-function-noselect)
                (let ((result (smart-lisp-bound-symbol-def tag-sym)))
                  (when (cdr result)
diff --git a/hpath.el b/hpath.el
index 9900602483..90440fcd04 100644
--- a/hpath.el
+++ b/hpath.el
@@ -1562,39 +1562,39 @@ in-buffer path will not match."
 
 (defun hpath:substitute-value (path)
   "Substitute matching value for Emacs Lisp variables and environment 
variables in PATH and return PATH."
-  (substitute-in-file-name
-   (hpath:substitute-match-value
-    "\\$@?\{\\([^\}]+\\)@?\}"
-    path
-    (lambda (_matched_str)
-      (let* ((match (match-beginning 0))
-             (start (match-end 0))
-             (var-group (substring path match start))
-            (rest-of-path (substring path start))
-            (var-ext (substring path (match-beginning 1) (match-end 1)))
-            (var-name (if (= ?@ (aref var-ext (1- (length var-ext))))
-                          (substring var-ext 0 -1)
-                        var-ext))
-            (trailing-dir-sep-flag (and (not (string-empty-p rest-of-path))
-                                        (memq (aref rest-of-path 0) '(?/ 
?\\))))
-            (sym (intern-soft var-name)))
-       (when (file-name-absolute-p rest-of-path)
-         (setq rest-of-path (substring rest-of-path 1)))
-       (if (or (and sym (boundp sym)) (getenv var-name))
-           ;; directory-file-name or hpath:substitute-dir may trigger
-           ;; an error but this may be called when testing for
-           ;; implicit button matches where no error should occur, so
-           ;; catch the error and ignore variable expansion in such a
-           ;; case.
-           ;; -- RSW, 08-26-2019
-           ;; Removed errors on non-existent paths.
-           ;; -- RSW, 04-19-2021
-           (condition-case nil
-               (funcall (if trailing-dir-sep-flag #'directory-file-name 
#'identity)
-                        (hpath:substitute-dir var-name rest-of-path))
-             (error ""))
-         var-group)))
-    t t)))
+   (let ((new-path (hpath:substitute-match-value
+                   "\\$@?\{\\([^\}]+\\)@?\}"
+                   path
+                   (lambda (_matched_str)
+                     (let* ((var-group (match-string 0 path))
+                            (var-ext (match-string 1 path))
+                            (rest-of-path (substring path (match-end 0)))
+                            (var-name (if (= ?@ (aref var-ext (1- (length 
var-ext))))
+                                          (substring var-ext 0 -1)
+                                        var-ext))
+                            (trailing-dir-sep-flag (and (not (string-empty-p 
rest-of-path))
+                                                        (memq (aref 
rest-of-path 0) '(?/ ?\\))))
+                            (sym (intern-soft var-name)))
+                       (when (file-name-absolute-p rest-of-path)
+                         (setq rest-of-path (substring rest-of-path 1)))
+                       (if (or (and sym (boundp sym)) (getenv var-name))
+                           ;; directory-file-name or hpath:substitute-dir may 
trigger
+                           ;; an error but this may be called when testing for
+                           ;; implicit button matches where no error should 
occur, so
+                           ;; catch the error and ignore variable expansion in 
such a
+                           ;; case.
+                           ;; -- RSW, 08-26-2019
+                           ;; Removed errors on non-existent paths.
+                           ;; -- RSW, 04-19-2021
+                           (condition-case nil
+                               (funcall (if trailing-dir-sep-flag 
#'directory-file-name #'identity)
+                                        (hpath:substitute-dir var-name 
rest-of-path))
+                             (error ""))
+                         var-group)))
+                   t t)))
+     (if (equal new-path path)
+        path
+       (substitute-in-file-name new-path))))
 
 (defun hpath:substitute-var (path)
   "Replace up to one match in PATH with the first variable from 
`hpath:variables' whose value contain a string match to PATH.
diff --git a/hui-jmenu.el b/hui-jmenu.el
index 1beb9ca822..7fdb2cc40b 100644
--- a/hui-jmenu.el
+++ b/hui-jmenu.el
@@ -143,8 +143,9 @@
   (let ((mname (buffer-local-value 'mode-name buffer)))
     (if mname
        ;; Next line needed to ensure mode name is always formatted as
-       ;; a string.
-       (format-mode-line (or (car-safe mname) mname))
+       ;; a string and spaces are replaced with dashes.
+       (subst-char-in-string ?\ ?-
+                             (format-mode-line (or (car-safe mname) mname)))
       (capitalize (symbol-name (buffer-local-value 'major-mode buffer))))))
 
 (defun hui-menu-frame-name (frame)
@@ -196,27 +197,26 @@
 
 (defun hui-menu-sort-buffers (buffer-and-mode-name-list)
   "Reverse sort and return list of (`buffer-name' . `mode-name') elements by 
`mode-name' and then by `buffer-name'."
-  (let ((buf (get-buffer-create " tmp-sort")))
-    (with-current-buffer buf
-      (setq buffer-read-only nil)
-      (erase-buffer)
-      (let ((standard-output (current-buffer)))
-       (mapc #'print buffer-and-mode-name-list))
-     (while (search-forward "\n\n" nil t)
-       (replace-match "\n"))
-      (if (hui-menu-program-path "sort")
-         (call-process-region (point-min) (point-max)
-                              "sort" t t nil "-r" "-k3,3" "-k1,1")
-       ;; This fallback of sort-fields can only sort on one field, so
-       ;; sort by major-mode and leave buffers within each mode
-       ;; unsorted when no UNIX sort program is available.
-       (sort-fields 3 (point-min) (point-max))
-       (reverse-region (point-min) (point-max)))
-      (insert "\)\n")
-      (goto-char (point-min))
-      (insert "\(")
-      (goto-char (point-min))
-      (read (current-buffer)))))
+  (with-temp-buffer
+    (setq buffer-read-only nil)
+    (erase-buffer)
+    (let ((standard-output (current-buffer)))
+      (mapc #'print buffer-and-mode-name-list))
+    (while (search-forward "\n\n" nil t)
+      (replace-match "\n"))
+    (if (hui-menu-program-path "sort")
+       (call-process-region (point-min) (point-max)
+                            "sort" t t nil "-r" "-k3,3" "-k1,1")
+      ;; This fallback of sort-fields can only sort on one field, so
+      ;; sort by major-mode and leave buffers within each mode
+      ;; unsorted when no UNIX sort program is available.
+      (sort-fields 3 (point-min) (point-max))
+      (reverse-region (point-min) (point-max)))
+    (insert "\)\n")
+    (goto-char (point-min))
+    (insert "\(")
+    (goto-char (point-min))
+    (read (current-buffer))))
 
 (defun hui-menu-of-frames ()
   (let ((frames (copy-sequence (frame-list))))
diff --git a/hui-mini.el b/hui-mini.el
index aa763d322a..301374ab72 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -25,8 +25,7 @@
 ;;; ************************************************************************
 
 (defvar hui:hypb-exit            "X"
-  "*Upper case character string which exits from / disable Hyperbole mode, and 
any active minibuffer menu.")
-
+  "*Upper case character string which exits from / disables Hyperbole mode and 
any active minibuffer menu.")
 (defvar hui:menu-select          "\C-m"
   "*Character string which selects the Hyperbole menu item at point.")
 (defvar hui:menu-quit            "Q"
diff --git a/hui-mouse.el b/hui-mouse.el
index 1b85b2204b..b3be47f23b 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -1783,7 +1783,7 @@ If key is pressed:
 
 
 (defun smart-outline-assist ()
-  "Collaps, expand, and move outline entries.
+  "Collapse, expand, and move outline entries.
 Invoked via an assist-key press when in `outline-mode'.  It assumes that
 its caller has already checked that the assist-key was pressed in an 
appropriate
 buffer and has moved the cursor to the selected buffer.
diff --git a/hyperbole.el b/hyperbole.el
index daf85c1c2c..8871a5a476 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -138,17 +138,19 @@ See `hkey-initialize'.")
 
 ;;;###autoload
 (define-minor-mode hyperbole-mode
-  "Toggle the Everyday Hypertextual Information Manager global minor mode 
(Hyperbole mode).
+  "Toggle Hyperbole global minor mode, the Everyday Hypertextual Information 
Manager.
 
 When Hyperbole mode is enabled, the `hyperbole-mode' variable
 is non-nil, Hyperbole menus are enabled, as are Hyperbole keys.
 
 Invoke the Hyperbole minibuffer menu with \\[hyperbole].  See the
-documentation at \"(hyperbole)Top\".
+Info documentation at \"(hyperbole)Top\".
 
 \\{hyperbole-mode-map}"
   :global t
+  :keymap 'hyperbole-mode-map
   :lighter hyperbole-mode-lighter
+  :require 'hyperbole
   (if hyperbole-mode
       (hyperbole--enable-mode)
     (hyperbole--disable-mode)))
@@ -242,6 +244,9 @@ of the commands."
     (or (where-is-internal #'hkey-help)
        (hkey-set-key (vector help-char ?A) #'hkey-help))
     ;;
+    ;; Define virtual key used to activate hyperbole minor modeline menu
+    ;; (hkey-set-key [hyperbole] (infodock-hyperbole-menu t))
+    ;;
     ;; Provide a site standard way of emulating most Hyperbole mouse drag
     ;; commands from the keyboard.  This is most useful for rapidly creating
     ;; Hyperbole link buttons from the keyboard without invoking the Hyperbole
diff --git a/kotl/kotl-mode.el b/kotl/kotl-mode.el
index c624ee83fc..ae3268cedf 100644
--- a/kotl/kotl-mode.el
+++ b/kotl/kotl-mode.el
@@ -2309,28 +2309,30 @@ to one level and kotl-mode:refill-flag is treated as 
true."
              (kcell-view:label))
             (t (error
                 "(kotl-mode:exchange-cells): No two visible cells 
available")))))))
+  (unless (and (or (stringp cell-ref-1) (natnump cell-ref-1))
+              (or (stringp cell-ref-2) (natnump cell-ref-2)))
+    (error "(kotl-mode:exchange-cells): Cell refs must be either strings or 
numbers >= 0, not: '%s' and '%s'"
+          cell-ref-1 cell-ref-2))
+  (when (equal cell-ref-1 cell-ref-2)
+    (error "(kotl-mode:exchange-cells): Cannot exchange as both cell refs are 
the same: '%s' and '%s'"
+          cell-ref-1 cell-ref-2))
   (save-excursion
-    (let (kcell-1 contents-1
-         kcell-2 contents-2)
+    (let (kcell-1 contents-1 idstamp-1
+         kcell-2 contents-2 idstamp-2)
       ;;
       ;; Save cell-1 attributes
       (kotl-mode:goto-cell cell-ref-1 t)
       (setq kcell-1 (kcell-view:cell)
+           idstamp-1 (kcell-view:idstamp)
            contents-1 (kcell-view:contents))
       ;;
       ;; Save cell-2 attributes
       (kotl-mode:goto-cell cell-ref-2 t)
-      (setq kcell-2 (kcell-view:cell)
+      (setq kcell-2 (copy-list (kcell-view:cell))
+           idstamp-2 (kcell-view:idstamp)
            contents-2 (kcell-view:contents))
-      ;;
-      ;; Substitute cell-1 attributes into cell-2 location.
-      ;;
-      ;; Set kcell properties.
-      (kcell-view:set-cell kcell-1)
-      ;; If idstamp labels are on, then must exchange labels in view.
-      (when (eq (kview:label-type kview) 'id)
-       (klabel:set (kcell-view:idstamp)))
-      ;; Exchange cell contents.
+
+      ;; Substitute cell-1 contents into cell-2 location.
       (delete-region (kcell-view:start) (kcell-view:end-contents))
       (insert
        (hypb:replace-match-string
@@ -2338,15 +2340,9 @@ to one level and kotl-mode:refill-flag is treated as 
true."
        contents-1 (concat "\\1" (make-string (kcell-view:indent) ?\ ))))
       (when kotl-mode:refill-flag
        (kotl-mode:fill-cell))
-      ;;
-      ;; Substitute cell-2 attributes into cell-1 location.
-      ;;
-      ;; Set kcell properties.
+
+      ;; Substitute cell-2 contents into cell-1 location.
       (kotl-mode:goto-cell cell-ref-1 t)
-      (kcell-view:set-cell kcell-2)
-      ;; If idstamp labels are on, then must exchange labels in view.
-      (when (eq (kview:label-type kview) 'id)
-       (klabel:set (kcell-view:idstamp)))
       ;; Exchange cell contents.
       (delete-region (kcell-view:start) (kcell-view:end-contents))
       ;; Add indentation to all but first line.
@@ -2355,7 +2351,27 @@ to one level and kotl-mode:refill-flag is treated as 
true."
        "\\([\n\r]\\)"
        contents-2 (concat "\\1" (make-string (kcell-view:indent) ?\ ))))
       (when kotl-mode:refill-flag
-       (kotl-mode:fill-cell)))))
+       (kotl-mode:fill-cell))
+
+      (save-excursion
+       ;;
+       ;; Substitute cell-1 attributes into cell-2 location.
+       ;;
+       (kotl-mode:goto-cell cell-ref-2 t)
+       ;; Set kcell properties.
+       (kcell-view:set-cell kcell-1)
+       ;; If idstamp labels are on, then must exchange labels in view.
+       (when (eq (kview:label-type kview) 'id)
+         (klabel:set idstamp-1)))
+
+      ;;
+      ;; Substitute cell-2 attributes into cell-1 location.
+      ;;
+      ;; Set kcell properties.
+      (kcell-view:set-cell kcell-2)
+      ;; If idstamp labels are on, then must exchange labels in view.
+      (when (eq (kview:label-type kview) 'id)
+       (klabel:set idstamp-2)))))
 
 (defun kotl-mode:kill-contents (arg)
   "Kill contents of cell from point to cell end.
@@ -2541,9 +2557,10 @@ the current cell."
 (defun kotl-mode:transpose-cells (arg)
   "Exchange current and previous visible cells, leaving point after both.
 If no previous cell, exchange current with next cell.
-With prefix ARG, take current tree and move it past ARG visible cells.
 With prefix ARG = 0, interchange the cell that contains point with the cell
-that contains mark."
+that contains mark.
+With any other non-nil prefix ARG, take the current tree and move it past
+ARG visible cells."
   (interactive "*p")
   (let ((label-sep-len (kview:label-separator-length kview)))
     (cond
@@ -2558,7 +2575,7 @@ that contains mark."
       (let ((label-1 (kcell-view:label))
            (prev (kcell-view:previous t label-sep-len))
            label-2)
-       (or prev (kcell-view:next t label-sep-len))
+       (unless prev (kcell-view:next t label-sep-len))
        (setq label-2 (kcell-view:label))
        (kotl-mode:exchange-cells label-1 label-2)
        (kcell-view:next t label-sep-len)
diff --git a/man/hyperbole.html b/man/hyperbole.html
index e23e3d00b4..3b485e569a 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
 <html>
 <!-- This manual is for GNU Hyperbole
-(Edition 8.0.0pre, Published November, 2021).
+(Edition 8.0.0pre, Published December, 2021).
 
 Copyright (C) 1989-2021  Free Software Foundation, Inc.
 
@@ -358,7 +358,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
 Edition 8.0.0pre
-Printed November 7, 2021.
+Printed December 26, 2021.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -1066,16 +1066,17 @@ or if some emails you a button (you can do that too).
 </p>
 <p>Hyperbole is something to be experienced and interacted with, not understood
 from reading alone.  It installs normally as a single Emacs package with no
-dependencies outside of standard Emacs libraries.  Most of Hyperbole is a
-single global minor mode that you can activate and deactivate at will.  And
-it can be uninstalled quickly as well if need be, so there is no risk to
-giving it a spin.
-</p>
-<p>Once you have it installed and activated <kbd>{C-u M-x hyperbole-mode <span 
class="key">RET</span>}</kbd>,
-try the interactive demo with <kbd>{C-h h d d}</kbd>.  In fact, if you
-have Hyperbole loaded, you can press <kbd>{M-<span 
class="key">RET</span>}</kbd> inside any of the
-brace delimited series of keys you see in this document and it will
-execute them on-the-fly (easy keyboard-macro style buttons in any text).
+dependencies outside of standard Emacs libraries, see <a 
href="#Installation">Installation</a>.  Most
+of Hyperbole is a single global minor mode that you can activate and
+deactivate at will.  And it can be uninstalled quickly as well if need be, so
+there is no risk to giving it a spin.
+</p>
+<p>Once you have it installed and activated (use <kbd>{C-u M-x
+hyperbole-mode <span class="key">RET</span>}</kbd>), try the interactive demo 
with <kbd>{C-h h d d}</kbd>.
+In fact, if you have Hyperbole loaded, you can press <kbd>{M-<span 
class="key">RET</span>}</kbd>
+inside any of the brace delimited series of keys you see in this document and
+Hyperbole will execute them on-the-fly (easy keyboard-macro style buttons in
+any text).
 </p>
 <p>Hyperbole can dramatically increase your productivity and greatly reduce
 the number of keyboard/mouse keys you&rsquo;ll need to work efficiently.
@@ -1268,14 +1269,35 @@ Next: <a href="#Buttons" accesskey="n" 
rel="next">Buttons</a>, Previous: <a href
 <span id="index-hmouse_002dmiddle_002dflag"></span>
 <span id="index-Action-Key-1"></span>
 <span id="index-Assist-Key-1"></span>
-<p>Hyperbole offers two special <em>Smart Keys</em>, the Action Key and the
-Assist Key, that perform an extensive array of context-sensitive
-operations across emacs usage.  In many popular modes, they allow you
-to perform common, sometimes complex operations without having to use a
-different key for each operation.  Just press a Smart Key and the
-right thing happens.  This chapter explains typical uses of the Smart
-Keys.  See <a href="#Smart-Key-Reference">Smart Key Reference</a>, for 
complete descriptions of their
-behavior in all contexts.
+<p>When active, Hyperbole offers two special <em>Smart Keys</em>, the Action 
Key
+and the Assist Key, that perform an extensive array of context-sensitive
+operations across emacs usage.  In many Emacs modes, they allow you to
+perform common, sometimes complex operations without having to use a
+different key for each operation.  Just press a Smart Key and the right thing
+happens.  This chapter explains typical uses of the Smart Keys.  See <a 
href="#Smart-Key-Reference">Smart Key Reference</a>, for complete descriptions 
of their behavior in all contexts.
+</p>
+<span id="index-file_002c-_002eemacs"></span>
+<span id="index-hyperbole_002dmode"></span>
+<span id="index-minor-mode_002c-hyperbole"></span>
+<span id="index-change-key-bindings"></span>
+<span id="index-toggle-key-bindings"></span>
+<span id="index-key-bindings_002c-toggle"></span>
+<span id="index-disable-Hyperbole"></span>
+<span id="index-C_002dh-h"></span>
+<span id="index-X"></span>
+<span id="index-q"></span>
+<p>Use <kbd>{C-h h}</kbd> to activate Hyperbole (enable 
<code>hyperbole-mode</code> and
+display its keyboard-driven minibuffer menu).  Use <kbd>{q}</kbd> to quit from 
the
+minibuffer menu while leaving Hyperbole enabled and thus the Smart Keys
+active.  Use<kbd>{X}</kbd> to quit from the minibuffer menu and disable 
Hyperbole
+keys.
+</p>
+<p>If you prefer a different key to activate Hyperbole, you can bind it as part
+of any setting of <code>hyperbole-init-hook</code> within your personal
+<samp>~/.emacs</samp> file.  For example, <code>(add-hook
+'hyperbole-init-hook (lambda () (global-set-key &quot;\C-ch&quot;
+'hyperbole--enable-mode) (global-set-key &quot;\C-hh&quot; 
'view-hello-file)))</code>; then
+restart Emacs.
 </p>
 <table class="menu" border="0" cellspacing="0">
 <tr><td align="left" valign="top">&bull; <a href="#Smart-Key-Bindings" 
accesskey="1">Smart Key Bindings</a></td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">
@@ -1303,20 +1325,24 @@ Next: <a href="#Smart-Key-Operations" accesskey="n" 
rel="next">Smart Key Operati
 
 <span id="index-C_002du-M_002dRET"></span>
 <span id="index-M_002dRET"></span>
-<p>From the keyboard, <kbd>{M-<span class="key">RET</span>}</kbd> is the 
Action Key and <kbd>{C-u
-M-<span class="key">RET</span>}</kbd> is the Assist Key.  These keys allow 
context-sensitive
-operation from any keyboard.
+<p>With <code>hyperbole-mode</code> enabled, <kbd>{M-<span 
class="key">RET</span>}</kbd> is the Action Key
+and <kbd>{C-u M-<span class="key">RET</span>}</kbd> is the Assist Key.  These 
keys allow
+context-sensitive operation from any keyboard.
 </p>
-
 <span id="index-shift_002dmiddle-mouse-key"></span>
 <span id="index-shift_002dleft-mouse-key"></span>
 <span id="index-shift_002dright-mouse-key"></span>
 <span id="index-middle-mouse-key-1"></span>
 <span id="index-hmouse_002dmiddle_002dflag-1"></span>
-<p>From the mouse, the <em>Action Key</em> is bound to your shift-middle
-mouse key (or shift-left on a 2-button mouse).  The <em>Assist Key</em>
-is bound to your shift-right mouse key, assuming Hyperbole is run
-under an external window system.
+<p>Mouse configuration of the Smart Keys is automatic for GNU Emacs under
+Mac OS X, the X Window System and MS Windows, assuming your emacs program
+has been built with support for any of these window systems.
+</p>
+<p>The <em>Action Mouse Key</em> is bound to your shift-middle mouse key (or
+shift-left on a 2-button mouse).  The <em>Assist Mouse Key</em> is bound to 
your
+shift-right mouse key, assuming Hyperbole is run under an external window
+system.  These keys support <em>Drag Actions</em>, see <a 
href="#Smart-Mouse-Keys">Smart Mouse Keys</a>, as
+well as the standard Smart Key presses.
 </p>
 <span id="index-hmouse_002dadd_002dunshifted_002dsmart_002dkeys"></span>
 <span id="index-unshifted-mouse-bindings"></span>
@@ -1338,36 +1364,19 @@ personal <samp>~/.emacs</samp> file, add: 
<code>(add-hook 'hyperbole-init-hook
 <span id="index-action_002dmouse_002dkey"></span>
 <span id="index-assist_002dmouse_002dkey"></span>
 <span id="index-hkey_002deither"></span>
-<p>If you prefer other key assignments, simply bind the commands
+<p>If you prefer other Smart Key bindings, simply bind the commands
 <code>action-key</code> and <code>assist-key</code> to keyboard keys.
-Hyperbole binds <kbd>{M-<span class="key">RET</span>}</kbd> to the command 
<code>hkey-either</code>.
-It allows for a single key binding for both commands; a prefix
-argument, such as <kbd>{C-u}</kbd>, then invokes <code>assist-key</code>.
+Hyperbole binds <kbd>{M-<span class="key">RET</span>}</kbd> to the command 
<code>hkey-either</code>;
+this provides a single key binding for both Smart Key commands; a prefix
+argument, such as <kbd>{C-u}</kbd>, then invokes <code>assist-key</code> 
actions.
 </p>
-<p>You may also bind <code>action-mouse-key</code> and 
<code>assist-mouse-key</code>
-to other mouse keys, though you won&rsquo;t be able to execute mouse drag
-actions with such key bindings.
+<p>You may also bind <code>action-mouse-key</code> and 
<code>assist-mouse-key</code> to
+other mouse keys, though you won&rsquo;t be able to execute mouse drag actions 
with
+such key bindings. See <a href="#Smart-Mouse-Key-Drags">Smart Mouse Key 
Drags</a> and see <a href="#Keyboard-Drags">Keyboard Drags</a>.
 </p>
-<p>Mouse configuration of the Smart Keys is automatic for GNU Emacs under
-Mac OS X, the X Window System and MS Windows assuming your emacs program
-has been built with support for any of these window systems.
-</p>
-<span id="index-file_002c-_002eemacs"></span>
-<span id="index-hyperbole_002dtoggle_002dbindings"></span>
-<span id="index-change-key-bindings"></span>
-<span id="index-toggle-key-bindings"></span>
-<span id="index-key-bindings_002c-toggle"></span>
-<span id="index-disable-Hyperbole"></span>
-<span id="index-C_002dc-h"></span>
-<p>If you ever need to temporarily disable the Hyperbole keyboard and mouse
-bindings, use the <code>hyperbole-toggle-bindings</code> command.  It switches
-between the Hyperbole key bindings and those set prior to loading Hyperbole
-and then back again if invoked once more.  There is no default key binding
-for this command; use <kbd>{M-x hyperbole-toggle-bindings
-<span class="key">RET</span>}</kbd>.  Alternatively, you may select a key and 
bind it as part of any
-setting of <code>hyperbole-init-hook</code> within your personal 
<samp>~/.emacs</samp>
-file.  For example, <code>(add-hook 'hyperbole-init-hook (lambda ()
-(global-set-key &quot;\C-ch&quot; 'hyperbole-toggle-bindings)))</code>.
+<p>To permanently change any of these key bindings, use:
+<code>(add-hook 'hyperbole-init-hook (lambda () (hkey-set-key &lt;KEY&gt; 
'&lt;CMD&gt;)</code>,
+for example, <code>(hkey-set-key &quot;\M-'&quot; 'hkey-either)</code>.
 </p>
 
 <hr>
@@ -3843,7 +3852,7 @@ button in the buffer will be renamed.
 Ebut/Rename.  Hyperbole does not bind this command to a key by default.
 <kbd>{C-h w hui:ebut-rename <span class="key">RET</span>}</kbd> will show what 
if any key is bound
 within your Emacs.  Bind it within your <samp>~/.emacs</samp> file with:
-<code>(global-set-key &quot;\C-cr&quot; 'hui:ebut-rename)</code>, for example.
+<code>(hkey-set-key &quot;\C-cr&quot; 'hui:ebut-rename)</code>, for example.
 </p>
 
 <hr>
@@ -4128,7 +4137,7 @@ mouse.  When used with the keyboard, they provide command 
access
 similar to key bindings.  In fact, any menu item can be bound to a
 global key sequence.  See <a href="#Binding-Minibuffer-Menu-Items">Binding 
Minibuffer Menu Items</a>.
 </p>
-<span id="index-C_002dh-h"></span>
+<span id="index-C_002dh-h-1"></span>
 <span id="index-minibuffer-menu"></span>
 <span id="index-file_002c-hyperbole_002eel-2"></span>
 <span id="index-invoking-Hyperbole"></span>
@@ -4162,7 +4171,7 @@ item, including the action that it performs.  
&quot;/&quot; at the end of an ite
 indicates that it brings up a submenu.
 </p>
 <span id="index-C_002dt"></span>
-<span id="index-q"></span>
+<span id="index-q-1"></span>
 <span id="index-C_002dg"></span>
 <span id="index-menu_002c-top_002dlevel"></span>
 <span id="index-top_002dlevel-menu"></span>
@@ -4845,7 +4854,7 @@ sizes by which to zoom.
 <span id="index-Q"></span>
 </dd>
 <dt><kbd>{Q}</kbd></dt>
-<dd><span id="index-q-1"></span>
+<dd><span id="index-q-2"></span>
 </dd>
 <dt><kbd>{q}</kbd></dt>
 <dd><p>Press <kbd>{Q}</kbd> to globally quit HyControl mode and restore normal 
key bindings.
@@ -7225,11 +7234,11 @@ button is activated and does one of four things with 
LINK-EXPR:
 </li><li> invokes a function or action type of one argument, the button text 
sans the function name, to display it.
 </li></ol>
 
-<p>For example, if you use Python and have a 
&lsquo;<samp>PYTHONPATH</samp>&rsquo; environment
+<p>For example, if you use Python and have a 
&lsquo;<samp>PYTHONLIBPATH</samp>&rsquo; environment
 variable, then pressing <kbd>{C-x C-e}</kbd> <code>eval-last-sexp</code> after
 this expression:
 </p>
-<p><code>(defal pylib &quot;${PYTHONPATH}/%s&quot;)</code>
+<p><code>(defal pylib &quot;${PYTHONLIBPATH}/%s&quot;)</code>
 </p>
 <p>defines a new action button link type called ’pylib’ whose buttons
 take the form of:
@@ -7913,16 +7922,15 @@ implicit button type.  See also <b>system 
encapsulation</b>.
 <span id="index-InfoDock"></span>
 </dd>
 <dt><b>InfoDock</b></dt>
-<dd><p>InfoDock was an integrated productivity toolset for software engineers
+<dd><p>InfoDock is an older integrated productivity toolset for software 
engineers
 and knowledge workers built atop XEmacs; it is no longer maintained or
-updated.  An older version from 1999 may be found at
-infodock.sf.net.
+updated, though many of its packages can be used with GNU Emacs.  An older
+version from 1999 may be found at infodock.sf.net.
 </p>
-<p>InfoDock has much of the power of GNU Emacs, but with an
-easier to use and more comprehensive menu-based user interface.  Most
-objections people raise to using emacs have already been addressed in
-InfoDock.  InfoDock was meant for people who wanted a complete,
-pre-customized environment in one package.
+<p>InfoDock has much of the power of GNU Emacs, but with an easier to use and
+more comprehensive menu-based user interface.  Most objections people raise
+to using emacs have already been addressed in InfoDock.  InfoDock is meant
+for people who prefer a complete, pre-customized environment in one package.
 </p>
 </dd>
 <dt><b>Instance Number</b></dt>
@@ -8085,7 +8093,7 @@ Smart Key capabilities.  See <a href="#Smart-Keys">Smart 
Keys</a>, for complete
 </p>
 </dd>
 <dt><b>Smart Menus</b></dt>
-<dd><p>Smart Menus are an older in-buffer menu system that worked on dumb
+<dd><p>Smart Menus are an older in-buffer menu system that work on dumb
 terminals and pre-dated Emacs&rsquo; own dumb terminal menu support.  They
 are included with InfoDock (which is no longer maintained) and are not
 available separately.  They are not a part of Hyperbole and are not
@@ -8139,10 +8147,9 @@ display location and so forth.
 </p>
 </dd>
 <dt><b>View Spec</b></dt>
-<dd><p>A terse (and to the uninitiated, cryptic) string that specifies a
-particular view of a koutline or a link referent.  If a view spec is
-active for a buffer, the view spec appears within the modeline like so,
-&lt;|view spec&gt;.
+<dd><p>A terse string that specifies a particular view of a koutline or a link
+referent.  If a view spec is active for a buffer, the view spec appears
+within the modeline like so, &lt;|view spec&gt;. See <a 
href="#View-Specs">View Specs</a>
 </p>
 </dd>
 <dt><b>Window</b></dt>
@@ -8885,7 +8892,13 @@ menubar menu as shown here:
 <img src="im/menu-key-bindings.png" alt="Change Key Bindings">
 <div class="float-caption"><p><strong>Image C.1: </strong>Hyperbole Key 
Bindings Menu</p></div></div><br>
 
-<p>Below are descriptions of Hyperbole&rsquo;s default keyboard key bindings:
+<span id="index-hyperbole_002dmode_002dmap"></span>
+<span id="index-key-bindings"></span>
+<span id="index-minor-mode_002c-keymap"></span>
+<p>Below are descriptions of Hyperbole&rsquo;s default keyboard key bindings.
+All except <kbd>{C-h h}</kbd> (the global key used to enable Hyperbole and
+display its minibuffer menu) are bound within Hyperbole&rsquo;s minor mode
+keymap, <code>hyperbole-mode-map</code>.
 </p>
 <dl compact="compact">
 <dd><span id="index-key-binding_002c-M_002dRET"></span>
@@ -8949,11 +8962,12 @@ may be used to quickly create an explicit link button 
in the selected window tha
 links to any other window chosen via the Ace Window prompt.
 </p>
 <span id="index-key-binding_002c-C_002dh-h"></span>
-<span id="index-C_002dh-h-1"></span>
+<span id="index-C_002dh-h-2"></span>
 </dd>
 <dt><kbd>{C-h h}</kbd></dt>
 <dd><p>Hyperbole Mini Menu: Invoke the Hyperbole minibuffer menu, giving
-access to many Hyperbole commands.
+access to many Hyperbole commands.  This is bound globally as a means
+of enabling Hyperbole minor mode.
 </p>
 <span id="index-key-binding_002c-C_002dh-A"></span>
 <span id="index-key-binding_002c-C_002du-C_002dh-A"></span>
@@ -8995,42 +9009,21 @@ to &lsquo;<samp>t</samp>&rsquo; (true) by default in 
<samp>hyperbole.el</samp>.
 means all Hyperbole key bindings will be initialized when Hyperbole is
 loaded.  If you want to disable these bindings permanently, simply add
 <code>(setq hkey-init nil)</code> to your <samp>~/.emacs</samp> file prior to 
the
-point at which you load Hyperbole and restart Emacs.  Then you will
-have to choose the Hyperbole commands that you want to use and bind
-those to keys.
+point at which you load Hyperbole; then restart Emacs.  Henceforth, you will
+have to choose the Hyperbole commands that you want to use and bind those to
+keys.
 </p>
 <span id="index-file_002c-_002eemacs-4"></span>
-<span id="index-hyperbole_002dtoggle_002dbindings-1"></span>
-<span id="index-change-key-bindings-1"></span>
-<span id="index-toggle-key-bindings-1"></span>
-<span id="index-key-bindings_002c-toggle-1"></span>
-<span id="index-disable-Hyperbole-1"></span>
-<span id="index-C_002dc-h-1"></span>
-<p>If you ever have a need to temporarily disable the Hyperbole keyboard and
-mouse bindings, use the <code>hyperbole-toggle-bindings</code> command.  It
-switches between the Hyperbole key bindings and those set prior to loading
-Hyperbole and then back again if invoked once more.  There is no default
-key binding for this command; use <kbd>{M-x hyperbole-toggle-bindings
-<span class="key">RET</span>}</kbd>.  Alternatively, you may select a key and 
bind it as part of any
-setting of <code>hyperbole-init-hook</code> within your personal 
<samp>~/.emacs</samp>
-file.  For example, <code>(add-hook 'hyperbole-init-hook (lambda ()
-(global-set-key &quot;\C-ch&quot; 'hyperbole-toggle-bindings)))</code>.
-</p>
-<span id="index-file_002c-_002eemacs-5"></span>
-<span id="index-hyperbole_002dmode"></span>
+<span id="index-hyperbole_002dmode-1"></span>
 <span id="index-mouse-key-toggle"></span>
 <span id="index-Smart-Mouse-Key-toggle"></span>
-<span id="index-C_002dc-t"></span>
-<p>If you ever want to disable Hyperbole key and mouse bindings, simply toggle
-Hyperbole minor mode off with the <code>hyperbole-mode</code> command.
-It switches between Hyperbole mouse key and mouse bindings and those set
-prior to loading Hyperbole and then back again if invoked once more.
-There is no default key binding for this command; use <kbd>{M-x
-hyperbole-mode <span class="key">RET</span>}</kbd>.  Alternatively, you may 
select a
-key and bind it as part of any setting of <code>hyperbole-init-hook</code>
-within your personal <samp>~/.emacs</samp> file.  For example, <code>(add-hook
-'hyperbole-init-hook (lambda () (global-set-key &quot;\C-ct&quot;
-'hyperbole-mode)))</code>.
+<p>If you ever want to temporarily disable Hyperbole key and mouse bindings,
+simply toggle Hyperbole minor mode off with the <code>hyperbole-mode</code>
+command.  There is no default key binding for this command; use <kbd>{M-x
+hyperbole-mode <span class="key">RET</span>}</kbd>.  Alternatively, you may 
select a key and bind it
+as part of any setting of <code>hyperbole-init-hook</code> within your
+personal <samp>~/.emacs</samp> file.  For example, <code>(add-hook
+'hyperbole-init-hook (lambda () (global-set-key &quot;\C-ct&quot; 
'hyperbole-mode)))</code>.
 </p>
 <hr>
 <span id="Koutliner-Keys"></span><div class="header">
@@ -12084,6 +12077,8 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
  &nbsp; 
 <a class="summary-letter" href="#Key-Index_ky_letter-W"><b>W</b></a>
  &nbsp; 
+<a class="summary-letter" href="#Key-Index_ky_letter-X"><b>X</b></a>
+ &nbsp; 
 <a class="summary-letter" href="#Key-Index_ky_letter-Z"><b>Z</b></a>
  &nbsp; 
 </td></tr></table>
@@ -12175,21 +12170,19 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dt"><code>C-c 
C-t</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002du"><code>C-c 
C-u</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Moving-Around">Moving Around</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dy"><code>C-c 
C-y</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-Mail">Buttons in Mail</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dc-h"><code>C-c 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dc-h-1"><code>C-c 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-m"><code>C-c 
m</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-M_002dc"><code>C-c 
M-c</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-RET"><code>C-c <span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-RET-1"><code>C-c <span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dc-t"><code>C-c 
t</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-_005c"><code>C-c 
\</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-_005c-1"><code>C-c 
\</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-_005e"><code>C-c 
^</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Moving-Around">Moving Around</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-C_002dg"><code>C-g</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-A"><code>C-h 
A</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Operations">Smart Key Operations</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-A-1"><code>C-h 
A</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dh-h"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dh-h-1"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-C_002dh-h"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-C_002dh-h-1"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-C_002dh-h-2"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-a"><code>C-h h c 
a</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-d"><code>C-h h c 
d</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-r"><code>C-h h c 
r</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
@@ -12330,9 +12323,10 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a 
href="#index-p-1"><code>p</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Key-Index_ky_letter-Q">Q</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-q"><code>q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-q"><code>q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Keys">Smart Keys</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-q-1"><code>q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Q"><code>Q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-q-1"><code>q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-q-2"><code>q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Key-Index_ky_letter-R">R</th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-r"><code>r</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -12438,6 +12432,9 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a 
href="#index-w"><code>w</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-W"><code>W</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
+<tr><th id="Key-Index_ky_letter-X">X</th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-X"><code>X</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Keys">Smart Keys</a></td></tr>
+<tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Key-Index_ky_letter-Z">Z</th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Z"><code>Z</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-z"><code>z</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -12512,6 +12509,8 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
  &nbsp; 
 <a class="summary-letter" href="#Key-Index_ky_letter-W"><b>W</b></a>
  &nbsp; 
+<a class="summary-letter" href="#Key-Index_ky_letter-X"><b>X</b></a>
+ &nbsp; 
 <a class="summary-letter" href="#Key-Index_ky_letter-Z"><b>Z</b></a>
  &nbsp; 
 </td></tr></table>
@@ -12664,12 +12663,11 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-eval_002dlast_002dsexp"><code>eval-last-sexp</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Creating-Types">Creating Types</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Function_fn_letter-F">F</th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-1">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Renaming">Renaming</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-2">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-Mail">Buttons in Mail</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-3">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Autonumbering">Autonumbering</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-4">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-file_002c-_002eemacs-5">file, 
.emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-_002ehypb">file, 
.hypb</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-_002ekotl-suffix">file, .kotl 
suffix</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Outlines">Creating Outlines</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-DEMO-1">file, 
DEMO</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
@@ -12801,12 +12799,11 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole"><code>hyperbole</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Invocation">Invocation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole-1"><code>hyperbole</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-Default-Context">Smart Key - Default 
Context</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dinit_002dhook">hyperbole-init-hook</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dmode"><code>hyperbole-mode</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole 
Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dmode-1"><code>hyperbole-mode</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole 
Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dmode_002dmap">hyperbole-mode-map</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole 
Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dpopup_002dmenu"><code>hyperbole-popup-menu</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dpopup_002dmenu-1"><code>hyperbole-popup-menu</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Default-Context">Smart Key - Default 
Context</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dset_002dkey"><code>hyperbole-set-key</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Binding-Minibuffer-Menu-Items">Binding Minibuffer Menu 
Items</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dtoggle_002dbindings"><code>hyperbole-toggle-bindings</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dtoggle_002dbindings-1"><code>hyperbole-toggle-bindings</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole 
Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dweb_002dsearch_002dalist">hyperbole-web-search-alist</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Web-Search-Engines">Web Search Engines</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dweb_002dsearch_002dbrowser_002dfunction">hyperbole-web-search-browser-function</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyrolo_002dadd"><code>hyrolo-add</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr>
@@ -13349,8 +13346,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-cell_002c-top_002dlevel-1">cell, 
top-level</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-cell_002c-transposing">cell, 
transposing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Transposing">Transposing</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-cell_002c-yanking-contents">cell, yanking 
contents</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Adding-and-Killing">Adding and Killing</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-change-key-bindings">change key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-change-key-bindings-1">change 
key bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-change-key-bindings">change key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-change_002dlog_002dmode">change-log-mode</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Lisp-Source-Code">Smart Key - Lisp 
Source Code</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-changing-the-view-spec">changing 
the view spec</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#View-Specs">View Specs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-click_002c-buffer-menu">click, 
buffer menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr>
@@ -13436,8 +13432,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-dired-item-drag">dired item 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer 
Items</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-dired_002c-images">dired, 
images</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Image-Thumbnails">Smart Key - Image 
Thumbnails</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-dired_002dsidebar_002dmode">dired-sidebar-mode</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Dired-Sidebar-Mode">Smart Key - Dired 
Sidebar Mode</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-disable-Hyperbole">disable 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-disable-Hyperbole-1">disable 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-disable-Hyperbole">disable 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-disable-hyperbole-key-bindings">disable hyperbole key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-disable-org_002dmode-support">disable org-mode 
support</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-display">display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -13645,6 +13640,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole_002c-obtaining-1">Hyperbole, 
obtaining</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Stable-Package-Installation">Stable Package Installation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole_002c-starting">Hyperbole, 
starting</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole_002c-system-encapsulation">Hyperbole, system 
encapsulation</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Encapsulating-Systems">Encapsulating Systems</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hyperbole_002dmode">hyperbole-mode</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Keys">Smart Keys</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hyperlink">hyperlink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-hyperlink-anchor">hyperlink 
anchor</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner">Koutliner</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hypertext">hypertext</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
@@ -13746,8 +13742,8 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-key-binding_002c-M_002dRET">key 
binding, M-<tt class="key">RET</tt></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-key-binding_002c-menu">key 
binding, menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-key-binding_002c-smart-keys">key 
binding, smart keys</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle">key 
bindings, toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle-1">key 
bindings, toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-key-bindings">key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle">key 
bindings, toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Keys">Smart Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-key-sequence">key 
sequence</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-keyboard-drags">keyboard 
drags</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-keyboard_002c-jump-to-window">keyboard, jump to 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
@@ -13931,6 +13927,8 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-minibuffer_002c-buffer-menu">minibuffer, buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-minibuffer_002c-default-actions">minibuffer, default 
actions</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-minibuffer_002c-jump-menu">minibuffer, jump 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-minor-mode_002c-hyperbole">minor 
mode, hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Keys">Smart Keys</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-minor-mode_002c-keymap">minor 
mode, keymap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-modeline-click">modeline 
click</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-modeline-click-and-drag">modeline click and 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-modeline-drag">modeline 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
@@ -14202,8 +14200,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-toc-implicit-button-type">toc 
implicit button type</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-todotxt_002dmode">todotxt-mode</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-Todotxt-Mode">Smart Key - Todotxt 
Mode</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-toggle-HyControl-mode">toggle 
HyControl mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-toggle-key-bindings">toggle key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-toggle-key-bindings-1">toggle 
key bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-toggle-key-bindings">toggle key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-toggling-blank-lines">toggling 
blank lines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#View-Specs">View 
Specs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-top_002dlevel-cell">top-level 
cell</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Outlines">Creating Outlines</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-top_002dlevel-cell-1">top-level 
cell</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index 7037977f9b..28d58d389c 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index f9c9f04ec2..a6b3ec0c99 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index b2e0dac0ee..2a3ecccf4e 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -155,7 +155,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
 Edition 8.0.0pre
-Printed November 7, 2021.
+Printed December 26, 2021.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -197,7 +197,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 @example
 Edition 8.0.0pre
-November 7, 2021
+December 26, 2021
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -702,16 +702,17 @@ or if some emails you a button (you can do that too).
 
 Hyperbole is something to be experienced and interacted with, not understood
 from reading alone.  It installs normally as a single Emacs package with no
-dependencies outside of standard Emacs libraries.  Most of Hyperbole is a
-single global minor mode that you can activate and deactivate at will.  And
-it can be uninstalled quickly as well if need be, so there is no risk to
-giving it a spin.
-
-Once you have it installed and activated @bkbd{C-u M-x hyperbole-mode 
@key{RET}},
-try the interactive demo with @bkbd{C-h h d d}.  In fact, if you
-have Hyperbole loaded, you can press @bkbd{M-@key{RET}} inside any of the
-brace delimited series of keys you see in this document and it will
-execute them on-the-fly (easy keyboard-macro style buttons in any text).
+dependencies outside of standard Emacs libraries, @pxref{Installation}.  Most
+of Hyperbole is a single global minor mode that you can activate and
+deactivate at will.  And it can be uninstalled quickly as well if need be, so
+there is no risk to giving it a spin.
+
+Once you have it installed and activated (use @bkbd{C-u M-x
+hyperbole-mode @key{RET}}), try the interactive demo with @bkbd{C-h h d d}.
+In fact, if you have Hyperbole loaded, you can press @bkbd{M-@key{RET}}
+inside any of the brace delimited series of keys you see in this document and
+Hyperbole will execute them on-the-fly (easy keyboard-macro style buttons in
+any text).
 
 Hyperbole can dramatically increase your productivity and greatly reduce
 the number of keyboard/mouse keys you'll need to work efficiently.
@@ -896,14 +897,36 @@ Hyperbole, <bug-hyperbole@@gnu.org>.  For more details,
 @vindex hmouse-middle-flag
 @kindex Action Key
 @kindex Assist Key
-Hyperbole offers two special @dfn{Smart Keys}, the Action Key and the
-Assist Key, that perform an extensive array of context-sensitive
-operations across emacs usage.  In many popular modes, they allow you
-to perform common, sometimes complex operations without having to use a
-different key for each operation.  Just press a Smart Key and the
-right thing happens.  This chapter explains typical uses of the Smart
-Keys.  @xref{Smart Key Reference}, for complete descriptions of their
-behavior in all contexts.
+When active, Hyperbole offers two special @dfn{Smart Keys}, the Action Key
+and the Assist Key, that perform an extensive array of context-sensitive
+operations across emacs usage.  In many Emacs modes, they allow you to
+perform common, sometimes complex operations without having to use a
+different key for each operation.  Just press a Smart Key and the right thing
+happens.  This chapter explains typical uses of the Smart Keys.  @xref{Smart
+Key Reference}, for complete descriptions of their behavior in all contexts.
+
+@vindex file, .emacs
+@cindex hyperbole-mode
+@cindex minor mode, hyperbole
+@cindex change key bindings
+@cindex toggle key bindings
+@cindex key bindings, toggle
+@cindex disable Hyperbole
+@kindex C-h h
+@kindex X
+@kindex q
+Use @bkbd{C-h h} to activate Hyperbole (enable @code{hyperbole-mode} and
+display its keyboard-driven minibuffer menu).  Use @bkbd{q} to quit from the
+minibuffer menu while leaving Hyperbole enabled and thus the Smart Keys
+active.  Use@bkbd{X} to quit from the minibuffer menu and disable Hyperbole
+keys.
+
+If you prefer a different key to activate Hyperbole, you can bind it as part
+of any setting of @code{hyperbole-init-hook} within your personal
+@file{~/.emacs} file.  For example, @code{(add-hook
+'hyperbole-init-hook (lambda () (global-set-key "\C-ch"
+'hyperbole--enable-mode) (global-set-key "\C-hh" 'view-hello-file)))}; then
+restart Emacs.
 
 @menu
 * Smart Key Bindings::
@@ -920,27 +943,24 @@ behavior in all contexts.
 
 @kindex C-u M-@key{RET}
 @kindex M-@key{RET}
-From the keyboard, @bkbd{M-@key{RET}} is the Action Key and @bkbd{C-u
-M-@key{RET}} is the Assist Key.  These keys allow context-sensitive
-operation from any keyboard.
-
-@c Removed the following in Hyperbole 6.00 since it was not consistent
-@c across all read-only modes and the standard bindings are easy
-@c enough to use.
-@c
-@c In many read-only modes like Dired (the directory editor and file
-@c manager) and Rmail (the mail reader), @{@key{RET}@} also functions as
-@c the Action Key and @bkbd{C-u @key{RET}} functions as the Assist Key.
+With @code{hyperbole-mode} enabled, @bkbd{M-@key{RET}} is the Action Key
+and @bkbd{C-u M-@key{RET}} is the Assist Key.  These keys allow
+context-sensitive operation from any keyboard.
 
 @kindex shift-middle mouse key
 @kindex shift-left mouse key
 @kindex shift-right mouse key
 @kindex middle mouse key
 @vindex hmouse-middle-flag
-From the mouse, the @dfn{Action Key} is bound to your shift-middle
-mouse key (or shift-left on a 2-button mouse).  The @dfn{Assist Key}
-is bound to your shift-right mouse key, assuming Hyperbole is run
-under an external window system.
+Mouse configuration of the Smart Keys is automatic for GNU Emacs under
+Mac OS X, the X Window System and MS Windows, assuming your emacs program
+has been built with support for any of these window systems.
+
+The @dfn{Action Mouse Key} is bound to your shift-middle mouse key (or
+shift-left on a 2-button mouse).  The @dfn{Assist Mouse Key} is bound to your
+shift-right mouse key, assuming Hyperbole is run under an external window
+system.  These keys support @dfn{Drag Actions}, @pxref{Smart Mouse Keys}, as
+well as the standard Smart Key presses.
 
 @findex hmouse-add-unshifted-smart-keys
 @cindex unshifted mouse bindings
@@ -962,36 +982,19 @@ personal @file{~/.emacs} file, add: @code{(add-hook 
'hyperbole-init-hook
 @findex action-mouse-key
 @findex assist-mouse-key
 @findex hkey-either
-If you prefer other key assignments, simply bind the commands
+If you prefer other Smart Key bindings, simply bind the commands
 @code{action-key} and @code{assist-key} to keyboard keys.
-Hyperbole binds @bkbd{M-@key{RET}} to the command @code{hkey-either}.
-It allows for a single key binding for both commands; a prefix
-argument, such as @bkbd{C-u}, then invokes @code{assist-key}.
+Hyperbole binds @bkbd{M-@key{RET}} to the command @code{hkey-either};
+this provides a single key binding for both Smart Key commands; a prefix
+argument, such as @bkbd{C-u}, then invokes @code{assist-key} actions.
 
-You may also bind @code{action-mouse-key} and @code{assist-mouse-key}
-to other mouse keys, though you won't be able to execute mouse drag
-actions with such key bindings.
+You may also bind @code{action-mouse-key} and @code{assist-mouse-key} to
+other mouse keys, though you won't be able to execute mouse drag actions with
+such key bindings. @xref{Smart Mouse Key Drags} and @pxref{Keyboard Drags}.
 
-Mouse configuration of the Smart Keys is automatic for GNU Emacs under
-Mac OS X, the X Window System and MS Windows assuming your emacs program
-has been built with support for any of these window systems.
-
-@vindex file, .emacs
-@findex hyperbole-toggle-bindings
-@cindex change key bindings
-@cindex toggle key bindings
-@cindex key bindings, toggle
-@cindex disable Hyperbole
-@kindex C-c h
-If you ever need to temporarily disable the Hyperbole keyboard and mouse
-bindings, use the @code{hyperbole-toggle-bindings} command.  It switches
-between the Hyperbole key bindings and those set prior to loading Hyperbole
-and then back again if invoked once more.  There is no default key binding
-for this command; use @bkbd{M-x hyperbole-toggle-bindings
-@key{RET}}.  Alternatively, you may select a key and bind it as part of any
-setting of @code{hyperbole-init-hook} within your personal @file{~/.emacs}
-file.  For example, @code{(add-hook 'hyperbole-init-hook (lambda ()
-(global-set-key "\C-ch" 'hyperbole-toggle-bindings)))}.
+To permanently change any of these key bindings, use:
+@code{(add-hook 'hyperbole-init-hook (lambda () (hkey-set-key <KEY> '<CMD>)},
+for example, @code{(hkey-set-key "\M-'" 'hkey-either)}.
 
 @c @cindex Paste Key
 @c @cindex mouse paste
@@ -3162,7 +3165,7 @@ The rename command may be invoked from the Hyperbole menu 
via
 Ebut/Rename.  Hyperbole does not bind this command to a key by default.
 @bkbd{C-h w hui:ebut-rename @key{RET}} will show what if any key is bound
 within your Emacs.  Bind it within your @file{~/.emacs} file with:
-@code{(global-set-key "\C-cr" 'hui:ebut-rename)}, for example.
+@code{(hkey-set-key "\C-cr" 'hui:ebut-rename)}, for example.
 
 
 @node Deletion, Modification, Renaming, Utilizing Explicit Buttons
@@ -6120,11 +6123,11 @@ button is activated and does one of four things with 
LINK-EXPR:
 @item invokes a function or action type of one argument, the button text sans 
the function name, to display it.
 @end enumerate
 
-For example, if you use Python and have a @samp{PYTHONPATH} environment
+For example, if you use Python and have a @samp{PYTHONLIBPATH} environment
 variable, then pressing @bkbd{C-x C-e} @code{eval-last-sexp} after
 this expression:
 
-@code{(defal pylib "$@{PYTHONPATH@}/%s")}
+@code{(defal pylib "$@{PYTHONLIBPATH@}/%s")}
 
 @noindent
 defines a new action button link type called ’pylib’ whose buttons
@@ -6743,16 +6746,15 @@ implicit button type.  See also @b{system 
encapsulation}.
 
 @cindex InfoDock
 @item InfoDock
-InfoDock was an integrated productivity toolset for software engineers
+InfoDock is an older integrated productivity toolset for software engineers
 and knowledge workers built atop XEmacs; it is no longer maintained or
-updated.  An older version from 1999 may be found at
-infodock.sf.net.
+updated, though many of its packages can be used with GNU Emacs.  An older
+version from 1999 may be found at infodock.sf.net.
 
-InfoDock has much of the power of GNU Emacs, but with an
-easier to use and more comprehensive menu-based user interface.  Most
-objections people raise to using emacs have already been addressed in
-InfoDock.  InfoDock was meant for people who wanted a complete,
-pre-customized environment in one package.
+InfoDock has much of the power of GNU Emacs, but with an easier to use and
+more comprehensive menu-based user interface.  Most objections people raise
+to using emacs have already been addressed in InfoDock.  InfoDock is meant
+for people who prefer a complete, pre-customized environment in one package.
 
 @item Instance Number
 A colon prefaced number appended to the label of a newly created button
@@ -6889,7 +6891,7 @@ The @bkbd{C-h h d s} Doc/SmartKeys menu item displays a 
full summary of
 Smart Key capabilities.  @xref{Smart Keys}, for complete details.
 
 @item Smart Menus
-Smart Menus are an older in-buffer menu system that worked on dumb
+Smart Menus are an older in-buffer menu system that work on dumb
 terminals and pre-dated Emacs' own dumb terminal menu support.  They
 are included with InfoDock (which is no longer maintained) and are not
 available separately.  They are not a part of Hyperbole and are not
@@ -6934,10 +6936,9 @@ information displayed, its format, modes used to operate 
on it, its
 display location and so forth.
 
 @item View Spec
-A terse (and to the uninitiated, cryptic) string that specifies a
-particular view of a koutline or a link referent.  If a view spec is
-active for a buffer, the view spec appears within the modeline like so,
-<|view spec>.
+A terse string that specifies a particular view of a koutline or a link
+referent.  If a view spec is active for a buffer, the view spec appears
+within the modeline like so, <|view spec>. @xref{View Specs}
 
 @item Window
 An Emacs window displays a single Emacs buffer within a single frame.
@@ -7612,8 +7613,14 @@ menubar menu as shown here:
 @end float
 @sp 1
 
+@vindex hyperbole-mode-map
+@cindex key bindings
+@cindex minor mode, keymap
 @noindent
-Below are descriptions of Hyperbole's default keyboard key bindings:
+Below are descriptions of Hyperbole's default keyboard key bindings.
+All except @bkbd{C-h h} (the global key used to enable Hyperbole and
+display its minibuffer menu) are bound within Hyperbole's minor mode
+keymap, @code{hyperbole-mode-map}.
 
 @table @asis
 @cindex key binding, M-@key{RET}
@@ -7667,7 +7674,8 @@ links to any other window chosen via the Ace Window 
prompt.
 @cindex key binding, C-h h
 @kitem C-h h
 Hyperbole Mini Menu: Invoke the Hyperbole minibuffer menu, giving
-access to many Hyperbole commands.
+access to many Hyperbole commands.  This is bound globally as a means
+of enabling Hyperbole minor mode.
 
 @cindex key binding, C-h A
 @cindex key binding, C-u C-h A
@@ -7701,42 +7709,21 @@ to @samp{t} (true) by default in @file{hyperbole.el}.  
This setting
 means all Hyperbole key bindings will be initialized when Hyperbole is
 loaded.  If you want to disable these bindings permanently, simply add
 @code{(setq hkey-init nil)} to your @file{~/.emacs} file prior to the
-point at which you load Hyperbole and restart Emacs.  Then you will
-have to choose the Hyperbole commands that you want to use and bind
-those to keys.
-
-@vindex file, .emacs
-@findex hyperbole-toggle-bindings
-@cindex change key bindings
-@cindex toggle key bindings
-@cindex key bindings, toggle
-@cindex disable Hyperbole
-@kindex C-c h
-If you ever have a need to temporarily disable the Hyperbole keyboard and
-mouse bindings, use the @code{hyperbole-toggle-bindings} command.  It
-switches between the Hyperbole key bindings and those set prior to loading
-Hyperbole and then back again if invoked once more.  There is no default
-key binding for this command; use @bkbd{M-x hyperbole-toggle-bindings
-@key{RET}}.  Alternatively, you may select a key and bind it as part of any
-setting of @code{hyperbole-init-hook} within your personal @file{~/.emacs}
-file.  For example, @code{(add-hook 'hyperbole-init-hook (lambda ()
-(global-set-key "\C-ch" 'hyperbole-toggle-bindings)))}.
+point at which you load Hyperbole; then restart Emacs.  Henceforth, you will
+have to choose the Hyperbole commands that you want to use and bind those to
+keys.
 
 @vindex file, .emacs
 @findex hyperbole-mode
 @cindex mouse key toggle
 @cindex Smart Mouse Key toggle
-@kindex C-c t
-If you ever want to disable Hyperbole key and mouse bindings, simply toggle
-Hyperbole minor mode off with the @code{hyperbole-mode} command.
-It switches between Hyperbole mouse key and mouse bindings and those set
-prior to loading Hyperbole and then back again if invoked once more.
-There is no default key binding for this command; use @bkbd{M-x
-hyperbole-mode @key{RET}}.  Alternatively, you may select a
-key and bind it as part of any setting of @code{hyperbole-init-hook}
-within your personal @file{~/.emacs} file.  For example, @code{(add-hook
-'hyperbole-init-hook (lambda () (global-set-key "\C-ct"
-'hyperbole-mode)))}.
+If you ever want to temporarily disable Hyperbole key and mouse bindings,
+simply toggle Hyperbole minor mode off with the @code{hyperbole-mode}
+command.  There is no default key binding for this command; use @bkbd{M-x
+hyperbole-mode @key{RET}}.  Alternatively, you may select a key and bind it
+as part of any setting of @code{hyperbole-init-hook} within your
+personal @file{~/.emacs} file.  For example, @code{(add-hook
+'hyperbole-init-hook (lambda () (global-set-key "\C-ct" 'hyperbole-mode)))}.
 
 @node Koutliner Keys, Smart Key Reference, Hyperbole Key Bindings, Top
 @appendix Koutliner Keys
diff --git a/man/version.texi b/man/version.texi
index 58f9b6f324..4d773102a7 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED November, 2021
-@set UPDATED-MONTH November 2021
+@set UPDATED December, 2021
+@set UPDATED-MONTH December 2021
 @set EDITION 8.0.0pre
 @set VERSION 8.0.0pre



reply via email to

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