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

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

[elpa] externals/hyperbole b4a2623 12/21: 7.0.4 test release: add Action


From: Stefan Monnier
Subject: [elpa] externals/hyperbole b4a2623 12/21: 7.0.4 test release: add Action Buttons and Implicit Button Names
Date: Fri, 4 Oct 2019 14:58:25 -0400 (EDT)

branch: externals/hyperbole
commit b4a2623e5ba908904c33ea3351a69ab3c192fc4a
Author: Bob Weiner <address@hidden>
Commit: Bob Weiner <address@hidden>

    7.0.4 test release: add Action Buttons and Implicit Button Names
---
 Changes            |  54 ++++++++++-
 DEMO               |  76 ++++++++++++----
 HY-ABOUT           |   2 +-
 HY-NEWS            |  38 +++++++-
 Makefile           |   6 +-
 README.md          |   2 +-
 hact.el            |  46 +++++++---
 hactypes.el        |  62 +++++++------
 hbut.el            |  21 +++--
 hib-doc-id.el      |  12 +--
 hibtypes.el        |  79 +++++++++++++++-
 hmouse-tag.el      |  48 ++++++----
 hpath.el           | 196 ++++++++++++++++++++-------------------
 hversion.el        |   2 +-
 hypb.el            |   4 +-
 hyperbole.el       |   2 +-
 man/hyperbole.html | 263 ++++++++++++++++++++++++++++-------------------------
 man/hyperbole.info | Bin 514598 -> 515404 bytes
 man/hyperbole.pdf  | Bin 1272682 -> 669450 bytes
 man/hyperbole.texi | 231 ++++++++++++++++++++++++----------------------
 man/version.texi   |   6 +-
 21 files changed, 712 insertions(+), 438 deletions(-)

diff --git a/Changes b/Changes
index 321de85..3e41c40 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,53 @@
+2019-08-25  Bob Weiner  <address@hidden>
+
+* Makefile (HYPERBOLE_FILES): Removed hyperbole-pkg.el and deleted that file
+    which is now auto-generated.
+
+* hactypes.el (exec-window-cmd): Removed use of InfoDock 'new-shell' function
+    which did not support provision of a buffer name for shell creation.
+    Also, called 'shell' command if existing shell buffer does not have a
+    process and updated buf-name with the buffer returned by the 'shell'
+    command.
+              (exec-shell-cmd): Applied similar changes. 
+
+* hpath.el (hpath:find): Changed modifier comparisons to use = and wrapped 
+    (load filename) in a 'hact' macro.
+    (hpath:is-p): Only temporarily strip any initial execution modifier
+      character from the path so can be handled later by action types.
+
+2019-08-24  Bob Weiner  <address@hidden>
+
+* DEMO (Action Buttons): Added this new section to explain implicit action 
buttons.
+
+* Merged in doc string change from active to imperative tense and updated
+    the same in hibtypes.el and hactypes.el.
+
+2019-08-23  Bob Weiner  <address@hidden>
+
+* hactypes.el (display-variable): Added to display Elisp variable values.
+  hibtypes.el (action:start, action:end, action): Added to allow in-buffer 
angle bracket
+    delimited action/function calls/variable displays.
+  hact.el (actype:act): Simplified logic and added support for printing 
variable values as an action.
+          (actype:eval): Added to support action ibuts.
+
+* hbut.el (hbut:act): Changed to use hrule:action setting.
+
+* hbut.el (defact): Updated doc to reflect that action type functions may not 
return nil.
+    Temporarily set hrule:action to #'actype:eval if you need a potential nil 
return.
+  hactypes.el (eval-elisp): Updated doc-string to reflect it is for its 
side-effects and cannot
+    return a nil value.
+
+2019-08-22  Bob Weiner  <address@hidden>
+
+* hmouse-tag.el (smart-lisp-identifier-first-char-regexp, 
smart-lisp-identifier-chars,
+    smart-lisp-identifier): Added and used in smart-lisp-at-tag-p.
+
+* hpath.el (hpath:is-p): BUG FIX: Move space normalization and variable 
substitution to beginning of
+    function to apply to all paths given as inputs.  Expanded doc to explain 
this normalization.
+
 2019-08-18  Bob Weiner  <address@hidden>
 
-* hyperbole: Added second arg of t to most calls to prin1-to-string so 
properties are not utilizied,
+* hyperbole: Added second arg of t to most calls to prin1-to-string so 
properties are not utilized,
     notably when displaying @loc> locations.
 
 * hversion.el: Change to using numeric test release codes instead of letters 
to ease version parsing.
@@ -24,8 +71,11 @@
 * kotl/kimport.el (kimport:copy-and-set-buffer): Made an autoload since M-x 
kotl-mode
     may call kfile;create which then calls this function.
 
+* Change to use only 3 section version numbers for elpa compatibility.  Test 
releases
+    change the 3rd section and production releases change the second.
+
 ==============================================================================
-V7.0.3.3 changes ^^^^:
+V7.0.4 changes ^^^^:
 ==============================================================================
 
 2019-08-06  Bob Weiner  <address@hidden>
diff --git a/DEMO b/DEMO
index 0d4927a..59be5cd 100644
--- a/DEMO
+++ b/DEMO
@@ -411,9 +411,11 @@ hypertexts via its incredibly powerful feature: implicit 
buttons.  An
 implicit button is a span of text within a buffer that Hyperbole recognizes
 as a button and lets you activate.  Hyperbole recognizes these buttons using
 its predefined implicit button types that specify how to recognize a
-particular type of button and what action such buttons perform.  For example,
-double-quoted pathnames have a type of 'pathname' and an action of: display
-the path in Emacs. (Hyperbole lets you configure where to display it).
+particular type of button and what action it performs.  For example,
+an Action Key press on a double-quoted pathname displays it.  (This is because
+an implicit button type of 'pathname' is recognized and it has an associated
+action type of 'hpath:find' which displays the path in a window specified by
+the setting of 'hpath:display-where').
 
 Hyperbole has many built-in implicit button types, a number of which you will
 see here.  You may also create your own types.  Once a type is known, you can
@@ -426,17 +428,17 @@ to utilize it if it spans multiple lines and always press 
on a regular
 character, not a delimiter like ( or ) since these are treated specially and
 used to select groups of text.
 
-Individual implicit buttons may be labeled so that they may be activated
+Individual implicit buttons may be labeled so that they can be activated
 by name or linked to by other buttons.  Here is a pathname button with a label
 of 'My Emacs Files':
 
 <[My Emacs Files]>: "~/.emacs.d"
 
-You see that the label is delimited by <[ and ]> and can be followed
-by any number of :, - or = characters, including none, and then a
-whitespace character.  You can activate the button either from its
-label or its pattern text.  With point on an implicit button, you can
-label it by using {C-h h i l}.
+You see that the label is delimited by <[ and ]>.  It must be at least 2
+characters in length and can be followed by any number of :, - or = characters,
+including none, and then a whitespace character.  You can activate the button
+either from its label or its pattern text.  With point on an implicit button,
+you can label it by using {C-h h i l}.
 
 Now let's explore some implicit button types.
 
@@ -487,6 +489,48 @@ Key executes the code block via the Org mode standard 
binding of {C-c C-c},
 In any other context besides the end of a line, the Action Key invokes
 the Org mode standard binding of {M-RET}, (org-meta-return).
 
+** Action Buttons
+
+A new feature of Hyperbole is a universal syntax for creating implicit
+buttons known as Action Buttons that execute any existing action types or
+Emacs Lisp functions.  Such buttons are delimited by angle brackets, < >, and
+come in three types:
+
+  1. action type invocations - these begin with an action type name (from the
+     list displayed by {C-h h d t a RET}) and are followed by any needed
+     arguments to form the action, e.g.
+
+          <link-to-file-line "${hyperb:dir}/hact.el" 40>
+
+  2. function calls - these are similar to action type invocations but begin
+     with an Elisp function name rather than an action type name, e.g.
+
+          <find-file-other-window "/tmp">
+
+  3. variable displays - these consist of just an Elisp variable name and
+     display a message with the variable name and value, e.g.
+
+          <fill-column>
+
+     If there is a function binding with the same name as the variable you
+     wish to display, to prevent interpretation as a function call action
+     button, precede the name with a '$', e.g.
+
+          <$fill-column>
+
+Since implicit buttons can be labeled with a name and placed in the global
+button file for invocation by name, you can give short names to any such
+buttons you want to invoke frequently.
+
+An Action Button is recognized only if the first name within the angle
+brackets is an existing action type or Elisp symbol.  Otherwise, other
+implicit button types will be tested and may activate instead.
+
+With Action Buttons you need not remember any special syntax for each type of
+implicit button.  You can freely embed them in any type of text and use the
+Action and Assist keys on them as you do with any other type of implicit
+button.
+
 ** Implicit Path Links
 
 Any existing absolute or relative pathname (whether doubly quoted or not)
@@ -574,12 +618,12 @@ and jpeg.  Under X or Mac OS, try a press of the Action 
Key on
 Several prefix characters may be attached to pathnames to indicate that a
 different action should be taken when the button is activated.  An
 exclamation point prefix indicates that the full pathname should be run as a
-non-windowed shell program.  For example, try "!/bin/date" on UNIX.  This
-will run the program in a subshell within Emacs.  An ampersand prefix means
-run the full pathname as a windowed program, outside of Emacs.  Under the X
-window system, try "&/usr/X11/bin/xeyes".  Finally, a hyphen indicates that
-the filename should be executed as an Emacs Lisp library, e.g. "-subr.elc",
-rather than displayed.
+non-windowed shell program.  For example, try "!${PATH}/date" on a POSIX
+system.  This will run the program in a subshell within Emacs.  An ampersand
+prefix means run the full pathname as a windowed program, outside of Emacs.
+Under the X window system, try "&${PATH}/xeyes".  Finally, a hyphen indicates
+that the filename should be executed as an Emacs Lisp library,
+e.g. "-subr.elc", rather than displayed.
 
 *** Info Paths
 
@@ -686,7 +730,7 @@ just like any others.
 In README files, such as Hyperbole's "README", table of contents entries
 act similarly.  Click on "README" to view that file and then click on a
 table of contents entry to jump to the associated section in the "README"
-file.
+file.  Or "README#User Quotes" goes directly to that section.
 
 ** World Wide Web URL Buttons
 
diff --git a/HY-ABOUT b/HY-ABOUT
index e6331bd..00b2d82 100644
--- a/HY-ABOUT
+++ b/HY-ABOUT
@@ -3,7 +3,7 @@
                   Designed and Written by Bob Weiner
                Maintained by Mats Lidell and Bob Weiner
                 https://www.gnu.org/software/hyperbole/
-                            Version 7.0.3b
+                            Version 7.0.4
 
                    Say thanks if you like Hyperbole:
                     https://saythanks.io/to/rswgnu
diff --git a/HY-NEWS b/HY-NEWS
index 41d6d25..46a4de0 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -2,11 +2,41 @@
                                 by Bob Weiner
 
 ===========================================================================
-*                                   V7.0.3.3
+*                                   V7.0.4
 ===========================================================================
 
   BUTTONS
 
+    - Action Buttons: A new, universal syntax for creating implicit buttons
+      that execute any existing action types or Elisp functions.  Such buttons
+      are delimited by angle brackets, < >, and come in three types:
+
+         1. action type invocations - these begin with an action type
+            name (from the list displayed by {C-h h d t a RET}) and
+            are followed by any needed arguments to form the action,
+            e.g.
+
+              <link-to-file-line "${hyperb:dir}/hact.el" 40>
+
+         2. function calls - these are similar to action type
+            invocations but begin with an Elisp function name rather
+            than an action type name, e.g.
+
+              <find-file-other-window "/tmp">
+
+         3. variable displays - these consist of just an Elisp
+            variable name and display a message with the variable name
+            and value, e.g.
+
+              <fill-column>
+
+            If there is a function binding with the same name as the
+            variable you wish to display, to prevent interpretation as
+            a function call action button, precede the name with a
+            '$', e.g.
+
+               <$fill-column>
+
     - Labeled Implicit Buttons: Optional <[labels]> that precede
       implicit buttons.  This enables implicit buttons to be activated
       by name when in the current buffer or anywhere when added to the
@@ -38,8 +68,10 @@
       ilink (link to implicit button), glink (link to global button), and
       elink (link to explicit button).
 
-    - Implicit Buttons: Added description and example of implicit button 
labels.
-      DEMO (Implicit Buttons): Added description and example of implicit 
button labels.
+    - DEMO (Action Buttons): Added description and examples.
+
+    - Hyperbole Manual, DEMO (Implicit Buttons): Added description and
+      example of implicit button labels.
 
     - Glossary: Updated Implicit Button and Global Button entries with changes.
 
diff --git a/Makefile b/Makefile
index 7f3a276..2782324 100644
--- a/Makefile
+++ b/Makefile
@@ -57,7 +57,7 @@
 
 # This ver setup won't work under any make except GNU make, so set it manually.
 #HYPB_VERSION = "`head -3 hversion.el | tail -1 | sed -e 's/.*|\(.*\)|.*/\1/'`"
-HYPB_VERSION = 7.0.3.3
+HYPB_VERSION = 7.0.4
 
 # Emacs executable used to byte-compile .el files into .elc's.
 # Possibilities include: emacs, infodock, etc.
@@ -175,7 +175,7 @@ ELC_KOTL = kotl/kexport.elc kotl/kfile.elc kotl/kfill.elc 
kotl/kimport.elc kotl/
            kotl/kcell.elc kotl/kproperty.elc \
            kotl/kview.elc kotl/kvspec.elc
 
-HYPERBOLE_FILES = dir hyperbole-pkg.el info html $(EL_SRC) $(EL_COMPILE) 
$(EL_KOTL) \
+HYPERBOLE_FILES = dir info html $(EL_SRC) $(EL_COMPILE) $(EL_KOTL) \
        $(ELC_COMPILE) Changes COPYING Makefile HY-ABOUT HY-ANNOUNCE HY-NEWS \
        HY-WHY.kotl INSTALL DEMO DEMO-ROLO.otl MANIFEST README _hypb .hypb 
smart-clib-sym \
        topwin.py hyperbole-banner.png $(man_dir)/hkey-help.txt \
@@ -259,7 +259,7 @@ clean:
 version: doc
        @ echo ""
        @ echo "Any fgrep output means the version number has not been updated 
in that file."
-       fgrep -L $(HYPB_VERSION) Makefile HY-ABOUT HY-NEWS README.md 
hversion.el hyperbole.el hyperbole-pkg.el man/hyperbole.texi man/version.texi
+       fgrep -L $(HYPB_VERSION) Makefile HY-ABOUT HY-NEWS README.md 
hversion.el hyperbole.el man/hyperbole.texi man/version.texi
        @ echo ""
 
 # Build the Info, HTML and Postscript versions of the user manual and 
README.md.html.
diff --git a/README.md b/README.md
index 3e01631..8a72f9a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# GNU Hyperbole 7.0.3.3 - The Everyday Hypertextual Information Manager
+# GNU Hyperbole 7.0.4 - The Everyday Hypertextual Information Manager
 
 [Say thanks if you like Hyperbole.(https://saythanks.io/to/rswgnu)]
 
diff --git a/hact.el b/hact.el
index e3d8998..fb3164b 100644
--- a/hact.el
+++ b/hact.el
@@ -282,22 +282,39 @@ performing ACTION."
       ;; string arguments like "tags" as a pathname, when it is not
       ;; being used as a path.  So do this only if actype is a defact
       ;; and not a defun to limit any potential impact. RSW - 9/22/2017
-      (if (symbolp action) (string-match "\\`actypes::" (symbol-name action))
-       (setq args (action:path-args-abs args)))
+      (and (symbolp action) (string-match "\\`actypes::" (symbol-name action))
+          (setq args (action:path-args-abs args)))
       (let ((hist-elt (hhist:element)))
        (run-hooks 'action-act-hook)
-       (prog1 (or (cond ((or (symbolp action) (listp action)
-                             (hypb:emacs-byte-code-p action))
-                         (eval act))
-                        ((and (stringp action)
-                              (let ((func (key-binding action)))
-                                (if (not (integerp action))
-                                    (setq action func))))
-                         (eval act))
-                        (t (eval action)))
+       (prog1 (or (if (or (symbolp action) (listp action)
+                          (hypb:emacs-byte-code-p action)
+                          (and (stringp action) (not (integerp action))
+                               (setq action (key-binding action))))
+                      (eval act)
+                    (eval action))
                   t)
-         (hhist:add hist-elt))
-       ))))
+         (hhist:add hist-elt))))))
+
+(defun    actype:eval (actype &rest args)
+  "Performs action formed from ACTYPE and rest of ARGS and returns value.
+ACTYPE may be a string containing a Lisp expression from which ACTYPE
+and ARGS are extracted   ACTYPE may be a symbol or symbol name for
+either an action type or a function.  Runs `action-act-hook' before
+performing ACTION."
+  (let ((prefix-arg current-prefix-arg)
+       (action (actype:action actype))
+       (act '(apply action args)))
+    (if (null action)
+       (error "(actype:act): Null action for: `%s'" actype)
+      (let ((hist-elt (hhist:element)))
+       (run-hooks 'action-act-hook)
+       (prog1 (if (or (symbolp action) (listp action)
+                      (hypb:emacs-byte-code-p action)
+                      (and (stringp action) (not (integerp action))
+                           (setq action (key-binding action))))
+                  (eval act)
+                (eval action))
+         (hhist:add hist-elt))))))
 
 (defun    actype:action (actype)
   "Return action part of ACTYPE (a symbol or symbol name).
@@ -310,8 +327,7 @@ ACTYPE may be a Hyperbole actype or Emacs Lisp function."
     (cond ((htype:body (if (string-match "\\`actypes::" actname)
                           actype
                         (intern-soft (concat "actypes::" actname)))))
-         ((fboundp actype) actype)
-         )))
+         ((fboundp actype) actype))))
 
 (defmacro actype:create (type params doc &rest default-action)
   "Create an action TYPE (an unquoted symbol) with PARAMS, described by DOC.
diff --git a/hactypes.el b/hactypes.el
index 001d152..ab9a80e 100644
--- a/hactypes.el
+++ b/hactypes.el
@@ -23,7 +23,7 @@
 ;;; ************************************************************************
 
 (defact annot-bib (key)
-  "Follows internal ref KEY within an annotated bibliography, delimiters=[]."
+  "Follow internal ref KEY within an annotated bibliography, delimiters=[]."
   (interactive "sReference key (no []): ")
   (let ((opoint (point))
        (key-regexp (concat "^[*]*[ \t]*\\\[" (ebut:key-to-label key) "\\\]"))
@@ -37,22 +37,27 @@
       (beep))))
 
 (defact completion ()
-  "Inserts completion at point into the minibuffer or a buffer.
+  "Insert completion at point into the minibuffer or a buffer.
 Unless point is at the end of the buffer or if a completion has already been
-inserted, the completions window is deleted."
+inserted, delete the completions window."
   (interactive)
   (if (eobp)
       (progn (bury-buffer nil)
             (delete-window))
     (hargs:completion)))
 
+(defact display-variable (var)
+  "Display a message showing `var` (a symbol) and its value."
+  (message "%s = %s" var (symbol-value var))
+  (or (symbol-value var) t))
+
 (defact eval-elisp (lisp-expr)
-  "Evaluates a Lisp expression LISP-EXPR."
+  "Evaluate a Lisp expression LISP-EXPR for its side-effects and return any 
non-nil value."
   (interactive "xLisp to eval: ")
   (eval lisp-expr))
 
 (defact exec-kbd-macro (kbd-macro &optional repeat-count)
-  "Executes KBD-MACRO REPEAT-COUNT times.
+  "Execute KBD-MACRO REPEAT-COUNT times.
 KBD-MACRO may be a string of editor command characters, a function symbol or
 nil to use the last defined keyboard macro.
 Optional REPEAT-COUNT nil means execute once, zero means repeat until
@@ -100,7 +105,7 @@ error."
 
 ;;; Support next two actypes on systems which use the `comint' shell package.
 (defact exec-shell-cmd (shell-cmd &optional internal-cmd kill-prev)
-  "Executes a SHELL-CMD string asynchronously.
+  "Execute a SHELL-CMD string asynchronously.
 Optional non-nil second argument INTERNAL-CMD inhibits display of the shell
 command line executed.  Optional non-nil third argument KILL-PREV means
 kill the last output to the shell buffer before executing SHELL-CMD."
@@ -123,14 +128,17 @@ kill the last output to the shell buffer before executing 
SHELL-CMD."
          (if (not (hpath:remote-p default-directory))
              (setq shell-cmd
                    (concat "cd " default-directory "; " shell-cmd)))
-         (if (not (get-buffer buf-name))
-             (save-excursion
-               (hpath:display-buffer (current-buffer))
-               (if (eq (minibuffer-window) (selected-window))
-                   (other-window 1))
-               (shell buf-name)
-               (setq comint-last-input-start (point-marker)
-                     comint-last-input-end (point-marker))))
+         (unless (and (get-buffer buf-name)
+                      (get-buffer-process (get-buffer buf-name)))
+           (save-excursion
+             (hpath:display-buffer (current-buffer))
+             (if (eq (minibuffer-window) (selected-window))
+                 (other-window 1))
+             (setq buf-name (buffer-name (shell buf-name)))
+             ;; Wait for shell to startup before sending it input.
+             (sit-for 1)
+             (setq comint-last-input-start (point-marker)
+                   comint-last-input-end (point-marker))))
          (hpath:display-buffer buf-name)
          (goto-char (point-max))
          (and kill-prev comint-last-input-end
@@ -143,7 +151,7 @@ kill the last output to the shell buffer before executing 
SHELL-CMD."
       (select-window owind))))
 
 (defact exec-window-cmd (shell-cmd)
-  "Asynchronously executes an external window-based SHELL-CMD string."
+  "Asynchronously execute an external window-based SHELL-CMD string."
   (interactive
    (let ((default  (car defaults)))
      (list (hargs:read "Shell cmd: "
@@ -159,19 +167,19 @@ kill the last output to the shell buffer before executing 
SHELL-CMD."
     (message msg)
     (save-excursion
       (save-window-excursion
-       (unless (get-buffer buf-name)
+       (unless (and (get-buffer buf-name)
+                    (get-buffer-process (get-buffer buf-name)))
          (save-excursion
            (save-window-excursion
-             (cond ((fboundp 'new-shell) (new-shell))
-                   (t (shell buf-name)))))
+             (setq buf-name (buffer-name (shell buf-name)))))
          (message msg)
          ;; Wait for shell to startup before sending it input.
          (sit-for 1)
          (set-buffer buf-name)
          (setq comint-last-input-start (point-marker)
                comint-last-input-end (point-marker)))
-       (or (equal (buffer-name (current-buffer)) buf-name)
-           (set-buffer buf-name))
+       (unless (equal (buffer-name (current-buffer)) buf-name)
+         (set-buffer buf-name))
        (goto-char (point-max))
        (insert cmd)
        (comint-send-input)))
@@ -233,8 +241,8 @@ For example:  To: address@hidden\n")))
 If POINT is given, the buffer is displayed with POINT at the top of
 the window.
 
-This type of link generally can only be used within a single editor session.
-Use `link-to-file' instead for a permanent link."
+This type of link is for use within a single editor session.  Use
+`link-to-file' instead for a permanent link."
   (interactive "bBuffer to link to: ")
   (if (or (stringp buffer) (bufferp buffer))
       (and (hpath:display-buffer buffer)
@@ -296,7 +304,7 @@ KEY-FILE defaults to the current buffer's file name."
 
 (defact link-to-file (path &optional point)
   "Display a file given by PATH scrolled to optional POINT.
-If POINT is given, the buffer is displayed with POINT at the top of
+If POINT is given, display the buffer with POINT at the top of
 the window."
   (interactive
    (let ((prev-reading-p hargs:reading-p)
@@ -431,8 +439,8 @@ and its buffer must have a file attached."
   "Display FILE with kcell given by CELL-REF at window top.
 See documentation for `kcell:ref-to-id' for valid cell-ref formats.
 
-If FILE is nil, the current buffer is used.
-If CELL-REF is nil, the first cell in the view is shown."
+If FILE is nil, use the current buffer.
+If CELL-REF is nil, show the first cell in the view."
   (interactive "fKotl file to link to: \n+KKcell to link to: ")
   (require 'kfile)
   (cond ((and (stringp cell-ref) (> (length cell-ref) 0)
@@ -449,8 +457,8 @@ If CELL-REF is nil, the first cell in the view is shown."
 
 (defact link-to-mail (mail-msg-id &optional mail-file)
   "Display mail msg with MAIL-MSG-ID from optional MAIL-FILE.
-See documentation for the variable `hmail:init-function' for information on
-how to specify a mail reader to use."
+See documentation for the variable `hmail:init-function' for
+information on how to specify a mail reader to use."
   (interactive "+MMail Msg: ")
   (if (not (fboundp 'rmail:msg-to-p))
       (hypb:error "(link-to-mail): Invoke mail reader before trying to follow 
a mail link")
diff --git a/hbut.el b/hbut.el
index d672c5a..f0b80f4 100644
--- a/hbut.el
+++ b/hbut.el
@@ -179,9 +179,9 @@ label search to two lines."
        npoint start lbl-key end but-start but-end start-regexp end-regexp)
     (unless start-delim (setq start-delim ebut:start))
     (unless end-delim (setq end-delim ebut:end))
-    (setq start-regexp (regexp-quote start-delim)
-         end-regexp (regexp-quote end-delim)
-         npoint (+ opoint (length start-delim)))
+    (setq npoint (+ opoint (length start-delim))
+         start-regexp (regexp-quote start-delim)
+         end-regexp (regexp-quote end-delim))
     ;; Ensure label is not blank and point is within matching delimiters
     (save-excursion
       (forward-line 0)
@@ -722,7 +722,8 @@ others who use a different value!")
 
 (defun    hbut:act (hbut)
   "Perform action for explicit or implicit Hyperbole button symbol HBUT."
-  (if hbut (apply 'actype:act (hattr:get hbut 'actype)
+  (if hbut (apply hrule:action
+                 (hattr:get hbut 'actype)
                  (hattr:get hbut 'args))))
 
 (defun    hbut:action (hbut)
@@ -1460,16 +1461,20 @@ Returns the symbol for the button, else nil."
   "Create Hyperbole implicit button TYPE (unquoted sym) with PARAMS, described 
by DOC.
 PARAMS are presently ignored.
 
-  AT-P is a boolean form of no arguments which determines whether or not point
+AT-P is a boolean form of no arguments which determines whether or not point
 is within a button of this type and if it is, calls `hact' with an
 action to be performed whenever a button of this type is activated.
+
 The action may be a regular Emacs Lisp function or a Hyperbole action
-type created with `defact'.
+type created with `defact' but may not return nil since any nil value
+returned is converted to t to ensure the implicit button checker
+recognizes that the action has been executed.
 
-  Optional TO-P is a boolean form which moves point immediately after the next
+Optional TO-P is a boolean form which moves point immediately after the next
 button of this type within the current buffer and returns a list of (button-
 label start-pos end-pos), or nil when none is found.
-  Optional STYLE is a display style specification to use when highlighting
+
+Optional STYLE is a display style specification to use when highlighting
 buttons of this type; most useful when TO-P is also given.
 
 Returns symbol created when successful, else nil.  Nil indicates that action
diff --git a/hib-doc-id.el b/hib-doc-id.el
index 8beaf20..0fb3a69 100644
--- a/hib-doc-id.el
+++ b/hib-doc-id.el
@@ -110,9 +110,9 @@
 ;;; ========================================================================
 
 (defact link-to-doc (doc-id)
-  "Displays online version of a document given by DOC-ID (no delimiters), in 
other window.
-If online version of document is not found in `doc-id-indices', an error is
-signalled."
+  "Display an online version of a document given by DOC-ID (no delimiters).
+If online version of document is not found in `doc-id-indices', signal
+an error."
   (interactive "sID for document to link to (omit delimiters): ")
   (let ((hyrolo-display-buffer (hypb:help-buf-name "Doc ID"))
        (delim-doc-id (concat doc-id-start doc-id doc-id-end)))
@@ -143,7 +143,7 @@ signalled."
                        delim-doc-id)))))))
 
 (defib doc-id ()
-  "Displays a document from a local document library given its id.
+  "Display a document from a local document library given its id.
 Ids must be delimited by `doc-id-start' and `doc-id-end' and must
 match the function stored in `doc-id-p'."
   (and (not (bolp))
@@ -167,8 +167,8 @@ delimited by `doc-id-index-entry-regexp'.")
 ;;; ************************************************************************
 
 (defun doc-id:help (but)
-  "Display site-specific document index entry given by doc-id BUT, in other 
window.
-Also displays standard Hyperbole help for implicit button BUT."
+  "Display site-specific document index entry given by doc-id BUT.
+Also display standard Hyperbole help for implicit button BUT."
   (let ((hyrolo-entry-regexp doc-id-index-entry-regexp)
        (hyrolo-display-buffer (hypb:help-buf-name "Doc ID"))
        (doc-id (hbut:key-to-label (hattr:get but 'lbl-key))))
diff --git a/hibtypes.el b/hibtypes.el
index db47b5b..a330b0d 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -356,6 +356,75 @@ Return t if jump and nil otherwise."
             
 
 ;;; ========================================================================
+;;; Executes an angle bracket delimited Hyperbole action, Elisp
+;;; function call or display of an Elisp variable and its value.
+;;; ========================================================================
+
+;; Allow for parameterized action-types surrounded by angle brackets.
+;; For example, <man-show "grep"> should display grep's man page
+;; (since man-show is an action type).
+
+(defconst action:start "<"
+  "Regexp matching the start of a Hyperbole Emacs Lisp expression to 
evaluate.")
+
+(defconst action:end ">"
+  "Regexp matching the end of a Hyperbole Emacs Lisp expression to evaluate.")
+
+(defib action ()
+  "At point, activate any of: an Elisp variable, a Hyperbole action-type, or 
an Elisp function call surrounded by <> rather than ().
+If an Elisp variable, display a message showing its value.
+
+There may not be any <> characters within the expression.  The
+first identifier in the expression must be an Elisp variable,
+action type or a function symbol to call, i.e. '<'actype-or-elisp-symbol
+arg1 ... argN '>'.  For example, <mail address@hidden>."
+  (let* ((label-key-start-end (ibut:label-p nil action:start action:end t t))
+        (ibut-key (nth 0 label-key-start-end))
+        (start-pos (nth 1 label-key-start-end))
+        (end-pos (nth 2 label-key-start-end))
+        actype action args lbl var-flag)
+    ;; Continue only if start-delim is either:
+    ;;     at the beginning of the buffer
+    ;;     or preceded by a space character or a grouping character
+    ;;   and that character after start-delim is:
+    ;;     not a whitespace character
+    ;;   and end-delim is either:
+    ;;     at the end of the buffer
+    ;;     or is followed by a space, punctuation or grouping character.
+    (when (and ibut-key (or (null (char-before start-pos))
+                           (memq (char-syntax (char-before start-pos)) '(?\  
?\> ?\( ?\))))
+              (not (memq (char-syntax (char-after (1+ start-pos))) '(?\  ?\>)))
+              (or (null (char-after end-pos))
+                  (memq (char-syntax (char-after end-pos)) '(?\  ?\> ?. ?\( 
?\)))
+                  ;; Some of these characters may have symbol-constituent 
syntax
+                  ;; rather than punctuation, so check them individually.
+                  (memq (char-after end-pos) '(?. ?, ?\; ?: ?! ?\' ?\"))))
+      (setq lbl (ibut:key-to-label ibut-key))
+      ;; Handle $ preceding var name in cases where same name is
+      ;; bound as a function symbol
+      (when (string-match "\\`\\$" lbl)
+       (setq var-flag t
+             lbl (substring lbl 1)))
+      (setq actype (if (find ?\  lbl) (car (split-string lbl)) lbl)
+           actype (or (intern-soft (concat "actype::" actype))
+                      (intern-soft actype)))
+      (when actype
+       (ibut:label-set lbl start-pos end-pos)
+       (setq action (read (concat "(" lbl ")"))
+             args (cdr action))
+       (when (and (null args) (symbolp actype) (boundp actype)
+                  (or var-flag (not (fboundp actype))))
+         ;; Is a variable, display its value as the action
+         (setq args `(',actype)
+               action `(display-variable ',actype)
+               actype 'display-variable))
+       ;; Necessary so can return a null value, which actype:act cannot.
+       (let ((hrule:action (if (eq hrule:action #'actype:identity)
+                               hrule:action
+                             'actype:eval)))
+         (apply hrule:action actype (mapcar #'eval args)))))))
+
+;;; ========================================================================
 ;;; Summarizes an Internet rfc for random access browsing by section.
 ;;; ========================================================================
 
@@ -643,7 +712,7 @@ The explicit button's action is executed in the context of 
the current buffer.
 Recognizes the format '<elink:' <button label> '>', e.g. <elink: 
project-list>."
   (let* ((label-key-start-end (hbut:label-p nil elink:start elink:end t t))
         (ebut-key (nth 0 label-key-start-end))
-        (lbl-key (and ebut-key (concat "elink_" (nth 0 label-key-start-end))))
+        (lbl-key (and ebut-key (concat "elink_" ebut-key)))
         (start-pos (nth 1 label-key-start-end))
         (end-pos (nth 2 label-key-start-end)))
     (when lbl-key
@@ -662,7 +731,7 @@ The global button's action is executed in the context of 
the current buffer.
 Recognizes the format '<glink:' <button label> '>', e.g. <glink: open todos>."
   (let* ((label-key-start-end (hbut:label-p nil glink:start glink:end t t))
         (gbut-key (nth 0 label-key-start-end))
-        (lbl-key (and gbut-key (concat "glink_" (nth 0 label-key-start-end))))
+        (lbl-key (and gbut-key (concat "glink_" gbut-key)))
         (start-pos (nth 1 label-key-start-end))
         (end-pos (nth 2 label-key-start-end)))
     (when lbl-key
@@ -681,7 +750,7 @@ The implicit button's action is executed in the context of 
the current buffer.
 Recognizes the format '<ilink:' <button label> '>', e.g. <ilink: my sequence 
of keys>."
   (let* ((label-key-start-end (ibut:label-p nil ilink:start ilink:end t t))
         (ibut-key (nth 0 label-key-start-end))
-        (lbl-key (and ibut-key (concat "ilink_" (nth 0 label-key-start-end))))
+        (lbl-key (and ibut-key (concat "ilink_" ibut-key)))
         (start-pos (nth 1 label-key-start-end))
         (end-pos (nth 2 label-key-start-end)))
     (when lbl-key
@@ -689,8 +758,8 @@ Recognizes the format '<ilink:' <button label> '>', e.g. 
<ilink: my sequence of
       (hact 'link-to-ibut ibut-key))))
 
 ;;; ========================================================================
-;;; Jumps to source line associated with ipython, ripgreb, grep or
-;;; With credit to Michael Lipp and Mike Williams for the idea.
+;;; Jumps to source line associated with ipython, ripgrep, grep or
+;;; compilation errors.
 ;;; ========================================================================
 
 (defib ipython-stack-frame ()
diff --git a/hmouse-tag.el b/hmouse-tag.el
index 30d5aba..e52ae5e 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -544,6 +544,20 @@ in the current directory or any of its ancestor 
directories."
             (buffer-substring-no-properties (point) (match-end 0))
             (point) (match-end 0))))))))
 
+;;;###autoload
+(defconst smart-lisp-identifier-first-char-regexp "[-<>*a-zA-Z]"
+  "Regexp matching the first character of a Lisp identifier, including the 
square brackets.")
+
+;;;###autoload
+(defconst smart-lisp-identifier-chars "-_:/*+=%$&?!<>a-zA-Z0-9~^"
+  "Regexp matching a valid character in any part of a Lisp identifier other 
than the first character.
+Excludes character matching square brackets, so may be used with 
skip-characters-forward/backward.")
+
+;;;###autoload
+(defconst smart-lisp-identifier (concat smart-lisp-identifier-first-char-regexp
+                                       "[" smart-lisp-identifier-chars "]*")
+  "Regexp matching a Lisp identifier.")
+
 (defun smart-lisp (&optional show-doc)
   "Jump to the definition of any selected Lisp identifier or optionally 
SHOW-DOC.
 If on an Emacs Lisp require, load, or autoload clause and the
@@ -648,26 +662,24 @@ Returns matching ELisp tag name that point is within, 
else nil."
   "Return Lisp tag name that point is within, else nil.
 Returns nil when point is on the first line of a non-alias Lisp definition."
   (unless (smart-lisp-at-definition-p)
-    (let* ((identifier-chars "-_:/*+=%$&?!<>a-zA-Z0-9~^")
-          (identifier (concat "[-<>*a-zA-Z][" identifier-chars "]*")))
-      (save-excursion
-       (skip-chars-backward identifier-chars)
-       (if (and (looking-at identifier)
-                ;; Ignore any punctuation matches.
-                (not (string-match "\\`[-<>*]+\\'" (match-string 0)))
-                ;; Needed to set match string.
-                (looking-at identifier))
-           (if no-flash
-               (if (eq (char-after (1- (match-end 0))) ?:)
-                   (buffer-substring-no-properties (point) (1- (match-end 0)))
-                 (buffer-substring-no-properties (point) (match-end 0)))
+    (save-excursion
+      (skip-chars-backward smart-lisp-identifier-chars)
+      (if (and (looking-at smart-lisp-identifier)
+              ;; Ignore any punctuation matches.
+              (not (string-match "\\`[-<>*]+\\'" (match-string 0)))
+              ;; Needed to set match string.
+              (looking-at smart-lisp-identifier))
+         (if no-flash
              (if (eq (char-after (1- (match-end 0))) ?:)
-                 (smart-flash-tag
-                  (buffer-substring-no-properties (point) (1- (match-end 0)))
-                  (point) (1- (match-end 0)))
+                 (buffer-substring-no-properties (point) (1- (match-end 0)))
+               (buffer-substring-no-properties (point) (match-end 0)))
+           (if (eq (char-after (1- (match-end 0))) ?:)
                (smart-flash-tag
-                (buffer-substring-no-properties (point) (match-end 0))
-                (point) (match-end 0)))))))))
+                (buffer-substring-no-properties (point) (1- (match-end 0)))
+                (point) (1- (match-end 0)))
+             (smart-flash-tag
+              (buffer-substring-no-properties (point) (match-end 0))
+              (point) (match-end 0))))))))
 
 ;;;###autoload
 (defun smart-lisp-mode-p ()
diff --git a/hpath.el b/hpath.el
index e48e687..b941cf2 100644
--- a/hpath.el
+++ b/hpath.el
@@ -835,12 +835,12 @@ program)."
        (setq filename (cond (anchor (concat remote-filename "#" anchor))
                             (hash   (concat remote-filename "#"))
                             (t path)))))
-    (cond (modifier (cond ((eq modifier ?!)
+    (cond (modifier (cond ((= modifier ?!)
                           (hact 'exec-shell-cmd filename))
-                         ((eq modifier ?&)
+                         ((= modifier ?&)
                           (hact 'exec-window-cmd filename))
-                         ((eq modifier ?-)
-                          (load filename)))
+                         ((= modifier ?-)
+                          (hact 'load filename)))
                    nil)
          (t (let ((display-executables (hpath:find-program path))
                   executable)
@@ -991,49 +991,27 @@ See also `hpath:internal-display-alist' for internal, 
`window-system' independen
                             (cons "next" 
hpath:external-display-alist-macos)))))))
 
 (defun hpath:is-p (path &optional type non-exist)
-  "Return PATH if PATH is a Posix or MSWindows path, else nil.
+  "Return normalized PATH if PATH is a Posix or MSWindows path, else nil.
 If optional TYPE is the symbol 'file or 'directory, then only that path type
 is accepted as a match.  The existence of the path is checked only for
-locally reachable paths (Info paths are not checked).  Single spaces are
-permitted in the middle of existing pathnames, but not at the start or end.
-Tabs and newlines are converted to space before the pathname is checked, this
-normalized path form is what is returned for PATH.  With optional NON-EXIST,
-nonexistent local paths are allowed."
+locally reachable paths (Info paths are not checked).  With optional NON-EXIST,
+nonexistent local paths are allowed.  Single spaces are permitted in the middle
+of existing pathnames, but not at the start or end.
+
+Before the pathname is checked for existence, tabs and newlines
+are converted to a single space, `hpath:prefix-regexp' matches at
+the start are temporarily stripped, link anchors at the end
+following a # or , character are stripped, and path variables are
+expanded with `hpath:substitute-value'.  This normalized path
+form is what is returned for PATH."
   (when (stringp path)
-    (setq path (hpath:mswindows-to-posix path))
-    (let ((rtn-path path)
-         (suffix))
-      ;; Path may be a link reference with components other than a
-      ;; pathname.  These components always follow a comma or # symbol, so
-      ;; strip them, if any, before checking path.
-      (and (if (string-match "\\`[^#][^#,]*\\([ \t\n\r]*[#,]\\)" path)
-              (setq rtn-path (concat (substring path 0 (match-beginning 1))
-                                     "%s" (substring path (match-beginning 1)))
-                    path (substring path 0 (match-beginning 1)))
-            (setq rtn-path (concat rtn-path "%s")))
-          ;; If path is just a local reference that begins with #,
-          ;; prepend the file name to it.
-          (cond ((and buffer-file-name
-                      ;; ignore HTML color strings
-                      (not (string-match 
"\\`#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]\\'" 
path))
-                      ;; match to in-file HTML references
-                      (string-match "\\`#[^\'\"<>#]+\\'" path))
-                 (setq rtn-path (concat "file://" buffer-file-name rtn-path)
-                       path buffer-file-name))
-                ((string-match "\\`[^#]+\\(#[^#]*\\)\\'" path)
-                 ;; file and # reference
-                 (setq path (substring path 0 (match-beginning 1)))
-                 (if (memq (aref path 0) '(?/ ?~))
-                     ;; absolute
-                     (setq rtn-path (concat "file://" rtn-path))
-                   (setq path (concat default-directory path)
-                         rtn-path (concat "file://" default-directory 
rtn-path))))
-                (t))
-          (if (string-match hpath:prefix-regexp path)
-              (setq path (substring path (match-end 0)))
-            t)
-          (not (or (string-equal path "")
-                   (string-match "\\`\\s \\|\\s \\'" path)))
+    (let (modifier)
+      (when (string-match hpath:prefix-regexp path)
+       (setq modifier (substring path 0 1)
+             path (substring path (match-end 0))))
+      (setq path (hpath:mswindows-to-posix path))
+      (and (not (or (string-equal path "")
+                   (string-match "\\`\\s-\\|\\s-\\'" path)))
           ;; Convert tabs and newlines to space.
           (setq path (hbut:key-to-label (hbut:label-to-key path)))
           (or (not (string-match "[()]" path))
@@ -1042,51 +1020,78 @@ nonexistent local paths are allowed."
               (setq path (hpath:substitute-value path))
             t)
           (not (string-match "[\t\n\r\"`'|{}\\]" path))
-          (or (not (hpath:www-p path))
-              (string-match "\\`ftp[:.]" path))
-          (let ((remote-path (string-match 
"\\(@.+:\\|^/.+:\\|..+:/\\).*[^:0-9/]" path)))
-            (if (cond (remote-path
-                       (cond ((eq type 'file)
-                              (not (string-equal "/" (substring path -1))))
-                             ((eq type 'directory)
-                              (string-equal "/" (substring path -1)))
-                             (t)))
-                      ((or (and non-exist
-                                (or
-                                 ;; Info or remote path, so don't check for.
-                                 (string-match "[()]" path)
-                                 (hpath:remote-p path)
-                                 (setq suffix (hpath:exists-p path t))
-                                 ;; Don't allow spaces in non-existent
-                                 ;; pathnames.
-                                 (not (string-match " " path))))
-                           (setq suffix (hpath:exists-p path t)))
-                       (cond ((eq type 'file)
-                              (not (file-directory-p path)))
-                             ((eq type 'directory)
-                              (file-directory-p path))
-                             (t))))
-                (progn
-                  ;; Might be an encoded URL with % characters, so
-                  ;; decode it before calling format below.
-                  (when (string-match "%" rtn-path)
-                    (let (decoded-path)
-                      (while (not (equal rtn-path (setq decoded-path 
(hypb:decode-url rtn-path))))
-                        (setq rtn-path decoded-path))))
-                  ;; Quote any % except for one %s at the end of the
-                  ;; path part of rtn-path (immediately preceding a #
-                  ;; or , character or the end of string).
-                  (setq rtn-path (hypb:replace-match-string "%" rtn-path "%%")
-                        rtn-path (hypb:replace-match-string 
"%%s\\([#,]\\|\\'\\)" rtn-path "%s\\1"))
-                  ;; Return path if non-nil return value.
-                  (if (stringp suffix) ;; suffix could = t, which we ignore
-                      (if (string-match (concat (regexp-quote suffix) "%s") 
rtn-path)
-                          ;; remove suffix
-                          (concat (substring rtn-path 0 (match-beginning 0))
-                                  (substring rtn-path (match-end 0)))
-                        ;; add suffix
-                        (format rtn-path suffix))
-                    (format rtn-path "")))))))))
+          (let ((rtn-path path)
+                (suffix))
+            ;; Path may be a link reference with components other than a
+            ;; pathname.  These components always follow a comma or # symbol, 
so
+            ;; strip them, if any, before checking path.
+            (and (if (string-match "\\`[^#][^#,]*\\([ \t\n\r]*[#,]\\)" path)
+                     (setq rtn-path (concat (substring path 0 (match-beginning 
1))
+                                            "%s" (substring path 
(match-beginning 1)))
+                           path (substring path 0 (match-beginning 1)))
+                   (setq rtn-path (concat rtn-path "%s")))
+                 ;; If path is just a local reference that begins with #,
+                 ;; prepend the file name to it.
+                 (cond ((and buffer-file-name
+                             ;; ignore HTML color strings
+                             (not (string-match 
"\\`#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]\\'" 
path))
+                             ;; match to in-file HTML references
+                             (string-match "\\`#[^\'\"<>#]+\\'" path))
+                        (setq rtn-path (concat "file://" buffer-file-name 
rtn-path)
+                              path buffer-file-name))
+                       ((string-match "\\`[^#]+\\(#[^#]*\\)\\'" path)
+                        ;; file and # reference
+                        (setq path (substring path 0 (match-beginning 1)))
+                        (if (memq (aref path 0) '(?/ ?~))
+                            ;; absolute
+                            (setq rtn-path (concat "file://" rtn-path))
+                          (setq path (concat default-directory path)
+                                rtn-path (concat "file://" default-directory 
rtn-path))))
+                       (t))
+                 (or (not (hpath:www-p path))
+                     (string-match "\\`ftp[:.]" path))
+                 (let ((remote-path (string-match 
"\\(@.+:\\|^/.+:\\|..+:/\\).*[^:0-9/]" path)))
+                   (when (cond (remote-path
+                                (cond ((eq type 'file)
+                                       (not (string-equal "/" (substring path 
-1))))
+                                      ((eq type 'directory)
+                                       (string-equal "/" (substring path -1)))
+                                      (t)))
+                               ((or (and non-exist
+                                         (or
+                                          ;; Info or remote path, so don't 
check for.
+                                          (string-match "[()]" path)
+                                          (hpath:remote-p path)
+                                          (setq suffix (hpath:exists-p path t))
+                                          ;; Don't allow spaces in non-existent
+                                          ;; pathnames.
+                                          (not (string-match " " path))))
+                                    (setq suffix (hpath:exists-p path t)))
+                                (cond ((eq type 'file)
+                                       (not (file-directory-p path)))
+                                      ((eq type 'directory)
+                                       (file-directory-p path))
+                                      (t))))
+                     ;; Might be an encoded URL with % characters, so
+                     ;; decode it before calling format below.
+                     (when (string-match "%" rtn-path)
+                       (let (decoded-path)
+                         (while (not (equal rtn-path (setq decoded-path 
(hypb:decode-url rtn-path))))
+                           (setq rtn-path decoded-path))))
+                     ;; Quote any % except for one %s at the end of the
+                     ;; path part of rtn-path (immediately preceding a #
+                     ;; or , character or the end of string).
+                     (setq rtn-path (hypb:replace-match-string "%" rtn-path 
"%%")
+                           rtn-path (hypb:replace-match-string 
"%%s\\([#,]\\|\\'\\)" rtn-path "%s\\1"))
+                     ;; Return path if non-nil return value.
+                     (if (stringp suffix) ;; suffix could = t, which we ignore
+                         (if (string-match (concat (regexp-quote suffix) "%s") 
rtn-path)
+                             ;; remove suffix
+                             (concat (substring rtn-path 0 (match-beginning 0))
+                                     (substring rtn-path (match-end 0)))
+                           ;; add suffix
+                           (concat modifier (format rtn-path suffix)))
+                       (concat modifier (format rtn-path "")))))))))))
 
 (defun hpath:push-tag-mark ()
   "Add a tag return marker at point if within a programming language file 
buffer.
@@ -1177,7 +1182,14 @@ in-buffer path will not match."
            (setq rest-of-path (substring rest-of-path 1)))
          (if (or (and sym (boundp sym)) (getenv var-name))
              (directory-file-name
-              (hpath:substitute-dir var-name rest-of-path))
+              ;; hpath:substitute-dir triggers an error when given an
+              ;; invalid local path 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, 8/26/2019
+              (condition-case nil
+                  (hpath:substitute-dir var-name rest-of-path)
+                (error rest-of-path)))
            var-group)))
       t)))
 
@@ -1572,8 +1584,8 @@ function to call with FILENAME as its single argument."
 (defun hpath:substitute-dir (var-name rest-of-path)
   "Return a dir for VAR-NAME using REST-OF-PATH to find match or triggers an 
error when no match.
 VAR-NAME's value may be a directory or a list of directories.  If it is a
-list, the first directory prepended to REST-OF-PATH which produces a valid
-local pathname is returned."
+list, return the first directory prepended to REST-OF-PATH which produces a 
valid
+local pathname."
   (let (sym val)
     (cond ((not (stringp var-name))
           (error "(hpath:substitute-dir): VAR-NAME, `%s', must be a string" 
var-name))
diff --git a/hversion.el b/hversion.el
index 6b2e17e..ac6ffbd 100644
--- a/hversion.el
+++ b/hversion.el
@@ -23,7 +23,7 @@
 ;;; Public variables
 ;;; ************************************************************************
 
-(defconst hyperb:version "7.0.3c" "GNU Hyperbole revision number.")
+(defconst hyperb:version "7.0.4" "GNU Hyperbole revision number.")
 
 ;;;###autoload
 (defvar hyperb:microsoft-os-p
diff --git a/hypb.el b/hypb.el
index d1ec61f..d89e560 100644
--- a/hypb.el
+++ b/hypb.el
@@ -219,8 +219,8 @@ Global keymap is used unless optional KEYMAP is given."
 
 (defun hypb:emacs-byte-code-p (obj)
   "Return non-nil iff OBJ is an Emacs byte compiled object."
-  (or (and (fboundp 'compiled-function-p) (compiled-function-p obj))
-      (and (fboundp 'byte-code-function-p) (byte-code-function-p obj))))
+  (or (and (fboundp 'byte-code-function-p) (byte-code-function-p obj))
+      (and (fboundp 'compiled-function-p) (compiled-function-p obj))))
 
 (defun hypb:error (&rest args)
   "Signals an error typically to be caught by `hyperbole'."
diff --git a/hyperbole.el b/hyperbole.el
index 8054fb0..8a65c4b 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -6,7 +6,7 @@
 ;; Maintainer:       Bob Weiner <address@hidden>, Mats Lidell <address@hidden>
 ;; Created:          06-Oct-92 at 11:52:51
 ;; Released:         18-Aug-19
-;; Version:          7.0.3.3
+;; Version:          7.0.4
 ;; Keywords:         comm, convenience, files, frames, hypermedia, languages, 
mail, matching, mouse, multimedia, outlines, tools, wp
 ;; Package:          hyperbole
 ;; Package-Requires: ((emacs "24.4"))
diff --git a/man/hyperbole.html b/man/hyperbole.html
index 21c93f1..965bbb5 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 7.0.3b, Published August 11, 2019).
+(Edition 7.0.4, Published August 26, 2019).
 
 Copyright (C) 1989-2019  Free Software Foundation, Inc.
 
@@ -347,8 +347,8 @@ WITHOUT ANY WARRANTY, without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
-Edition 7.0.3b
-Printed August 11, 2019.
+Edition 7.0.4
+Printed August 26, 2019.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -803,7 +803,7 @@ Next: <a href="#Smart-Keys" accesskey="n" rel="next">Smart 
Keys</a>, Previous: <
 <h2 class="chapter">1 Introduction</h2>
 
 <p>This edition of the GNU Hyperbole Manual is for use with any version
-7.0.3b or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.4 or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
 or higher.  It will trigger an error if your Emacs is older.
 </p>
 <p>This chapter summarizes the structure of the rest of the manual,
@@ -2410,14 +2410,14 @@ priority).
 <a name="index-completion-1"></a>
 </dd>
 <dt><code>completion</code></dt>
-<dd><p>Inserts the completion at point (from a completions buffer) into the
+<dd><p>Insert the completion at point (from a completions buffer) into the
 minibuffer or the other window.
 </p>
 <a name="index-ibtypes-hyp_002dsource"></a>
 <a name="index-Hyperbole-report"></a>
 </dd>
 <dt><code>hyp-source</code></dt>
-<dd><p>Turns source location entries following an &lsquo;@loc&gt;&rsquo; line 
in Hyperbole
+<dd><p>Turn source location entries following an &lsquo;@loc&gt;&rsquo; line 
in Hyperbole
 reports into buttons that jump to the associated location.  For
 example, <kbd>{C-h h d d C-h h e h o}</kbd> summarizes the properties of the
 explicit buttons in the <samp>DEMO</samp> file and each button in that report
@@ -2428,7 +2428,7 @@ buffer behaves the same as the corresponding button in 
the original
 <a name="index-Hyperbole-mail-list"></a>
 </dd>
 <dt><code>hyp-address</code></dt>
-<dd><p>Within a mail or Usenet news composer window, makes a Hyperbole
+<dd><p>Within a mail or Usenet news composer window, make a Hyperbole
 support/discussion e-mail address insert Hyperbole environment and
 version information.  This is useful when sending mail to a Hyperbole
 discussion mail list.  See also the documentation
@@ -2440,8 +2440,8 @@ activate this implicit button type.
 <a name="index-Info-node"></a>
 </dd>
 <dt><code>Info-node</code></dt>
-<dd><p>Makes a &quot;(filename)nodename&quot; button display the associated 
Info node.
-Also makes a &quot;(filename)itemname&quot; button display the associated Info
+<dd><p>Make a &quot;(filename)nodename&quot; button display the associated 
Info node.
+Also make a &quot;(filename)itemname&quot; button display the associated Info
 index item.  Examples are &quot;(hyperbole)Implicit Buttons&quot; and
 &ldquo;(hyperbole)C-c /&rdquo;.
 </p>
@@ -2454,7 +2454,7 @@ index item.  Examples are &quot;(hyperbole)Implicit 
Buttons&quot; and
 <a name="index-browse_002durl_002dbrowser_002dfunction"></a>
 </dd>
 <dt><code>www-url</code></dt>
-<dd><p>When not in an Emacs web browser buffer, follows any non-ftp URL (link) 
at point.
+<dd><p>When not in an Emacs web browser buffer, follow any non-ftp URL (link) 
at point.
 The variable, <code>browse-url-browser-function</code>, may be used to 
customize
 which URL browser is called.  Terse URLs which lack a protocol prefix,
 like www.gnu.org, are also recognized.
@@ -2465,23 +2465,23 @@ like www.gnu.org, are also recognized.
 <a name="index-signatures_002c-hiding"></a>
 </dd>
 <dt><code>gnus-push-button</code></dt>
-<dd><p>Activates GNUS-specific article push-buttons, e.g. for hiding
-signatures.  GNUS is a news and mail reader.
+<dd><p>Activate GNUS-specific article push-buttons, e.g. for hiding 
signatures.  GNUS
+is a news and mail reader.
 </p>
 <a name="index-ibtypes-texinfo_002dref"></a>
 <a name="index-Texinfo-cross_002dreference"></a>
 <a name="index-cross_002dreference_002c-Texinfo"></a>
 </dd>
 <dt><code>texinfo-ref</code></dt>
-<dd><p>Displays Texinfo, Info node or help associated with Texinfo node, menu
-item, @xref, @pxref, @ref, @code, @findex, @var or @vindex at point.
-If point is within the braces of a cross-reference, the associated Info node is
-shown.  If point is to the left of the braces but after the @ symbol and
-the reference is to a node within the current Texinfo file, then the
-Texinfo node is shown.
+<dd><p>Display Texinfo, Info node or help associated with Texinfo node, menu 
item,
+@xref, @pxref, @ref, @code, @findex, @var or @vindex at point.  If
+point is within the braces of a cross-reference, the associated Info node is
+shown.  If point is to the left of the braces but after the @ symbol and the
+reference is to a node within the current Texinfo file, then the Texinfo node
+is shown.
 </p>
-<p>For @code, @findex, @var and @vindex references, the associated 
documentation
-string is displayed.
+<p>For @code, @findex, @var and @vindex references, the associated
+documentation string is displayed.
 </p>
 <a name="index-ibtypes-mail_002daddress"></a>
 <a name="index-e_002dmail-address"></a>
@@ -2498,7 +2498,7 @@ with <samp>mail</samp> or <samp>rolo</samp> 
(case-insensitive) within its name.
 <a name="index-patch-output"></a>
 </dd>
 <dt><code>patch-msg</code></dt>
-<dd><p>Jumps to the source code associated with output from the 
&lsquo;<samp>patch</samp>&rsquo;
+<dd><p>Jump to the source code associated with output from the 
&lsquo;<samp>patch</samp>&rsquo;
 program.  Patch applies diffs to source code.
 </p>
 <a name="index-ibtypes-elisp_002dcompiler_002dmsg"></a>
@@ -2507,7 +2507,7 @@ program.  Patch applies diffs to source code.
 <a name="index-compiler-error"></a>
 </dd>
 <dt><code>elisp-compiler-msg</code></dt>
-<dd><p>Jumps to the source code for a definition associated with an Emacs
+<dd><p>Jump to the source code for a definition associated with an Emacs
 Lisp byte-compiler error message.  Works when activated anywhere
 within an error line.
 </p>
@@ -2520,7 +2520,7 @@ within an error line.
 <a name="index-source-line"></a>
 </dd>
 <dt><code>debugger-source</code></dt>
-<dd><p>Jumps to the source line associated with a debugger stack frame or
+<dd><p>Jump to the source line associated with a debugger stack frame or
 breakpoint line.  This works with gdb, dbx, and xdb.  Such lines are
 recognized in any buffer.
 </p>
@@ -2530,7 +2530,7 @@ recognized in any buffer.
 <a name="index-match-lines"></a>
 </dd>
 <dt><code>ripgrep-msg</code></dt>
-<dd><p>Jumps to line associated with a ripgrep (rg) line numbered msg.
+<dd><p>Jump to line associated with a ripgrep (rg) line numbered msg.
 Ripgrep outputs each pathname once followed by all matching lines in
 that pathname.  Messages are recognized in any buffer (other than a
 helm completion buffer).
@@ -2540,9 +2540,10 @@ helm completion buffer).
 <a name="index-stack-frame-1"></a>
 </dd>
 <dt><code>ipython-stack-frame</code></dt>
-<dd><p>Jumps to line associated with an ipython stack frame line numbered msg.
-ipython outputs each pathname once followed by all matching lines in that 
pathname.
-Messages are recognized in any buffer (other than a helm completion buffer).
+<dd><p>Jump to line associated with an ipython stack frame line numbered msg.
+ipython outputs each pathname once followed by all matching lines in that
+pathname.  Messages are recognized in any buffer (other than a helm completion
+buffer).
 </p>
 <a name="index-ibtypes-grep_002dmsg"></a>
 <a name="index-grep-1"></a>
@@ -2550,35 +2551,35 @@ Messages are recognized in any buffer (other than a 
helm completion buffer).
 <a name="index-match-lines-1"></a>
 </dd>
 <dt><code>grep-msg</code></dt>
-<dd><p>Jumps to a line associated with grep or compilation error messages.
+<dd><p>Jump to a line associated with a grep or compilation error message.
 Messages are recognized in any buffer.
 </p>
-<a name="index-ibtypes-link_002dto_002dibut"></a>
+<a name="index-ibtypes-ilink"></a>
 <a name="index-implicit-button-link"></a>
 <a name="index-link-to-implicit-button"></a>
 <a name="index-ilink"></a>
 </dd>
 <dt><code>link-to-ibut &lt;ilink&gt;</code></dt>
-<dd><p>At point, activates a link to an implicit button within the current 
buffer.
-Recognizes the format ’&lt;ilink:’ &lt;button label&gt; ’&gt;’, e.g. 
&lt;ilink: my sequence of keys&gt;.
+<dd><p>At point, activate a link to an implicit button within the current 
buffer.
+Recognizes the format ’&lt;ilink:’ &lt;button label&gt; ’&gt;’, e.g. 
&lt;ilink: my key sequence&gt;.
 </p>
-<a name="index-ibtypes-link_002dto_002dgbut"></a>
+<a name="index-ibtypes-glink"></a>
 <a name="index-global-button-link"></a>
 <a name="index-link-to-global-button"></a>
 <a name="index-glink"></a>
 </dd>
 <dt><code>link-to-gbut &lt;glink&gt;</code></dt>
-<dd><p>At point, activates a link to a global button.
+<dd><p>At point, activate a link to a global button.
 The global button’s action is executed in the context of the current buffer.
 Recognizes the format ’&lt;glink:’ &lt;button label&gt; ’&gt;’, e.g. 
&lt;glink: open todos&gt;.
 </p>
-<a name="index-ibtypes-link_002dto_002debut"></a>
+<a name="index-ibtypes-elink"></a>
 <a name="index-explicit-button-link"></a>
 <a name="index-link-to-explicit-button"></a>
 <a name="index-elink"></a>
 </dd>
 <dt><code>link-to-ebut &lt;elink&gt;</code></dt>
-<dd><p>At point, activates a link to an explicit button within the current 
buffer.
+<dd><p>At point, activate a link to an explicit button within the current 
buffer.
 Recognizes the format ’&lt;elink:’ &lt;button label&gt; ’&gt;’, e.g. 
&lt;elink: project-list&gt;.
 </p>
 <a name="index-ibtypes-klink"></a>
@@ -2587,7 +2588,7 @@ Recognizes the format ’&lt;elink:’ &lt;button 
label&gt; ’&gt;â€
 <a name="index-kcell-link"></a>
 </dd>
 <dt><code>klink</code></dt>
-<dd><p>Follows a link delimited by &lt;&gt; to a koutline cell.
+<dd><p>Follow a link delimited by &lt;&gt; to a koutline cell.
 See the documentation for <code>actypes::link-to-kotl</code> for valid link
 specifiers.
 </p>
@@ -2597,8 +2598,8 @@ specifiers.
 <a name="index-man-apropos"></a>
 </dd>
 <dt><code>man-apropos</code></dt>
-<dd><p>Makes man apropos entries (from &lsquo;<samp>man -k</samp>&rsquo;) 
display associated man
-pages when selected.
+<dd><p>Make man apropos entries (from &lsquo;<samp>man -k</samp>&rsquo;) 
display associated man pages
+when selected.
 </p>
 <a name="index-ibtypes-rfc"></a>
 <a name="index-Internet-RFC"></a>
@@ -2608,7 +2609,7 @@ pages when selected.
 <a name="index-ftp"></a>
 </dd>
 <dt><code>rfc</code></dt>
-<dd><p>Retrieves and displays an Internet rfc referenced at point.  The
+<dd><p>Retrieve and display an Internet rfc referenced at point.  The
 following formats are recognized: RFC822, rfc-822, and RFC 822.  The
 <code>hpath:rfc</code> variable specifies the location from which to
 retrieve RFCs.  Requires the Emacs builtin Tramp library for ftp file
@@ -2619,7 +2620,7 @@ retrievals.
 <a name="index-sequence-of-keys"></a>
 </dd>
 <dt><code>kbd-key</code></dt>
-<dd><p>Executes a key series (series of key sequences) found around point,
+<dd><p>Execute a key series (series of key sequences) found around point,
 delimited by curly braces, {}, if any.  Key series should be in
 human readable form, e.g. <kbd>{C-x C-b}</kbd>.  Formats such as {^x^b}
 will not be recognized.
@@ -2637,17 +2638,17 @@ will not be recognized.
 <a name="index-file_002c-DIR"></a>
 </dd>
 <dt><code>dir-summary</code></dt>
-<dd><p>Detects filename buttons in files named &quot;MANIFEST&quot; or 
&quot;DIR&quot;.
-Displays selected files.  Each filename must be at the beginning of the
-line and must be followed by one or more spaces and then another
-non-space, non-parenthesis, non-brace character.
+<dd><p>Detect filename buttons in files named &quot;MANIFEST&quot; or 
&quot;DIR&quot;.  Display selected
+files.  Each filename must be at the beginning of the line and must be
+followed by one or more spaces and then another non-space, non-parenthesis,
+non-brace character.
 </p>
 <a name="index-ibtypes-text_002dtoc"></a>
 <a name="index-table-of-contents"></a>
 <a name="index-toc-implicit-button-type"></a>
 </dd>
 <dt><code>text-toc</code></dt>
-<dd><p>Jumps to the text file section referenced by a table of contents entry
+<dd><p>Jump to the text file section referenced by a table of contents entry
 at point.  The filename of the current buffer must contain
 <samp>README</samp> and there must be a &lsquo;Table of Contents&rsquo; or 
&lsquo;Contents&rsquo;
 label on a line by itself (it may begin with an asterisk), preceding the
@@ -2662,7 +2663,7 @@ very beginning of the line.
 <a name="index-Cscope"></a>
 </dd>
 <dt><code>cscope</code></dt>
-<dd><p>Jumps to a C/C++ source line associated with a Cscope C analyzer output 
line.
+<dd><p>Jump to a C/C++ source line associated with a Cscope C analyzer output 
line.
 Requires pre-loading of the cscope.el Lisp library available from the Emacs
 Lisp archives and the open source cscope program available from
 http://cscope.sf.net.  Otherwise, does nothing.
@@ -2673,16 +2674,16 @@ http://cscope.sf.net.  Otherwise, does nothing.
 <a name="index-tag"></a>
 </dd>
 <dt><code>etags</code></dt>
-<dd><p>Jumps to the source line associated with an etags file entry in a TAGS 
buffer.
-If on a tag entry line, jumps to the source line for the tag.  If on a
-pathname line or line preceding it, jumps to the associated file.
+<dd><p>Jump to the source line associated with an etags file entry in a TAGS 
buffer.
+If on a tag entry line, jump to the source line for the tag.  If on a
+pathname line or line preceding it, jump to the associated file.
 </p>
 <a name="index-ibtypes-ctags"></a>
 <a name="index-ctags-entry"></a>
 <a name="index-tags-file"></a>
 </dd>
 <dt><code>ctags</code></dt>
-<dd><p>Jumps to the source line associated with a ctags file entry in any 
buffer.
+<dd><p>Jump to the source line associated with a ctags file entry in any 
buffer.
 Ctags files are used by old editors like vi to lookup identifiers.
 Emacs uses the newer, more flexible Etags format.
 </p>
@@ -2692,7 +2693,7 @@ Emacs uses the newer, more flexible Etags format.
 <a name="index-C-flow-graph"></a>
 </dd>
 <dt><code>id-cflow</code></dt>
-<dd><p>Expands or collapses C call trees and jumps to code definitions.
+<dd><p>Expand or collapse C call trees and jump to code definitions.
 Requires cross-reference tables built by the external <code>cxref</code>
 program.
 </p>
@@ -2703,14 +2704,23 @@ program.
 <a name="index-table-of-contents-1"></a>
 </dd>
 <dt><code>rfc-toc</code></dt>
-<dd><p>Summarizes contents of an Internet rfc from anywhere within an rfc 
buffer.
+<dd><p>Summarize contents of an Internet rfc from anywhere within an rfc 
buffer.
 Each line of the summary may be selected to jump to the associated section.
 </p>
+<a name="index-ibtypes-actions"></a>
+<a name="index-action-implicit-button"></a>
+<a name="index-functon-call-implicit-button"></a>
+<a name="index-variable-display-implicit-button"></a>
+</dd>
+<dt><code>action</code></dt>
+<dd><p>Execute an angle bracket delimited Hyperbole action, Elisp function 
call or
+display of an Elisp variable and its value.
+</p>
 <a name="index-ibtypes-markdown_002dinternal_002dlink"></a>
 <a name="index-markdown-link"></a>
 </dd>
 <dt><code>markdown-internal-link</code></dt>
-<dd><p>Displays any in-file Markdown link referent.  Pathnames and urls are
+<dd><p>Display any in-file Markdown link referent.  Pathnames and urls are
 handled elsewhere.
 </p>
 <a name="index-ibtypes-git_002dreference"></a>
@@ -2719,7 +2729,7 @@ handled elsewhere.
 <a name="index-hibtypes_002dgit_002ddefault_002dproject"></a>
 </dd>
 <dt><code>git-reference</code></dt>
-<dd><p>Displays the git entity associated with REFERENCE and optional PROJECT.
+<dd><p>Display the git entity associated with REFERENCE and optional PROJECT.
 See <samp>DEMO#Git (Local) References</samp> for examples.
 </p>
 <p>REFERENCE is a string of one of the following forms:
@@ -2754,7 +2764,7 @@ value is provided, it defaults to the value of 
<code>hibtypes-git-default-projec
 <a name="index-version-control-1"></a>
 </dd>
 <dt><code>git-commit-reference</code></dt>
-<dd><p>Displays the diff for a git commit reference, e.g. commit a55e21, 
typically
+<dd><p>Display the diff for a git commit reference, e.g. commit a55e21, 
typically
 produced by git log.
 </p>
 <a name="index-ibtypes-github_002dreference"></a>
@@ -2764,7 +2774,7 @@ produced by git log.
 <a name="index-hibtypes_002dgithub_002ddefault_002duser"></a>
 </dd>
 <dt><code>github-reference</code></dt>
-<dd><p>Displays the Github entity associated with REFERENCE and optional USER 
and PROJECT.
+<dd><p>Display the Github entity associated with REFERENCE and optional USER 
and PROJECT.
 See <samp>../DEMO#Github (Remote) References</samp> for examples.
 </p>
 <p>REFERENCE is a string of one of the following forms:
@@ -2807,7 +2817,7 @@ PROJECT value is provided, it defaults to the value of
 <a name="index-hibtypes_002dgitlab_002ddefault_002duser"></a>
 </dd>
 <dt><code>gitlab-reference</code></dt>
-<dd><p>Displays the Gitlab entity associated with REFERENCE and optional USER 
and PROJECT.
+<dd><p>Display the Gitlab entity associated with REFERENCE and optional USER 
and PROJECT.
 See <samp>../DEMO#Gitlab (Remote) References</samp> for examples.
 </p>
 <p>REFERENCE is a string of one of the following forms:
@@ -2853,7 +2863,7 @@ PROJECT value is provided, it defaults to the value of
 <a name="index-hibtypes_002dsocial_002ddefault_002dservice"></a>
 </dd>
 <dt><code>social-reference</code></dt>
-<dd><p>Displays the web page associated with a social media hashtag or
+<dd><p>Display the web page associated with a social media hashtag or
 username reference at point.
 </p>
 <p>Reference format is:
@@ -2877,7 +2887,7 @@ twitter#hashtag.
 <dt><code>debbugs-gnu-mode</code></dt>
 <dd><p>Debbugs is a client-server issue tracker used by GNU free software
 projects, including Hyperbole, to manage issues and maintain threads
-of discussion around them.  You issues queries to a Debbugs server and
+of discussion around them.  You issue queries to a Debbugs server and
 it returns a listing entry for each matching issue.  When on a GNU
 Debbugs listing entry in <code>debbugs-gnu-mode</code>, an Action Key press
 displays the discussion of the selected issue; an Assist Key press
@@ -2901,7 +2911,7 @@ bug#id-number?attr1=val1&amp;attr2=val2&amp;attr3=val3
 </pre></div>
 
 <a name="index-file_002c-hib_002ddebbugs_002eel"></a>
-<p>Note that <em>issue</em> or <em>debbugs</em> may be used as well in place
+<p>Note that <em>issue</em> or <em>debbugs</em> may also be used in place
 of <em>bug</em>.  See the documentation at the top of
 the <samp>hib-debbugs.el</samp> file for detailed query format information.
 </p>
@@ -2910,7 +2920,7 @@ the <samp>hib-debbugs.el</samp> file for detailed query 
format information.
 <a name="index-reference"></a>
 </dd>
 <dt><code>annot-bib</code></dt>
-<dd><p>Displays annotated bibliography entries defined within the same buffer
+<dd><p>Display annotated bibliography entries defined within the same buffer
 as the reference.  References must be delimited by square brackets, must
 begin with a word constituent character, and must not be in buffers
 whose names begin with a &lsquo; &rsquo; or &lsquo;*&rsquo; character.
@@ -2922,7 +2932,7 @@ whose names begin with a &lsquo; &rsquo; or 
&lsquo;*&rsquo; character.
 <a name="index-func_002dmenu"></a>
 </dd>
 <dt><code>function-in-buffer</code></dt>
-<dd><p>Returns the function name defined within this buffer that point is
+<dd><p>Return the function name defined within this buffer that point is
 within or after, else &lsquo;<samp>nil</samp>&rsquo;.  This triggers only when 
the
 func-menu library has been loaded and the current major mode is one
 handled by func-menu.
@@ -2933,7 +2943,7 @@ handled by func-menu.
 <a name="index-ibtypes-pathname_002dline_002dand_002dcolumn"></a>
 </dd>
 <dt><code>pathname-line-and-column</code></dt>
-<dd><p>Makes a valid pathname:line-num[:column-num] pattern display the path
+<dd><p>Make a valid pathname:line-num[:column-num] pattern display the path
 at line-num and optional column-num.  Also works for remote pathnames.
 </p>
 <a name="index-ibtypes-pathname"></a>
@@ -2948,7 +2958,7 @@ at line-num and optional column-num.  Also works for 
remote pathnames.
 <a name="index-link_002c-pathname"></a>
 </dd>
 <dt><code>pathname</code></dt>
-<dd><p>Makes a valid pathname display the path entry.  Also works for
+<dd><p>Make a valid pathname display the path entry.  Also works for
 delimited and non-delimited remote pathnames, Texinfo @file{}
 entries, and hash-style link references to HTML, Markdown or Emacs
 outline headings, and MSWindows paths (see <samp>${hyperb:dir}/DEMO#POSIX
@@ -3001,7 +3011,7 @@ the Org mode standard binding of <kbd>{M-RET}</kbd>, 
<code>org-meta-return</code
 <a name="index-document-identifier"></a>
 </dd>
 <dt><code>doc-id</code></dt>
-<dd><p>Displays a document from a local document library given its id.  Ids 
must be
+<dd><p>Display a document from a local document library given its id.  Ids 
must be
 delimited by <code>doc-id-start</code> and <code>doc-id-end</code> and must 
match the
 function given by <code>doc-id-p</code>.  (Note that this implicit button type 
is
 not installed by default.  You must manually configure it and load it from
@@ -3094,25 +3104,30 @@ are:
 <dd><a name="index-actypes-annot_002dbib"></a>
 </dd>
 <dt><code>annot-bib</code></dt>
-<dd><p>Follows an internal reference KEY within an annotated bibliography,
+<dd><p>Follow an internal reference KEY within an annotated bibliography,
 delimiters = [ ].
 </p>
 <a name="index-actypes-completion"></a>
 </dd>
 <dt><code>completion</code></dt>
-<dd><p>Inserts a completion at point into the minibuffer or a buffer.
+<dd><p>Insert a completion at point into the minibuffer or a buffer.
 Unless point is at the end of buffer or if a completion has already been 
-inserted, in which case the completions window is deleted.
+inserted, in which case, delete the completions window.
+</p>
+<a name="index-actypes-display_002dvariable"></a>
+</dd>
+<dt><code>display-variable-value</code></dt>
+<dd><p>Display a message showing the given variable name and its value.
 </p>
 <a name="index-actypes-eval_002delisp"></a>
 </dd>
 <dt><code>eval-elisp</code></dt>
-<dd><p>Evaluates a Lisp expression LISP-EXPR.
+<dd><p>Evaluate a Lisp expression LISP-EXPR for its side-effects and return 
any non-nil value.
 </p>
 <a name="index-actypes-exec_002dkbd_002dmacro"></a>
 </dd>
 <dt><code>exec-kbd-macro</code></dt>
-<dd><p>Executes a KBD-MACRO REPEAT-COUNT times.  KBD-MACRO may be a string of
+<dd><p>Execute a KBD-MACRO REPEAT-COUNT times.  KBD-MACRO may be a string of
 editor command characters, a function symbol or nil to use the last
 defined keyboard macro.  Optional REPEAT-COUNT nil means execute once,
 zero means repeat until error.
@@ -3120,7 +3135,7 @@ zero means repeat until error.
 <a name="index-actypes-exec_002dshell_002dcmd"></a>
 </dd>
 <dt><code>exec-shell-cmd</code></dt>
-<dd><p>Executes a SHELL-CMD string asynchronously.  Optional non-nil second
+<dd><p>Execute a SHELL-CMD string asynchronously.  Optional non-nil second
 argument INTERNAL-CMD inhibits display of the shell command line
 executed.  Optional non-nil third argument KILL-PREV means kill the last
 output to the shell buffer before executing SHELL-CMD.
@@ -3128,87 +3143,84 @@ output to the shell buffer before executing SHELL-CMD.
 <a name="index-actypes-exec_002dwindow_002dcmd"></a>
 </dd>
 <dt><code>exec-window-cmd</code></dt>
-<dd><p>Asynchronously executes an external window-based SHELL-CMD string.
+<dd><p>Asynchronously execute an external window-based SHELL-CMD string.
 </p>
 <a name="index-actypes-function_002din_002dbuffer"></a>
 </dd>
 <dt><code>function-in-buffer</code></dt>
-<dd><p>Displays the definition of function NAME found at POS in the current 
buffer.
+<dd><p>Display the definition of function NAME found at POS in the current 
buffer.
 </p>
 <a name="index-actypes-hyp_002dconfig"></a>
 </dd>
 <dt><code>hyp-config</code></dt>
-<dd><p>Inserts Hyperbole configuration and debugging information at the end
+<dd><p>Insert Hyperbole configuration and debugging information at the end
 of the current buffer or within optional OUT-BUF.
 </p>
 <a name="index-actypes-hyp_002drequest"></a>
 </dd>
 <dt><code>hyp-request</code></dt>
-<dd><p>Inserts help for composing a Hyperbole support/discussion message into
+<dd><p>Insert help for composing a Hyperbole support/discussion message into
 the current buffer or the optional OUT-BUF.
 </p>
 <a name="index-actypes-hyp_002dsource"></a>
 </dd>
 <dt><code>hyp-source</code></dt>
-<dd><p>Displays a buffer or file from a line beginning with
-<code>hbut:source-prefix</code>.
+<dd><p>Display a buffer or file from a line beginning with 
<code>hbut:source-prefix</code>.
 </p>
 <a name="index-actypes-kbd_002dkey"></a>
 </dd>
 <dt><code>kbd-key</code></dt>
-<dd><p>Executes the function binding for KEY-SEQUENCE, delimited by {}.
-Returns &lsquo;<samp>t</samp>&rsquo; if a KEY-SEQUENCE has a binding, else 
&lsquo;<samp>nil</samp>&rsquo;.
+<dd><p>Execute the function binding for KEY-SEQUENCE, delimited by {}.
+Return &lsquo;<samp>t</samp>&rsquo; if a KEY-SEQUENCE has a binding, else 
&lsquo;<samp>nil</samp>&rsquo;.
 </p>
 <a name="index-link-action-types"></a>
 <a name="index-actypes-link_002dto_002dbuffer_002dtmp"></a>
 </dd>
 <dt><code>link-to-buffer-tmp</code></dt>
-<dd><p>Displays a BUFFER.  This type of link generally can
-only be used within a single editor session.  Use <code>link-to-file</code>
-instead for a permanent link.
+<dd><p>Display a BUFFER.  This type of link is for use in  a single editor 
session.
+Use <code>link-to-file</code> instead for a permanent link.
 </p>
 <a name="index-actypes-link_002dto_002ddirectory"></a>
 </dd>
 <dt><code>link-to-directory</code></dt>
-<dd><p>Displays a DIRECTORY in Dired mode.
+<dd><p>Display a DIRECTORY in Dired mode.
 </p>
 <a name="index-actypes-link_002dto_002ddoc"></a>
 </dd>
 <dt><code>link-to-doc</code></dt>
-<dd><p>Displays an online version of a document given by DOC-ID.  If the online
-version of a document is not found in <code>doc-id-indices</code>, an error is
-signalled.
+<dd><p>Display an online version of a document given by DOC-ID.  If the online
+version of a document is not found in <code>doc-id-indices</code>, signal an 
error.
 </p>
 <a name="index-actypes-link_002dto_002debut"></a>
 </dd>
 <dt><code>link-to-ebut</code></dt>
-<dd><p>Performs an action given by an explicit button, specified by KEY and 
KEY-FILE.
+<dd><p>Perform an action given by an explicit button, specified by KEY and 
KEY-FILE.
 </p>
 <a name="index-actypes-link_002dto_002delisp_002ddoc"></a>
 </dd>
 <dt><code>link-to-elisp-doc</code></dt>
-<dd><p>Displays the documentation for FUNC-SYMBOL.
+<dd><p>Display the documentation for FUNC-SYMBOL.
 </p>
 <a name="index-actypes-link_002dto_002dfile"></a>
 </dd>
 <dt><code>link-to-file</code></dt>
-<dd><p>Displays a file given by PATH scrolled to optional POINT.  If POINT is 
given,
-the buffer is displayed with POINT at the top of the window.
+<dd><p>Display a file given by PATH scrolled to optional POINT.  If POINT is 
given,
+display the buffer with POINT at the top of the window.
 </p>
 <a name="index-actypes-link_002dto_002dfile_002dline"></a>
 </dd>
 <dt><code>link-to-file-line</code></dt>
-<dd><p>Displays a file given by PATH scrolled to LINE-NUM.
+<dd><p>Display a file given by PATH scrolled to LINE-NUM.
 </p>
 <a name="index-actypes-link_002dto_002dgbut"></a>
 </dd>
 <dt><code>link-to-gbut</code></dt>
-<dd><p>Performs an action given by an existing global button, specified by KEY.
+<dd><p>Perform an action given by an existing global button, specified by KEY.
 </p>
 <a name="index-actypes-link_002dto_002dInfo_002dindex_002ditem"></a>
 </dd>
 <dt><code>link-to-Info-index-item</code></dt>
-<dd><p>Displays an Info index ITEM cross-reference.
+<dd><p>Display an Info index ITEM cross-reference.
 ITEM must be a string of the form (filename)item-name.  During
 button creation, completion for both filename and item-name is
 available.  Filename may be given without the .info suffix.&quot;
@@ -3216,7 +3228,7 @@ available.  Filename may be given without the .info 
suffix.&quot;
 <a name="index-actypes-link_002dto_002dInfo_002dnode"></a>
 </dd>
 <dt><code>link-to-Info-node</code></dt>
-<dd><p>Displays an Info NODE.  NODE must be a string of the form
+<dd><p>Display an Info NODE.  NODE must be a string of the form
 (filename)nodename.  During button creation, completion for both
 filename and nodename is available.  Filename may be given without the
 .info suffix.
@@ -3224,23 +3236,23 @@ filename and nodename is available.  Filename may be 
given without the
 <a name="index-actypes-link_002dto_002dibut"></a>
 </dd>
 <dt><code>link-to-ibut</code></dt>
-<dd><p>Performs an action given by an implicit button, specified by KEY-FILE, 
KEY and optional POINT.
+<dd><p>Perform an action given by an implicit button, specified by KEY, 
optional KEY-FILE and POINT.
 </p>
 <a name="index-actypes-link_002dto_002dkcell"></a>
 <a name="index-kcell_003aref_002dto_002did"></a>
 </dd>
 <dt><code>link-to-kcell</code></dt>
-<dd><p>Displays a Hyperbole outline cell, given by FILE and CELL-REF, at the
+<dd><p>Display a Hyperbole outline cell, given by FILE and CELL-REF, at the
 top of a window.  See the documentation for <code>(kcell:ref-to-id)</code> for
 valid CELL-REF formats.
 </p>
-<p>If FILE is &lsquo;<samp>nil</samp>&rsquo;, the current buffer is used.  If 
CELL-REF is
-&lsquo;<samp>nil</samp>&rsquo;, the first cell in the view is shown.
+<p>If FILE is &lsquo;<samp>nil</samp>&rsquo;, use the current buffer.  If 
CELL-REF is
+&lsquo;<samp>nil</samp>&rsquo;, show the first cell in the view.
 </p>
 <a name="index-actypes-link_002dto_002dkotl"></a>
 </dd>
 <dt><code>link-to-kotl</code></dt>
-<dd><p>Displays at the top of a window the referent pointed to by LINK.
+<dd><p>Display at the top of a window the referent pointed to by LINK.
 LINK may be of any of the following forms, with or without delimiters:
 </p><div class="example">
 <pre class="example">  &lt; pathname [, cell-ref] &gt;
@@ -3254,58 +3266,58 @@ formats.
 <a name="index-actypes-link_002dto_002dmail"></a>
 </dd>
 <dt><code>link-to-mail</code></dt>
-<dd><p>Displays a mail message with MAIL-MSG-ID from optional MAIL-FILE.  See
+<dd><p>Display a mail message with MAIL-MSG-ID from optional MAIL-FILE.  See
 the documentation for the variable <code>hmail:init-function</code> for
 information on how to specify the mail reader to use.
 </p>
 <a name="index-actypes-link_002dto_002dregexp_002dmatch"></a>
 </dd>
 <dt><code>link-to-regexp-match</code></dt>
-<dd><p>Finds REGEXP&rsquo;s Nth occurrence in SOURCE and displays the location 
at the
+<dd><p>Find REGEXP&rsquo;s Nth occurrence in SOURCE and display the location 
at the
 top of the selected window.  SOURCE is a pathname unless optional
 BUFFER-P is non-nil, then SOURCE must be a buffer name or buffer.
-Returns &lsquo;<samp>t</samp>&rsquo; if found, signals an error if not.
+Return &lsquo;<samp>t</samp>&rsquo; if found, signal an error if not.
 </p>
 <a name="index-actypes-link_002dto_002drfc"></a>
 </dd>
 <dt><code>link-to-rfc</code></dt>
-<dd><p>Retrieves and displays an Internet rfc given by RFC-NUM.  RFC-NUM may be
+<dd><p>Retrieve and display an Internet rfc given by RFC-NUM.  RFC-NUM may be
 a string or an integer.
 </p>
 <a name="index-actypes-link_002dto_002dstring_002dmatch"></a>
 </dd>
 <dt><code>link-to-string-match</code></dt>
-<dd><p>Finds STRING&rsquo;s Nth occurrence in SOURCE and displays the location 
at the
+<dd><p>Find STRING&rsquo;s Nth occurrence in SOURCE and display the location 
at the
 top of the selected window.  SOURCE is a pathname unless optional
 BUFFER-P is non-nil, then SOURCE must be a buffer name or buffer.
-Returns &lsquo;<samp>t</samp>&rsquo; if found, &lsquo;<samp>nil</samp>&rsquo; 
if not.
+Return &lsquo;<samp>t</samp>&rsquo; if found, &lsquo;<samp>nil</samp>&rsquo; 
if not.
 </p>
 <a name="index-actypes-link_002dto_002dtexinfo_002dnode"></a>
 </dd>
 <dt><code>link-to-texinfo-node</code></dt>
-<dd><p>Displays the Texinfo node with NODENAME (a string) from the current 
buffer.
+<dd><p>Display the Texinfo node with NODENAME (a string) from the current 
buffer.
 </p>
 <a name="index-actypes-link_002dto_002dweb_002dsearch"></a>
 <a name="index-link_002c-web-search"></a>
 <a name="index-web-search-link"></a>
 </dd>
 <dt><code>link-to-web-search</code></dt>
-<dd><p>Searches web SERVICE-NAME for SEARCH-TERM.  Uses 
<code>hyperbole-web-search-alist</code>
+<dd><p>Search web SERVICE-NAME for SEARCH-TERM.  Uses 
<code>hyperbole-web-search-alist</code>
 to match each service to its search url.  Uses 
<code>hyperbole-web-search-browser-function</code>
 and the <code>browse-url</code> package to display search results.
 </p>
 <a name="index-actypes-man_002dshow"></a>
-<a name="index-sm_002dnotify"></a>
+<a name="index-hpath_003adisplay_002dwhere"></a>
+<a name="index-man-page"></a>
 </dd>
 <dt><code>man-show</code></dt>
-<dd><p>Displays a man page on TOPIC, which may be of the form 
&lsquo;<samp>&lt;command&gt;(&lt;section&gt;</samp>&rsquo;).
-If using the Superman manual entry package, see the documentation for 
<code>sm-notify</code>
-to control where the man page is displayed.
+<dd><p>Display a man page on TOPIC, which may be of the form 
&lsquo;<samp>&lt;command&gt;(&lt;section&gt;</samp>&rsquo;).
+Use <code>hpath:display-where</code> setting to control where the man page is 
displayed.
 </p>
 <a name="index-actypes-rfc_002dtoc"></a>
 </dd>
 <dt><code>rfc-toc</code></dt>
-<dd><p>Computes and displays a summary of an Internet rfc in BUF-NAME.  Assumes
+<dd><p>Compute and display a summary of an Internet rfc in BUF-NAME.  Assume
 point has already been moved to the start of the region to summarize.
 Optional OPOINT is the point to return to in BUF-NAME after displaying
 the summary.
@@ -3315,8 +3327,7 @@ the summary.
 <a name="index-toc-action-type"></a>
 </dd>
 <dt><code>text-toc</code></dt>
-<dd><p>Jumps to the text file SECTION referenced by a table of contents entry
-at point.
+<dd><p>Jump to the text file SECTION referenced by a table of contents entry 
at point.
 </p>
 <a name="index-actypes-www_002durl"></a>
 <a name="index-URL-1"></a>
@@ -3325,7 +3336,7 @@ at point.
 <a name="index-browse_002durl_002dbrowser_002dfunction-1"></a>
 </dd>
 <dt><code>www-url</code></dt>
-<dd><p>Follows a link given by a URL.  The variable,
+<dd><p>Follow a link given by a URL.  The variable,
 <code>browse-url-browser-function</code>, customizes the url browser
 that is used.  Valid values of this variable include
 <code>browse-url-default-browser</code> and <code>browse-url-generic</code>.
@@ -7962,7 +7973,7 @@ Next: <a href="#Internal-Viewers" accesskey="n" 
rel="next">Internal Viewers</a>,
 </div>
 <a name="Referent-Display-1"></a>
 <h4 class="subsection">B.3.1 Referent Display</h4>
-<a name="index-hpath_003adisplay_002dwhere"></a>
+<a name="index-hpath_003adisplay_002dwhere-1"></a>
 <a name="index-referent-display"></a>
 <a name="index-link-display"></a>
 <a name="index-display-where"></a>
@@ -8009,7 +8020,7 @@ Next: <a href="#External-Viewers" accesskey="n" 
rel="next">External Viewers</a>,
 <a name="index-internal-custom-display"></a>
 <a name="index-hpath_003ainternal_002ddisplay_002dalist-1"></a>
 <a name="index-internal-standard-display"></a>
-<a name="index-hpath_003adisplay_002dwhere-1"></a>
+<a name="index-hpath_003adisplay_002dwhere-2"></a>
 <p>When given a filename to display, Hyperbole first checks if its suffix
 is matched by <code>hpath:native-image-suffixes</code>.  If so and if the
 function <code>image-mode</code> is defined, it uses that mode together with
@@ -12004,6 +12015,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-actype_003adelete"><code>actype:delete</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Action-Type-Creation">Action Type Creation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-actypes-annot_002dbib"><code>actypes 
annot-bib</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-actypes-completion"><code>actypes 
completion</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-actypes-display_002dvariable"><code>actypes 
display-variable</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-actypes-eval_002delisp"><code>actypes 
eval-elisp</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-actypes-exec_002dkbd_002dmacro"><code>actypes 
exec-kbd-macro</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-actypes-exec_002dshell_002dcmd"><code>actypes 
exec-shell-cmd</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
@@ -12176,8 +12188,9 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-hmouse_002dy_002ddiagonal_002dsensitivity">hmouse-y-diagonal-sensitivity</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Mouse-Drags-within-a-Window">Smart Mouse Drags 
within a Window</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hmouse_002dy_002ddrag_002dsensitivity">hmouse-y-drag-sensitivity</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Mouse-Drags-within-a-Window">Smart Mouse Drags 
within a Window</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aat_002dp"><code>hpath:at-p</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Referent-Display">Referent Display</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere-1">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Action-Types">Action Types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere-1">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Referent-Display">Referent Display</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003adisplay_002dwhere-2">hpath:display-where</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist">hpath:external-display-alist</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist_002dmacos">hpath:external-display-alist-macos</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist_002dmswindows">hpath:external-display-alist-mswindows</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#External-Viewers">External Viewers</a></td></tr>
@@ -12268,6 +12281,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><th><a name="Function_fn_letter-I">I</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtype_003acreate"><code>ibtype:create</code></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-ibtype_003adelete"><code>ibtype:delete</code></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-ibtypes-actions"><code>ibtypes 
actions</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-annot_002dbib"><code>ibtypes 
annot-bib</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-completion"><code>ibtypes 
completion</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-ibtypes-cscope"><code>ibtypes 
cscope</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
@@ -12277,6 +12291,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-debugger_002dsource"><code>ibtypes 
debugger-source</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-dir_002dsummary"><code>ibtypes 
dir-summary</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-doc_002did"><code>ibtypes 
doc-id</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-ibtypes-elink"><code>ibtypes 
elink</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-elisp_002dcompiler_002dmsg"><code>ibtypes 
elisp-compiler-msg</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-ibtypes-etags"><code>ibtypes 
etags</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-function_002din_002dbuffer"><code>ibtypes 
function-in-buffer</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
@@ -12284,18 +12299,17 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-git_002dreference"><code>ibtypes 
git-reference</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-github_002dreference"><code>ibtypes 
github-reference</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-gitlab_002dreference"><code>ibtypes 
gitlab-reference</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-ibtypes-glink"><code>ibtypes 
glink</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-gnus_002dpush_002dbutton"><code>ibtypes 
gnus-push-button</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-grep_002dmsg"><code>ibtypes 
grep-msg</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-hyp_002daddress"><code>ibtypes 
hyp-address</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-hyp_002dsource"><code>ibtypes 
hyp-source</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-id_002dcflow"><code>ibtypes 
id-cflow</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-ibtypes-ilink"><code>ibtypes 
ilink</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-Info_002dnode"><code>ibtypes 
Info-node</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-ipython_002dstack_002dframe"><code>ibtypes 
ipython-stack-frame</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-kbd_002dkey"><code>ibtypes 
kbd-key</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-ibtypes-klink"><code>ibtypes 
klink</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-link_002dto_002debut"><code>ibtypes 
link-to-ebut</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-link_002dto_002dgbut"><code>ibtypes 
link-to-gbut</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-link_002dto_002dibut"><code>ibtypes 
link-to-ibut</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-mail_002daddress"><code>ibtypes 
mail-address</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-man_002dapropos"><code>ibtypes 
man-apropos</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ibtypes-markdown_002dinternal_002dlink"><code>ibtypes 
markdown-internal-link</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
@@ -12465,7 +12479,6 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Function_fn_letter-S">S</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-selective_002ddisplay">selective-display</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Emacs-Outline-Mode">Smart Key - Emacs 
Outline Mode</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-sm_002dnotify">sm-notify</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Action-Types">Action Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-smail_003acomment">smail:comment</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-smart_002dasm_002dinclude_002dpath">smart-asm-include-path</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Assembly-Source-Code">Smart Key - 
Assembly Source Code</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-smart_002dc_002dcpp_002dinclude_002dpath">smart-c-cpp-include-path</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-C-Source-Code">Smart Key - C Source 
Code</a></td></tr>
@@ -12601,6 +12614,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-ace_002dwindow">ace-window</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-action">action</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-action-1">action</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-action-implicit-button">action 
implicit button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Action-Key">Action 
Key</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-Action-Key-drag">Action Key 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a href="#By-Dragging">By 
Dragging</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Action-Key_002c-cell-argument">Action Key, cell 
argument</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
@@ -12965,6 +12979,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-function">function</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Thing-Selection">Thing Selection</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-function-1">function</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Delimited-Things">Smart Key - Delimited 
Things</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-function-menu">function 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-functon-call-implicit-button">functon call implicit 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-G">G</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a href="#index-game_002c-gomoku">game, 
gomoku</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Gomoku-Game">Smart Key - Gomoku Game</a></td></tr>
@@ -13225,6 +13240,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-make-frame">make 
frame</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-make-window">make 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-man-apropos">man 
apropos</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-man-page">man 
page</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Action-Types">Action 
Types</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-man-page-references">man page 
references</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Man-Pages">Smart Key - Man Pages</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-man-pages">man 
pages</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-margin">margin</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Filling">Filling</a></td></tr>
@@ -13630,6 +13646,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-username">username</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-V">V</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-variable-display-implicit-button">variable display implicit 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-variable-setting">variable 
setting</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-variables">variables</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-vector">vector</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Thing-Selection">Thing Selection</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index 4465571..353bb96 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index 157752d..de5fed3 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 590719a..73f6ad5 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -154,8 +154,8 @@ WITHOUT ANY WARRANTY, without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
-Edition 7.0.3.3
-Printed August 18, 2019.
+Edition 7.0.4
+Printed August 26, 2019.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -196,8 +196,8 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 @sp 2
 
 @example
-Edition 7.0.3.3
-Augut 18, 2019
+Edition 7.0.4
+Augut 26, 2019
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -473,7 +473,7 @@ Smart Keyboard Keys
 @chapter Introduction
 
 This edition of the GNU Hyperbole Manual is for use with any version
-7.0.3.3 or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.4 or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
 or higher.  It will trigger an error if your Emacs is older.
 
 This chapter summarizes the structure of the rest of the manual,
@@ -1831,13 +1831,13 @@ priority).
 @findex ibtypes completion
 @cindex completion
 @item completion
-Inserts the completion at point (from a completions buffer) into the
+Insert the completion at point (from a completions buffer) into the
 minibuffer or the other window.
 
 @findex ibtypes hyp-source
 @cindex Hyperbole report
 @item hyp-source
-Turns source location entries following an `@@loc>' line in Hyperbole
+Turn source location entries following an `@@loc>' line in Hyperbole
 reports into buttons that jump to the associated location.  For
 example, @bkbd{C-h h d d C-h h e h o} summarizes the properties of the
 explicit buttons in the @file{DEMO} file and each button in that report
@@ -1847,7 +1847,7 @@ buffer behaves the same as the corresponding button in 
the original
 @findex ibtypes hyp-address
 @cindex Hyperbole mail list
 @item hyp-address
-Within a mail or Usenet news composer window, makes a Hyperbole
+Within a mail or Usenet news composer window, make a Hyperbole
 support/discussion e-mail address insert Hyperbole environment and
 version information.  This is useful when sending mail to a Hyperbole
 discussion mail list.  See also the documentation
@@ -1858,8 +1858,8 @@ activate this implicit button type.
 @findex ibtypes Info-node
 @cindex Info node
 @item Info-node
-Makes a "(filename)nodename" button display the associated Info node.
-Also makes a "(filename)itemname" button display the associated Info
+Make a "(filename)nodename" button display the associated Info node.
+Also make a "(filename)itemname" button display the associated Info
 index item.  Examples are "(hyperbole)Implicit Buttons" and
 ``(hyperbole)C-c /''.
 
@@ -1871,7 +1871,7 @@ index item.  Examples are "(hyperbole)Implicit Buttons" 
and
 @kindex Action Key, web browsing
 @vindex browse-url-browser-function
 @item www-url
-When not in an Emacs web browser buffer, follows any non-ftp URL (link) at 
point.
+When not in an Emacs web browser buffer, follow any non-ftp URL (link) at 
point.
 The variable, @code{browse-url-browser-function}, may be used to customize
 which URL browser is called.  Terse URLs which lack a protocol prefix,
 like www.gnu.org, are also recognized.
@@ -1881,22 +1881,22 @@ like www.gnu.org, are also recognized.
 @cindex hiding signatures
 @cindex signatures, hiding
 @item gnus-push-button
-Activates GNUS-specific article push-buttons, e.g. for hiding
-signatures.  GNUS is a news and mail reader.
+Activate GNUS-specific article push-buttons, e.g. for hiding signatures.  GNUS
+is a news and mail reader.
 
 @findex ibtypes texinfo-ref
 @cindex Texinfo cross-reference
 @cindex cross-reference, Texinfo
 @item texinfo-ref
-Displays Texinfo, Info node or help associated with Texinfo node, menu
-item, @@xref, @@pxref, @@ref, @@code, @@findex, @@var or @@vindex at point.
-If point is within the braces of a cross-reference, the associated Info node is
-shown.  If point is to the left of the braces but after the @@ symbol and
-the reference is to a node within the current Texinfo file, then the
-Texinfo node is shown.
+Display Texinfo, Info node or help associated with Texinfo node, menu item,
+@@xref, @@pxref, @@ref, @@code, @@findex, @@var or @@vindex at point.  If
+point is within the braces of a cross-reference, the associated Info node is
+shown.  If point is to the left of the braces but after the @@ symbol and the
+reference is to a node within the current Texinfo file, then the Texinfo node
+is shown.
 
-For @@code, @@findex, @@var and @@vindex references, the associated 
documentation
-string is displayed.
+For @@code, @@findex, @@var and @@vindex references, the associated
+documentation string is displayed.
 
 @findex ibtypes mail-address
 @cindex e-mail address
@@ -1911,7 +1911,7 @@ with @file{mail} or @file{rolo} (case-insensitive) within 
its name.
 @findex ibtypes patch-msg
 @cindex patch output
 @item patch-msg
-Jumps to the source code associated with output from the @samp{patch}
+Jump to the source code associated with output from the @samp{patch}
 program.  Patch applies diffs to source code.
 
 @findex ibtypes elisp-compiler-msg
@@ -1919,7 +1919,7 @@ program.  Patch applies diffs to source code.
 @cindex Emacs Lisp compiler error
 @cindex compiler error
 @item elisp-compiler-msg
-Jumps to the source code for a definition associated with an Emacs
+Jump to the source code for a definition associated with an Emacs
 Lisp byte-compiler error message.  Works when activated anywhere
 within an error line.
 
@@ -1931,7 +1931,7 @@ within an error line.
 @cindex breakpoint
 @cindex source line
 @item debugger-source
-Jumps to the source line associated with a debugger stack frame or
+Jump to the source line associated with a debugger stack frame or
 breakpoint line.  This works with gdb, dbx, and xdb.  Such lines are
 recognized in any buffer.
 
@@ -1940,7 +1940,7 @@ recognized in any buffer.
 @cindex ripgrep
 @cindex match lines
 @item ripgrep-msg
-Jumps to line associated with a ripgrep (rg) line numbered msg.
+Jump to line associated with a ripgrep (rg) line numbered msg.
 Ripgrep outputs each pathname once followed by all matching lines in
 that pathname.  Messages are recognized in any buffer (other than a
 helm completion buffer).
@@ -1949,16 +1949,17 @@ helm completion buffer).
 @cindex ipython
 @cindex stack frame
 @item ipython-stack-frame
-Jumps to line associated with an ipython stack frame line numbered msg.
-ipython outputs each pathname once followed by all matching lines in that 
pathname.
-Messages are recognized in any buffer (other than a helm completion buffer).
+Jump to line associated with an ipython stack frame line numbered msg.
+ipython outputs each pathname once followed by all matching lines in that
+pathname.  Messages are recognized in any buffer (other than a helm completion
+buffer).
 
 @findex ibtypes grep-msg
 @cindex grep
 @cindex compiler error
 @cindex match lines
 @item grep-msg
-Jumps to a line associated with grep or compilation error messages.
+Jump to a line associated with a grep or compilation error message.
 Messages are recognized in any buffer.
 
 @findex ibtypes ilink
@@ -1966,7 +1967,7 @@ Messages are recognized in any buffer.
 @cindex link to implicit button
 @cindex ilink
 @item link-to-ibut <ilink>
-At point, activates a link to an implicit button within the current buffer.
+At point, activate a link to an implicit button within the current buffer.
 Recognizes the format ’<ilink:’ <button label> ’>’, e.g. <ilink: my key 
sequence>.
 
 @findex ibtypes glink
@@ -1974,7 +1975,7 @@ Recognizes the format ’<ilink:’ <button label> ’>’, e.g. 
<ilink: my key
 @cindex link to global button
 @cindex glink
 @item link-to-gbut <glink>
-At point, activates a link to a global button.
+At point, activate a link to a global button.
 The global button’s action is executed in the context of the current buffer.
 Recognizes the format ’<glink:’ <button label> ’>’, e.g. <glink: open todos>.
 
@@ -1983,7 +1984,7 @@ Recognizes the format ’<glink:’ <button label> ’>’, e.g. 
<glink: open to
 @cindex link to explicit button
 @cindex elink
 @item link-to-ebut <elink>
-At point, activates a link to an explicit button within the current buffer.
+At point, activate a link to an explicit button within the current buffer.
 Recognizes the format ’<elink:’ <button label> ’>’, e.g. <elink: project-list>.
 
 @findex ibtypes klink
@@ -1991,7 +1992,7 @@ Recognizes the format ’<elink:’ <button label> ’>’, e.g. 
<elink: project
 @cindex koutline link
 @cindex kcell link
 @item klink
-Follows a link delimited by <> to a koutline cell.
+Follow a link delimited by <> to a koutline cell.
 See the documentation for @code{actypes::link-to-kotl} for valid link
 specifiers.
 
@@ -2000,8 +2001,8 @@ specifiers.
 @cindex man pages
 @cindex man apropos
 @item man-apropos
-Makes man apropos entries (from @samp{man -k}) display associated man
-pages when selected.
+Make man apropos entries (from @samp{man -k}) display associated man pages
+when selected.
 
 @findex ibtypes rfc
 @cindex Internet RFC
@@ -2010,7 +2011,7 @@ pages when selected.
 @cindex remote file
 @cindex ftp
 @item rfc
-Retrieves and displays an Internet rfc referenced at point.  The
+Retrieve and display an Internet rfc referenced at point.  The
 following formats are recognized: RFC822, rfc-822, and RFC 822.  The
 @code{hpath:rfc} variable specifies the location from which to
 retrieve RFCs.  Requires the Emacs builtin Tramp library for ftp file
@@ -2020,7 +2021,7 @@ retrievals.
 @cindex key sequence
 @cindex sequence of keys
 @item kbd-key
-Executes a key series (series of key sequences) found around point,
+Execute a key series (series of key sequences) found around point,
 delimited by curly braces, @{@}, if any.  Key series should be in
 human readable form, e.g.@: @bkbd{C-x C-b}.  Formats such as @{^x^b@}
 will not be recognized.
@@ -2037,16 +2038,16 @@ Any key sequence must be a string of one of the 
following:
 @vindex file, MANIFEST
 @vindex file, DIR
 @item dir-summary
-Detects filename buttons in files named "MANIFEST" or "DIR".
-Displays selected files.  Each filename must be at the beginning of the
-line and must be followed by one or more spaces and then another
-non-space, non-parenthesis, non-brace character.
+Detect filename buttons in files named "MANIFEST" or "DIR".  Display selected
+files.  Each filename must be at the beginning of the line and must be
+followed by one or more spaces and then another non-space, non-parenthesis,
+non-brace character.
 
 @findex ibtypes text-toc
 @cindex table of contents
 @cindex toc implicit button type
 @item text-toc
-Jumps to the text file section referenced by a table of contents entry
+Jump to the text file section referenced by a table of contents entry
 at point.  The filename of the current buffer must contain
 @file{README} and there must be a `Table of Contents' or `Contents'
 label on a line by itself (it may begin with an asterisk), preceding the
@@ -2060,7 +2061,7 @@ very beginning of the line.
 @cindex C/C++ cross-reference
 @cindex Cscope
 @item cscope
-Jumps to a C/C++ source line associated with a Cscope C analyzer output line.
+Jump to a C/C++ source line associated with a Cscope C analyzer output line.
 Requires pre-loading of the cscope.el Lisp library available from the Emacs
 Lisp archives and the open source cscope program available from
 http://cscope.sf.net.  Otherwise, does nothing.
@@ -2070,15 +2071,15 @@ http://cscope.sf.net.  Otherwise, does nothing.
 @cindex TAGS file
 @cindex tag
 @item etags
-Jumps to the source line associated with an etags file entry in a TAGS buffer.
-If on a tag entry line, jumps to the source line for the tag.  If on a
-pathname line or line preceding it, jumps to the associated file.
+Jump to the source line associated with an etags file entry in a TAGS buffer.
+If on a tag entry line, jump to the source line for the tag.  If on a
+pathname line or line preceding it, jump to the associated file.
 
 @findex ibtypes ctags
 @cindex ctags entry
 @cindex tags file
 @item ctags
-Jumps to the source line associated with a ctags file entry in any buffer.
+Jump to the source line associated with a ctags file entry in any buffer.
 Ctags files are used by old editors like vi to lookup identifiers.
 Emacs uses the newer, more flexible Etags format.
 
@@ -2087,7 +2088,7 @@ Emacs uses the newer, more flexible Etags format.
 @cindex call tree, C
 @cindex C flow graph
 @item id-cflow
-Expands or collapses C call trees and jumps to code definitions.
+Expand or collapse C call trees and jump to code definitions.
 Requires cross-reference tables built by the external @code{cxref}
 program.
 
@@ -2097,13 +2098,21 @@ program.
 @cindex RFC
 @cindex table of contents
 @item rfc-toc
-Summarizes contents of an Internet rfc from anywhere within an rfc buffer.
+Summarize contents of an Internet rfc from anywhere within an rfc buffer.
 Each line of the summary may be selected to jump to the associated section.
 
+@findex ibtypes actions
+@cindex action implicit button
+@cindex functon call implicit button
+@cindex variable display implicit button
+@item action
+Execute an angle bracket delimited Hyperbole action, Elisp function call or
+display of an Elisp variable and its value.
+
 @findex ibtypes markdown-internal-link
 @cindex markdown link
 @item markdown-internal-link
-Displays any in-file Markdown link referent.  Pathnames and urls are
+Display any in-file Markdown link referent.  Pathnames and urls are
 handled elsewhere.
 
 @findex ibtypes git-reference
@@ -2111,7 +2120,7 @@ handled elsewhere.
 @cindex version control
 @vindex hibtypes-git-default-project
 @item git-reference
-Displays the git entity associated with REFERENCE and optional PROJECT.
+Display the git entity associated with REFERENCE and optional PROJECT.
 See @file{DEMO#Git (Local) References} for examples.
 
 REFERENCE is a string of one of the following forms:
@@ -2141,7 +2150,7 @@ value is provided, it defaults to the value of 
@code{hibtypes-git-default-projec
 @cindex git commit reference
 @cindex version control
 @item git-commit-reference
-Displays the diff for a git commit reference, e.g. commit a55e21, typically
+Display the diff for a git commit reference, e.g. commit a55e21, typically
 produced by git log.
 
 @findex ibtypes github-reference
@@ -2150,7 +2159,7 @@ produced by git log.
 @vindex hibtypes-github-default-project
 @vindex hibtypes-github-default-user
 @item github-reference
-Displays the Github entity associated with REFERENCE and optional USER and 
PROJECT.
+Display the Github entity associated with REFERENCE and optional USER and 
PROJECT.
 See @file{../DEMO#Github (Remote) References} for examples.
 
 REFERENCE is a string of one of the following forms:
@@ -2187,7 +2196,7 @@ PROJECT value is provided, it defaults to the value of
 @vindex hibtypes-gitlab-default-project
 @vindex hibtypes-gitlab-default-user
 @item gitlab-reference
-Displays the Gitlab entity associated with REFERENCE and optional USER and 
PROJECT.
+Display the Gitlab entity associated with REFERENCE and optional USER and 
PROJECT.
 See @file{../DEMO#Gitlab (Remote) References} for examples.
 
 REFERENCE is a string of one of the following forms:
@@ -2227,7 +2236,7 @@ PROJECT value is provided, it defaults to the value of
 @cindex social reference
 @vindex hibtypes-social-default-service
 @item social-reference
-Displays the web page associated with a social media hashtag or
+Display the web page associated with a social media hashtag or
 username reference at point.
 
 Reference format is:
@@ -2251,7 +2260,7 @@ twitter#hashtag.
 @item debbugs-gnu-mode
 Debbugs is a client-server issue tracker used by GNU free software
 projects, including Hyperbole, to manage issues and maintain threads
-of discussion around them.  You issues queries to a Debbugs server and
+of discussion around them.  You issue queries to a Debbugs server and
 it returns a listing entry for each matching issue.  When on a GNU
 Debbugs listing entry in @code{debbugs-gnu-mode}, an Action Key press
 displays the discussion of the selected issue; an Assist Key press
@@ -2275,7 +2284,7 @@ bug#id-number?attr1=val1&attr2=val2&attr3=val3
 
 @vindex file, hib-debbugs.el
 @noindent
-Note that @emph{issue} or @emph{debbugs} may be used as well in place
+Note that @emph{issue} or @emph{debbugs} may also be used in place
 of @emph{bug}.  See the documentation at the top of
 the @file{hib-debbugs.el} file for detailed query format information.
 
@@ -2283,7 +2292,7 @@ the @file{hib-debbugs.el} file for detailed query format 
information.
 @cindex bibliography
 @cindex reference
 @item annot-bib
-Displays annotated bibliography entries defined within the same buffer
+Display annotated bibliography entries defined within the same buffer
 as the reference.  References must be delimited by square brackets, must
 begin with a word constituent character, and must not be in buffers
 whose names begin with a ` ' or `*' character.
@@ -2294,7 +2303,7 @@ whose names begin with a ` ' or `*' character.
 @c @cindex identifier menu
 @c @cindex imenu
 @c @item imenu-item
-@c Displays the in-buffer definition of an identifier that point is within or 
after, else nil.
+@c Display the in-buffer definition of an identifier that point is within or 
after, else nil.
 @c This triggers only when imenu has already been used to generate an 
in-buffer item index.
 
 @findex ibtypes function-in-buffer
@@ -2302,7 +2311,7 @@ whose names begin with a ` ' or `*' character.
 @cindex function menu
 @cindex func-menu
 @item function-in-buffer
-Returns the function name defined within this buffer that point is
+Return the function name defined within this buffer that point is
 within or after, else @samp{nil}.  This triggers only when the
 func-menu library has been loaded and the current major mode is one
 handled by func-menu.
@@ -2312,7 +2321,7 @@ handled by func-menu.
 @cindex pathname, line and column
 @findex ibtypes pathname-line-and-column
 @item pathname-line-and-column
-Makes a valid pathname:line-num[:column-num] pattern display the path
+Make a valid pathname:line-num[:column-num] pattern display the path
 at line-num and optional column-num.  Also works for remote pathnames.
 
 @findex ibtypes pathname
@@ -2326,7 +2335,7 @@ at line-num and optional column-num.  Also works for 
remote pathnames.
 @cindex filename
 @cindex link, pathname
 @item pathname
-Makes a valid pathname display the path entry.  Also works for
+Make a valid pathname display the path entry.  Also works for
 delimited and non-delimited remote pathnames, Texinfo @@file@{@}
 entries, and hash-style link references to HTML, Markdown or Emacs
 outline headings, and MSWindows paths (see @file{$@{hyperb:dir@}/DEMO#POSIX
@@ -2378,7 +2387,7 @@ the Org mode standard binding of @bkbd{M-RET}, 
@code{org-meta-return}.
 @cindex online library
 @cindex document identifier
 @item doc-id
-Displays a document from a local document library given its id.  Ids must be
+Display a document from a local document library given its id.  Ids must be
 delimited by @code{doc-id-start} and @code{doc-id-end} and must match the
 function given by @code{doc-id-p}.  (Note that this implicit button type is
 not installed by default.  You must manually configure it and load it from
@@ -2458,131 +2467,132 @@ are:
 @table @code
 @findex actypes annot-bib
 @item annot-bib
-Follows an internal reference KEY within an annotated bibliography,
+Follow an internal reference KEY within an annotated bibliography,
 delimiters = [ ].
 
 @findex actypes completion
 @item completion
-Inserts a completion at point into the minibuffer or a buffer.
+Insert a completion at point into the minibuffer or a buffer.
 Unless point is at the end of buffer or if a completion has already been 
-inserted, in which case the completions window is deleted.
+inserted, in which case, delete the completions window.
+
+@findex actypes display-variable
+@item display-variable-value
+Display a message showing the given variable name and its value.
 
 @findex actypes eval-elisp
 @item eval-elisp
-Evaluates a Lisp expression LISP-EXPR.
+Evaluate a Lisp expression LISP-EXPR for its side-effects and return any 
non-nil value.
 
 @findex actypes exec-kbd-macro
 @item exec-kbd-macro
-Executes a KBD-MACRO REPEAT-COUNT times.  KBD-MACRO may be a string of
+Execute a KBD-MACRO REPEAT-COUNT times.  KBD-MACRO may be a string of
 editor command characters, a function symbol or nil to use the last
 defined keyboard macro.  Optional REPEAT-COUNT nil means execute once,
 zero means repeat until error.
 
 @findex actypes exec-shell-cmd
 @item exec-shell-cmd
-Executes a SHELL-CMD string asynchronously.  Optional non-nil second
+Execute a SHELL-CMD string asynchronously.  Optional non-nil second
 argument INTERNAL-CMD inhibits display of the shell command line
 executed.  Optional non-nil third argument KILL-PREV means kill the last
 output to the shell buffer before executing SHELL-CMD.
 
 @findex actypes exec-window-cmd
 @item exec-window-cmd
-Asynchronously executes an external window-based SHELL-CMD string.
+Asynchronously execute an external window-based SHELL-CMD string.
 
 @findex actypes function-in-buffer
 @item function-in-buffer
-Displays the definition of function NAME found at POS in the current buffer.
+Display the definition of function NAME found at POS in the current buffer.
 
 @findex actypes hyp-config
 @item hyp-config
-Inserts Hyperbole configuration and debugging information at the end
+Insert Hyperbole configuration and debugging information at the end
 of the current buffer or within optional OUT-BUF.
 
 @findex actypes hyp-request
 @item hyp-request
-Inserts help for composing a Hyperbole support/discussion message into
+Insert help for composing a Hyperbole support/discussion message into
 the current buffer or the optional OUT-BUF.
 
 @findex actypes hyp-source
 @item hyp-source
-Displays a buffer or file from a line beginning with
-@code{hbut:source-prefix}.
+Display a buffer or file from a line beginning with @code{hbut:source-prefix}.
 
 @findex actypes kbd-key
 @item kbd-key
-Executes the function binding for KEY-SEQUENCE, delimited by @{@}.
-Returns @samp{t} if a KEY-SEQUENCE has a binding, else @samp{nil}.
+Execute the function binding for KEY-SEQUENCE, delimited by @{@}.
+Return @samp{t} if a KEY-SEQUENCE has a binding, else @samp{nil}.
 
 @cindex link action types
 @findex actypes link-to-buffer-tmp
 @item link-to-buffer-tmp
-Displays a BUFFER.  This type of link generally can
-only be used within a single editor session.  Use @code{link-to-file}
-instead for a permanent link.
+Display a BUFFER.  This type of link is for use in  a single editor session.
+Use @code{link-to-file} instead for a permanent link.
 
 @findex actypes link-to-directory
 @item link-to-directory
-Displays a DIRECTORY in Dired mode.
+Display a DIRECTORY in Dired mode.
 
 @findex actypes link-to-doc
 @item link-to-doc
-Displays an online version of a document given by DOC-ID.  If the online
-version of a document is not found in @code{doc-id-indices}, an error is
-signalled.
+Display an online version of a document given by DOC-ID.  If the online
+version of a document is not found in @code{doc-id-indices}, signal an error.
 
 @findex actypes link-to-ebut
 @item link-to-ebut
-Performs an action given by an explicit button, specified by KEY and KEY-FILE.
+Perform an action given by an explicit button, specified by KEY and KEY-FILE.
 
 @findex actypes link-to-elisp-doc
 @item link-to-elisp-doc
-Displays the documentation for FUNC-SYMBOL.
+Display the documentation for FUNC-SYMBOL.
 
 @findex actypes link-to-file
 @item link-to-file
-Displays a file given by PATH scrolled to optional POINT.  If POINT is given,
-the buffer is displayed with POINT at the top of the window.
+Display a file given by PATH scrolled to optional POINT.  If POINT is given,
+display the buffer with POINT at the top of the window.
 
 @findex actypes link-to-file-line
 @item link-to-file-line
-Displays a file given by PATH scrolled to LINE-NUM.
+Display a file given by PATH scrolled to LINE-NUM.
 
 @findex actypes link-to-gbut
 @item link-to-gbut
-Performs an action given by an existing global button, specified by KEY.
+Perform an action given by an existing global button, specified by KEY.
 
 @findex actypes link-to-Info-index-item
 @item link-to-Info-index-item
-Displays an Info index ITEM cross-reference.
+Display an Info index ITEM cross-reference.
 ITEM must be a string of the form (filename)item-name.  During
 button creation, completion for both filename and item-name is
 available.  Filename may be given without the .info suffix."
 
 @findex actypes link-to-Info-node
 @item link-to-Info-node
-Displays an Info NODE.  NODE must be a string of the form
+Display an Info NODE.  NODE must be a string of the form
 (filename)nodename.  During button creation, completion for both
 filename and nodename is available.  Filename may be given without the
 .info suffix.
 
 @findex actypes link-to-ibut
 @item link-to-ibut
-Performs an action given by an implicit button, specified by KEY, optional 
KEY-FILE and POINT.
+Perform an action given by an implicit button, specified by KEY, optional 
KEY-FILE and POINT.
 
 @findex actypes link-to-kcell
 @findex kcell:ref-to-id
 @item link-to-kcell
-Displays a Hyperbole outline cell, given by FILE and CELL-REF, at the
+Display a Hyperbole outline cell, given by FILE and CELL-REF, at the
 top of a window.  See the documentation for @code{(kcell:ref-to-id)} for
 valid CELL-REF formats.
 
 @noindent
-If FILE is @samp{nil}, the current buffer is used.  If CELL-REF is
-@samp{nil}, the first cell in the view is shown.
+If FILE is @samp{nil}, use the current buffer.  If CELL-REF is
+@samp{nil}, show the first cell in the view.
 
 @findex actypes link-to-kotl
 @item link-to-kotl
-Displays at the top of a window the referent pointed to by LINK.
+Display at the top of a window the referent pointed to by LINK.
 LINK may be of any of the following forms, with or without delimiters:
 @example
   < pathname [, cell-ref] >
@@ -2596,38 +2606,38 @@ formats.
 
 @findex actypes link-to-mail
 @item link-to-mail
-Displays a mail message with MAIL-MSG-ID from optional MAIL-FILE.  See
+Display a mail message with MAIL-MSG-ID from optional MAIL-FILE.  See
 the documentation for the variable @code{hmail:init-function} for
 information on how to specify the mail reader to use.
 
 @findex actypes link-to-regexp-match
 @item link-to-regexp-match
-Finds REGEXP's Nth occurrence in SOURCE and displays the location at the
+Find REGEXP's Nth occurrence in SOURCE and display the location at the
 top of the selected window.  SOURCE is a pathname unless optional
 BUFFER-P is non-nil, then SOURCE must be a buffer name or buffer.
-Returns @samp{t} if found, signals an error if not.
+Return @samp{t} if found, signal an error if not.
 
 @findex actypes link-to-rfc
 @item link-to-rfc
-Retrieves and displays an Internet rfc given by RFC-NUM.  RFC-NUM may be
+Retrieve and display an Internet rfc given by RFC-NUM.  RFC-NUM may be
 a string or an integer.
 
 @findex actypes link-to-string-match
 @item link-to-string-match
-Finds STRING's Nth occurrence in SOURCE and displays the location at the
+Find STRING's Nth occurrence in SOURCE and display the location at the
 top of the selected window.  SOURCE is a pathname unless optional
 BUFFER-P is non-nil, then SOURCE must be a buffer name or buffer.
-Returns @samp{t} if found, @samp{nil} if not.
+Return @samp{t} if found, @samp{nil} if not.
 
 @findex actypes link-to-texinfo-node
 @item link-to-texinfo-node
-Displays the Texinfo node with NODENAME (a string) from the current buffer.
+Display the Texinfo node with NODENAME (a string) from the current buffer.
 
 @findex actypes link-to-web-search
 @cindex link, web search
 @cindex web search link
 @item link-to-web-search
-Searches web SERVICE-NAME for SEARCH-TERM.  Uses 
@code{hyperbole-web-search-alist}
+Search web SERVICE-NAME for SEARCH-TERM.  Uses 
@code{hyperbole-web-search-alist}
 to match each service to its search url.  Uses 
@code{hyperbole-web-search-browser-function}
 and the @code{browse-url} package to display search results.
 
@@ -2635,12 +2645,12 @@ and the @code{browse-url} package to display search 
results.
 @vindex hpath:display-where
 @cindex man page
 @item man-show
-Displays a man page on TOPIC, which may be of the form 
@samp{<command>(<section>}).
-Uses @code{hpath:display-where} setting to control where the man page is 
displayed.
+Display a man page on TOPIC, which may be of the form 
@samp{<command>(<section>}).
+Use @code{hpath:display-where} setting to control where the man page is 
displayed.
 
 @findex actypes rfc-toc
 @item rfc-toc
-Computes and displays a summary of an Internet rfc in BUF-NAME.  Assumes
+Compute and display a summary of an Internet rfc in BUF-NAME.  Assume
 point has already been moved to the start of the region to summarize.
 Optional OPOINT is the point to return to in BUF-NAME after displaying
 the summary.
@@ -2649,8 +2659,7 @@ the summary.
 @cindex table of contents
 @cindex toc action type
 @item text-toc
-Jumps to the text file SECTION referenced by a table of contents entry
-at point.
+Jump to the text file SECTION referenced by a table of contents entry at point.
 
 @findex actypes www-url
 @cindex URL
@@ -2658,7 +2667,7 @@ at point.
 @cindex WWW
 @vindex browse-url-browser-function
 @item www-url
-Follows a link given by a URL.  The variable,
+Follow a link given by a URL.  The variable,
 @code{browse-url-browser-function}, customizes the url browser
 that is used.  Valid values of this variable include
 @code{browse-url-default-browser} and @code{browse-url-generic}.
diff --git a/man/version.texi b/man/version.texi
index 53a68a0..886032f 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED August 18, 2019
+@set UPDATED August 26, 2019
 @set UPDATED-MONTH August 2019
-@set EDITION 7.0.3.3
-@set VERSION 7.0.3.3
+@set EDITION 7.0.4
+@set VERSION 7.0.4



reply via email to

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