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

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

[elpa] scratch/hyperbole-lexbind 6e555e7 20/20: Merge remote-tracking br


From: Stefan Monnier
Subject: [elpa] scratch/hyperbole-lexbind 6e555e7 20/20: Merge remote-tracking branch 'hyperbole/master' into externals/hyperbole
Date: Wed, 14 Aug 2019 04:30:25 -0400 (EDT)

branch: scratch/hyperbole-lexbind
commit 6e555e763567c66ad8e50724a7dd5e286dbb1e65
Merge: 98a5ecb 332ef33
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    Merge remote-tracking branch 'hyperbole/master' into externals/hyperbole
---
 .gitignore             |    2 +-
 Changes                |  552 ++++++++++++++++++++-
 DEMO                   |  236 ++++++---
 HY-ABOUT               |    5 +-
 HY-ANNOUNCE            |  207 ++++++++
 HY-NEWS                |  284 ++++++++++-
 HY-WHY.kotl            |   55 ++-
 MANIFEST               |    2 -
 Makefile               |   23 +-
 README.md              |   16 +-
 README.md.html         |   28 +-
 _config.yml            |    1 +
 _hypb                  |  Bin 2234 -> 4188 bytes
 hact.el                |    5 +-
 hactypes.el            |   62 ++-
 hargs.el               |   87 +++-
 hbdata.el              |   13 +-
 hbmap.el               |    2 +-
 hbut.el                | 1049 ++++++++++++++++++++++++++-------------
 hib-kbd.el             |  131 +++--
 hib-social.el          |  281 +++++++++--
 hibtypes.el            |  242 ++++++---
 hinit.el               |   21 +-
 hload-path.el          |    6 +-
 hmh.el                 |    2 +-
 hmouse-drv.el          |  243 +++++----
 hmouse-info.el         |   10 +-
 hmouse-key.el          |    4 +-
 hmouse-mod.el          |    2 +-
 hmouse-sh.el           |  351 ++++++-------
 hmouse-tag.el          |   45 +-
 hpath.el               |  495 +++++++++++++------
 hsettings.el           |   65 +--
 hsys-org.el            |  261 +++++++++-
 hsys-www.el            |    2 +-
 htz.el                 |   47 +-
 hui-em-but.el          |    6 +-
 hui-jmenu.el           |    7 +-
 hui-menu.el            |   19 +-
 hui-mini.el            |   47 +-
 hui-mouse.el           |   36 +-
 hui-select.el          |   33 +-
 hui-treemacs.el        |   63 +--
 hui-window.el          |   77 +--
 hui-xe-but.el          |  466 ------------------
 hui.el                 |  254 +++++++---
 hversion.el            |   20 +-
 hvm.el                 |    2 +-
 hypb.el                |  104 ++--
 hyperbole-pkg.el       |    8 -
 hyperbole.el           |   53 +-
 hyrolo-logic.el        |    2 +-
 hyrolo-menu.el         |   21 +-
 hyrolo.el              |   89 ++--
 hywconfig.el           |    8 +-
 kotl/kexport.el        |   14 +-
 kotl/kfill.el          |    9 +-
 kotl/kmenu.el          |   12 +-
 kotl/kotl-autoloads.el |   45 +-
 kotl/kotl-mode.el      |   44 +-
 kotl/kproperty.el      |    2 +-
 kotl/kview.el          |   58 +--
 kotl/kvspec.el         |   79 ++-
 man/hkey-help.txt      |    7 +-
 man/hyperbole.html     | 1277 ++++++++++++++++++++++++++++++------------------
 man/hyperbole.info     |  Bin 489710 -> 514598 bytes
 man/hyperbole.pdf      |  Bin 1263857 -> 1272682 bytes
 man/hyperbole.texi     |  676 +++++++++++++++++--------
 man/im/C-hh.png        |  Bin 898836 -> 737355 bytes
 man/im/wgrid4x3.png    |  Bin 0 -> 3854568 bytes
 man/version.texi       |    8 +-
 set.el                 |    2 +-
 smart-clib-sym         |   15 +-
 topwin.py              |    2 +-
 74 files changed, 5416 insertions(+), 2986 deletions(-)

diff --git a/.gitignore b/.gitignore
index 751c293..bc71d61 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,7 @@
 *-autoloads.el
 *-pkg.el
 
-# Copyright (C) 2016  Free Software Foundation, Inc.
+# Copyright (C) 2016-2019  Free Software Foundation, Inc.
 # See the "HY-COPY" file for license information.
 
 # This file is part of GNU Hyperbole.
diff --git a/Changes b/Changes
index c3e5d81..1a3004f 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,532 @@
+2019-08-06  Bob Weiner  <address@hidden>
+
+* hyrolo-menu.el (infodock-hyrolo-menu): Fixed Edit-Rolo to call a function 
rather than an sexp.
+
+2019-08-05  Bob Weiner  <address@hidden>
+
+* hypb.el (hypb:rgrep-command): Changed to use zgrep only when it is the BSD 
version,
+    since only that one supports the options needed by Hyperbole.
+
+2019-07-28  Bob Weiner  <address@hidden>
+
+* DEMO, man/hyperbole.texi (Implicit Button Type Summaries): Updated to 
expanded
+    Org mode support.
+
+* hib-kbd.el:
+  man/hyperbole.texi (Implicit Button Type Summaries, Glossary): Changed 
hib-kbd
+    key-sequence to key-series to indicate can be multiple key sequences.  
Added
+    def. to Glossary.
+                     (kbd-key:doc): Changed to call hkey-help rather than 
trigger
+    an error when key-series is not a single bound key sequence.
+
+2019-07-23  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Referent Display): Rewrote and added details on how the 
4 types
+    of referents are processed.
+
+2019-07-22  Bob Weiner  <address@hidden>
+
+* hargs.el (hargs:at-p): Added hbut support (ebut or ibut).
+
+* hui.el (hui:hbut-act): Generalized to handle both explicit and labeled 
implicit buttons.
+         (hui:ebut-act): Added and replaced use of hui:hbut-act in menus.
+
+* hbut.el (ebut:to, gbut:to, hbut:get): Added.
+
+2019-07-21  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Implicit Button Types): Split off type descriptions to 
this new
+    subsection and added these types: ripgrep-msg, ipython-stack-frame, 
link-to-ibut,
+    link-to-gbut, link-to-ebut.
+                     (Implicit Buttons): Added description and example of 
implicit button labels.
+                     (Glossary): Updated Implicit Button and Global Button 
entries with changes.
+  DEMO (Implicit Buttons): Added description and example of implicit button 
labels.
+                     (Action Types): link-to-gbut, link-to-ibut - Added.
+
+* hbut.el (gbut:act): Improved error message for implicit global buttons.
+
+* hui-menu.el (infodock-hyperbole-menu): Implicit-Button/Label - Added to add 
a label.
+    Implicit-Button/Rename - Added to rename the label of an implicit button.
+  hui-mini.el (hui:menus): Added Ibut/Label and Ibut/Rename.
+
+* hbut.el (hbut:key-to-label): Moved ebut:key-to-label body here and aliased 
that
+    function to this hbut one since is now used by ibut:key-to-label as well.
+          (hbut:label-to-key, hbut:key-src-set-buffer, hbut:key-src,
+           hbut:key-src-fmt, hbut:key-src): Same change.
+          (ibut:rename): Added and used in hui:ibut-rename.
+
+2019-07-18  Bob Weiner  <address@hidden>
+
+* hbut.el (ibut:label-separator): Added.
+
+2019-07-17  Bob Weiner  <address@hidden>
+
+* hbut.el (ibut:alist, ibut:list, ibut:map): Added.
+          (ebut:map): Moved body to hbut:map and called from ebut:map and 
ibut:map.
+    Removed start-delim and end-delim arguments in ebut:map.
+
+* hargs.el (hargs:at-p): Added support for reading ibutton labels.
+
+2019-07-16  Bob Weiner  <address@hidden>
+
+* hui.el (hui:ibut-label-create, hui:ibut-rename, hui:ibut-message): Added.
+
+2019-07-15  Bob Weiner  <address@hidden>
+
+* hibtypes.el (debugger-source): Handled Python tracebacks properly.
+
+2019-07-14  Bob Weiner  <address@hidden>
+
+* hibtypes.el (link-to-ebut, link-to-gbut, link-to-ibut):
+  hactypes.el (link-to-ibut):
+  hbut.el (ibut:to): Fixed small logic errors with lbl-keys and save-excursion 
in these functions.
+
+2019-07-13  Bob Weiner  <address@hidden>
+
+* hsys-org.el (hsys-org-set-ibut-label): Added and used in org-mode ibtype.
+              (org-mode, hsys-org-at-block-start-p): Added Action Key 
activation of Org blocks when
+    on 1st line of def.
+
+* hibtypes.el (link-to-gbut, glink:start, glink:end): Added for in-buffer 
links to global buttons.
+              (link-to-ebut, elink:start, elink:end): Added for in-buffer 
links to explicit buttons.
+              (link-to-ibut, ilink:start, ilink:end): Added for in-buffer 
links to implicit buttons.
+
+* hbut.el (ebut:label-p): Updated to better handle whether point is
+    between specified delimiters.
+
+2019-07-12  Bob Weiner  <address@hidden>
+
+* hbut.el (ebut:key-src-set-buffer, hbut:key-src-set-buffer, hbut:key-list,
+           hbut:ebut-key-list, hbut:ibut-key-list, hbut:label-list): Added
+    to allow selection of labeled Hyperbole buttons in currrent buffer by name.
+          (ibut:to): Added to move to an implicit button in the current buffer
+    matching a label key.
+
+2019-07-11  Bob Weiner  <address@hidden>
+
+* hargs.el (hargs:at-p): Added support for reading global button arguments.
+
+* hactypes.el (link-to-gbut): Updated to handle global labeled implicit 
buttons.
+
+* hbut.el (gbut:get): Added.
+
+2019-07-10  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Invisible Text Searches): Added missing {M-s i} key 
sequence.
+
+* hibtypes.el (Info-node): Modified to skip costly hpath:is-p if ref
+    string is not of the right format.
+              (hibtypes-path-line-and-col-regexp, pathname-line-and-column): 
Updated
+    to handle Elisp variables with colons.
+
+2019-07-09  Bob Weiner  <address@hidden>
+
+* hbut.el (ibut:at-p): Conditionalized on (not (hbut:outside-comment-p)).
+          (hbut:map, ibut:label-map): Added.
+         (ibut:key-src, ibut:key-to-label, ibut:label-to-key, ibut:summarize): 
Added.
+   Global, labeled implicit buttons now exist!
+
+2019-07-08  Bob Weiner  <address@hidden>
+
+* hbut.el (ibut:label-separator-regexp, hbut:outside-comment-p): Added doc
+for expanded Org mode reference handling.
+
+2019-07-01  Bob Weiner  <address@hidden>
+
+* hbut.el (gbut:ibut-key-list): Added.
+
+* hui.el (hui:hbut-term-highlight, hui:hbut-term-unhighlight): Fixed so 
save-excursion is outermost.
+
+2019-06-29  Bob Weiner  <address@hidden>
+
+* hbut.el (ebut:get, ebut:at-p, ebut:label-to-key, ibut:at-type-p): Simplified 
conditionals using 'when'.
+          (ibut:label-start, ibut:label-end, ibut:label-p, ibut:get,
+           ibut:next-occurrence, ibut:label-regexp): Added.
+          (hbut:label-regexp): Added to support labeled implicit buttons too.
+           (ebut:label-regexp): Aliased to hbut:label-regexp.
+          (hbut:label-p): Updated to handle implicit button labels.
+
+2019-06-23  Bob Weiner  <address@hidden>
+
+* hsys-org.el: Added many new predicates and code to handle navigation between 
Org
+    mode internal links and their targets, as well as radio target definitions 
and their links.
+    (hsys-org-mode-function, hsys-org-mode-p): Added to determine when 
hsys-org actions
+       are activated.
+
+* hypb.el (hypb:region-with-text-property-value): Added and used in 
hysy-org.el.
+
+* kotl/kfill.el (set-fill-prefix): Updated to better match standard Emacs 
functiion.
+
+2019-06-22  Bob Weiner  <address@hidden>
+
+* hyrolo.el (hyrolo-add): Fixed bug in call to match-string-no-properties.
+
+2019-06-21  Bob Weiner  <address@hidden>
+
+* kotl/kotl-mode.el (kotl-mode): Set fill-paragraph-function rather than 
overloading
+    fill-paragraph.
+  kotl/kfill.el (kfill:fill-paragraph): Renamed and used only in kotl-mode.  
Also
+    temporarily set fill-paragraph-handle-comment to t and made prefix arg 
optional.
+                (kfill:funcall): Removed.
+                (kfill:function-table): Removed.
+                (kfill:do-auto-fill): Temporarily set 
fill-paragraph-handle-comment to t.
+
+2019-06-20  Bob Weiner  <address@hidden>
+
+* hsys-org.el (org-link): Changed to call org-open-at-point which handles 
internal
+    org links, fixing following links such as radio targets.
+    (hsys-org-thing-at-p, hsys-org-target-at-p): Added.
+
+* hpath.el (hpath:texinfo-section-pattern): Added and used in 
hpath:to-markup-anchor to
+    jump to specific Texinfo sections.
+
+2019-06-19  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Referent Display): Added doc of 
hpath:native-image-suffixes.
+
+* hpath.el (hpath:find-program): Changed to prioritize 
hpath:native-image-suffixes over
+    hpath:internal-display-alist over hpath:external-display-alist-macos 
instead of the
+    reverse.  This prevents external viewers from being used when internal 
viewers are
+    also in effect.
+
+2019-06-18  Bob Weiner  <address@hidden>
+
+* hibtypes.el (grep-msg): Allowed for null char in place of first colon in 
colored grep output lines.
+
+2019-06-17  Bob Weiner  <address@hidden>
+
+* hactypes.el (link-to-gbut): Added.
+  hui.el (hui:link-possible-types): Added link-to-gbut.
+
+2019-06-16  Bob Weiner  <address@hidden>
+
+* hyrolo.el: Replaced buffer-substring-no-properties with 
match-string-no-properties where possible.
+             (hyrolo-entry-regexp): Changed to require whitespace following 
the entry prefix.
+             (hyrolo-entry-group-number): Added.
+
+2019-06-12  Bob Weiner  <address@hidden>
+
+* hib-kbd.el (kbd-key): Fixed preceding character test to not depend on the 
buffer's syntax table,
+    potentially missing kbd-key ibuts, notably ones using the universal 
argument.
+
+* hbut.el (ibut:at-type-p): Added to test if point is on a specific type of 
implicit button.
+
+* hib-kbd.el (kbd-key:normalize): Removed aggregation of C-u arguments into 
something like: C-u(16)
+    as this no longer works in current Emacs and causes an error.  Now this 
just stays as "C-u C-u".
+
+2019-06-11  Bob Weiner  <address@hidden>
+
+* hypb.el (hypb:format-quote): Modified to return non-string args as is rather 
than ignoring them so
+    this can be used across any argument set.  Used in hypb:error.
+
+2019-06-10  Bob Weiner  <address@hidden>
+
+* htz.el (htz:date-parse): Fixed bug, missing seconds in format 4 leading to 
invalid time strings saved
+    on MSWindows machines (and maybe more).  Allow for this in style 5 which 
is how Hyperbole stores dates.
+         (htz:time-make-string): Chop off any spurious digits at the right.
+
+* hactypes.el (link-to-ibut): Added.
+  hui.el (hui:link-possible-types): Added ibut:at-p call for link-to-ibut.
+
+2019-06-07  Bob Weiner  <address@hidden>
+
+* hibtypes.el (debugger-source): Added support for pytype package errors 
(close to Python pdb ones)
+
+2019-06-06  Bob Weiner  <address@hidden>
+
+* hpath.el (hpath:find): Removed file-relative-name from error calls
+    because does not work when current-directory and filename are on different
+    drives under Windows at least through Emacs 26.
+           (hpath:find): Fixed that default-directory was not set to current
+       button's location, so path was expanded relative to another
+       directory, notably in hpath:validate call.
+
+2019-06-05  Bob Weiner  <address@hidden>
+
+* hpath.el (hpath:is-p): Tightened remote-path check to prevent matches that 
end with :line-num or :col-num.
+
+2019-06-04  Bob Weiner  <address@hidden>
+
+* hactypes.el (annot-bib): Changed to find referent from the end of the buffer 
rather than beginning,
+    to avoid multiple earlier annot-bib buttons.
+* DEMO (Hyperbole Source Buttons): Changed example button from annot-bib to 
kbd-key.
+
+* kotl/kvspec.el (kvspec:hide-levels): Changed behavior so view updates to 
default level clipping when
+    'l' is excluded from the viewspec.
+
+2019-06-02  Bob Weiner  <address@hidden>
+
+* kotl/kvspec.el (kvspec:lines-to-show): Changed behavior so view updates to 
default cell clipping when
+    'c' is excluded from the viewspec.
+
+* kotl/kotl-mode.el (kotl-mode:show-all): Limited (kvspec:update t) call to 
interactive usage only.
+    When kotl-mode:show-all is called in kvspec:update-view, it doesn't 
overwrite the to be set viewspec.
+
+* kotl/kvspec.el (kvspec:show-lines-per-cell)
+                 (kvspec:show-lines-this-cell): Fixed viewspec 'c0' to expand 
visible cells properly.
+
+2019-06-01  Bob Weiner  <address@hidden>
+
+* hibtypes.el (ipython-stack-frame): Added to handle ipython stack traces and 
exceptions.
+
+2019-05-30  Bob Weiner  <address@hidden>
+
+* hyperbole.el (hkey-maybe-global-set-key): Fix missing no-add argument
+    to hkey-global-set-key call.
+
+2019-05-26  Bob Weiner  <address@hidden>
+
+* hui-mouse.el (hkey-alist): For Python files, use derived-mode-p and add
+    support for helm-pydoc buffers.
+
+==============================================================================
+V7.0.3a changes ^^^^:
+==============================================================================
+
+2019-05-11  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (External Viewers): Commented out reference to mailcap use
+    since it is presently not used (commented out in the code).
+
+* hpath.el (hpath:find): Fixed filename and path ordering error when
+    path contains a variable and a hash anchor.
+
+* DEMO (POSIX and MSWindows Paths): Added this section.
+* HY-WHY.kotl: Added a reference to that section.
+
+2019-05-09  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-drag-item):
+                (hmouse-click-to-drag-item): Added and thereby changed
+    {M-o i} to trigger an error if not on an item to drag.  This also prevent
+    Hyperbole explicit button creation from being invoked which can be
+    confusing to users.
+* DEMO (Displaying File and Buffer Items and Moving Buffers): Updated with
+    {M-o i} change.
+
+2019-05-07  Bob Weiner  <address@hidden>
+
+* hpath.el (hpath:directory-expand-alist: Added to store the reverse of
+    each WSL mount-point for when converting from mswindows-to-posix.  Set
+    in hpath:cache-mswindows-mount-points.
+           (hpath:cache-mswindows-mount-points): Downcase all mounted Windows 
paths.
+           (hpath:mswindows-path-posix-mount-alist): Added.
+
+2019-05-05  Bob Weiner  <address@hidden>
+
+* hmouse-tag.el (smart-jedi-find-file): Added.
+               (smart-python-jedi-to-definition-p): Improved to use
+    hpath:display-where to display target when possible, i.e. when the
+    emacs-jedi project accepts our pull-request that adds this feature.
+
+2019-04-22  Bob Weiner  <address@hidden>
+
+* hversion.el: Pushed BW changes for 7.0.2c test update.
+
+* hargs.el (hargs:delimited): Added exclude-regexp argument.
+* hpath.el (hpath:delimited-possible-path): Used above new argument
+   to prevent matching to strings that include string quotes.
+
+2019-04-21  Bob Weiner  <address@hidden>
+
+* man/hkey-help.txt: Added Company-mode and Treemacs entries.
+
+* hui-window.el (hmouse-alist-add-window-handlers): Renamed from 
hui-window--register.
+
+* man/hyperbole.texi (Smart Key - Company Mode): Added.
+
+2019-03-11  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Implicit Buttons, gitlab-reference):
+  DEMO (Gitlab (Remote) References): Added these sections.
+
+2019-02-16  Bob Weiner  <address@hidden>
+
+* hui-window.el (smart-window-of-coords): Handled null coords parameter.
+
+2019-02-10  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-drag-to): Fixed to match documentation that says will
+    create an explicit file link button if called anywhere other than on
+    a listing item.
+
+* hui-treemacs.el (smart-treemacs-modeline): Replaced old call of
+    treemacs-buffer-exists? with new calls to treemacs-current-visibility
+    and treemacs-get-local-buffer for Treemacs V2.
+
+2019-02-06  Bob Weiner  <address@hidden>
+
+* hibtypes.el (ripgrep-msg): Tightened match to ignore empty potential 
filenames
+    that matched when they were expanded to the current directory.
+
+2019-02-05  Bob Weiner  <address@hidden>
+
+* hmouse-tag.el (smart-lisp-mode-p): Removed change-log-mode.
+    (smart-lisp-at-change-log-tag-p): Added so can match
+      only to bound Elisp entities in change-log-mode with '-' in
+      the middle of their names to prevent false positives.
+  hui-mouse.el (hkey-alist): Added tightened change-log-mode handling.
+   man/hyperbole.texi (Smart Key - Lisp Source Code): Documented change.
+
+* hargs.el (hargs:delimited): Fixed that strings on lines with an odd number
+    of delimiters might fail to match.  Since strings can span lines but this
+    function matches only strings that start on the current line, when
+    start-delim and end-delim are the same and there are an odd number of
+    delimiters in the search range, assume point is within a
+    string and not between two other strings.
+    For example, with the following text and point within "DEMO", its path
+    previously was not found:
+      For each site, the links are properly maintained.  See "DEMO#Path
+      suffixes and Variables" and "DEMO#Path Prefixes".  "DEMO"
+
+* hui-treemacs.el: Deleted treemacs-mode from aw-ignored-buffers so can select
+    a Treemacs window via ace-window.
+
+2019-02-04  Bob Weiner  <address@hidden>
+
+* hui-mouse.el (smart-dired-assist): Prevented any region selection from
+    causing multiple files to be marked for deletion; we want to mark
+    only one.
+
+* hibtypes.el (annot-bib): Stopped this from activating when in org-mode to 
avert false positives.
+              (markdown-follow-inline-link-p, markdown-internal-link): Added 
ibut:label-set
+    to show a decent approximation of the button label when displaying help.
+
+2019-02-03  Bob Weiner  <address@hidden>
+
+* hversion.el: Pushed BW changes for 7.0.2b test update.
+
+* hui-treemacs.el (treemacs-quit): Defined if treemacs doesn't and used.
+
+2019-02-03  Mats Lidell  <address@hidden>
+
+* hui-treemacs.el (treemacs-version): Require v2 or higher.
+
+* hsettings.el (hyperbole-default-web-search-term-max-lines):
+               (hyperbole-default-web-search-term): Added.
+
+* hpath.el (hpath:tramp-file-name-regexp): Added and used in hpath:remote-at-p.
+
+2019-02-02  Bob Weiner  <address@hidden>
+
+* hsys-org.el (org-mode): Support derived modes too.
+
+2019-01-31  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Keyboard Drags): Added doc of {M-o r <window-id>},
+    replace selected window's buffer with that of another window.
+
+* man/hyperbole.texi (Keyboard Drags):
+  DEMO (Displaying File and Buffer Items and Moving Buffers):
+    Added doc of {M-o m <window-id>}, swap selected window's buffer with
+    that of <window-id>'s.
+
+2019-01-30  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-drag-to): Fixed to handle the case where it is
+    called but no drag has taken place, i.e. when invoked from the keyboard
+    via Ace Window.
+
+2019-01-29  Bob Weiner  <address@hidden>
+
+* hargs.el (hargs:buffer-substring): Added and used in hargs:delimited to
+    replace null char in colored grep output lines with a colon, so they are
+    handled properly by the implicit buttons.
+
+2019-01-27  Bob Weiner  <address@hidden>
+
+* hversion.el (hyperb:microsoft-os-p): Renamed to this.
+
+* hpath.el (hpath:cache-mswindows-mount-points):
+    Added and called when Hyperbole is initialized, mainly to allow access to
+    MSWindows network shares which would otherwise not be accessible as links
+    under POSIX systems.
+           (hypb:map-plist): Added to map over property lists.
+    Called in hpath:cache-mswindows-mount-points.
+
+2019-01-26  Bob Weiner  <address@hidden>
+
+* hversion.el (hyperb:wsl-os-p): Added to test for use of Microsoft WSL.
+
+* hpath.el (hpath:delimited-possible-path): Added optional include-positions 
parameter.
+
+2019-01-21  Bob Weiner  <address@hidden>
+
+* hpath.el (hpath:mswindows-mount-prefix, hpath:mswindows-drive-regexp, 
hpath:mswindows-path-regexp,
+    hpath:mswindows-to-posix, hpath:mswindows-to-posix-separators, 
hpath:posix-to-mswindows)
+    hpath:posix-to-mswindows-separators, hpath:posix-path-p,
+    hpath:substitute-posix-or-mswindows-at-point, 
hpath:substitute-posix-or-mswindows):
+      Added to handle MSWindows paths under POSIX OSes, e.g. Windows Subsystem 
for Linux.
+    (hpath:find-program): Commented out call to hpath:find-file-mailcap to 
prevent use of
+      MIME external viewers on text files.
+  hargs.el (hargs:delimited): Added call to hpath:mswindows-to-posix-path.
+  hyperbole.el (hyperb:init): Abbreviated MSWindows mount point paths.
+
+2017-12-29  Bob Weiner  <address@hidden>
+
+* hsettings.el (inhibit-hyperbole-messaging): Moved this from hyperbole.el to 
here to prevent
+    it being reset when hyperbole-toggle-messaging reloads the hyperbole 
library.
+
+2017-12-20  Bob Weiner  <address@hidden>
+
+* kotl/kexport.el (kexport:html-file-klink)
+                  (kexport:html):
+                  (kexport:html-replacement-alist): Added 'k' to precede klink 
HTML HREF
+    references since these must start with a letter.
+
+* hui-select.el (hui-select-get-region): Added this to be used in other 
libraries.
+                (hui-select-get-region-boundaries): Added and used in 
hui-select-thing.
+
+2017-12-19  Bob Weiner  <address@hidden>
+
+* hib-social.el (github-reference, gitlab-reference): Added "people" reference 
support
+    to list people who are part of a formal organization as well as a "staff" 
alias.
+    Added "contributors" reference support to list project contributors as 
well.
+
+2017-12-19  Bob Weiner  <address@hidden>
+
+* hib-social.el (github-reference): Added =item-id syntax.
+                (gitlab-reference): Added to support Gitlab references.
+
+2017-12-18  Bob Weiner  <address@hidden>
+
+* hib-social.el (github-reference): Fixed resolution of these formats of issue 
reference:
+    gh#gh-34 and gh#issue/34 (needed to be plural).
+
+2017-12-17  Bob Weiner  <address@hidden>
+
+* kotl/kfill.el: Eliminated use of filladapt.el since it causes kotl-mode 
filling errors.
+
+* kotl/kfill.el (kfill:forward-line): Removed improperly used [] in 
skip-chars-forward.
+
+2017-12-16  Bob Weiner  <address@hidden>
+
+* hui.el (hui:key-dir):
+  hui-window.el (hmouse-at-item-p):
+  hui-jmenu.el (hui-menu-buffer-mode-name): Simplified using 
buffer-local-value.
+
+2017-12-15  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-throw): Fully resolved temporary display of newly 
created frames
+    with a (redisplay t) to force display of any window updates during the 
temporary
+    display.
+
+2017-12-13  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-throw): Partially solved temporary display of newly 
created frames
+    (when not given focus initially with a '(no-focus-on-map . t) property), 
so hkey-throw
+    to a new target frame now temporarily displays the target frame and then 
makes the start
+    frame the uppermost frame.  When on an item though, the item is not 
visible during the
+    temporary display yet.
+
+* Makefile (texinfo): Added texinfo dependency target and added additional 
image dependencies
+    in man/im.
+
+* hyperbole.el (require 'hmouse-drv): Changed from hmouse-key to prevent a 
require cycle
+    during macro expansion.
+  hmouse-key.el: Changed requires to just be during compile since hyperbole.el 
now includes
+    these requires and will load hmouse-key.
+
 2017-12-12  Bob Weiner  <address@hidden>
 
 * hversion.el: Pushed 7.0.2a test update.
@@ -45,16 +574,13 @@
 
 * hypb.el (hypb:rgrep): Added support for ripgrep.
   hibtypes.el (ripgrep-msg): Added implicit button support for ripgrep (rg) 
messages where
-    the associated pathname is output once before all mataching lines.
+    the associated pathname is output once before all matching lines.
     See "https://github.com/BurntSushi/ripgrep";.
 
 2017-12-04  Bob Weiner  <address@hidden>
 
 * hmouse-drv.el (hmouse-alist): Reload the def of this variable if its value 
is null.
-    (hkey-mouse-click-to-replace): Added to allow moving buffers with the 
mouse by clicking
-       on the from and to windows.
-    (hmouse-click-to-drag, hmouse-click-to-drag-to, hmouse-click-to-replace, 
hmouse-click-to-throw,
-     hmouse-choose-windows): Added to perform cross-window drags, replacements 
and throws with 3 mouse
+    (hmouse-choose-windows): Added to perform cross-window drags, replacements 
and throws with 3 mouse
        clicks.
 
 2017-12-03  Bob Weiner  <address@hidden>
@@ -67,7 +593,7 @@
 * hmouse-drv.el (hkey-drag-stay, hkey-replace): Added for use as ace-window 
commands.
                 (hkey-throw): Rewrote so if not on an item, then throws the 
current buffer.
     hkey-replace is the inverse, it grabs the specified buffer and places it 
into the selected
-    window ({p} command key for ace-window).  hkey-drag-stay does a drag but 
leaves point
+    window ({r} command key for ace-window).  hkey-drag-stay does a drag but 
leaves point
     in the originally selected window.
                 (hmouse-click-to-drag, hmouse-click-to-drag-stay, 
hmouse-click-to-drag-to)
                  hmouse-click-to-replace, hmouse-click-to-swap, 
hmouse-click-to-throw): Added to click
@@ -115,7 +641,7 @@
 2017-11-27  Bob Weiner  <address@hidden>
 
 * hmouse-drv.el (hkey-ace-window-setup): Made new ace-window frames (window id 
= z) inherit the size
-    of the prior selected frame; same as HyWindow.
+    of the prior selected frame; same as HyControl.
 
 * hui-window.el (hmouse-kill-and-yank-region, hmouse-yank-region): Added 
select-frame-set-input-focus
     in case released in a different frame.
@@ -248,6 +774,9 @@ V7.0.1 changes ^^^^:
 
 * hversion.el: Updated to 7.0.0 for major release.
 
+* smart-clib-sym: Removed file-newer Perl script dependency.
+  file-newer: Removed.
+
 * Makefile (help): Removed misplaced double quote characters.
 
 * hui-window.el (hmouse-drag-window-side): Fixed coordinate error when drag 
release is outside of Emacs.
@@ -300,7 +829,7 @@ V7.0.1 changes ^^^^:
     location.  Also fixed edge cases where want to copy or move thing to the 
beginning or end of the thing region.
                 (hmouse-goto-region-point): Renamed to 
hmouse-goto-region-prev-point, for clarity.
                 (hmouse-kill-and-yank-region, hmouse-kill-region): Used value 
of point saved in hkey-value to determine
-    the region if non-nil. 
+    the region if non-nil.
 
 * hui-select.el (hui-select-delimited-thing, hui-select-thing): Changed to use 
use-region-p.
   hmouse-drv.el (hmouse-use-region-p): Added and used to improve 
hmouse-drag-thing.
@@ -1828,11 +2357,6 @@ V6.0.2 changes ^^^^:
   hibtypes.el (mail-address-at-p): Let case-fold-search be t since 
mail-addresses
     are case-insensitive.
 
-* Various Files: Small copyright fixes and formatting adjustments.
-    Replaced hyperb:xemacs-p with (featurep 'xemacs) for byte-compiler
-    optimization purposes and made small fixes throughout suggested by Stefan
-    Monnier.
-
 * hibtypes.el (mail-address-regexp): Simplified and modernized address matching
     to better distinguish from @username social media references.
               (mail-address-mode-list): Added lisp-interaction-mode and 
fundamental-mode.
@@ -2011,7 +2535,7 @@ V6.0.0 changes ^^^^:
 
 * hmouse-drv.el (hkey-help-hide): Changed to utilize quit-window function if 
*hkey-wconfig* is
     not set and made it interactive and an autoload so can replace quit-window 
in help buffers.
-                (quit-window): Overloaded this function form "window.el" to 
utilize *hkey-wconfig*
+                (quit-window): Overloaded this function from "window.el" to 
utilize *hkey-wconfig*
     when set.
   hui-mini.el (hui:menu-help): This fixed an issue where Hyperbole minibuffer 
menu item help window
     quit did not properly restore prior window configuration.
diff --git a/DEMO b/DEMO
index a8e650c..d72a6db 100644
--- a/DEMO
+++ b/DEMO
@@ -1,5 +1,7 @@
 * GNU Hyperbole Demonstration by Bob Weiner
 
+  Say thanks if you like Hyperbole: https://saythanks.io/to/rswgnu
+
     Table of Contents
     -----------------
     * Introduction
@@ -43,7 +45,7 @@ terms used here are unfamiliar to you.
 * Smart Keys 
 
 Hyperbole provides two context-sensitive keys, the Action Key and the Assist
-Key, jointly referred to as Smart Keys that each do dozens of things,
+Key, jointly referred to as Smart Keys.  Each do dozens of things,
 essentially whatever is most helpful in any given textual context where they
 are pressed.  The Action Key is {M-RET} (ESC RETURN if you are unsure) on the
 keyboard and the shift-middle mouse button on a 3-button mouse or the
@@ -53,7 +55,7 @@ To distinguish the mouse buttons from the keyboard keys, we 
will often refer
 to the Action Mouse Key or Assist Mouse Key.  (It is possible to rebind these
 keys to the unshifted middle and right mouse buttons, if desired.  See the
 Smart Key Bindings section of the Hyperbole Manual, "(hyperbole)Smart Key
-Bindings").
+Bindings") simply by pressing the Action Key on that reference.
 
 The Action Key selects entities, creates links and activates buttons.  The
 Assist Key provides help, such as reporting on a button's attributes, or
@@ -65,7 +67,7 @@ and returns here.
 
 See also the later section, <(Smart Mouse Keys)>.
 
-Now let's look at many of the things you can do with the Smart Keys.
+Now let's look at some of the things you can do with the Smart Keys.
 
 ** Table of Contents Browsing
 
@@ -94,9 +96,10 @@ following button and then practice scrolling: 
<(toggle-scroll-proportional)>.
 If you prefer the default proportional scrolling, click on the previous
 button again to restore it.
 
-If you always want windowful (non-proportional) scrolling, you'll have to
-add a setting of smart-scroll-proportional to your "~/.emacs" file after the
-point at which you load Hyperbole or else set it as part of
+If you always want windowful (non-proportional) scrolling, use the Emacs
+customize system to set it permanently.  Otherwise, you can set it manually
+by adding a setting of smart-scroll-proportional to your "~/.emacs" file
+after the point at which you load Hyperbole or else set it as part of
 hyperbole-init-hook, which executes whenever Hyperbole is loaded, e.g.:
 
    (add-to-list 'hyperbole-init-hook
@@ -139,7 +142,6 @@ You can change which browser is used with {C-h h c w}, the 
Cust/Web-Search
 menu.  Advanced users can change the search engines listed by editing the
 option, <(hyperbole-web-search-alist)>.
 
-
 ** Help Buffers
 
 Since the Smart Keys do so many things, it is helpful to see what they will
@@ -175,17 +177,17 @@ A unique feature of Hyperbole is the Koutliner; it is for 
outlining thoughts,
 developing requirements or listing tasks and hyperlinking them to other
 documents.
 
-The Hyperbole Koutliner produces structured, autonumbered documents composed
-of hierarchies of cells.  Each cell has two identifiers, a relative
-autonumber indicating its present position within the outline and a permanent
-identifier suitable for use within hyperlink references to the cell.
+The Hyperbole Koutliner produces multi-level, autonumbered hierarchies of
+cells.  Each cell has two identifiers, a relative autonumber indicating its
+present position within the outline and a permanent identifier suitable for
+use within hyperlink references to the cell.
 
 A demonstration of the Koutliner is found on the Hyperbole Kotl/Example menu
 entry.  {C-h h k e}, gives you an editable copy of Hyperbole's example
 Koutliner file.  This explains the Koutliner commands and lets you try them
 out as you learn.  Additional documentation can be found in
-"(hyperbole)Koutliner".  "(hyperbole)Koutliner Keys" summarizes in
-alphabetical order the Koutliner commands which are bound to keys.
+"(hyperbole)Koutliner".  "(hyperbole)Koutliner Keys" summarizes, in
+alphabetical order, the Koutliner commands which are bound to keys.
 
 
 * HyControl
@@ -253,15 +255,16 @@ the argument is used to adjust one dimension of the frame.
 The {@} command splits a frame into a grid of up to 9 rows by 9 columns of
 windows, showing a different buffer in each window, if available.  First
 let's expand our frame to full screen with the {.1 %} command and then show
-a 2 x 3 grid.  We can do multiple commands in one key sequence.  Press the
+a 2 x 3 grid.  We can do multiple commands in one 'key series'.  Press the
 action key here: {.1 % .23 @}.
 
 You can even write something like this to do the whole thing in one sequence.
 First, let's quit out of HyControl Frames mode with {q}.  Then go back to one
-window with {C-x 1}.  Now we can execute a single sequence from any buffer that
-creates our 2x3 window grid:  {C-h h s f  .1 %  .23 @  q}.  Pretty amazing,
-right?  You can separate each command by any number of spaces or even jam them
-all together: {C-hhsf.1%.23@q}.
+window with {C-x 1}.  Now we can execute a single sequence from any buffer
+that creates our 2x3 window grid: {C-h h s f .1 % .23 @ q}.  Pretty amazing,
+right?  You can separate each command by any number of spaces or even jam
+them all together: {C-hhsf.1%.23@q}.  Use SPC (separated by spaces) to
+include a space as part of the key series.
 
 A zero argument to the {@} command is special.  It means you want to display
 buffers with a particular major mode first, e.g. c-mode.  You will be
@@ -348,7 +351,7 @@ Action Key click on {C-x4r work RET} to search for all 
entries from Work
 Industries; then type {q} to quit from the HyRolo search results buffer.
 {C-x4r manager RET} finds all managers plus their staff across companies.
 {C-x4r Dunn,\ J RET} finds just that staffer.  Notice that you must quote the
-space with a backslash when including it in a key sequence search string or
+space with a backslash when including it in a key series search string or
 else the space will be removed; when just typing the same string
 interactively, don't add the backslash.
 
@@ -372,9 +375,9 @@ not             one                    Match entries 
without the arg
 =====================================================================
 
 So for example, {C-x4r (or smith dunn) RET} finds both the Smith and Dunn
-entries.  (Note that you do not need to backslash quote spaces within
+entries.  (Note that you do not need to quote spaces with backslashes within
 parentheses, square brackets, angle brackets or double quotes when used in
-key sequences).  To find any Managers and their staffers at HiHo Industries,
+key series).  To find any Managers and their staffers at HiHo Industries,
 use: {C-x4r (and manager hiho) RET}.  To find managers anywhere but at HiHo:
 {C-x4r (and manager (not hiho)) RET}.  Finally, this will find all people who
 are not managers at HiHo: {C-x4r (not (and manager hiho)) RET}.
@@ -399,32 +402,53 @@ command to return to this DEMO later.
 
 * Implicit Buttons
 
-An incredibly powerful feature of Hyperbole is known as implicit buttons,
-i.e. a specific format of text within a buffer that Hyperbole recognizes as a
-button and lets you activate.  Hyperbole recognizes these by context and does
-not require any specialized markup.
+Hyperbole can automatically turn your existing, unchanged text files into
+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).
+
+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
+embed an infinite number of buttons of that type within your text documents
+simply by typing them.  Let's look at some of these button types and how you
+can use them.
 
 Note that you must press a Smart Key on the first line of an implicit button
 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.
 
-Hyperbole has many built-in implicit button types, a number of which you will
-see here, and allows you to create your own.  Once a type is known, you can
-embed an infinite number of buttons of that type within your text simply by
-typing them.  Let's look at some of these button types and how you can use
-them.
+Individual implicit buttons may be labeled so that they may 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"
 
-** Key Sequence Buttons
+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}.
 
-Any Emacs key sequence delimited with curly braces is an implicit button.
-Press the Action Key with {C-u C-p} for example and the point should move
-four lines upward.  An Assist Key press on the key sequence displays the
-documentation for its command binding, i.e. what it does.  Key sequences
-together with the arguments their commands prompt for also may be given,
-e.g. {M-x apropos RET hyperbole RET}.  Click in the braces to try it out.
+Now let's explore some implicit button types.
 
-Hyperbole minibuffer menu items may also be activated as key sequences.  For
+** Key Series Buttons
+
+Any series of Emacs key sequences (or 'key series') delimited by curly
+braces is an implicit button.  Press the Action Key within {C-u C-p C-n C-e}
+for example and the point should move three lines upward and to the end of
+line.  An Assist Key press on the key series either displays the documentation
+for its command binding (if a single key sequence) or displays help for the
+implicit button, i.e. what it does.  Key series together with the
+arguments their commands prompt for, may also be given, e.g. {M-x apropos
+RET hyperbole RET}.  Click with the Action Mouse Key within the first line
+of this button to try it out.
+
+Hyperbole minibuffer menu items may also be activated as key series.  For
 example, {C-h h d i} displays the online browsable Info version of the
 Hyperbole Manual.  Press your Action Key between the braces to see it.  Once
 in the Info browser, use {s} to search for any topic throughout the manual.
@@ -436,14 +460,27 @@ demonstrations and tours with this and other implicit 
button types.
 
 ** Org Mode
 
-For users of Emacs Org mode, Hyperbole does a few things.  First, the
-Action Key will follow and execute links in Org mode files.  Second, when
-point is on an outline heading in Org mode, the Action Key cycles the view
-of the subtree at point and the Assist Key cycles the view of all headings
-in the buffer.  The Assist Key will also display help when pressed on an Org
-mode link.
+For users of Emacs Org mode, Hyperbole does quite a few things.
+
+First, the Action Key follows internal links in Org mode files.  When
+pressed on a link referent/target, the link definition is displayed,
+allowing two-way navigation between definitions and targets.
+
+Second, the Action Key follows Org mode external links.  The Assist Key
+displays help when pressed on an Org mode link.
+
+Third, within a radio target definition, the Action Key jumps to the first
+occurrence of an associated radio target.
+
+Fourth, when point is on an outline heading in Org mode, the Action Key
+cycles the view of the subtree at point and the Assist Key cycles the view
+of all headings in the buffer.
 
-In any other context besides the end of a line, the Action Key will invoke
+Fifth, with point on the first line of a code block definition, the Action
+Key executes the code block via the Org mode standard binding of {C-c C-c},
+(org-ctrl-c-ctrl-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).
 
 ** Implicit Path Links
@@ -486,7 +523,7 @@ headings preceded by asterisks rather than hash marks.  So 
to jump back to
 the Org Mode section in this file, press the Action Key on "#Org-Mode".
 
 HTML hash-links are case-sensitive; other hash-links are not.  Hash links
-typically use dashes in place of the spaces that referents may contain but if
+typically use dashes in place of the spaces that referents may contain, but if
 the link is enclosed in quotes, Hyperbole allows spaces to be used as well.
 In fact, it is best practice to always enclose hash-style links in quotes so
 Hyperbole can distinguish them from other similar looking constructs, such as
@@ -515,7 +552,7 @@ Thus an Action Key press on "simple.el", "hyperbole.info" 
or even
 
 Some file types require external programs to view them, such as pdf files.
 The function (hpath:get-external-display-alist) determines the file
-suffixes which should be viewed externally together with their associated
+suffixes which should be viewed externally, together with their associated
 viewer programs, on a per-frame, per window-system basis.  See its
 documentation for more details.  The association lists used by this
 function are stored in variables for each available window system:
@@ -585,6 +622,37 @@ you can also use paths of the form:
 
        ftp://ftp.gnu.org/pub/
 
+*** POSIX and MSWindows Paths
+
+Hyperbole recognizes standard POSIX paths as well as typical MSWindows
+paths (both local and network shares) and can convert an in-buffer
+path between POSIX and MSWindows formats multiple times, even paths
+involving mount points.  Hyperbole even recognizes the different ways
+paths are accessed when using Windows for GNU/Linux (WSL) atop
+MSWindows, where all of these reference the same directory:
+"c:/Users", "c:\Users", "/C/Users", "/c/Users", and "/mnt/c/Users".
+
+MSWindows paths may be used within links and implicit path buttons
+just like POSIX paths, whether running Emacs under a POSIX system or
+MSWindows.  If under POSIX, a remote MSWindows path must be accessed
+through a mount point to the network share.  Hyperbole caches such
+mount points when it is first loaded.  Use {M-x
+hpath:cache-mswindows-mount-points RET} to update them if more mounts
+are made later.
+
+{M-x hpath:substitute-posix-or-mswindows-at-point RET} toggles any
+path at point between POSIX and MSWindows styles.  Bind it to a key
+for rapid path transformations.
+
+The function, `hpath:substitute-posix-or-mswindows', does the same thing
+for properly quoted path strings, for example:
+  (hpath:substitute-posix-or-mswindows "C:\\Users") yields "/mnt/c/Users"
+and
+  (hpath:substitute-posix-or-mswindows "/c/Users") yields "c:\\Users".
+
+To convert pathnames in one direction only, use the
+`hpath:mswindows-to-posix' or `hpath:posix-to-mswindows' functions.
+
 ** Internet Request For Comments (RFC) Document Browsing
 
 With Tramp, you can also retrieve and browse RFC documents used in Internet
@@ -684,6 +752,46 @@ user, project and commit hash code are all included.  The 
second and
 third versions require the setup of default values, as explained in
 the commentary near the top of "hib-social.el".
 
+Similarly, the same file above explains how to link to pull requests,
+issues, branches and tags.
+
+** Gitlab (Remote) References
+
+For software developers who use Gitlab for publishing and version control,
+Gitlab links are similar to social media links but reference specific Gitlab
+web pages.  See "#Github (Remote) References" for the basic syntax of such
+links but substitute 'gl' instead of 'gh'.
+
+Gitlab offers many more types of reference links than Github, here they are:
+
+  gl#gitlab-org/gitlab-ce/activity          Summarize user's project activity
+  gl#gitlab-org/gitlab-ce/analytics         Display user project's 
cycle_analytics
+  gl#gitlab-org/gitlab-ce/boards            Display user project's kanban-type 
issue boards
+
+  Once you set the default user and project variables, you can leave
+  them off any reference links:
+
+    (setq hibtypes-gitlab-default-user "gitlab-org")
+    (setq hibtypes-gitlab-default-project "gitlab-ce")
+
+  gl#jobs                                   Display default project's 
computing jobs
+  gl#labels                                 Display default project's issue 
categories
+  gl#members                                Display default project's staff 
list
+  gl#contributors                           Show contributor push frequency 
charts
+  gl#merge_requests or gl#pulls             Display default project's pull 
requests
+  gl#milestones                             Display default project's 
milestones status
+  gl#pages                                  Display default project's web pages
+  gl#pipelines                              List build and test sequences
+  gl#pipeline_charts                        Graphical view of pipeline run 
results across time
+  gl#schedules                              Display schedules for project 
pipelines
+  gl#snippets                               Project snippets, diffs and text 
with discussion
+
+  gl#groups                                 List all available groups of 
projects
+  gl#projects                               List all available projects
+
+  gl#milestone=38                           Show a specific project milestone
+  gl#snippet/1689487                        Show a specific project snippet
+
 ** Git (Local) References
 
 Similarly, again for software developers, git references work on local
@@ -727,7 +835,7 @@ e.g. filter a file to just lines that don't match a pattern 
(RemoveLines).
 
 ** Annotated Bibliography Buttons
 
-Annotated Bibliography references such as [FSF 16] may be embedded in any file
+Annotated Bibliography references such as [FSF 19] may be embedded in any file
 and activated with the Action Key to find the reference at the end of the file.
 Try that one by pressing between the square brackets.
 
@@ -742,8 +850,9 @@ displayed.  Test this technique with a {C-x C-f} 
(find-file) and then a {?}.
 
 ** Hyperbole Source Buttons
 
-If you ask for help with the Assist Key or {C-u C-h A} from within the
-[FSF 16] button, the first line of the help buffer will look like this:
+If you ask for help with the Assist Key or {C-h A} from within this button,
+{M-x dired-other-window RET ~ RET}, the first line of the help buffer will
+look like this:
 
 @loc> "DEMO"
 
@@ -1136,7 +1245,7 @@ If you want a new window where you release (so the 
original destination window's
 buffer stays onscreen), just drag to a window's modeline; that window will be
 split before the buffer is displayed.
 
-*** Displaying File and Buffer Items
+*** Displaying File and Buffer Items and Moving Buffers
 
 You can do the same thing with items in dired, buffer menu and ibuffer menu
 listing buffers rather than buffers themselves.  Drag with the Action Mouse Key
@@ -1153,15 +1262,18 @@ made.  An Assist Key Drag will move the the item list 
buffer to the destination
 (swapping buffers), just as it does with other buffers.  Practice these drags 
as
 they will prove very beneficial across time.
 
-For even faster keyboard-based drag emulation, use the Emacs package 
'ace-window'
-(see "(hyperbole)Keyboard Drags" for setup).  Once this is configured, the
-leftmost character or two of each window's modeline will show the ID to type to
-use that window as the drag destination. Then whenever point is on an item you
-want displayed in another window, use M-o i <window-id> and watch the magic
-happen.  You can also use this to create explicit button links to other window
-buffers when in an editable buffer.  If you want to display multiple items in
-different windows, instead use the M-o t <window-id> key sequence to 
@emph{throw}
-the item to the window.
+For even faster keyboard-based drag emulation, use the Emacs package
+'ace-window' (see "(hyperbole)Keyboard Drags" for setup).  Once this is
+configured and the suggested M-o key binding is made, the leftmost character or
+two of each window's modeline will show the <window-id> to type to use that
+window as the drag destination. Then whenever point is on an item you want
+displayed in another window, use M-o i <window-id> and watch the magic happen.
+If you want to display multiple items in different windows, instead use the
+M-o t <window-id> key sequence to @emph{throw} each item to a different window,
+while leaving the same selected window.  To replace the selected window's
+buffer with that of another window, use M-o r <window-id>.  To instead swap the
+selected window's buffer with that of another window, use M-o m <window-id>.
+Try these commands out and they will speed your work.
 
 *** Cloning Windows
 
@@ -1273,7 +1385,7 @@ to dive deeper.  Read it online with the GNU Info reader 
at "(hyperbole)Top".
 
 * References
 
-[FSF 16] Free Software Foundation, Inc.  GNU Emacs Manual.  Free Software
-Foundation, Cambridge: MA, 2016.  "(emacs)Top"
+[FSF 19] Free Software Foundation, Inc.  GNU Emacs Manual.  Free Software
+Foundation, Cambridge: MA, 2019.  "(emacs)Top"
 
 * THE END
diff --git a/HY-ABOUT b/HY-ABOUT
index 0bf1893..e6331bd 100644
--- a/HY-ABOUT
+++ b/HY-ABOUT
@@ -3,7 +3,10 @@
                   Designed and Written by Bob Weiner
                Maintained by Mats Lidell and Bob Weiner
                 https://www.gnu.org/software/hyperbole/
-                            Version 7.0.2a
+                            Version 7.0.3b
+
+                   Say thanks if you like Hyperbole:
+                    https://saythanks.io/to/rswgnu
 
 GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is
 an efficient and programmable hypertextual information management
diff --git a/HY-ANNOUNCE b/HY-ANNOUNCE
index 7afa2a3..66feeb0 100644
--- a/HY-ANNOUNCE
+++ b/HY-ANNOUNCE
@@ -1,4 +1,211 @@
 ----------------------------------------------------------------------
+7.0.3 Announcement
+----------------------------------------------------------------------
+From: Bob Weiner <address@hidden>
+To: address@hidden, address@hidden, address@hidden, address@hidden, 
address@hidden
+Subject: GNU Hyperbole 7.0.3: link your world quickly and easily
+--text follows this line--
+========================================================================
+* Introduction
+========================================================================
+
+GNU Hyperbole 7.0.3 is released and ready for action.
+
+Hyperbole is an amazing hypertextual information management system
+that installs quickly and easily as an Emacs package.  It is part of
+GNU Elpa, the Emacs Lisp Package Archive.
+
+Hyperbole interlinks all your working information within Emacs for
+fast access and editing, not just within special modes.  An hour
+invested exploring Hyperbole's built-in interactive DEMO file will
+save you hundreds of hours in your future work.
+
+7.0.3 is a significant release with a number of interesting
+improvements.  What's new in this release is described here:
+
+   www.gnu.org/s/hyperbole/HY-NEWS.html
+
+Hyperbole is described here:
+
+   www.gnu.org/s/hyperbole
+
+For use cases, see:
+
+   www.gnu.org/s/hyperbole/HY-WHY.html
+
+For what users think about Hyperbole, see:
+
+  https://www.gnu.org/s/hyperbole/hyperbole.html#user-quotes
+
+Hyperbole can supplement and extend Org-mode's capabilities.  It adds
+many features not found elsewhere in Emacs, including Org mode, see:
+
+   www.emacswiki.org/emacs/Hyperbole
+
+Hyperbole includes its own easy-to-use hypertextual buttons and links
+that can be created without the need for any markup language.
+
+Hyperbole has an interactive demo to introduce you to its features as
+well as a detailed reference manual, as explained here:
+
+  https://www.gnu.org/s/hyperbole/hyperbole.html#invocation-and-doc
+
+========================================================================
+* Quick Reasons to Try Hyperbole
+========================================================================
+
+It contains:
+
+- the most flexible and easy-to-use hyperbuttons available, including
+  implicit buttons automatically recognized by context, e.g. stack
+  trace source line references.
+
+- the only Emacs outliner with full legal item numbering,
+  e.g. 1.4.2.6, and automatic permanent hyperlink anchors for every
+  item
+
+- the only free-form contact manager with full-text search for Emacs
+
+- rapid and precise window, frame and buffer placement on screen
+
+- an extensive menu of typed web searches, e.g. dictionary, wikipedia
+  and stackoverflow, plus convenient, fast file and line finding
+  functions
+
+- immediate execution of a series of key presses just by typing them
+  out.  For example, a M-RETURN press on: {C-x C-b C-s scratch RET
+  C-a} will find the first buffer menu item that contains 'scratch';
+  then leave point at the beginning of its line.  Build interactive
+  tutorials with this.
+
+
+========================================================================
+* The Magic of Implicit Buttons and the Action Key
+========================================================================
+
+For near instant gratification, try Hyperbole's 'implicit button'
+capabilities (hyper-buttons that Hyperbole gives you for free by
+recognizing all types of references embedded within text such as
+pathnames or error message lines).  Below are more complex examples to
+show the power; simpler ones can be found within the Hyperbole DEMO
+file.
+
+Implicit buttons are activated by pressing the Action Key, M-RETURN.
+Once Hyperbole is loaded in your Emacs, pressing M-RETURN on any of
+these examples *in virtually any buffer* will display the associated
+referent in a chosen window or frame, handling all variable
+substitution and full path resolution:
+
+    "find-func.el"                            Find this file whether gzipped 
or not
+                                              in the Emacs Lisp load-path
+
+    "${hyperb:dir}/HY-NEWS"                   Resolve variable, show Hyperbole 
news
+
+    "${PATH}/umask"                           Display a script somewhere in 
multi-dir PATH
+
+    "${hyperb:dir}/DEMO#Hyperbole Menus"      Org mode outline, Markdown, and 
HTML # refs
+
+    "(hyperbole)Menus"                        Texinfo and Info node links
+
+    "c:/Users", "c:\Users", "/C/Users", "/c/Users", and "/mnt/c/Users"
+                                            On Windows and Windows Subsystem 
for Linux,
+                                            Hyperbole recognizes all of these 
as the
+                                            same path and can translate 
between Windows
+                                            and POSIX path formats in both 
directions
+
+Git Links:
+    git#branches                              List branches in current 
repo/project
+    git#commits                               List and browse commits for 
current project
+    git#tags                                  List tags in current project
+
+    git#/hyperbole                            From any buffer, dired on the top
+                                              directory of the local hyperbole
+                                              project
+
+    git#/hyperbole/55a1f0 or                  From any buffer, display 
hyperbole
+    git#hyperbole/55a1f0                      local git commit diff
+
+
+Github Links:
+    gh@rswgnu                                 Display user's home page & 
projects
+
+    github#rswgnu/hyperbole                   Display user's project
+    gh#rswgnu/helm/global_mouse               Display user project's branch
+    gh#rswgnu/hyperbole/55a1f0                Display user project's commit 
diff
+
+Gitlab Links:
+    gitlab@seriyalexandrov                    Display user's home page
+    gl#gitlab-org/gitlab-ce/activity          Summarize user's project activity
+    gl#gitlab-org/gitlab-ce/analytics         Display user project's 
cycle_analytics
+    gl#gitlab-org/gitlab-ce/boards            Display user project's 
kanban-type issue boards
+
+Once you set the default user and project variables, you can leave them off 
any reference links:
+
+    (setq hibtypes-gitlab-default-user "gitlab-org")
+    (setq hibtypes-gitlab-default-project "gitlab-ce")
+
+    gl#issues or gl#list                      Display default project's issue 
list
+    gl#labels                                 Display default project's issue 
categories
+    gl#members                                Display default project's staff 
list
+    gl#contributors                           Show contributor push frequency 
charts
+    gl#merge_requests or gl#pulls             Display default project's pull 
requests
+    gl#milestones                             Display default project's 
milestones status
+    gl#pages                                  Display default project's web 
pages
+    gl#snippets                               Project snippets, diffs and text 
with discussion
+    gl#groups                                 List all available groups of 
projects
+    gl#projects                               List all available projects
+
+    gl#milestone=38                           Show a specific project milestone
+    gl#snippet/1689487                        Show a specific project snippet
+
+Even useful social media links:
+    tw#travel or twitter#travel               Display twitter hashtag matches
+    fb#technology                             Display facebook hashtag matches
+
+Hyperbole uses simple prefix characters with paths to make them executable:
+    "!/bin/date"                              Execute as a non-windowed 
program within a shell
+    "&/opt/X11/bin/xeyes"                     Execute as a windowed program;
+    "-find-func.el"                           Load/execute this Emacs Lisp 
library
+
+    File "/usr/lib/python3.7/ast.py", line 37, in parse
+                                              Jump to error/stack trace source
+
+    "/ftp:address@hidden:"             Tramp remote paths
+
+
+========================================================================
+* Try It - Installs or Uninstalls in a Minute
+========================================================================
+
+Hyperbole lets you concentrate more on your work.  Then as you grow
+with it across time, it helps speed your work across weeks and months.
+It installs in about a minute and can be uninstalled even faster if
+ever need be.  Give it a try.
+
+Hyperbole can boost your day-to-day productivity with Emacs and
+your ability to manage information stored across many different
+machines on the internet.
+
+Hyperbole can be installed like any other package with the Emacs
+package manager:
+
+   {M-x list-packages RET C-s hyperbole RET i x y}
+
+Then to invoke its menu:
+
+   {C-h h} or {M-x hyperbole RET}
+
+The best way to get a feel for many of its capabilities is to
+invoke the interactive DEMO and explore sections of interest:
+
+   {C-h h d d}
+
+Enjoy,
+
+The Hyperbole Team
+
+
+----------------------------------------------------------------------
 7.0.2 Announcement
 ----------------------------------------------------------------------
 From: Bob Weiner <address@hidden>
diff --git a/HY-NEWS b/HY-NEWS
index 2c9ef33..3971309 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -2,14 +2,267 @@
                                 by Bob Weiner
 
 ===========================================================================
+*                                   V7.0.3b
+===========================================================================
+
+  BUTTONS
+
+    - 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
+      global buttons file (personal button file).
+
+    - Link to Buttons: New implicit button types that link to button 
categories:
+        In Buffer Syntax                                 Implicit Button Type
+        
===========================================================================
+        <elink: explicit button label to link to>        link-to-ebut
+        <glink: global button label to link to>          link-to-gbut
+        <ilink: implicit button label to link to>        link-to-iut
+
+    - Other new implicit button types:
+        debugger-source: Jump to the source of errors from the Python pytype 
package
+        ipython-stack-frame: Jump to the source of ipython stack traces and 
exceptions
+
+
+  DOCUMENTATION
+
+    - Action Types: link-to-gbut, link-to-ibut - Added.
+
+    - hpath:native-image-suffixes: documented this setting for
+      controlling image types that Hyperbole displays within Emacs.
+
+    - Implicit Button Types: Split off type descriptions to this new
+      subsection and added these types: ripgrep-msg, ipython-stack-frame, 
link-to-ibut,
+      link-to-gbut, link-to-ebut.
+
+    - Implicit Buttons: Added description and example of implicit button 
labels.
+      DEMO (Implicit Buttons): Added description and example of implicit 
button labels.
+
+    - Glossary: Updated Implicit Button and Global Button entries with changes.
+
+
+  KOUTLINER
+
+    - When 'c' (clip to lines per cell) is omitted from a viewspec, clipping 
now changes to
+      whatever the default number of lines per cell is (typically, unlimited). 
 The same goes
+      for the 'l' spec (limit display to a certain level of cells).
+
+  MENUS
+
+    - Pulldown Menus:   Implicit-Button/Label: Added to add a label.
+                        Implicit-Button/Rename - Added to rename the label of 
an implicit button.
+
+    - Minibuffer Menus: hui-mini.el (hui:menus): Added Ibut/Label and 
Ibut/Rename.
+
+
+  ORG MOde
+
+    - Radio Targets and Links: Smart Keys now handle these.
+
+    - Links: Smart Keys handle both internal and external Org mode links.
+
+  PROGRAMMING
+
+    - ibut:at-type-p: Added to test if point is on a specific type of implicit 
button.
+
+    - hypb:region-with-text-property-value: Added and used in hysy-org.el.
+
+    - hsys-org-mode-function, hsys-org-mode-p: Added to determine when 
hsys-org actions
+      are activated.
+
+    - ebut:key-src-set-buffer, hbut:key-src-set-buffer, hbut:key-list,
+      hbut:ebut-key-list, hbut:ibut-key-list, hbut:label-list): Added
+      to allow selection of labeled Hyperbole buttons in currrent buffer by 
name.
+
+    - gbut:get, hbut:map, ibut:label-map, ibut:key-src, ibut:key-to-label, 
ibut:label-to-key,
+      hui:ebut-act, ibut:summarize, ibut:label-start, ibut:label-end, 
ibut:label-p, ibut:get,
+      hui:ibut-label-create, hui:ibut-rename, hui:ibut-message, ibut:alist, 
ibut:list, ibut:map,
+      ibut:next-occurrence, ibut:label-regexp, gbut:ibut-key-list, ebut:to, 
gbut:to, ibut:to,
+      ibut:label-separator, hbut:label-regexp, ibut:rename, hbut:get: Added to 
support labeled
+      implicit buttons and links to buttons.
+      hbut:label-p: Updated to handle implicit button labels.
+      ibut:label-separator-regexp, hbut:outside-comment-p: Added.
+
+    - link-to-gbut, glink:start, glink:end: Added for in-buffer links to 
global buttons.
+      link-to-ebut, elink:start, elink:end: Added for in-buffer links to 
explicit buttons.
+      link-to-ibut, ilink:start, ilink:end: Added for in-buffer links to 
implicit buttons.
+
+    - hsys-org-set-ibut-label: Added and used in org-mode ibtype.
+      org-mode, hsys-org-at-block-start-p: Added Action Key activation of Org 
blocks when
+      on 1st line of def.
+
+
+  SMART (ACTION AND ASSIST) KEYS
+
+    - hpath:find-program: Changed to prioritize hpath:native-image-suffixes 
over
+      hpath:internal-display-alist over hpath:external-display-alist-macos 
instead of the
+      reverse.  This prevents external viewers from being used when internal 
viewers are
+      also in effect.
+
+
+===========================================================================
+*                                   V7.0.3
+===========================================================================
+
+  ACE WINDOW PACKAGE INTEGRATION - fast window and buffer switching
+
+    - Selected Window Buffer Replace: Added the ability to 'replace' the
+      selected window's buffer with the buffer of another window.  Use
+      {M-o r <window-id>}.  To swap the buffers between the same two windows,
+      use {M-o m <window-id>.  See "(hyperbole)Keyboard Drags" for setup and
+      use instructions.
+
+    - New Frame Commands: Any of these M-o commands that involve two windows
+      can use a new frame as the target window by using a <window-id> of 'z'.
+      So, {M-o t z} throws the current buffer to a new frame with a single
+      window displaying that buffer.  The new frame will be the same size as
+      the prior frame to match the behavior of HyControl.
+
+    - Integrated Ace Window commands with Smart Key Drags and added commands
+      for use with the mouse that select Ace Window source and target windows
+      by clicking with the mouse: hmouse-click-to-drag,
+      hmouse-click-to-drag-stay, hmouse-click-to-drag-to,
+      hmouse-click-to-replace, hmouse-click-to-swap, hmouse-click-to-throw.
+
+    - {M-o i <window-id>} is now for use only when on a listing item such as
+      in Dired or Buffer Menu.  It no longer creates Hyperbole buttons in
+      non-item areas to avoid confusion.  Now it will just trigger an error
+      if not on a listing item.
+
+  SMART (ACTION AND ASSIST) KEYS
+
+    - MSWindows Paths: Hyperbole now recognizes typical MSWindows paths (both
+      local and remote shares) and can convert an in-buffer path between POSIX
+      and MSWindows formats multiple times, even paths involving mount points.
+      See "DEMO#POSIX and MSWindows Paths".
+
+      MSWindows paths may be used within links and implicit path
+      buttons just like POSIX paths, whether running Emacs under a POSIX
+      system or MSWindows.  If under POSIX, a remote MSWindows path must be
+      accessed through a mount point to the network share.  Hyperbole caches
+      such mount points when it is loaded.  Use {M-x
+      hpath:cache-mswindows-mount-points RET} to update them if more mounts
+      are made later.  See also the NEW COMMANDS section herein for how to
+      convert a path between POSIX and MSWindows formats.
+
+    - GitLab and Github Links: Added Gitlab implicit links with equivalent
+      functionality to those of Github.  Added "people" reference support to
+      list people who are part of a formal organization as well as a "staff"
+      alias.  Added "contributors" reference support to list project
+      contributors as well.  Improved Github implicit issue links: gh#gh-34
+      and gh#issue/34 now properly reference an issue in the current project.
+
+    - Ripgrep: Added new ripgrep-msg implicit button type which jumps
+      to the source referenced by ripgrep (rg) output.  By default,
+      ripgrep outputs pathnames only once before all matching lines
+      within that path.  Ripgrep may also be used with the Hyperbole
+      `hypb:rgrep' command by setting 'hypb:rgrep-command'.  See
+      "https://github.com/BurntSushi/ripgrep";.
+
+    - Markdown Mode: Smart Keys now support Markdown internal file link
+      references and navigation.
+
+    - Org Mode: When in an *Org Help* buffer, the Smart Keys now defer to
+      org-mode to handle jumps to its own locations for compatibility.
+      Similarly, in org-mode buffers when not on an org link or heading,
+      and the {M-RET} Action Key is pressed, Hyperbole defers to Org's
+      org-meta-return command.
+
+    - Drag-based Kill, Copy and Yank: Added support for dragging across
+      frames.
+
+    - Python Identifiers: If a Jedi server is running and the Action Key is
+      pressed on a Python identifier, Hyperbole will use Jedi to find the
+      definition even within nested module references, e.g. a.b.c.  Also
+      improved basic identifier definition finding.
+
+    - Company Mode Completion: Support for the Emacs company-mode completion
+      package.  An Action Key press on a company-mode completion item will
+      display the definition of that item and an Assist Key press will
+      display its documentation, if any.
+
+    - Treemacs Mode: Now supports standard Hyperbole end-of-line proportional
+      scrolling.
+
+    - ChangeLog Mode: Smart Keys now work on Emacs Lisp references in
+      changelogs.
+
+    - Improved String Matching: For lines that begin with part of a string
+      that started on another line, Hyperbole now presumes that point is
+      within a string rather than between two strings, even though the
+      delimiters on the line make this ambiguous.  This provides more
+      accurate string recognition.
+
+    - Improved Path Matching: For quote delimited paths, other quote marks
+      are excluded from matches, so if checking for a doubly quoted path,
+      single quotes are not allowed in the string.
+
+  HYCONTROL
+
+    - Help Buffer Quitting: If HyControl is active, normally {q} quits
+      it, but now if point is in an Emacs help buffer, {q} will quit
+      from the help buffer instead.  Use {Q} to quit from HyControl
+      unconditionally.
+
+  NEW COMMANDS
+
+    - Buffer Sliding:  Four new commands are available that can be
+      bound to things like control arrow keys: hkey-buffer-move-left,
+      hkey-buffer-move-right, hkey-buffer-move-down and
+      hkey-buffer-move-up.  Each one slides the current buffer one
+      window in the direction specified and all other buffers slide
+      around to match.
+
+    - MSWindows and POSIX Path Toggling: In "hpath.el", added
+      (hpath:substitute-posix-or-mswindows-at-point) and
+      (hpath:substitute-posix-or-mswindows) commands to toggle the
+      format of a path at point or in a string between POSIX and
+      MSWindows styles.
+
+  PROGRAMMING
+
+    - Added hypb:map-plist, equivalent to mapcar but maps over
+      key-value pairs in property lists (where the key and value are
+      individual elements in the list).
+
+    - In "hui-select.el", added functions to return info. on the
+      context-sensitive region that this library selects.
+      (hui-select-get-region) returns the region that would be
+      selected at point and (hui-select-get-region-boundaries)
+      returns a cons of the start and end position of the same region.
+
+    - In "hpath.el (hpath:delimited-possible-path), added optional
+      include-positions parameter which if non-nil, adds start and end
+      positions to returned value.
+
+    - In "hversion.el", added (hyperb:wsl-os-p) flag to test whether
+      Emacs is running under Microsoft Windows Subsystem for Linux (WSL)
+      since the system-type variable does not reflect this.
+
+  DOCUMENTATION
+
+    - Popup Menus: Documented how to invoke the Koutliner and
+      HyRolo popup menus in Emacs.  See "(hyperbole)Menu Commands".
+
+    - DEMO: Added sections:
+        "DEMO#Gitlab (Remote) References"
+        "DEMO#POSIX and MSWindows Paths"
+
+    - Updated Hyperbole Manual with new features.
+
+
+===========================================================================
 *                                   V7.0.2
 ===========================================================================
 
-    - Ace Window: Added the ability to 'throw' an item to a window while
-      leaving the selected window the same.  Use {M-o t <window-id>}.  This
-      works in Dired, Buffer Menu, iBuffer Menu and Treemacs modes and lets
-      you throw multiple items to multiple windows quickly.  See
-      "(hyperbole)Keyboard Drags" for setup and use instructions.
+  ACE WINDOW PACKAGE INTEGRATION
+
+    - Item Throws: Added the ability to 'throw' an item or a buffer to
+      a window while leaving the selected window the same.  Use {M-o t
+      <window-id>}.  This works in Dired, Buffer Menu, iBuffer Menu and
+      Treemacs modes and lets you throw multiple items to multiple windows
+      quickly.  See "(hyperbole)Keyboard Drags" for setup and use
+      instructions.
 
 ===========================================================================
 *                                   V7.0.1
@@ -149,7 +402,7 @@
       explicit buttons are highlighted with a special colored face or not.  By
       default, they are.
 
-    - Python PDB Backtraces: Action Key presses jump to the associated source
+    - Python Backtraces: Action Key presses jump to the associated source
       line.
 
     - Python Symbols: Action Key presses now look these up in any buffer whose
@@ -164,7 +417,7 @@
       source of any such lines.
 
     - Dired Quit: An Action Key press at the end of the first line in a Dired
-      buffer nows quit and execute requested actions, just as presses at the
+      buffer now quits and executes requested actions, just as presses at the
       end of the buffer do.
 
     - Image Thumbnail Browsing: See the Info manual section,
@@ -356,9 +609,6 @@
       new settings with {M-x hmouse-update-smart-keys RET}.  No need to reload
       or restart Hyperbole.
 
-    - Find Web: Added Find Web key binding entry to Hyperbole menus.  This key
-      displays the Hyperbole Web search menu.
-
     - Jump Thing: Added Jump Thing key binding entry to Hyperbole menus.  This
       key jumps between the start and end of a matching delimiter or tag pair.
 
@@ -736,7 +986,7 @@ are new in 2016 and you should look through them all.
       Implicit-Button menu.
 
     - On the Hyperbole Customize/Change-Key-Bindings menubar menu, renamed
-      these entries and added Mark-Think-Key.  Similar updates done to the
+      these entries and added Mark-Thing-Key.  Similar updates done to the
       minibuffer menu.
 
   MOUSE AND SMART KEY SUPPORT
@@ -755,7 +1005,7 @@ are new in 2016 and you should look through them all.
       help mode so you can page through it with SPC and DEL keys and then quit
       from it with {q}.
 
-    - A click of the Action Mouse Key within an inactive minibuffer menu
+    - A click of the Action Mouse Key within an inactive minibuffer window
       displays the Hyperbole minibuffer menu, allowing you to invoke menu
       entries with the mouse.  A click of the Assist Key in the same place
       displays the buffer, window and frame jump menu just as does a click
@@ -857,13 +1107,13 @@ are new in 2016 and you should look through them all.
     - Added missing {C-c C-i}/{C-c TAB} binding mentioned in the EXAMPLE.kotl
       file; sets cell attributes.
 
-    - {C=t} Transpose characters - Added error checks at the beginning of cells
+    - {C-t} Transpose characters - Added error checks at the beginning of cells
       and end of lines for times when there are not 2 chars to transpose.
 
   ROLO
   
     - Improved {M-s} interactive string searching for rolo match buffer 
strings.
-      Made {C-u M-s} to a regexp search for rolo match buffer strings.
+      Made {C-u M-s} do a regexp search for rolo match buffer strings.
 
     - Documented the {l} hyrolo-locate command in the Hyperbole manual.
 
@@ -1060,8 +1310,8 @@ are new in 2016 and you should look through them all.
 
   INSTALLATION
 
-    - Installation is greatly simplified.  A single emacs initialization line
-      of the form:  
+    - Hyperbole initialization is greatly simplified.  A single "~/.emacs"
+      line of the form:
 
         (require 'hyperbole (expand-file-name "hyperbole" "<HYPERBOLE-DIR>/")
 
@@ -1115,7 +1365,7 @@ are new in 2016 and you should look through them all.
       now begin with 'K'.  Some used to start with 'O'.  To edit the example
       Koutline, use {C-h h k e}.
 
-    - {C-c C-a}  - Show-all, expand all cells nihe current view.
+    - {C-c C-a}  - Show-all, expand all cells in the current view.
       {C-c C-o}  - Overview, show only first line of outline cells.
       {C-c C-t}  - Top-level, hide all cells below level 1 and show
                    only the first line of each level 1 cell.
diff --git a/HY-WHY.kotl b/HY-WHY.kotl
index d363ad5..c7e0769 100644
--- a/HY-WHY.kotl
+++ b/HY-WHY.kotl
@@ -20,25 +20,30 @@
       pressing on their names.  Hyperbole will automatically embed
       certain key variables in link pathnames so that as these links
       are moved from site to site and the variable values change at
-      each site, the links maintained properly.  See "DEMO#Path
+      each site, the links are properly maintained.  See "DEMO#Path
       Suffixes and Variables" and "DEMO#Path Prefixes".
 
-   5. Quickly search the web for targeted types of information such as
+   5. Automatically translate POSIX and MSWindows paths within buffers
+      or links to the right format for the current operating system,
+      eliminating the drudgery of converting backslashes to forward
+      slashes.  See "DEMO#POSIX and MSWindows Paths".
+
+   6. Quickly search the web for targeted types of information such as
       programming questions, code libraries, images, videos,
       locations, word definitions, wikipedia entries or even tweets.
       See "DEMO#Hyperbole Menus".
 
-   6. Embed social media hashtags and user names in any text files.
+   7. Embed social media hashtags and user names in any text files.
       Then jump to the associated web page in your favorite web
       browser with an Action Key press.  See "DEMO#Social Media
       Hashtags and Usernames".
 
-   7. Similarly, you can embed github and git object links in any
+   8. Similarly, you can embed github and git object links in any
       files with a simple syntax and Hyperbole will display the
       associated objects with an Action Key press.  See "DEMO#Github
       (Remote) References" and "DEMO#Git (Local) References".
 
-   8. Full-text search for any contact-related information across
+   9. Full-text search for any contact-related information across
       thousands of contacts in under a second.  The fastest contact
       manager you have ever used, with hierarchical entries so you can
       easily find everyone on a particular team or within an
@@ -46,33 +51,33 @@
       while still seeing name, phone number and email information.
       Edit entries with a single key press.  See "DEMO#HyRolo".
 
-   9. Select regions of structured text or source code and to copy or
+  10. Select regions of structured text or source code to copy or
       move them between buffers with a single mouse drag or two key
       presses.  These selectable things include: delimited pairs of
       (), @{@}, <>, [] and quote marks, source code functions, source
       code comments and matching tag pairs in HTML and SGML modes.
-      See "DEMO#Thing Selection".    
+      See "DEMO#Thing Selection".
 
-  10. Use the fantastic, auto-numbered Koutliner with per-item links
+  11. Use the fantastic, auto-numbered Koutliner with per-item links
       and rapidly changeable views.  See "DEMO#Koutliner".
 
-  11. Rapid control over what is displayed where in multiple windows
-      and frames with mouse drags and the Hyperbole HyControl system.
-      See "DEMO#HyControl".
+  12. Rapid control over what is displayed in each window and frame
+      with mouse drags and the Hyperbole HyControl system.  See
+      "DEMO#HyControl".
 
-    11a. Drag Buffer Menu, Dired or Treemacs items to other windows to
+    12a. Drag Buffer Menu, Dired or Treemacs items to other windows to
          display them wherever you want.  Integrate with the Ace
          Window package to `throw' items to specific windows with
          quick key sequences.  See "DEMO#Displaying File and Buffer
-         Items".
+         Items and Moving Buffers".
 
-    11b. Drag-and-drop text regions across Emacs frames.  See
-         "DEMO#Things".
+    12b. Drag-and-drop text regions across Emacs frames.  See
+         "DEMO#Thing Selection".
 
-    11c. Swap buffers in windows across frames with a mouse drag.
+    12c. Swap buffers in windows across frames with a mouse drag.
          See "DEMO#Swapping Buffers".
 
-    11d. With one command, rapidly create a grid of tiled windows
+    12d. With one command, rapidly create a grid of tiled windows
          displaying either selected buffers, buffers with a specific
          major mode or the most recently used buffer list, e.g.
          {63 C-c @} creates 6 rows, each with 3 columns of windows (18
@@ -82,22 +87,22 @@
          same above command to display them in a grid of windows.  See
          "DEMO#Windows Grid".
 
-    11e. Use a quick mouse key press to scroll any window line to the
+    12e. Use a quick mouse key press to scroll any window line to the
          top or bottom of a window, to see exactly what you want on
          screen.  See "DEMO#Smart Scrolling".
 
-    11f. Clone or tear off a window into its own frame with a quick
+    12f. Clone or tear off a window into its own frame with a quick
          mouse drag.  See "DEMO#Cloning Windows".
 
-    11g. Each frame can store a series of window configurations
+    12g. Each frame can store a series of window configurations
          (layouts) which support working with sets of buffers and
          rapidly moving among them.  See "DEMO#Window Configuration
          Drags".
 
-    11h. Easily adjust the height and width of windows and frames as
+    12h. Easily adjust the height and width of windows and frames as
          needed.  See "DEMO#Frame Commands".
 
-    11i. Quick clicks on different areas of a buffer's modeline will
+    12i. Quick clicks on different areas of a buffer's modeline will
          rotate through your working list of buffers, changing what
          each window displays.  A popup menu gives you quick access to
          Hyperbole commands plus frame, window and buffer selection
@@ -107,7 +112,7 @@
 
 
 "ben" ;; kvspec:current
-37 ;; id-counter
+38 ;; id-counter
 alpha ;; label-type
 4 ;; label-min-width
 ". " ;; label-separator
@@ -115,7 +120,7 @@ alpha ;; label-type
 
 ;; depth-first kcell attributes
 [[0
-  (creator "address@hidden" create-time "20171212:19:44:57" id-counter 37 file 
"/Users/bk/Dropbox/emacs/hyperbole/HY-WHY.kotl")]
+  (creator "address@hidden" create-time "20190512:130:33:52" id-counter 38 
file "/home/bob.weiner/Dropbox/emacs/hyperbole/HY-WHY.kotl")]
  [1
   (creator "address@hidden" create-time "20160524:15:04:17" no-fill t)]
  [17
@@ -124,6 +129,8 @@ alpha ;; label-type
   (creator "address@hidden" create-time "20171114:23:37:20" no-fill t)]
  [2
   (creator "address@hidden" create-time "20160524:15:04:24" no-fill t)]
+ [38
+  (creator "address@hidden" create-time "20190512:131:21:14" no-fill t)]
  [31
   (creator "address@hidden" create-time "20171114:23:18:01" no-fill t)]
  [33
diff --git a/MANIFEST b/MANIFEST
index 18ed3aa..9a4f19c 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -42,7 +42,6 @@ hui-mouse.el        - Use key or mouse key for many 
functions, e.g. GNU Hyperbol
 hui-select.el       - Select delimited or larger and larger syntax-driven 
regions in a buffer
 hui-treemacs.el     - Hyperbole Smart Key support for the Treemacs file 
manager package
 hui-window.el       - Smart Mouse Key window and modeline depress/release 
actions
-hui-xe-but.el       - XEmacs button highlighting and flashing support
 hui.el              - GNU Hyperbole button and hyperlink user interface
 
 --- APPLICATION PROGRAMMING INTERFACE ---
@@ -75,7 +74,6 @@ kotl/EXAMPLE.kotl   - Sample Koutline document explaining 
Koutliner features
 hgnus.el            - GNU Hyperbole buttons in news reader/poster: GNUS
 
 --- HYPERBOLE INTERNALS ---
-file-newer          - Perl script which returns 1 if file 1 is newer than file 
2
 hactypes.el         - Default action types for GNU Hyperbole
 hbdata.el           - GNU Hyperbole button attribute accessor functions
 hibtypes.el         - GNU Hyperbole default implicit button types
diff --git a/Makefile b/Makefile
index f42df35..968dd18 100644
--- a/Makefile
+++ b/Makefile
@@ -54,10 +54,10 @@
 
 # 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.2a
+HYPB_VERSION = 7.0.3b
 
 # Emacs executable used to byte-compile .el files into .elc's.
-# Possibilities include: emacs, infodock, xemacs, etc.
+# Possibilities include: emacs, infodock, etc.
 EMACS = \emacs
 
 # Site-specific Emacs Lisp libraries to load before byte-compiling any files
@@ -132,8 +132,7 @@ ELISP_TO_COMPILE = $(pkg_dir)/elc-${USER}
 # Libraries that must be pre-loaded before trying to byte-compile anything.
 PRELOADS = $(SITE_PRELOADS) -l ./hload-path.el -l ./hversion.el -l 
./hyperbole.el 
 
-# Compile in batch mode. Under Emacs and XEmacs, load
-# site-lisp/site-start.el, which may set load-path.
+# Compile in batch mode.  Load site-lisp/site-start.el, which may set 
load-path.
 BATCHFLAGS = -batch -Q
 
 # Directories other than the current directory in which to find files.
@@ -141,7 +140,7 @@ BATCHFLAGS = -batch -Q
 # explicitly to those files which need it.
 VPATH = kotl man
 
-EL_SRC = hui-em-but.el hui-xe-but.el
+EL_SRC = hui-em-but.el
 
 EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el hbmap.el hbut.el \
             hgnus.el hhist.el hib-debbugs.el hib-doc-id.el hib-kbd.el \
@@ -156,7 +155,7 @@ EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el 
hbmap.el hbut.el \
 EL_KOTL = kotl/kexport.el kotl/kfile.el kotl/kfill.el kotl/kimport.el 
kotl/klabel.el \
          kotl/klink.el kotl/kmenu.el kotl/knode.el kotl/kotl-mode.el \
           kotl/kcell.el kotl/kproperty.el kotl/kprop-em.el \
-         kotl/kprop-xe.el kotl/kview.el kotl/kvspec.el
+         kotl/kview.el kotl/kvspec.el
 
 ELC_COMPILE =  hactypes.elc hibtypes.elc hib-debbugs.elc hib-doc-id.elc 
hib-kbd.elc \
             hib-social.elc hact.elc \
@@ -171,11 +170,11 @@ ELC_COMPILE =  hactypes.elc hibtypes.elc hib-debbugs.elc 
hib-doc-id.elc hib-kbd.
 ELC_KOTL = kotl/kexport.elc kotl/kfile.elc kotl/kfill.elc kotl/kimport.elc 
kotl/klabel.elc \
           kotl/klink.elc kotl/kmenu.elc kotl/knode.elc kotl/kotl-mode.elc \
            kotl/kcell.elc kotl/kproperty.elc \
-          kotl/kprop-xe.elc kotl/kview.el kotl/kvspec.elc
+           kotl/kview.el kotl/kvspec.elc
 
 HYPERBOLE_FILES = dir hyperbole-pkg.el 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 
file-newer smart-clib-sym \
+       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 \
        $(man_dir)/hyperbole.texi $(man_dir)/hyperbole.css 
$(man_dir)/version.texi
 
@@ -256,16 +255,18 @@ version: doc
 # Build the Info, HTML and Postscript versions of the user manual and 
README.md.html.
 doc: info html pdf README.md.html
 
+TEXINFO_SRC = $(man_dir)/hyperbole.texi $(man_dir)/version.texi 
$(man_dir)/hkey-help.txt $(man_dir)/im/*.png
+
 info: $(man_dir)/hyperbole.info
-$(man_dir)/hyperbole.info: $(man_dir)/hyperbole.texi $(man_dir)/version.texi 
$(man_dir)/hkey-help.txt
+$(man_dir)/hyperbole.info: $(TEXINFO_SRC)
        cd $(man_dir) && $(TEXI2INFO) hyperbole.texi
 
 html: $(man_dir)/hyperbole.html
-$(man_dir)/hyperbole.html: $(man_dir)/hyperbole.texi $(man_dir)/version.texi 
$(man_dir)/hkey-help.txt $(man_dir)/hyperbole.css
+$(man_dir)/hyperbole.html: $(TEXINFO_SRC) $(man_dir)/hyperbole.css
        cd ${man_dir} && $(TEXI2HTML) hyperbole.texi
 
 pdf: $(man_dir)/hyperbole.pdf
-$(man_dir)/hyperbole.pdf: $(man_dir)/hyperbole.texi $(man_dir)/version.texi 
$(man_dir)/hkey-help.txt
+$(man_dir)/hyperbole.pdf: $(TEXINFO_SRC)
        cd $(man_dir) && $(TEXI2PDF) hyperbole.texi
 
 # github-markdown is an npm, installed with: npm install markdown-to-html -g
diff --git a/README.md b/README.md
index 21373a9..172b753 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,6 @@
-# GNU Hyperbole 7.0.2a - The Everyday Hypertextual Information Manager
+# GNU Hyperbole 7.0.3b - The Everyday Hypertextual Information Manager
+
+[Say thanks if you like Hyperbole.(https://saythanks.io/to/rswgnu)]
 
 <!-- START doctoc generated TOC -->
 **Table of Contents**
@@ -400,7 +402,7 @@ Typical Hyperbole applications include:
 
 See the [HY-ABOUT](HY-ABOUT) file for a description and overview of Hyperbole.
 
-See the [HY-NEWS](HY-ABOUT) file for a summary of new features in this release.
+See the [HY-NEWS](HY-NEWS) file for a summary of new features in this release.
 
 See the [INSTALL](INSTALL) file for installation and invocation instructions.
 
@@ -497,8 +499,16 @@ Keys).
   products I have ever come across.  It is certainly the one which has made
   the biggest improvement in my personal productivity.
 
+  My Hyperbole button file is my start page in Emacs.  It's a quickly
+  searchable index with links to countless resources.  We also have a
+  library of implicit buttons that enable rapid navigation from references
+  in our code to our issue tracking system, so clicking a reference like
+  Client6502 opens the relevant conversation.  Hyperbole provides a really
+  useful set of power tools.  If Emacs is your preferred productivity
+  environment, it's definitely worth getting familiar with it.
+
                         -- Chris Nuzum  
-                           Co-founder, Traction Software, Inc.
+                           Co-founder, Traction Softwarea, Inc.
 
 -------
 
diff --git a/README.md.html b/README.md.html
index 69f0f2b..e62461c 100644
--- a/README.md.html
+++ b/README.md.html
@@ -1,11 +1,12 @@
 <h1>
-<a 
id="user-content-gnu-hyperbole-702a---the-everyday-hypertextual-information-manager"
 class="anchor" 
href="#gnu-hyperbole-702a---the-everyday-hypertextual-information-manager" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>GNU Hyperbole 7.0.2 - The Everyday Hypertextual 
Information Manager</h1>
+<a 
id="user-content-gnu-hyperbole-703b---the-everyday-hypertextual-information-manager"
 class="anchor" 
href="#gnu-hyperbole-703b---the-everyday-hypertextual-information-manager" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>GNU Hyperbole 7.0.3b - The Everyday Hypertextual 
Information Manager</h1>
+<p>[Say thanks if you like Hyperbole.(<a href="https://saythanks.io/to/rswgnu"; 
rel="nofollow">https://saythanks.io/to/rswgnu</a>)]</p>
 
 <p><strong>Table of Contents</strong></p>
 <ul>
 <li><a href="#summary">Summary</a></li>
 <li><a href="#mailing-lists">Mailing Lists</a></li>
-<li><a href="#ftp-and-git">Ftp and Git Repository Downloads</a></li>
+<li><a href="#ftp-and-git-repository-downloads">Ftp and Git Repository 
Downloads</a></li>
 <li><a href="#installation">Installation</a></li>
 <li><a href="#invocation">Invocation</a></li>
 <li><a href="#hyperbole-components">Hyperbole Components</a></li>
@@ -18,7 +19,7 @@
 <li><a href="#why-was-hyperbole-developed">Why was Hyperbole 
developed?</a></li>
 </ul>
 
-<p><a href="man/im/hyperbole-cv.png" target="_blank"><img 
src="man/im/hyperbole-cv.png" alt="Hyperbole screenshot of the Koutliner, DEMO 
file and HyRolo" style="max-width:100%;"></a></p>
+<p><a href="man/im/hyperbole-cv.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/hyperbole-cv.png" alt="Hyperbole screenshot of the 
Koutliner, DEMO file and HyRolo" style="max-width:100%;"></a></p>
 <h2>
 <a id="user-content-summary" class="anchor" href="#summary" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Summary</h2>
 <p><code>GNU Hyperbole</code> (pronounced Ga-new Hi-per-bo-lee), or just 
<code>Hyperbole</code>,
@@ -163,7 +164,7 @@ menubar and {C-h h} will display a Hyperbole menu in the 
minibuffer for
 quick keyboard-based selection.</p>
 <p>You can invoke Hyperbole commands in one of three ways:</p>
 <p>use the Hyperbole menu on your menubar;</p>
-<p><a href="man/im/menu-hyperbole.png" target="_blank"><img 
src="man/im/menu-hyperbole.png" alt="Hyperbole Menubar Menu" 
style="max-width:100%;"></a></p>
+<p><a href="man/im/menu-hyperbole.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/menu-hyperbole.png" alt="Hyperbole Menubar Menu" 
style="max-width:100%;"></a></p>
 <p>type {C-h h} or {M-x hyperbole RET} to bring up the Hyperbole main menu
 in the minibuffer window, for fast keyboard or mouse-based selection;
 select an item from this menu by typing the item's first letter; use {q}
@@ -172,10 +173,10 @@ to quit from the menu.</p>
 a pathname to display the associated file or directory.</p>
 <p>Use {C-h h d d} for an interactive demonstration of standard Hyperbole
 button capabilities.</p>
-<p><a href="man/im/demo.png" target="_blank"><img src="man/im/demo.png" 
alt="Hyperbole screenshot of the DEMO" style="max-width:100%;"></a></p>
+<p><a href="man/im/demo.png" target="_blank" rel="noopener noreferrer"><img 
src="man/im/demo.png" alt="Hyperbole screenshot of the DEMO" 
style="max-width:100%;"></a></p>
 <p>{C-h h k e} offers an interactive demonstration of the Koutliner,
 Hyperbole's multi-level autonumbered hypertextual outliner.</p>
-<p><a href="man/im/koutliner.png" target="_blank"><img 
src="man/im/koutliner.png" alt="Hyperbole screenshot of the Koutliner" 
style="max-width:100%;"></a></p>
+<p><a href="man/im/koutliner.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/koutliner.png" alt="Hyperbole screenshot of the 
Koutliner" style="max-width:100%;"></a></p>
 <p>To try out HyControl, Hyperbole's interactive frame and window control
 system, use {C-h h s w} for window control or {C-h h s f} for frame
 control.  {t} switches between window and frame control once in one of
@@ -237,7 +238,7 @@ HyRolo, which anyone can use is also included.  It is easy 
to
 learn to use since it introduces only a few new mechanisms and
 has a menu interface, which may be operated from the keyboard or
 the mouse.</p>
-<p><a href="man/im/menu-rolo.png" target="_blank"><img 
src="man/im/menu-rolo.png" alt="HyRolo Menubar Menu" 
style="max-width:100%;"></a></p>
+<p><a href="man/im/menu-rolo.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/menu-rolo.png" alt="HyRolo Menubar Menu" 
style="max-width:100%;"></a></p>
 </li>
 <li>
 <p><strong>Screen Control</strong>: Hyperbole includes HyControl, the fastest,
@@ -384,7 +385,7 @@ their own links to archive entries.</p>
 <h2>
 <a id="user-content-files" class="anchor" href="#files" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Files</h2>
 <p>See the <a href="HY-ABOUT">HY-ABOUT</a> file for a description and overview 
of Hyperbole.</p>
-<p>See the <a href="HY-ABOUT">HY-NEWS</a> file for a summary of new features 
in this release.</p>
+<p>See the <a href="HY-NEWS">HY-NEWS</a> file for a summary of new features in 
this release.</p>
 <p>See the <a href="INSTALL">INSTALL</a> file for installation and invocation 
instructions.</p>
 <p>See the <a href="HY-COPY">HY-COPY</a> and <a href="COPYING">COPYING</a> 
files for license information.</p>
 <p>See the <a href="MANIFEST">MANIFEST</a> file for summaries of Hyperbole 
distribution files.</p>
@@ -439,7 +440,7 @@ Keys).</p>
 <hr>
 <p>One of the nicest things about Hyperbole is that it's available
 everywhere. Org-mode is a mode and its features are only available in
-Org files. For instance if you dropped into <code>eshell' or</code>ansi-term' 
and
+Org files. For instance if you dropped into <code>eshell' or </code>ansi-term' 
and
 did `ls', you can move point to any of the directory's contents, do M-RET
 (or Shift-Button2) and jump to that file.  And that's just one example.
 Note that this means that all Hyperbole functionality is available in
@@ -466,8 +467,15 @@ Emacs packages and incredibly useful set of core features. 
 I think that
 Hyperbole is one of the best designed and most easily extensible software
 products I have ever come across.  It is certainly the one which has made
 the biggest improvement in my personal productivity.</p>
+<p>My Hyperbole button file is my start page in Emacs.  It's a quickly
+searchable index with links to countless resources.  We also have a
+library of implicit buttons that enable rapid navigation from references
+in our code to our issue tracking system, so clicking a reference like
+Client6502 opens the relevant conversation.  Hyperbole provides a really
+useful set of power tools.  If Emacs is your preferred productivity
+environment, it's definitely worth getting familiar with it.</p>
 <pre><code>                    -- Chris Nuzum  
-                       Co-founder, Traction Software, Inc.
+                       Co-founder, Traction Softwarea, Inc.
 </code></pre>
 <hr>
 <p>I've found Hyperbole (in conjunction with XEmacs) to be very useful
diff --git a/_config.yml b/_config.yml
new file mode 100644
index 0000000..c419263
--- /dev/null
+++ b/_config.yml
@@ -0,0 +1 @@
+theme: jekyll-theme-cayman
\ No newline at end of file
diff --git a/_hypb b/_hypb
index a3c7217..65fd41d 100644
Binary files a/_hypb and b/_hypb differ
diff --git a/hact.el b/hact.el
index 67e79da..e765732 100644
--- a/hact.el
+++ b/hact.el
@@ -259,9 +259,10 @@ Other paths are simply expanded.  Non-path arguments are 
returned unchanged."
 ;;; ========================================================================
 
 (defmacro hact (&rest args)
-  "Performs action formed from rest of ARGS.
+  "Performs action formed from rest of ARGS and returns the result or acts as 
a no-op when testing implicit button type contexts.
 First arg may be a symbol or symbol name for either an action type or a
-function.  Runs `action-act-hook' before performing action."
+function.  Runs `action-act-hook' before performing action.
+The value of `hrule:action' determines what effect this has."
   (eval `(cons 'funcall (cons 'hrule:action ',args))))
 
 (defun    actype:act (actype &rest args)
diff --git a/hactypes.el b/hactypes.el
index bfe03fc..e082860 100644
--- a/hactypes.el
+++ b/hactypes.el
@@ -29,8 +29,8 @@
        (key-regexp (concat "^[*]*[ \t]*\\\[" (ebut:key-to-label key) "\\\]"))
        citation)
     (if (save-excursion
-         (goto-char (point-min))
-         (setq citation (re-search-forward key-regexp nil t)))
+         (goto-char (point-max))
+         (setq citation (re-search-backward key-regexp nil t)))
        (progn (hpath:display-buffer (current-buffer))
               (goto-char citation)
               (beginning-of-line))
@@ -250,7 +250,7 @@ Use `link-to-file' instead for a permanent link."
   (hpath:find directory))
 
 (defact link-to-ebut (key-file key)
-  "Performs action given by another explicit button, specified by KEY-FILE and 
KEY."
+  "Performs action given by an explicit button, specified by KEY-FILE and KEY."
   (interactive
    (let (but-file but-lbl)
      (while (cond ((setq but-file
@@ -272,11 +272,12 @@ Use `link-to-file' instead for a permanent link."
                                            nil nil nil 'ebut)))
               (beep))
             (ebut:label-to-key but-lbl)))))
-  (or (called-interactively-p 'interactive)
-      (setq key-file (hpath:validate (hpath:substitute-value key-file))))
+  (unless (called-interactively-p 'interactive)
+    (setq key-file (hpath:validate (hpath:substitute-value key-file))))
   (let ((but (ebut:get key (find-file-noselect key-file))))
     (if but (hbut:act but)
-      (hypb:error "(link-to-ebut): No button `%s' in `%s'." (ebut:key-to-label 
key)
+      (hypb:error "(link-to-ebut): No button `%s' in `%s'."
+                 (ebut:key-to-label key)
                  key-file))))
 
 (defact link-to-elisp-doc (symbol)
@@ -351,6 +352,24 @@ the window."
       (hpath:find-line path line-num))
     (move-to-column column-num)))
 
+(defact link-to-gbut (key)
+  "Performs an action given by an existing global button, specified by KEY."
+  (interactive
+   (let ((gbut-file (hpath:validate (hpath:substitute-value gbut:file)))
+        but-lbl)
+     (if (not (file-readable-p gbut-file))
+        (hypb:error "(link-to-gbut): You cannot read `%s'." gbut-file)
+       (list (progn
+              (find-file-noselect gbut-file)
+              (while (string-equal "" (setq but-lbl
+                                            (hargs:read-match
+                                             "Global button to link to: "
+                                             (mapcar 'list (gbut:label-list))
+                                             nil t nil 'gbut)))
+                (beep))
+              (hbut:label-to-key but-lbl))))))
+  (gbut:act (hbut:key-to-label key)))
+
 (defact link-to-Info-index-item (index-item)
   "Displays an Info index INDEX-ITEM cross-reference.
 INDEX-ITEM must be a string of the form \"(filename)item-name\".  During
@@ -373,6 +392,37 @@ available.  Filename may be given without the .info 
suffix."
       (id-info string)
     (hypb:error "(link-to-Info-node): Invalid Info node: `%s'" string)))
 
+(defact link-to-ibut (key &optional key-file point)
+  "Performs an action given by an implicit button, specified by KEY-FILE, KEY 
and optional POINT.
+When creating the button, point must be on the implicit button to which to link
+and its buffer must have a file attached."
+  (interactive
+   (let ((ibut-key (ibut:at-p t)))
+     (if (and ibut-key buffer-file-name)
+        (list ibut-key buffer-file-name (point))
+       ;; When not on an ibut and moddifying the link, use existing arguments
+       (if (and (boundp 'defaults) (listp defaults))
+          defaults
+        (list nil nil nil)))))
+  (if key-file
+      (or (called-interactively-p 'interactive)
+         (null key-file)
+         (setq key-file (hpath:validate (hpath:substitute-value key-file))))
+    (setq key-file buffer-file-name))
+  (let (but)
+    (save-excursion
+      (save-restriction
+       (when key-file
+         (set-buffer (find-file-noselect key-file)))
+       (widen)
+       (if (integerp point) (goto-char (min point (point-max))))
+       (setq but (ibut:to key))))
+    (if but
+       (hbut:act but)
+      (hypb:error "(link-to-ibut): No button `%s' in `%s'."
+                 (ibut:key-to-label key)
+                 (or key-file (buffer-name))))))
+
 (defact link-to-kcell (file cell-ref)
   "Displays FILE with kcell given by CELL-REF at window top.
 See documentation for `kcell:ref-to-id' for valid cell-ref formats.
diff --git a/hargs.el b/hargs.el
index 98ba9ad..dce7497 100644
--- a/hargs.el
+++ b/hargs.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    31-Oct-91 at 23:17:35
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -90,13 +90,23 @@ interactive form or takes no arguments."
             (action:path-args-rel
              (hargs:iform-read interactive-form modifying))))))
 
+(defun hargs:buffer-substring (start end)
+  (let ((string (buffer-substring-no-properties start end)))
+    ;; This may trigger on a colored grep-like output line which has
+    ;; an embedded null character with a display text property that
+    ;; displays it as a colon.  Since the display property is stripped
+    ;; here, convert the null character to a colon.
+    (subst-char-in-string ?\^@ ?: string t)))
+
 (defun hargs:delimited (start-delim end-delim
-                       &optional start-regexp-flag end-regexp-flag 
list-positions-flag)
-  "Returns a normalized, single line, delimited string that point is within, 
or nil.
+                       &optional start-regexp-flag end-regexp-flag
+                       list-positions-flag exclude-regexp)
+  "Returns a normalized, single line, delimited string that point is within 
the first line of, or nil.
 START-DELIM and END-DELIM are strings that specify the argument
 delimiters.  With optional START-REGEXP-FLAG non-nil, START-DELIM is
 treated as a regular expression.  END-REGEXP-FLAG is similar.
-With optional LIST-POSITIONS-FLAG, return list of (string-matched start-pos 
end pos)."
+With optional LIST-POSITIONS-FLAG, return list of (string-matched start-pos 
end-pos).
+With optional EXCLUDE-REGEXP, any matched string is ignored if it this regexp."
   (let* ((opoint (point))
         (limit (if start-regexp-flag opoint
                  (+ opoint (1- (length start-delim)))))
@@ -104,36 +114,57 @@ With optional LIST-POSITIONS-FLAG, return list of 
(string-matched start-pos end
                              'search-forward))
         (end-search-func (if end-regexp-flag 're-search-forward
                            'search-forward))
+        (count 0)
         start end)
     (save-excursion
       (beginning-of-line)
       (while (and (setq start (funcall start-search-func start-delim limit t))
+                 (setq count (1+ count))
                  (< (point) opoint)
                  ;; This is not to find the real end delimiter but to find
                  ;; end delimiters that precede the current argument and are
                  ;; therefore false matches, hence the search is limited to
                  ;; prior to the original point.
-                 (funcall end-search-func end-delim opoint t))
+                 (funcall end-search-func end-delim opoint t)
+                 (setq count (1+ count)))
        (setq start nil))
+      (when (and (not start) (> count 0) (evenp count) (string-equal 
start-delim end-delim))
+       ;; Since strings can span lines but this function matches only
+       ;; strings that start on the current line, when start-delim and
+       ;; end-delim are the same and there are an even number of
+       ;; delimiters in the search range, causing the end-delim
+       ;; search to match to what should probably be the start-delim,
+       ;; assume point is within a string and not between two other strings.
+       ;; RSW - 02/05/2019
+       (setq start (point)))
       (when start
        (forward-line 2)
        (setq limit (point))
        (goto-char opoint)
        (and (funcall end-search-func end-delim limit t)
             (setq end (match-beginning 0))
-            ;; Ignore any preceding backquote, e.g. when a double-quoted
-            ;; string is embedded within a doc string.
+            ;; Ignore any preceding backslash, e.g. when a double-quoted
+            ;; string is embedded within a doc string, except when
+            ;; the string starts with 2 backslashes or an MSWindows
+            ;; disk drive prefix, in which case the backslash is
+            ;; considered part of a pathname.
             (if (and (> end (point-min))
-                     (= (char-before end) ?\\))
+                     (= (char-before end) ?\\)
+                     (not (string-match (concat "\\(\\`[\\][\\]\\)\\|"
+                                                hpath:mswindows-mount-prefix)
+                                        (hargs:buffer-substring start end))))
                 (setq end (1- end))
               t)
             (< start end)
-            (let ((string (substring-no-properties
-                           (hypb:replace-match-string
-                            "[\n\r]\\s-*" (buffer-substring start end) " " 
t))))
-              (if list-positions-flag
-                  (list string start end)
-                string)))))))
+            (>= end opoint)
+            (let ((string (hargs:buffer-substring start end)))
+              (unless (and (stringp exclude-regexp) (string-match 
exclude-regexp string) )
+                (setq string (hypb:replace-match-string "[\n\r\f]\\s-*" string 
" " t))
+                (unless hyperb:microsoft-os-p
+                  (setq string (hpath:mswindows-to-posix string)))
+                (if list-positions-flag
+                    (list string start end)
+                  string))))))))
 
 (defun hargs:get (interactive-entry &optional default prior-arg)
   "Prompts for an argument, if need be, from INTERACTIVE-ENTRY, a string.
@@ -197,17 +228,13 @@ Optional DEFAULT-PROMPT is used to describe default 
value."
 
 (defun hargs:select-event-window ()
   "Select window, if any, that mouse was over during last event."
-  (if (featurep 'xemacs)
-      (if current-mouse-event
-         (select-window
-          (or (event-window current-mouse-event) (selected-window))))
-    (let ((window (posn-window (event-start last-command-event))))
-      (if (framep window)
-         (setq window (frame-selected-window window)))
-      (if (and (window-minibuffer-p window)
-              (not (minibuffer-window-active-p window)))
-         (error "Attempt to select inactive minibuffer window")
-       (select-window (or window (selected-window)))))))
+  (let ((window (posn-window (event-start last-command-event))))
+    (if (framep window)
+       (setq window (frame-selected-window window)))
+    (if (and (window-minibuffer-p window)
+            (not (minibuffer-window-active-p window)))
+       (error "Attempt to select inactive minibuffer window")
+      (select-window (or window (selected-window))))))
 
 (defun hargs:set-string-to-complete ()
   "Store the current minibuffer contents into `hargs:string-to-complete'."
@@ -293,7 +320,13 @@ Handles all of the interactive argument types that 
`hargs:iform-read' does."
                    (t 0)))))
        ((hargs:completion t))
        ((eq hargs:reading-p 'ebut) (ebut:label-p 'as-label))
-       ((ebut:label-p) nil)
+       ((eq hargs:reading-p 'ibut) (ibut:label-p 'as-label))
+       ((eq hargs:reading-p 'gbut)
+        (when (eq (current-buffer) (get-file-buffer gbut:file))
+          (hbut:label-p 'as-label)))
+       ((eq hargs:reading-p 'hbut) (or (ebut:label-p 'as-label)
+                                       (ibut:label-p 'as-label)))
+       ((hbut:label-p) nil)
        ((eq hargs:reading-p 'file)
         (cond ((derived-mode-p 'dired-mode)
                (let ((file (dired-get-filename nil t)))
@@ -490,7 +523,7 @@ See also documentation for `interactive'."
                  ;;   `@' means select window of last mouse event.
                  ;;
                  ;;   `^' means activate/deactivate mark depending on 
invocation thru shift translation
-                 ;;   See `this-command-keys-shift-translated' for somewhat of 
an explanation.
+                 ;;   See `this-command-keys-shift-translated' for an 
explanation.
                  ;;
                  ;;   `_' means keep region in same state (active or inactive)
                  ;;   after this command.  (XEmacs only.)
diff --git a/hbdata.el b/hbdata.el
index f1c2390..022c37c 100644
--- a/hbdata.el
+++ b/hbdata.el
@@ -115,8 +115,7 @@ Nil is returned when button has not beened modified."
   (let ((case-fold-search t) (src-matches) (src) (matches) (end))
     (goto-char (point-min))
     (while (re-search-forward "^\^L\n\"\\([^\"]+\\)\"" nil t)
-      (setq src (buffer-substring (match-beginning 1)
-                                 (match-end 1))
+      (setq src (match-string 1)
            matches nil)
       (save-excursion
        (setq end (if (re-search-forward "^\^L" nil t)
@@ -125,10 +124,7 @@ Nil is returned when button has not beened modified."
              (concat "^(\"\\(" (if partial "[^\"]*")
                      (regexp-quote (ebut:label-to-key label))
                      (if partial "[^\"]*") "\\)\"") nil t)
-       (setq matches (cons
-                      (buffer-substring (match-beginning 1)
-                                        (match-end 1))
-                      matches)))
+       (setq matches (cons (match-string 1) matches)))
       (if matches
          (setq src-matches (cons (cons src matches) src-matches)))
       (goto-char end))
@@ -220,7 +216,7 @@ class 'hbdata' to operate on the entry."
 
 (defun hbdata:instance-next (lbl-key)
   "Returns string for button instance number following LBL-KEY's.
-nil if LBL-KEY is nil."
+Nil if LBL-KEY is nil."
   (and lbl-key
        (if (string-match
            (concat (regexp-quote ebut:instance-sep) "[0-9]+$") lbl-key)
@@ -237,8 +233,7 @@ Takes arguments LBL-KEY, KEY-SRC and optional DIRECTORY."
   (hbdata:apply-entry
    (lambda () 
      (if (looking-at "[0-9]+")
-        (string-to-number (buffer-substring (match-beginning 0)
-                                            (match-end 0)))
+        (string-to-number (match-string 0))
        1))
    lbl-key key-src directory nil 'instance))
 
diff --git a/hbmap.el b/hbmap.el
index 085e888..baf0273 100644
--- a/hbmap.el
+++ b/hbmap.el
@@ -106,7 +106,7 @@ the error.  Optional NO-SAVE disables saving of the map 
after operation."
 ;;; ************************************************************************
 
 (defvar hbmap:dir-user
-  (if (and hyperb:microcruft-os-p
+  (if (and hyperb:microsoft-os-p
           (or (not (fboundp 'getenv))
               (not (getenv "HOME"))))
       "c:/_hyperb/" "~/.hyperb/")
diff --git a/hbut.el b/hbut.el
index 8198af7..cb4816b 100644
--- a/hbut.el
+++ b/hbut.el
@@ -33,8 +33,7 @@ Nil disables saving.")
 (defconst ebut:max-len 100
   "Maximum length of a hyper-button label.")
 
-
-(defun ebut:act (label)
+(defun    ebut:act (label)
   "Activates Hyperbole explicit button with LABEL from the current buffer."
   (interactive (list (hargs:read-match "Activate explicit button labeled: "
                                       (ebut:alist)
@@ -46,9 +45,9 @@ Nil disables saving.")
       (error "(ebut:act): No explicit button labeled: %s" label))))
 
 (defun    ebut:alist (&optional file)
-  "Returns alist with each element a list containing a button label.
-For use as a completion table.  Gets labels from optional FILE or current
-buffer."
+  "Returns alist of ebuts in FILE or the current buffer.
+Each element is a list of just an explicit button label.  For use
+as a completion table."
   (mapcar 'list (ebut:list file)))
 
 (defun    ebut:at-p (&optional start-delim end-delim)
@@ -57,7 +56,8 @@ Assumes point is within first line of button label, if at all.
 Optional START-DELIM and END-DELIM are strings that override default
 button delimiters."
   (let ((key (ebut:label-p nil start-delim end-delim)))
-    (and key (ebut:get key))))
+    (when key
+      (ebut:get key))))
 
 (defun    ebut:create (&optional but-sym)
   "Creates Hyperbole explicit button based on optional BUT-SYM.
@@ -95,60 +95,58 @@ Returns entry deleted (a list of attribute values) or nil."
 
 (defun    ebut:get (&optional lbl-key buffer key-src)
   "Returns explicit Hyperbole button symbol given by LBL-KEY and BUFFER.
-KEY-SRC is given when retrieving global buttons and is full source pathname.
+KEY-SRC is given when retrieving global buttons and is the full source 
pathname.
+
 Retrieves button data, converts into a button object and returns a symbol
 which references the button.
 
-All arguments are optional.  When none are given, returns symbol for
-button that point is within or nil.  BUFFER defaults to the current
+All arguments are optional.  When none are given, returns a symbol for
+the button that point is within or nil.  BUFFER defaults to the current
 buffer."
   (hattr:clear 'hbut:current)
   (save-excursion
     (let ((key-file) (key-dir) (but-data) (actype))
-      (or lbl-key (setq lbl-key (ebut:label-p)))
-      (if buffer
-         (if (bufferp buffer) (set-buffer buffer)
+      (unless lbl-key
+       (setq lbl-key (ebut:label-p)))
+      (when buffer
+         (if (bufferp buffer)
+             (set-buffer buffer)
            (error "(ebut:get): Invalid buffer argument: %s" buffer)))
-      (if key-src
-         nil
-       (if (equal lbl-key (ebut:label-p))
-           nil
+      (when (not key-src)
+       (when (not (equal lbl-key (ebut:label-p)))
          (goto-char (point-min))
          (ebut:next-occurrence lbl-key))
-       (if (setq key-src (ebut:key-src 'full))
-           ;; `ebut:key-src' sets current buffer to key-src buffer.
-           (setq buffer (current-buffer)))
-       )
-      (if (and (stringp lbl-key) key-src)
-         (progn
-           (if (stringp key-src)
-               (setq key-dir (file-name-directory key-src)
-                     key-file (file-name-nondirectory key-src)))
-           (setq but-data (and key-src
-                               (hbdata:get-entry lbl-key (or key-file key-src)
-                                                 key-dir)))
-           (if (null but-data)
-               nil
-             (hattr:set 'hbut:current 'lbl-key lbl-key)
-             (hattr:set 'hbut:current 'loc key-src)
-             (hattr:set 'hbut:current 'categ 'explicit)
-             (hattr:set 'hbut:current 'action nil)
-             (hattr:set 'hbut:current 'actype
-                        (intern (setq actype (hbdata:actype but-data))))
-             ;; Hyperbole V1 referent compatibility
-             (if (= (length actype) 2)
-                 (hattr:set 'hbut:current 'referent
-                            (hbdata:referent but-data)))
-             (hattr:set 'hbut:current 'args (hbdata:args but-data))
-             (hattr:set 'hbut:current 'creator (hbdata:creator but-data))
-             (hattr:set 'hbut:current
-                        'create-time (hbdata:create-time but-data))
-             (hattr:set 'hbut:current
-                        'modifier (hbdata:modifier but-data))
-             (hattr:set 'hbut:current
-                        'mod-time (hbdata:mod-time but-data))
-             'hbut:current)
-           )))))
+       (when (setq key-src (ebut:key-src 'full))
+         ;; `ebut:key-src' sets current buffer to key-src buffer.
+         (setq buffer (current-buffer))))
+      (when (and (stringp lbl-key) key-src)
+       (when (stringp key-src)
+         (setq key-dir (file-name-directory key-src)
+               key-file (file-name-nondirectory key-src)))
+       (setq but-data (and key-src
+                           (hbdata:get-entry lbl-key (or key-file key-src)
+                                             key-dir)))
+       (when but-data
+         (hattr:set 'hbut:current 'lbl-key lbl-key)
+         (hattr:set 'hbut:current 'loc key-src)
+         (hattr:set 'hbut:current 'categ 'explicit)
+         (hattr:set 'hbut:current 'action nil)
+         (hattr:set 'hbut:current 'actype
+                    (intern (setq actype (hbdata:actype but-data))))
+         ;; Hyperbole V1 referent compatibility
+         (if (= (length actype) 2)
+
+             (hattr:set 'hbut:current 'referent
+                        (hbdata:referent but-data)))
+         (hattr:set 'hbut:current 'args (hbdata:args but-data))
+         (hattr:set 'hbut:current 'creator (hbdata:creator but-data))
+         (hattr:set 'hbut:current
+                    'create-time (hbdata:create-time but-data))
+         (hattr:set 'hbut:current
+                    'modifier (hbdata:modifier but-data))
+         (hattr:set 'hbut:current
+                    'mod-time (hbdata:mod-time but-data))
+         'hbut:current)))))
 
 (defun    ebut:is-p (object)
   "Returns non-nil if OBJECT denotes an explicit Hyperbole button."
@@ -160,131 +158,40 @@ buffer."
   (and (stringp key) (stringp label)
        (equal key (downcase (ebut:label-to-key label)))))
 
-(defun    ebut:key-src (&optional full)
-  "Returns key source (usually unqualified) for current Hyperbole button.
-Also sets current buffer to key source.
-With optional FULL when source is a pathname, the full pathname is returned."
-  (let ((src (cond ((hmail:mode-is-p) (current-buffer))
-                  ;; If buffer represents the output of a document
-                  ;; formatter, e.g. an Info document produced from a
-                  ;; Texinfo source, then return the Texinfo source
-                  ;; file, for example.
-                  ((ebut:key-src-fmt))
-                  ;; Handle directory movement within `make' output.
-                  ((save-excursion
-                     (and (re-search-backward
-                           "^[a-z]*make[^a-z]+\\(Entering\\|Leaving\\) 
directory `\\([^']+\\)'" nil t)
-                          (string-equal "Entering"
-                                        (buffer-substring (match-beginning 1)
-                                                          (match-end 1)))))
-                   (let ((limit (match-end 2))
-                         ;; Latest working directory that `make' reported
-                         (wd (buffer-substring (match-beginning 2)
-                                               (match-end 2)))
-                         cd)
-                     ;; But another cd or pushd command may have been issued.
-                     ;; Return the closest directory from the make output.
-                     (if (re-search-backward
-                          "\\<\\(cd\\|pushd\\)\\s 
+[\"\']?\\([^;\"\'\n\r\^L\\]+\\)"
-                          limit t)
-                         (progn (setq cd (buffer-substring (match-beginning 2)
-                                                           (match-end 2)))
-                                ;; Eliminate any trailing whitespace.
-                                (setq cd (substring
-                                          cd 0 (string-match "\\s +\\'" cd)))
-                                (expand-file-name cd wd))
-                       wd)))
-                  (buffer-file-name
-                   (if full
-                       buffer-file-name
-                     (file-name-nondirectory buffer-file-name)))
-                  ;; Handle any preceding @loc hyp-source implicit button 
location references.
-                  ;; This is used in report buffers of explicit buttons, i.e. 
hui:hbut-report.
-                  ((save-excursion
-                     (save-restriction
-                       (widen)
-                       (end-of-visible-line)
-                       (if (and (search-backward hbut:source-prefix nil t)
-                                (or (memq (preceding-char) '(?\n ?\r))
-                                    (= (point) (point-min))))
-                           (hbut:source full)))))
-                  (t (current-buffer)))))
-    (cond ((null src) nil)
-         ((bufferp src)
-          (set-buffer src)
-          src)
-         ((file-directory-p src)
-          (file-name-as-directory src))
-         ((file-readable-p src)
-          (set-buffer (find-file-noselect src))
-          src)
-         ((file-readable-p (setq src (hpath:symlink-referent src)))
-          (set-buffer (find-file-noselect src))
-          src))))
-
-(defun    ebut:key-src-fmt ()
-  "Returns unformatted filename associated with formatted current buffer.
-This is used to obtain the source of explicit buttons for buffers that
-represent the output of particular document formatters."
-  (and (or (eq major-mode 'Info-mode)
-          (string-match "\\.info\\(-[0-9]+\\)?$" (buffer-name)))
-       (let ((src (and buffer-file-name
-                      (substring
-                       buffer-file-name
-                       0 (string-match "\\.[^.]+$" buffer-file-name)))))
-        (cond ((file-exists-p (concat src ".texi"))
-               (concat src ".texi"))
-              ((file-exists-p (concat src ".texinfo"))
-               (concat src ".texinfo"))
-              ((current-buffer))))))
-
-(defun    ebut:key-to-label (lbl-key)
-  "Unnormalizes LBL-KEY and returns a label string approximating actual label."
-  (if lbl-key
-      (let* ((pos 0) (len (length lbl-key)) (lbl) c)
-       (while (< pos len)
-         (setq c (aref lbl-key pos)
-               lbl (concat lbl 
-                           (if (eq c ?_)
-                               (if (or (= (1+ pos) len)
-                                       (not (eq (aref lbl-key (1+ pos)) ?_)))
-                                   " "
-                                 (setq pos (1+ pos))
-                                 "_")
-                             (char-to-string c)))
-               pos (1+ pos)))
-       lbl)))
+(defalias 'ebut:key-src            'hbut:key-src)
+(defalias 'ebut:key-src-set-buffer 'hbut:key-src-set-buffer)
+(defalias 'ebut:key-src-fmt        'hbut:key-src-fmt)
+(defalias 'ebut:key-to-label       'hbut:key-to-label)
 
 (defun    ebut:label-p (&optional as-label start-delim end-delim pos-flag 
two-lines-flag)
-  "Returns key for Hyperbole button label that point is within.
-Returns nil if not within a label.  Assumes point is within first line
-  of button label, if at all.
-All following arguments are optional.  If AS-LABEL is non-nil, label
-is returned rather than the key derived from the label.  START-DELIM
-and END-DELIM are strings that override default button delimiters.
-With POS-FLAG non-nil, returns list of label-or-key,
-but-start-position, but-end-position.  Positions include delimiters.
-With TWO-LINES-FLAG non-nil, constrains label search to two lines."
+  "Returns key for the Hyperbole explicit button label that point is within, 
else nil.
+Assumes point is within the first line of any button label.  All
+following arguments are optional.  If AS-LABEL is non-nil, label
+is returned rather than the key derived from the label.
+START-DELIM and END-DELIM are strings that override default
+button delimiters.  With POS-FLAG non-nil, returns list of
+label-or-key, but-start-position, but-end-position.  Positions
+include delimiters.  With TWO-LINES-FLAG non-nil, constrains
+label search to two lines."
   (let ((opoint (point))
-       (npoint)
        (quoted "\\(^\\|[^\\{]\\)")
-       (start)
        (ebut:max-len ebut:max-len)
-       lbl-key end but-start but-end)
-    (or start-delim (setq start-delim ebut:start))
-    (or end-delim (setq end-delim ebut:end))
-    (setq npoint (+ opoint (length start-delim)))
-    ;; Ensure label is not blank
+       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)))
+    ;; Ensure label is not blank and point is within matching delimiters
     (save-excursion
-      (beginning-of-line)
+      (forward-line 0)
       (while (and (progn
-                   (while (re-search-forward
-                           (concat quoted (regexp-quote start-delim))
-                           npoint t)
+                   (while (and (< (point) npoint)
+                               (re-search-forward (concat quoted start-regexp) 
npoint t))
                      (setq start t))
                    start)
-                 (re-search-forward (concat "[^\\{]" (regexp-quote end-delim))
-                                    npoint t))
+                 (< (point) opoint)
+                 (re-search-forward (concat "[^\\{]" end-regexp) opoint t))
        (setq start nil))
       (when start
        (setq start (point)
@@ -302,124 +209,51 @@ With TWO-LINES-FLAG non-nil, constrains label search to 
two lines."
            (forward-line 2)
            (setq ebut:max-len (- (point) start))))
        (and (< (point) (+ start ebut:max-len))
-            (re-search-forward (concat quoted (regexp-quote end-delim))
-                               (+ start ebut:max-len) t)
+            (re-search-forward (concat quoted end-regexp) (+ start 
ebut:max-len) t)
             (setq but-end (point)
                   end (- (point) (length end-delim))
-                  lbl-key (ebut:label-to-key (buffer-substring start end)))
+                  lbl-key (ebut:label-to-key (buffer-substring-no-properties 
start end)))
             (cond (pos-flag
                    (if as-label
                        (list (ebut:key-to-label lbl-key) but-start but-end)
                      (list lbl-key but-start but-end)))
                   (t (if as-label (ebut:key-to-label lbl-key) lbl-key))))))))
 
-(defun    ebut:label-regexp (lbl-key &optional no-delim)
-  "Unnormalizes LBL-KEY.  Returns regular expr matching delimited but label.
-Optional NO-DELIM leaves off delimiters and leading and trailing space."
-  (if lbl-key
-      (let* ((pos 0)
-            (len (length lbl-key))
-            (c)
-            (sep0 "[ \t\n\r]*")
-            (sep "[ \t\n\r]+")
-            (regexp (if no-delim "" (concat (regexp-quote ebut:start) sep0)))
-            (case-fold-search))
-       (while (< pos len)
-         (setq c (aref lbl-key pos)
-               regexp (concat regexp 
-                              (if (eq c ?_)
-                                  (if (or (= (1+ pos) len)
-                                          (not (eq (aref lbl-key (1+ pos)) 
?_)))
-                                      sep
-                                    (setq pos (1+ pos))
-                                    "_")
-                                (regexp-quote (char-to-string c))))
-               pos (1+ pos)))
-       (if no-delim regexp 
-         (setq regexp (concat regexp sep0 (regexp-quote ebut:end)))))))
+(defalias 'ebut:label-regexp 'hbut:label-regexp)
 
-(defun    ebut:label-to-key (label)
-  "Normalizes LABEL for use as a Hyperbole button key and returns key.
-Eliminates any fill prefix in the middle of the label, replaces `_' with
-`__', removes leading and trailing whitespace and replaces each other
-whitespace sequence with `_'."
-  (if (null label)
-      nil
-    (setq label (hbut:fill-prefix-remove label)
-         ;; Remove leading and trailing space.
-         label (hypb:replace-match-string "\\`[ \t\n\r]+\\|[ \t\n\r]+\\'"
-                                          label "" t)
-         label (hypb:replace-match-string "_" label "__" t))
-    (hypb:replace-match-string "[ \t\n\r]+" label "_" t)))
+(defalias 'ebut:label-to-key 'hbut:label-to-key)
 
 (defun    ebut:list (&optional file loc-p)
-  "Returns list of button labels from given FILE or current buffer.
+  "Returns list of button labels from in FILE or the current buffer.
 Removes duplicate labels if optional LOC-P is omitted.  With LOC-P, returns
 list of elements (label start end) where start and end are the buffer
-positions at which the starting button delimiter begins and ends."
+positions at which the button delimiter begins and ends."
   (interactive)
   (setq file (if file (and (file-exists-p file) (find-file-noselect file))
               (current-buffer)))
-  (if file
-      (progn
-       (set-buffer file)
-       (let ((buts (ebut:map (if loc-p
-                                 (lambda (lbl start end)
-                                   ;; Normalize label spacing
-                                   (list (ebut:key-to-label
-                                          (ebut:label-to-key lbl))
-                                         start end))
-                               (lambda (lbl start end)
-                                 ;; Normalize label spacing
-                                 (ebut:key-to-label
-                                  (ebut:label-to-key lbl)))))))
-         (if loc-p buts (if buts (apply #'set:create buts)))))))
-
-(defalias    'map-ebut 'ebut:map)
-(defun    ebut:map (but-func &optional start-delim end-delim
-                            regexp-match include-delims)
-  "Applies BUT-FUNC to buttons delimited by optional START-DELIM and END-DELIM.
+  (when file
+    (set-buffer file)
+    (let ((buts (ebut:map (if loc-p
+                             (lambda (lbl start end)
+                               ;; Normalize label spacing
+                               (list (ebut:key-to-label (ebut:label-to-key 
lbl))
+                                     start end))
+                           (lambda (lbl start end)
+                             ;; Normalize label spacing
+                             (ebut:key-to-label (ebut:label-to-key lbl)))))))
+      (if loc-p buts (when buts (apply #'set:create buts))))))
+
+(defalias 'map-ebut 'ebut:map)
+
+(defun    ebut:map (but-func &optional regexp-match include-delims)
+  "Applies BUT-FUNC to the explicit buttons in the visible part of the current 
buffer.
 If REGEXP-MATCH is non-nil, only buttons which match this argument are
 considered.
-Maps over portion of buffer visible under any current restriction.
+
 BUT-FUNC must take precisely three arguments: the button label, the
 start position of the delimited button label and its end position (positions
-include delimiters when INCLUDE-DELIMS is non-nil).
-If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
-expression which matches an entire button string."
-  (or start-delim (setq start-delim ebut:start))
-  (or end-delim (setq end-delim ebut:end))
-  (let* ((regexp (symbolp end-delim))
-        (end-sym (or regexp (substring end-delim -1)))
-        (rtn)
-        (ignore)
-        start end but lbl)
-    (save-excursion
-      (goto-char (point-min))
-      (setq include-delims (if include-delims 0 1))
-      (while (re-search-forward
-             (if regexp start-delim
-               (concat (regexp-quote start-delim)
-                       "\\([^" end-sym "\"][^" end-sym "]*\\)"
-                       (regexp-quote end-delim)))
-             nil t)
-       (setq start (match-beginning include-delims)
-             end (match-end include-delims)
-             but (buffer-substring (match-beginning 0) (match-end 0))
-             lbl (buffer-substring (match-beginning 1) (match-end 1))
-             ;; If within a programming language buffer, ignore matches 
outside comments.
-             ignore (and (derived-mode-p 'prog-mode)
-                         ;; Match is outside of a programming language comment
-                         (not (nth 4 (syntax-ppss)))))
-       (save-excursion
-         (goto-char start)
-         ;; Ignore matches with quoted delimiters.
-         (or ignore (setq ignore (memq (preceding-char) '(?\\ ?\{)))))
-       (cond (ignore (setq ignore nil))
-             ((or (not regexp-match)
-                  (string-match regexp-match but))
-              (setq rtn (cons (funcall but-func lbl start end) rtn))))))
-    (nreverse rtn)))
+include delimiters when INCLUDE-DELIMS is non-nil)."
+  (hbut:map but-func ebut:start ebut:end regexp-match include-delims))
 
 (defun    ebut:modify (&optional lbl-key but-sym)
   "Modifies existing Hyperbole button from optional LBL-KEY and BUT-SYM.
@@ -451,12 +285,12 @@ move to the first occurrence of the button."
       (goto-char (+ (match-beginning 0) (length ebut:start)))))
 
 (defun    ebut:operate (curr-label new-label)
-  "Operates on and modifies properties of a new or existing Hyperbole button 
given by CURR-LABEL.
+  "Operates on and modifies properties of a new or existing explicit button 
given by CURR-LABEL.
 When NEW-LABEL is non-nil, this is substituted for CURR-LABEL and the
 associated button is modified.  Otherwise, a new button is created.
-Returns instance string appended to label to form unique label, nil if
-label is already unique.  Signals an error when no such button is found
-in the current buffer."
+Returns instance string appended to label to form a per-buffer unique
+label; nil if label is already unique.  Signals an error when no such
+button is found in the current buffer."
   (let* ((lbl-key (ebut:label-to-key curr-label))
         (lbl-regexp (ebut:label-regexp lbl-key))
         (modify new-label)
@@ -474,10 +308,10 @@ in the current buffer."
              (let* ((but-key-and-pos (ebut:label-p nil nil nil 'pos))
                     (at-but (equal (car but-key-and-pos)
                                    (ebut:label-to-key new-label))))
-               (if at-but
-                   (ebut:delimit (nth 1 but-key-and-pos)
-                                 (nth 2 but-key-and-pos)
-                                 instance-flag))
+               (when at-but
+                 (ebut:delimit (nth 1 but-key-and-pos)
+                               (nth 2 but-key-and-pos)
+                               instance-flag))
                (cond ((ebut:map
                        (lambda (lbl start end)
                          (delete-region start end)
@@ -485,7 +319,7 @@ in the current buffer."
                           (point)
                           (progn (insert new-label) (point))
                           instance-flag))
-                       nil nil lbl-regexp 'include-delims))
+                       lbl-regexp 'include-delims))
                      (at-but)
                      ((hypb:error "(ebut:operate): No button matching: %s" 
curr-label))))
            ;; Add a new button.
@@ -496,7 +330,7 @@ in the current buffer."
                                buf-lbl (buffer-substring start end))
                          (equal buf-lbl curr-label))
                     nil)
-                   ((progn (if start (goto-char start))
+                   ((progn (when start (goto-char start))
                            (looking-at (regexp-quote curr-label)))
                     (setq start (point)
                           end (match-end 0)))
@@ -516,15 +350,15 @@ in the current buffer."
                         (re-search-backward regexp nil t)))
                   (goto-char (+ (match-beginning 0) (length ebut:start))))))
          ;; instance-flag might be 't which we don't want to return.
-         (if (stringp instance-flag) instance-flag))
+         (when (stringp instance-flag) instance-flag))
       (hypb:error
        "(ebut:operate): Operation failed.  Check button attribute permissions: 
%s"
        hattr:filename))))
 
 (defun    ebut:search (string out-buf &optional match-part)
   "Writes explicit button lines matching STRING to OUT-BUF.
-Uses Hyperbole space into which user has written buttons for the search.
-By default, only matches for whole button labels are found, optional MATCH-PART
+Searches across all files into which the user has previously saved explicit 
buttons.
+By default, only matches for whole button labels are found; optional MATCH-PART
 enables partial matches."
   (let*  ((buffers (mapcar (lambda (dir)
                             (expand-file-name hattr:filename dir))
@@ -600,6 +434,32 @@ enables partial matches."
                        (if kill-buf (kill-buffer currbuf)))))))))))
     total))
 
+(defun    ebut:to (lbl-key)
+  "Finds the nearest explicit button with LBL-KEY (a label or label key) 
within the visible portion of the current buffer.
+Leaves point inside the button label.  Returns the symbol for the button, else 
nil."
+  ;; Handle a label given rather than a label key
+  (if (string-match-p "\\s-" lbl-key)
+      (setq lbl-key (ebut:label-to-key lbl-key)))
+  (let ((regexp (hbut:label-regexp lbl-key t))
+       pos
+       found)
+    (save-excursion
+      ;; Since point might be in the middle of the matching button,
+      ;; move to the start of line to ensure don't miss it when
+      ;; searching forward.
+      (forward-line 0)
+      ;; re-search forward
+      (while (and (not found) (re-search-forward regexp nil t))
+       (setq pos (match-beginning 0)
+             found (equal (ebut:label-p nil nil nil nil t) lbl-key)))
+      ;; re-search backward
+      (while (and (not found) (re-search-backward regexp nil t))
+       (setq pos (match-beginning 0)
+             found (equal (ebut:label-p nil nil nil nil t) lbl-key))))
+    (when found
+      (goto-char pos)
+      (ebut:at-p))))
+
 ;;; ------------------------------------------------------------------------
 (defun    ebut:delimit (start end instance-str)
   "Delimits button label spanning region START to END in current buffer.
@@ -616,7 +476,7 @@ Inserts INSTANCE-STR after END, before ending delimiter."
     (insert ebut:start)
     (goto-char end)
     (insert instance-str ebut:end)
-    ;; Insert any comment before the start marker.
+    ;; Insert any comment delimiter before the start marker.
     (set-marker-insertion-type start t)
     (hbut:comment start end)
     (if (fboundp 'hproperty:but-add)
@@ -638,9 +498,9 @@ Inserts INSTANCE-STR after END, before ending delimiter."
    "\\)" match-part (regexp-quote ebut:end)))
 
 (defconst ebut:start "<("
-  "String matching the start of a hyper-button.")
+  "String matching the start of a Hyperbole explicit hyper-button.")
 (defconst ebut:end   ")>"
-  "String matching the end of a hyper-button.")
+  "String matching the end of a Hyperbole explicit hyper-button.")
 (defconst ebut:instance-sep ":"
   "String of one character, separates an ebut label from its instance num.")
 
@@ -648,25 +508,36 @@ Inserts INSTANCE-STR after END, before ending delimiter."
 ;;; gbut class - Global Hyperbole buttons - activated by typing label name
 ;;; ========================================================================
 
-(defvar gbut:file (expand-file-name hbmap:filename hbmap:dir-user)
+(defvar   gbut:file (expand-file-name hbmap:filename hbmap:dir-user)
   "File that stores globally accessible Hyperbole buttons, accessed by name.")
 
-(defun gbut:act (label)
+(defun    gbut:act (label)
   "Activates Hyperbole global button with LABEL."
   (interactive (list (hargs:read-match "Activate global button labeled: "
                                       (mapcar 'list (gbut:label-list))
-                                      nil t nil 'ebut)))
+                                      nil t nil 'gbut)))
   (cond ((null label)
         (error "(gbut:act): You have not created any global buttons"))
        ((equal label "")
         (error "(gbut:act): Please try again and type ? for a list of existing 
global button names"))
        (t (let* ((lbl-key (hbut:label-to-key label))
-                 (but (ebut:get lbl-key nil gbut:file)))
+                 (but (gbut:get lbl-key)))
             (if but
                 (hbut:act but)
-              (error "(gbut:act): No global button labeled: %s" label))))))
+              (error "(gbut:act): No global button found for label: %s" 
label))))))
+
+(defun    gbut:get (&optional lbl-key)
+  "Returns global Hyperbole button symbol given by optional LBL-KEY if found 
in gbut:file.
 
-(defun gbut:help (label)
+Retrieves any button data, converts into a button object and returns a symbol
+which references the button.
+
+All arguments are optional.  When none are given, returns a symbol for
+the button that point is within or nil."
+  (or (ebut:get lbl-key nil gbut:file)
+      (ibut:get lbl-key nil gbut:file)))
+
+(defun    gbut:help (label)
   "Displays help for Hyperbole global button with LABEL."
   (interactive (list (hargs:read-match "Report on global button labeled: "
                                       (mapcar 'list (gbut:label-list))
@@ -677,18 +548,39 @@ Inserts INSTANCE-STR after END, before ending delimiter."
        (hbut:report but)
       (error "(gbut:help): No global button labeled: %s" label))))
 
-(defun gbut:label-list ()
+(defun    gbut:label-list ()
   "Returns list of global button labels."
   (mapcar 'hbut:key-to-label (gbut:key-list)))
 
+
+(defun    gbut:to (lbl-key)
+  "Finds the global button with LBL-KEY (a label or label key) within the 
visible portion of the global button file.
+Leaves point inside the button label, if it has one.
+Returns the symbol for the button, else nil."
+  (when (file-readable-p gbut:file)
+    (let ((obuf (current-buffer))
+         (opoint (point))
+         found)
+      (set-buffer (find-file-noselect gbut:file))
+      (setq found (or (ebut:to lbl-key) (ibut:to lbl-key)))
+      (if found
+         (hpath:display-buffer (current-buffer) 'this-window)
+       (set-buffer obuf)
+       (goto-char opoint))
+      found)))
+
 ;;; ------------------------------------------------------------------------
-(defun gbut:key-list ()
+(defun    gbut:key-list ()
   "Returns list of global button label keys."
+  (nconc (gbut:ebut-key-list) (gbut:ibut-key-list)))
+
+(defun    gbut:ebut-key-list ()
+  "Returns a list of explicit button label keys from the global button file."
   (save-excursion
     (if (hbdata:to-entry-buf gbut:file)
-       (let ((gbuts))
+       (let (gbuts)
          (save-restriction
-           (narrow-to-region (point) (if (search-forward "\^L" nil t)
+           (narrow-to-region (point) (if (search-forward "\f" nil t)
                                          (point) (point-max)))
            (goto-char (point-min))
            (condition-case ()
@@ -696,6 +588,15 @@ Inserts INSTANCE-STR after END, before ending delimiter."
              (error nil))
            gbuts)))))
 
+(defun    gbut:ibut-key-list ()
+  "Returns a list of implicit button label keys from the global button file."
+  (when (file-readable-p gbut:file)
+    (save-excursion
+      (set-buffer (find-file-noselect gbut:file))
+      (save-restriction
+       (widen)
+       (ibut:label-map #'(lambda (label start end) (ibut:label-to-key 
label)))))))
+
 ;;; ========================================================================
 ;;; hattr class
 ;;; ========================================================================
@@ -807,10 +708,10 @@ Suitable for use as part of `write-file-functions'."
   "Sets OBJ-SYMBOL's attribute ATTR-SYMBOL to ATTR-VALUE and returns 
ATR-VALUE."
   (put obj-symbol attr-symbol attr-value))
 
-(defalias    'hattr:summarize 'hattr:report)
+(defalias 'hattr:summarize 'hattr:report)
 
 (defvar   hattr:filename
-  (if hyperb:microcruft-os-p "_hypb" ".hypb")
+  (if hyperb:microsoft-os-p "_hypb" ".hypb")
   "Per directory file name in which explicit button attributes are stored.
 If you change its value, you will be unable to use buttons created by
 others who use a different value!")
@@ -914,12 +815,115 @@ Ignores email-related buffers."
            hbut:fill-prefix-regexps))
   label)
 
+(defun    hbut:get (&optional lbl-key buffer key-src)
+  "Returns explicit or labeled implicit Hyperbole button symbol given by 
LBL-KEY and BUFFER.
+KEY-SRC is given when retrieving global buttons and is the full source 
pathname.
+
+Returns a symbol which references the button.
+
+All arguments are optional.  When none are given, returns a
+symbol for the button or button label that point is within or
+nil.  BUFFER defaults to the current buffer."
+  (or (ebut:get lbl-key buffer key-src) (ibut:get lbl-key buffer key-src)))
+
 (defun    hbut:is-p (object)
   "Returns non-nil if object denotes a Hyperbole button."
-  (and (symbolp object) (hattr:get object 'categ)))
+ (and (symbolp object) (hattr:get object 'categ)))
+
+(defun    hbut:key-src (&optional full)
+  "Returns key source (usually unqualified) for current Hyperbole button.
+Also sets current buffer to key source.
+With optional FULL when source is a pathname, the full pathname is returned."
+  (let ((src (cond ((hmail:mode-is-p) (current-buffer))
+                  ;; If buffer represents the output of a document
+                  ;; formatter, e.g. an Info document produced from a
+                  ;; Texinfo source, then return the Texinfo source
+                  ;; file, for example.
+                  ((hbut:key-src-fmt))
+                  ;; Handle directory movement within `make' output.
+                  ((save-excursion
+                     (and (re-search-backward
+                           "^[a-z]*make[^a-z]+\\(Entering\\|Leaving\\) 
directory `\\([^']+\\)'" nil t)
+                          (string-equal "Entering" (match-string 1))))
+                   (let ((limit (match-end 2))
+                         ;; Latest working directory that `make' reported
+                         (wd (match-string 2))
+                         cd)
+                     ;; But another cd or pushd command may have been issued.
+                     ;; Return the closest directory from the make output.
+                     (if (re-search-backward
+                          "\\<\\(cd\\|pushd\\)\\s 
+[\"\']?\\([^;\"\'\n\r\^L\\]+\\)"
+                          limit t)
+                         (progn (setq cd (match-string 2))
+                                ;; Eliminate any trailing whitespace.
+                                (setq cd (substring
+                                          cd 0 (string-match "\\s +\\'" cd)))
+                                (expand-file-name cd wd))
+                       wd)))
+                  (buffer-file-name
+                   (if full
+                       buffer-file-name
+                     (file-name-nondirectory buffer-file-name)))
+                  ;; Handle any preceding @loc hyp-source implicit button 
location references.
+                  ;; This is used in report buffers of explicit buttons, i.e. 
hui:hbut-report.
+                  ((save-excursion
+                     (save-restriction
+                       (widen)
+                       (end-of-visible-line)
+                       (if (and (search-backward hbut:source-prefix nil t)
+                                (or (memq (preceding-char) '(?\n ?\r))
+                                    (= (point) (point-min))))
+                           (hbut:source full)))))
+                  (t (current-buffer)))))
+    (hbut:key-src-set-buffer src)))
 
-(defalias    'hbut:key-src      'ebut:key-src)
-(defalias    'hbut:key-to-label 'ebut:key-to-label)
+(defun    hbut:key-src-fmt ()
+  "Returns unformatted filename associated with formatted current buffer.
+This is used to obtain the source of Hyperbole buttons for buffers that
+represent the output of particular document formatters."
+  (and (or (eq major-mode 'Info-mode)
+          (string-match "\\.info\\(-[0-9]+\\)?$" (buffer-name)))
+       (let ((src (and buffer-file-name
+                      (substring
+                       buffer-file-name
+                       0 (string-match "\\.[^.]+$" buffer-file-name)))))
+        (cond ((file-exists-p (concat src ".texi"))
+               (concat src ".texi"))
+              ((file-exists-p (concat src ".texinfo"))
+               (concat src ".texinfo"))
+              ((current-buffer))))))
+
+(defun hbut:key-src-set-buffer (src)
+  "Set buffer to SRC, a buffer, file, directory or symlink and return SRC or 
nil if invalid."
+  (cond ((null src) nil)
+       ((bufferp src)
+        (set-buffer src)
+        src)
+       ((file-directory-p src)
+        (file-name-as-directory src))
+       ((file-readable-p src)
+        (set-buffer (find-file-noselect src))
+        src)
+       ((file-readable-p (setq src (hpath:symlink-referent src)))
+        (set-buffer (find-file-noselect src))
+        src)))
+
+(defun    hbut:key-to-label (lbl-key)
+  "Unnormalizes LBL-KEY and returns a label string for display."
+  (if lbl-key
+      (let* ((pos 0) (len (length lbl-key)) (lbl) c)
+       (while (< pos len)
+         (setq c (aref lbl-key pos)
+               lbl (concat lbl 
+                           (if (eq c ?_)
+                               (if (or (= (1+ pos) len)
+                                       (not (eq (aref lbl-key (1+ pos)) ?_)))
+                                   " "
+                                 (setq pos (1+ pos))
+                                 "_")
+                             (char-to-string c)))
+               pos (1+ pos)))
+       lbl)))
 
 (defun    hbut:label (hbut)
   "Returns the label for Hyperbole button symbol HBUT."
@@ -928,8 +932,111 @@ Ignores email-related buffers."
     (error "(hbut:label): Argument is not a Hyperbole button symbol, `%s'"
           hbut)))
 
-(defalias    'hbut:label-p      'ebut:label-p)
-(defalias    'hbut:label-to-key 'ebut:label-to-key)
+(defun    hbut:label-p (&optional as-label start-delim end-delim pos-flag 
two-lines-flag)
+  "Returns key for the Hyperbole button label that point is within, else nil.
+Assumes point is within the first line of any button label.  All
+following arguments are optional.  If AS-LABEL is non-nil, label
+is returned rather than the key derived from the label.
+START-DELIM and END-DELIM are strings that override default
+button delimiters.  With POS-FLAG non-nil, returns list of
+label-or-key, but-start-position, but-end-position.  Positions
+include delimiters.  With TWO-LINES-FLAG non-nil, constrains
+label search to two lines."
+  (or (ebut:label-p as-label start-delim end-delim pos-flag two-lines-flag)
+      (ibut:label-p as-label start-delim end-delim pos-flag two-lines-flag)))
+
+(defun    hbut:label-regexp (lbl-key &optional no-delim start-delim end-delim)
+  "Unnormalizes LBL-KEY.  Returns regular expr matching delimited button label.
+Optional NO-DELIM leaves off delimiters and leading and trailing space.
+Optional START-DELIM and END-DELIM are added around the returned
+label; these default to `ebut:start' and `ebut:end'."
+  (when lbl-key
+   (let* ((pos 0)
+          (len (length lbl-key))
+          (c)
+          (sep0 "[ \t\n\r]*")
+          (sep "[ \t\n\r]+")
+          (regexp (if no-delim "" (concat (regexp-quote (or start-delim 
ebut:start)) sep0)))
+          (case-fold-search))
+      (while (< pos len)
+       (setq c (aref lbl-key pos)
+             regexp (concat regexp 
+                            (if (eq c ?_)
+                                (if (or (= (1+ pos) len)
+                                        (not (eq (aref lbl-key (1+ pos)) ?_)))
+                                    sep
+                                  (setq pos (1+ pos))
+                                  "_")
+                              (regexp-quote (char-to-string c))))
+             pos (1+ pos)))
+      (if no-delim
+         regexp
+       (setq regexp (concat regexp sep0 (regexp-quote (or end-delim 
ebut:end))))))))
+
+(defun    hbut:label-to-key (label)
+  "Normalizes LABEL for use as a Hyperbole button key and returns key.
+Eliminates any fill prefix in the middle of the label, replaces `_' with
+`__', removes leading and trailing whitespace and replaces each other
+whitespace sequence with `_'."
+  (when label
+    (setq label (hbut:fill-prefix-remove label)
+         ;; Remove leading and trailing space.
+         label (hypb:replace-match-string "\\`[ \t\n\r]+\\|[ \t\n\r]+\\'"
+                                          label "" t)
+         label (hypb:replace-match-string "_" label "__" t))
+    (hypb:replace-match-string "[ \t\n\r]+" label "_" t)))
+
+(defun    hbut:map (but-func &optional start-delim end-delim
+                            regexp-match include-delims)
+  "Applies BUT-FUNC to a set of Hyperbole buttons in the visible part of the 
current buffer.
+The set of buttons are those whose labels are delimited by optional 
START-DELIM and
+END-DELIM and that match any optional REGEXP-MATCH.
+
+START-DELIM defaults to ebut:start; END-DELIM defaults to ebut:end.
+If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
+expression which matches an entire button string.
+
+BUT-FUNC must take precisely three arguments: the button label, the
+start position of the delimited button label and its end position (positions
+include delimiters when INCLUDE-DELIMS is non-nil)."
+  (or start-delim (setq start-delim ebut:start))
+  (or end-delim (setq end-delim ebut:end))
+  (let* ((regexp (symbolp end-delim))
+        (end-sym (or regexp (substring end-delim -1)))
+        (rtn)
+        (ignore)
+        start end but lbl)
+    (save-excursion
+      (goto-char (point-min))
+      (setq include-delims (if include-delims 0 1))
+      (while (re-search-forward
+             (if regexp start-delim
+               (concat (regexp-quote start-delim)
+                       "\\([^" end-sym "\"][^" end-sym "]*\\)"
+                       (regexp-quote end-delim)))
+             nil t)
+       (setq start (match-beginning include-delims)
+             end (match-end include-delims)
+             but (match-string 0)
+             lbl (match-string 1)
+             ;; If within a programming language buffer, ignore matches 
outside comments.
+             ignore (hbut:outside-comment-p))
+       (save-excursion
+         (goto-char start)
+         ;; Ignore matches with quoted delimiters.
+         (or ignore (setq ignore (memq (preceding-char) '(?\\ ?\{)))))
+       (cond (ignore (setq ignore nil))
+             ((or (not regexp-match)
+                  (string-match regexp-match but))
+              (setq rtn (cons (funcall but-func lbl start end) rtn))))))
+    (nreverse rtn)))
+
+(defun    hbut:outside-comment-p ()
+  "Returns t if within a programming language buffer and prior regexp match is 
outside a comment, else nil."
+  (when (and (derived-mode-p 'prog-mode)
+            (not (eq major-mode 'lisp-interaction-mode)))
+    ;; Match is outside of a programming language comment
+    (not (nth 4 (syntax-ppss)))))
 
 (defun    hbut:report (&optional arg)
   "Pretty prints the attributes of a button or buttons.
@@ -1003,17 +1110,17 @@ Returns number of buttons reported on or nil if none."
 If a file, always returns a full path if optional FULL is non-nil."
   (goto-char (match-end 0))
   (cond ((looking-at "#<buffer \"?\\([^\n\"]+\\)\"?>")
-        (get-buffer (buffer-substring (match-beginning 1)
-                                      (match-end 1))))
+        (get-buffer (match-string 1)))
        ((looking-at "\".+\"")
-        (let* ((file (buffer-substring (1+ (match-beginning 0))
-                                       (1- (match-end 0))))
+        (let* ((file (buffer-substring-no-properties
+                      (1+ (match-beginning 0))
+                      (1- (match-end 0))))
                (absolute (file-name-absolute-p file)))
           (if (and full (not absolute))
               (expand-file-name file default-directory)
             file)))))
 
-(defalias    'hbut:summarize 'hbut:report)
+(defalias 'hbut:summarize 'hbut:report)
 
 (defvar   hbut:current nil
   "The currently selected Hyperbole button.  Available to action routines.")
@@ -1023,44 +1130,157 @@ If a file, always returns a full path if optional FULL 
is non-nil."
    This expression should be followed immediately by a file-name indicating the
 source file for the buttons in the menu, if any.")
 
+(defun    hbut:label-list ()
+  "Returns list of current buffer's Hyperbole button labels."
+  (mapcar 'hbut:key-to-label (hbut:key-list)))
+
+;;; ------------------------------------------------------------------------
+
+(defun    hbut:key-list ()
+  "Returns list of global button label keys."
+  (nconc (hbut:ebut-key-list) (hbut:ibut-key-list)))
+
+(defun    hbut:ebut-key-list (&optional key-src)
+  "Returns a list of explicit button label keys from optional KEY-SRC or the 
current buffer."
+  (save-excursion
+    (if (hbdata:to-entry-buf (or key-src (buffer-file-name)))
+       (let (hbuts)
+         (save-restriction
+           (narrow-to-region (point) (if (search-forward "\f" nil t)
+                                         (point) (point-max)))
+           (goto-char (point-min))
+           (condition-case ()
+               (while (setq hbuts (cons (car (read (current-buffer))) hbuts)))
+             (error nil))
+           hbuts)))))
+
+(defun    hbut:ibut-key-list (&optional key-src)
+  "Returns a list of implicit button label keys from optional KEY-SRC or the 
current buffer."
+  (save-excursion
+    (when (hbut:key-src-set-buffer (or key-src (current-buffer)))
+      (save-restriction
+       (widen)
+       (ibut:label-map #'(lambda (label start end) (ibut:label-to-key 
label)))))))
+
 ;;; ========================================================================
 ;;; ibut class - Implicit Hyperbole Buttons
 ;;; ========================================================================
 
+(defun    ibut:alist (&optional file)
+  "Returns alist of labeled ibuts in FILE or the current buffer.
+Each element is a list of just an implicit button label.  For use
+as a completion table."
+  (mapcar 'list (ibut:list file)))
+
 (defun    ibut:at-p (&optional key-only)
   "Returns symbol for implicit button at point, else nil.
-With optional KEY-ONLY, returns only the label key for button."
-  (let ((types (htype:category 'ibtypes))
-       ;; Global var used in (hact) function, don't delete.
-       (hrule:action 'actype:identity)
-       (itype)
-       (args)
-       (is-type))
-    (or key-only (hattr:clear 'hbut:current))
-    (while (and (not is-type) types)
-      (setq itype (car types))
-      (if (setq args (funcall itype))
-         (setq is-type itype)
-       (setq types (cdr types))))
-    (if is-type
-       (if key-only
-           (hattr:get 'hbut:current 'lbl-key)
-         (hattr:set 'hbut:current 'loc (save-excursion
-                                         (hbut:key-src 'full)))
-         (hattr:set 'hbut:current 'categ is-type)
-         (or (hattr:get 'hbut:current 'args)
-             (not (listp args))
-             (progn
-               (hattr:set 'hbut:current 'actype
-                          (or
-                            ;; Hyperbole action type
-                            (intern-soft (concat "actypes::"
-                                                 (symbol-name (car args))))
-                            ;; Regular Emacs Lisp function symbol
-                            (car args)
-                            ))
-               (hattr:set 'hbut:current 'args (cdr args))))
-         'hbut:current))))
+Point may be on the implicit button or its optional preceding label.
+With optional KEY-ONLY, returns only the label key for button.
+
+Any labeled implicit button must contain at least two characters,
+excluding delimiters, not just one."
+  (let* ((opoint (point))
+        (label-key-start-end (ibut:label-p nil nil nil t t))
+        (lbl-key (car label-key-start-end)))
+    (unwind-protect
+       (when (not (hbut:outside-comment-p))
+         ;; Skip past any optional label and separators
+         (when label-key-start-end
+           (goto-char (nth 2 label-key-start-end)) 
+           (when (looking-at ibut:label-separator-regexp)
+             ;; Move past up to 2 possible characters of ibut
+             ;; delimiters; this prevents recognizing labeled,
+             ;; delimited ibuts of a single character but no one
+             ;; should need that.
+             (goto-char (min (+ 2 (match-end 0)) (point-max)))))
+
+         ;; Check for an implicit button at current point, record its
+         ;; attributes and return a button symbol for it.
+         (let ((types (htype:category 'ibtypes))
+               ;; Global var used in (hact) function, don't delete.
+               (hrule:action 'actype:identity)
+               (itype)
+               (args)
+               (is-type))
+           (unless key-only
+             (hattr:clear 'hbut:current))
+           (while (and (not is-type) types)
+             (setq itype (car types))
+             (if (setq args (funcall itype))
+                 (setq is-type itype)
+               (setq types (cdr types))))
+           (when is-type
+             (when lbl-key
+               (hattr:set 'hbut:current 'lbl-key lbl-key))
+             (if key-only
+                 (hattr:get 'hbut:current 'lbl-key)
+               (hattr:set 'hbut:current 'loc (save-excursion
+                                               (hbut:key-src 'full)))
+               (hattr:set 'hbut:current 'categ is-type)
+               (or (hattr:get 'hbut:current 'args)
+                   (not (listp args))
+                   (progn
+                     (hattr:set 'hbut:current 'actype
+                                (or
+                                 ;; Hyperbole action type
+                                 (intern-soft (concat "actypes::"
+                                                      (symbol-name (car 
args))))
+                                 ;; Regular Emacs Lisp function symbol
+                                 (car args)))
+                     (hattr:set 'hbut:current 'args (cdr args))))
+               'hbut:current))))
+      (goto-char opoint))))
+
+(defun    ibut:at-type-p (ibut-type-symbol)
+  "Returns non-nil if point is on a button of type `ibut-type-symbol`.
+Point must be on the button itself and not its label, if any.
+
+The return value is a list of the type's action type symbol and
+associated arguments from the button."
+  (when (and ibut-type-symbol (symbolp ibut-type-symbol))
+    (let ((type-name (symbol-name ibut-type-symbol)))
+      (unless (string-match "::" type-name)
+       (setq ibut-type-symbol (intern-soft (concat "ibtypes::" type-name))))
+      (when ibut-type-symbol
+       (let ((types (htype:category 'ibtypes))
+             ;; Global var used in (hact) function, don't delete.
+             (hrule:action 'actype:identity))
+         (funcall ibut-type-symbol))))))
+
+(defun    ibut:get (&optional lbl-key buffer key-src)
+  "Returns implicit Hyperbole button symbol given by LBL-KEY and BUFFER.
+KEY-SRC is given when retrieving global buttons and is the full source 
pathname.
+
+Returns a symbol which references the button.
+
+All arguments are optional.  When none are given, returns a
+symbol for the button or button label that point is within or
+nil.  BUFFER defaults to the current buffer."
+  (hattr:clear 'hbut:current)
+  (save-excursion
+    (let ((key-file) (key-dir) (but-data) (actype))
+      (unless lbl-key
+       (setq lbl-key (ibut:label-p nil nil nil nil t)))
+      (when buffer
+       (if (bufferp buffer)
+           (set-buffer buffer)
+         (error "(ibut:get): Invalid buffer argument: %s" buffer)))
+      (when (not key-src)
+       (when (not (equal lbl-key (ibut:label-p nil nil nil nil t)))
+         (goto-char (point-min))
+         (ibut:next-occurrence lbl-key))
+       (when (setq key-src (hbut:key-src 'full))
+         ;; `hbut:key-src' sets current buffer to key-src buffer.
+         (setq buffer (current-buffer))))
+      (when (and (stringp lbl-key) key-src)
+       (when (stringp key-src)
+         (setq key-dir (file-name-directory key-src)
+               key-file (file-name-nondirectory key-src)))
+       (set-buffer (find-file-noselect key-src))
+       (goto-char (point-min))
+       (ibut:next-occurrence lbl-key)
+       ;; Build and return button symbol with button properties
+       (ibut:at-p)))))
 
 (defun    ibut:is-p (object)
   "Returns non-nil if object denotes an implicit Hyperbole button."
@@ -1068,16 +1288,66 @@ With optional KEY-ONLY, returns only the label key for 
button."
       (let ((categ (hattr:get object 'categ)))
        (and categ (string-match "^ibtypes::" (symbol-name categ))))))
 
-(defun    ibut:label-p ()
-  "Returns key for Hyperbole implicit button label that point is on or nil."
-  (ibut:at-p 'key-only))
+(defun    ibut:label-map (but-func &optional start-delim end-delim
+                                  regexp-match include-delims)
+  "Applies BUT-FUNC to buttons delimited by optional START-DELIM and END-DELIM.
+START-DELIM defaults to ibut:label-start; END-DELIM defaults to ibut:label-end.
+If REGEXP-MATCH is non-nil, only buttons which match this argument are
+considered.
+
+Maps over portion of buffer visible under any current restriction.
+BUT-FUNC must take precisely three arguments: the button label, the
+start position of the delimited button label and its end position (positions
+include delimiters when INCLUDE-DELIMS is non-nil).
+If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
+expression which matches an entire button string."
+  (hbut:map but-func ibut:label-start ibut:label-end))
+
+(defun    ibut:rename (old-lbl new-lbl)
+  "Modifies a label preceding a Hyperbole implicit button in the current 
buffer given by LBL-KEY.
+Signals an error when no such button is found in the current buffer.
+
+Leaves point at the start of the button label which may be elsewhere
+than the current point; callers should use `save-excursion` to retain
+current."
+  ;; !! Need to handle adding instances to labels, similar to ebut:operate.
+  (cond ((or (not (stringp new-lbl)) (< (length new-lbl) 1))
+        (error "(ibut:rename): Invalid 'new-lbl' argument: \"%s\"" new-lbl))
+       ((or (not (stringp old-lbl)) (< (length old-lbl) 1))
+        (error "(ibut:rename): Invalid 'old-lbl' argument: \"%s\"" old-lbl))
+       ((ibut:to old-lbl)
+        (delete-region (point) (search-forward ibut:label-end nil t))
+        (save-excursion (insert new-lbl ibut:label-end)))
+       (t (error "(ibut:rename): Button '%s' not found in visible portion of 
buffer." old-lbl))))
+
+(defun    ibut:label-p (&optional as-label start-delim end-delim pos-flag 
two-lines-flag)
+  "Returns key for the Hyperbole implicit button label that point is within, 
else nil.
+This is an optional label that may precede an implicit button.
+Use `ibut:at-p' instead to test if point is on either the
+implicit button itself or the label.  Assumes point is within the
+first line of any button label.
+
+All following arguments are optional.  If AS-LABEL is non-nil,
+label is returned rather than the key derived from the label.
+START-DELIM and END-DELIM are strings that override default
+button delimiters.  With POS-FLAG non-nil, returns list of
+label-or-key, but-label-start-position, but-label-end-position.
+Positions include delimiters.  With TWO-LINES-FLAG non-nil,
+constrains label search to two lines."
+  (ebut:label-p as-label (or start-delim ibut:label-start)
+               (or end-delim ibut:label-end) pos-flag two-lines-flag))
+
+(defun    ibut:label-regexp (lbl-key &optional no-delim)
+  "Unnormalizes ibutton LBL-KEY.  Returns regular expr matching delimited 
button label.
+Optional NO-DELIM leaves off delimiters and leading and trailing space."
+  (hbut:label-regexp lbl-key no-delim ibut:label-start ibut:label-end))
 
 (defun    ibut:label-set (label &optional start end)
-  "Sets current implicit button attributes from LABEL and START, END position.
-Returns label.  START and END are optional.  When given, they specify the
-region in the buffer to flash when this implicit button is activated or
-queried for its attributes.  If LABEL is a list, it is assumed to contain all
-arguments."
+  "Sets current implicit button attributes from LABEL and optional START, END 
positions.
+Returns label.  When START and END are given, they specify the
+region in the buffer to flash when this implicit button is
+activated or queried for its attributes.  If LABEL is a list, it
+is assumed to contain all arguments."
   (cond ((stringp label)
         (hattr:set 'hbut:current 'lbl-key (hbut:label-to-key label))
         (and start (hattr:set    'hbut:current 'lbl-start start))
@@ -1089,12 +1359,103 @@ arguments."
        (t (error "(ibut:label-set): Invalid label arg: `%s'" label)))
   label)
 
+(defun    ibut:list (&optional file loc-p)
+  "Returns list of labels of labeled ibuts in FILE or the current buffer.
+Removes duplicate labels if optional LOC-P is omitted.  With LOC-P, returns
+list of elements (label start end) where start and end are the buffer
+positions at which the button label delimiter begins and ends."
+  (interactive)
+  (setq file (if file (and (file-exists-p file) (find-file-noselect file))
+              (current-buffer)))
+  (when file
+    (set-buffer file)
+    (let ((buts (ibut:map (if loc-p
+                             (lambda (lbl start end)
+                               ;; Normalize label spacing
+                               (list (ibut:key-to-label (ibut:label-to-key 
lbl))
+                                     start end))
+                           (lambda (lbl start end)
+                             ;; Normalize label spacing
+                             (ibut:key-to-label (ibut:label-to-key lbl)))))))
+      (if loc-p buts (when buts (apply #'set:create buts))))))
+
+(defalias 'ibut:key-src      'hbut:key-src)
+(defalias 'ibut:key-to-label 'hbut:key-to-label)
+(defalias 'ibut:label-to-key 'hbut:label-to-key)
+(defalias 'map-ibut          'ibut:map)
+
+(defun    ibut:map (but-func &optional start-delim end-delim
+                            regexp-match include-delims)
+  "Applies BUT-FUNC to the labeled implicit buttons in the visible part of the 
current buffer.
+If REGEXP-MATCH is non-nil, only buttons which match this argument are
+considered.
+
+BUT-FUNC must take precisely three arguments: the button label, the
+start position of the delimited button label and its end position (positions
+include delimiters when INCLUDE-DELIMS is non-nil)."
+  (hbut:map but-func ibut:label-start ibut:label-end regexp-match 
include-delims))
+
+(defun    ibut:next-occurrence (lbl-key &optional buffer)
+  "Moves point to next occurrence of a labeled implicit button with LBL-KEY in 
optional BUFFER.
+BUFFER defaults to current buffer.  It may be a buffer name.
+Returns non-nil iff occurrence is found.
+
+Remember to use (goto-char (point-min)) before calling this in order to
+move to the first occurrence of the button."
+  (if buffer
+      (if (not (or (bufferp buffer)
+                  (and (stringp buffer) (get-buffer buffer))))
+         (error "(ibut:next-occurrence): Invalid buffer arg: %s" buffer)
+       (switch-to-buffer buffer)))
+  (when (re-search-forward (ibut:label-regexp lbl-key) nil t)
+    (goto-char (+ (match-beginning 0) (length ibut:label-start)))))
+
+(defalias 'ibut:summarize 'hbut:report)
+
+(defun    ibut:to (lbl-key)
+  "Finds the nearest implicit button with LBL-KEY (a label or label key) 
within the visible portion of the current buffer.
+Leaves point inside the button text or its optional label, if it has one.
+Returns the symbol for the button, else nil."
+  ;; Handle a label given rather than a label key
+  (if (string-match-p "\\s-" lbl-key)
+      (setq lbl-key (ibut:label-to-key lbl-key)))
+  (let ((regexp (hbut:label-regexp lbl-key t))
+       pos
+       found)
+    (save-excursion
+      ;; Since point might be in the middle of the matching button,
+      ;; move to the start of line to ensure don't miss it when
+      ;; searching forward.
+      (forward-line 0)
+      ;; re-search forward
+      (while (and (not found) (re-search-forward regexp nil t))
+       (setq pos (match-beginning 0)
+             found (equal (ibut:label-p nil nil nil nil t) lbl-key)))
+      ;; re-search backward
+      (while (and (not found) (re-search-backward regexp nil t))
+       (setq pos (match-beginning 0)
+             found (equal (ibut:label-p nil nil nil nil t) lbl-key))))
+    (when found
+      (goto-char pos)
+      (ibut:at-p))))
+
+;;; ------------------------------------------------------------------------
+(defconst ibut:label-start "<["
+  "String matching the start of a Hyperbole implicit button label.")
+(defconst ibut:label-end   "]>"
+  "String matching the end of a Hyperbole implicit button label.")
+(defvar   ibut:label-separator " "
+  "Regular expression that separates an implicit button label from its 
implicit button text.")
+
+(defvar   ibut:label-separator-regexp "\\s-*[-:=]*\\s-+"
+  "Regular expression that separates an implicit button label from its 
implicit button text.")
+
 ;;; ========================================================================
 ;;; ibtype class - Implicit button types
 ;;; ========================================================================
 
-(defalias    'defib 'ibtype:create)
-(put     'ibtype:create 'lisp-indent-function 'defun)
+(defalias 'defib 'ibtype:create)
+(put      'ibtype:create 'lisp-indent-function 'defun)
 (defmacro ibtype:create (type params doc at-p &optional to-p style)
   "Creates Hyperbole implicit button TYPE (unquoted sym) with PARAMS, 
described by DOC.
 PARAMS are presently ignored.
diff --git a/hib-kbd.el b/hib-kbd.el
index 339930a..bc4ab9f 100644
--- a/hib-kbd.el
+++ b/hib-kbd.el
@@ -11,15 +11,16 @@
 ;;
 ;;; Commentary:
 ;;
-;;   A press of the Action Key on a key sequence executes its
-;;   command binding or Hyperbole minibuffer menu binding.
+;;   A press of the Action Key on any sequence of keys delimited by braces
+;;   executes its command binding or Hyperbole minibuffer menu binding.
 ;;
-;;   A press of the Assist Key on a key sequence displays the
-;;   documentation for it.
+;;   A press of the Assist Key on any sequence of keys delimited by braces
+;;   displays the documentation for it.
 ;;
-;;   Key sequences should be in human readable string form with spaces
-;;   between each key and the whole sequence delimited by braces, 
-;;   e.g. {C-x o}.  Forms such as {\C-b}, {\^b}, and {^b} will not be
+;;   Sequences of keys should be in human readable string form with spaces
+;;   between each key, may contain any number of individual key sequences
+;;   and the whole thing should be delimited by braces, e.g. {M-x apropos
+;;   RET hyperbole RET}.  Forms such as {\C-b}, {\^b}, and {^b} will not be
 ;;   recognized. 
 
 ;;; Code:
@@ -32,10 +33,10 @@
 ;;; ************************************************************************
 ;;; Public implicit button types
 ;;; ************************************************************************
-  
-(defact kbd-key (key-sequence)
+
+(defact kbd-key (key-series)
   "Executes a normalized key sequence without curly braces, {}.
-KEY-SEQUENCE must be a string of one of the following:
+KEY-SERIES must be a string of one of the following:
   a Hyperbole minibuffer menu item key sequence,
   a HyControl key sequence,
   a M-x extended command,
@@ -43,7 +44,7 @@ KEY-SEQUENCE must be a string of one of the following:
 
 Returns t if the sequence appears to be valid, else nil."
   (interactive "kKey sequence to execute (no {}): ")
-  (kbd-key:act key-sequence))
+  (kbd-key:act key-series))
 
 (defib kbd-key ()
   "Executes a key sequence found around point, delimited by curly braces, {}, 
if any.
@@ -65,37 +66,38 @@ Any key sequence must be a string of one of the following:
                            ;; these are special quote marks, not the
                            ;; standard ASCII characters.
                            (hbut:label-p t "‘" "’" t)))
-          (key-sequence (car seq-and-pos))
+          ;; This excludes delimiters
+          (key-series (car seq-and-pos))
           (start (cadr seq-and-pos))
           binding)
       ;; Match only when start delimiter is preceded by whitespace or
       ;; is the 1st buffer character, so do not match to things like 
${variable}.
-      (when (= (char-syntax (or (char-before start) ?\t)) ?\ )
-       (when (and (stringp key-sequence)
-                  (not (eq key-sequence "")))
-         (setq key-sequence (kbd-key:normalize key-sequence)
-               binding (key-binding key-sequence)))
-       (and (stringp key-sequence)
+      (when (memq (char-before start) '(nil ?\ ?\t ?\n ?\j ?\f))
+       (when (and (stringp key-series)
+                  (not (eq key-series "")))
+         (setq key-series (kbd-key:normalize key-series)
+               binding (key-binding key-series)))
+       (and (stringp key-series)
             (or (and binding (not (integerp binding)))
-                (kbd-key:special-sequence-p key-sequence))
+                (kbd-key:special-sequence-p key-series))
             (ibut:label-set seq-and-pos)
-            (hact 'kbd-key key-sequence))))))
+            (hact 'kbd-key key-series))))))
 
 ;;; ************************************************************************
 ;;; Public functions
 ;;; ************************************************************************
 
-(defun kbd-key:act (key-sequence)
-  "Executes the command binding for normalized KEY-SEQUENCE.
-Returns t if KEY-SEQUENCE has a binding, else nil."
+(defun kbd-key:act (key-series)
+  "Executes the command binding for normalized KEY-SERIES.
+Returns t if KEY-SERIES has a binding, else nil."
   (interactive "kKeyboard key to execute (no {}): ")
-  (setq current-prefix-arg nil) ;; Execution of the key-sequence may set it.
-  (let ((binding (key-binding key-sequence)))
+  (setq current-prefix-arg nil) ;; Execution of the key-series may set it.
+  (let ((binding (key-binding key-series)))
     (cond ((null binding)
           ;; If this is a special key seqence, execute it by adding
           ;; its keys to the stream of unread command events.
-          (when (kbd-key:special-sequence-p key-sequence)
-            (setq unread-command-events (nconc unread-command-events (mapcar 
'identity key-sequence)))
+          (when (kbd-key:special-sequence-p key-series)
+            (setq unread-command-events (nconc unread-command-events (mapcar 
'identity key-series)))
             t))
          ((memq binding '(action-key action-mouse-key hkey-either))
           (beep)
@@ -103,11 +105,11 @@ Returns t if KEY-SEQUENCE has a binding, else nil."
           t)
          (t (call-interactively binding) t))))
 
-(defun kbd-key:doc (key-sequence &optional full)
-  "Shows first line of doc for binding of keyboard KEY-SEQUENCE in minibuffer.
+(defun kbd-key:doc (key-series &optional full)
+  "Shows first line of doc for binding of keyboard KEY-SERIES in minibuffer.
 With optional prefix arg FULL, displays full documentation for command."
   (interactive "kKey sequence: \nP")
-  (let* ((keys (kbd-key:normalize key-sequence))
+  (let* ((keys (kbd-key:normalize key-series))
         (cmd  (let ((cmd (key-binding keys)))
                 (if (not (integerp cmd)) cmd)))
         (doc (and cmd (documentation cmd)))
@@ -117,7 +119,7 @@ With optional prefix arg FULL, displays full documentation 
for command."
               (or full
                   (setq end-line (string-match "[\n]" doc)
                         doc (substitute-command-keys (substring doc 0 
end-line))))
-            (setq doc (format "No documentation for {%s} %s" key-sequence (or 
cmd ""))))
+            (setq doc (format "No documentation for {%s} %s" key-series (or 
cmd ""))))
           (if (and cmd doc)
               (if full
                   (describe-function cmd)
@@ -126,18 +128,19 @@ With optional prefix arg FULL, displays full 
documentation for command."
           (if full
               (hui:menu-help doc)
             (message doc)))
-         (t (error "(kbd-key:doc): No binding found for keys {%s}" 
key-sequence)))))
+         (t (hkey-help)))))
+
 
 (defun kbd-key:help (but)
   "Display documentation for binding of keyboard key given by BUT's label."
   (let ((kbd-key (hbut:key-to-label (hattr:get but 'lbl-key))))
     (if kbd-key (kbd-key:doc kbd-key t))))
 
-(defun kbd-key:normalize (key-sequence)
-  "Returns KEY-SEQUENCE string (without surrounding {}) normalized into a form 
that can be parsed by commands."
+(defun kbd-key:normalize (key-series)
+  "Returns KEY-SERIES string (without surrounding {}) normalized into a form 
that can be parsed by commands."
   (interactive "kKeyboard key sequence to normalize (no {}): ")
-  (if (stringp key-sequence)
-      (let ((norm-key-seq (copy-sequence key-sequence))
+  (if (stringp key-series)
+      (let ((norm-key-seq (copy-sequence key-series))
            (case-fold-search nil)
            (case-replace t)
            (substring)
@@ -171,17 +174,7 @@ With optional prefix arg FULL, displays full documentation 
for command."
                (string-to-number (substring norm-key-seq (match-beginning 2)
                                             (match-end 2)))
                norm-key-seq (substring norm-key-seq (match-end 0))))
-       (let (arg-val)
-         (while (string-match "\\`C-u" norm-key-seq)
-           (if (or (not (listp arg))
-                   (not (integerp (setq arg-val (car arg)))))
-               (setq arg '(1)
-                     arg-val 1))
-           (setq arg-val (* arg-val 4)
-                 arg (cons arg-val nil)
-                 norm-key-seq (substring norm-key-seq (match-end 0)))))
-       (if arg (setq norm-key-seq (concat (format "\025%s" arg) norm-key-seq)))
-       ;;
+
        ;; Quote Control and Meta key names
        (setq norm-key-seq (hypb:replace-match-string
                            "C-\\(.\\)" norm-key-seq
@@ -197,36 +190,36 @@ With optional prefix arg FULL, displays full 
documentation for command."
                            (lambda (str)
                              (concat "" (substring str (match-beginning 1)
                                                      (1+ (match-beginning 
1))))))))
-    (error "(kbd-key:normalize): requires a string argument, not `%s'" 
key-sequence)))
+    (error "(kbd-key:normalize): requires a string argument, not `%s'" 
key-series)))
 
 ;;; ************************************************************************
 ;;; Private functions
 ;;; ************************************************************************
 
-(defun kbd-key:extended-command-p (key-sequence)
-  "Returns non-nil if the string KEY-SEQUENCE is a normalized extended command 
invocation, i.e. M-x command."
-  (and (stringp key-sequence) (string-match kbd-key:extended-command-prefix 
key-sequence)))
+(defun kbd-key:extended-command-p (key-series)
+  "Returns non-nil if the string KEY-SERIES is a normalized extended command 
invocation, i.e. M-x command."
+  (and (stringp key-series) (string-match kbd-key:extended-command-prefix 
key-series)))
   
-(defun kbd-key:hyperbole-hycontrol-key-p (key-sequence)
-  "Returns t if normalized KEY-SEQUENCE is given when in a HyControl mode, 
else nil.
+(defun kbd-key:hyperbole-hycontrol-key-p (key-series)
+  "Returns t if normalized, non-nil KEY-SERIES is given when in a HyControl 
mode, else nil.
 Allows for multiple key sequences strung together."
-  (and key-sequence
+  (and key-series
        (featurep 'hycontrol)
        (or hycontrol-windows-mode hycontrol-frames-mode)
        ;; If wanted to limit to single key bindings and provide tighter 
checking:
-       ;;   (string-match "[-.0-9]*\\(.*\\)" key-sequence)
-       ;;   (key-binding (match-string 1 key-sequence))
+       ;;   (string-match "[-.0-9]*\\(.*\\)" key-series)
+       ;;   (key-binding (match-string 1 key-series))
        t))
 
-(defun kbd-key:hyperbole-mini-menu-key-p (key-sequence)
-  "Returns t if normalized KEY-SEQUENCE appears to invoke a Hyperbole menu 
item or sequence of keys, else nil."
-  (when key-sequence
+(defun kbd-key:hyperbole-mini-menu-key-p (key-series)
+  "Returns t if normalized KEY-SERIES appears to invoke a Hyperbole menu item 
or sequence of keys, else nil."
+  (when key-series
     (let ((mini-menu-key (kbd-key:normalize (key-description (car 
(where-is-internal 'hyperbole))))))
-      (if (string-match (regexp-quote mini-menu-key) key-sequence) t))))
+      (if (string-match (regexp-quote mini-menu-key) key-series) t))))
 
-(defun kbd-key:key-and-arguments (key-sequence)
-  "Returns t if normalized KEY-SEQUENCE appears to be a bound key sequence 
possibly with following interactive arguments, else nil."
-  (let ((prefix-binding (and (stringp key-sequence) (key-binding (substring 
key-sequence 0 1)))))
+(defun kbd-key:key-and-arguments (key-series)
+  "Returns t if normalized KEY-SERIES appears to be a bound key sequence 
possibly with following interactive arguments, else nil."
+  (let ((prefix-binding (and (stringp key-series) (key-binding (substring 
key-series 0 1)))))
        ;; Just ensure that 1st character is bound to something that is
        ;; not a self-insert-command or a number.
     (and prefix-binding
@@ -253,16 +246,16 @@ Allows for multiple key sequences strung together."
            start end))
     string))
 
-(defun kbd-key:special-sequence-p (key-sequence)
-  "Returns non-nil if normalized KEY-SEQUENCE string is one of the following:
+(defun kbd-key:special-sequence-p (key-series)
+  "Returns non-nil if normalized KEY-SERIES string is one of the following:
   a Hyperbole minibuffer menu item key sequence,
   a HyControl key sequence,
   a M-x extended command,
   or a valid key sequence together with its interactive arguments."
-  (or (kbd-key:hyperbole-mini-menu-key-p key-sequence)
-      (kbd-key:hyperbole-hycontrol-key-p key-sequence)
-      (kbd-key:extended-command-p key-sequence)
-      (kbd-key:key-and-arguments key-sequence)))
+  (or (kbd-key:hyperbole-mini-menu-key-p key-series)
+      (kbd-key:hyperbole-hycontrol-key-p key-series)
+      (kbd-key:extended-command-p key-series)
+      (kbd-key:key-and-arguments key-series)))
 
 ;;; ************************************************************************
 ;;; Private variables
diff --git a/hib-social.el b/hib-social.el
index 2f0e550..29df535 100644
--- a/hib-social.el
+++ b/hib-social.el
@@ -16,11 +16,11 @@
 ;;   When the referent is a web page, this calls the function given by
 ;;   `hibtypes-social-display-function' to display it, initially set to 
`browse-url'.
 ;;
-;;   A hashtag reference is either: 
[facebook|github|git|instagram|twitter]#<hashtag>
-;;   or using 2-letter service abbreviations: [fb|gh|gt|in|tw]#<hashtag>.
+;;   A hashtag reference is either: 
[facebook|github|gitlab|git|instagram|twitter]#<hashtag>
+;;   or using 2-letter service abbreviations: [fb|gh|gl|gt|in|tw]#<hashtag>.
 ;;
-;;   A username reference is either: 
[facebook|github|instagram|twitter]@<username>
-;;   or [fb|gh|in|tw]@<username>.
+;;   A username reference is either: 
[facebook|github|gitlab|instagram|twitter]@<username>
+;;   or [fb|gh|gl|in|tw]@<username>.
 ;;
 ;;   If the social media service is not given, it defaults to the value of
 ;;   `hibtypes-social-default-service', initially set to \"twitter\".
@@ -32,6 +32,7 @@
 
 ;;     facebook@zuck                             Display user's home page
 ;;     github@rswgnu
+;;     gitlab@seriyalexandrov
 ;;     instagram@lostart
 ;;     twitter@nytimestravel
 
@@ -98,7 +99,8 @@
 ;;     gh#rswgnu/helm/global_mouse               Display user project's branch
 ;;     gh#rswgnu/hyperbole/55a1f0                Display user project's commit 
diff
 ;;
-;;     gh#orgs/github/people                     List the org, github's staff
+;;     gh#orgs/github/people (or staff)          List the org, github's staff
+;;     gh#/github/fetch/contributors             List contributors to github's 
fetch project
 ;;
 ;;     (setq hibtypes-github-default-user "rswgnu")
 ;;     github#/hyperbole                         Display default user's project
@@ -112,12 +114,12 @@
 ;;
 ;;     like so:
 ;;
-;;       gh#issues                               List emacs-helm/helm's open 
issues
-;;       gh#1878                                 Display a specific project 
issue
-;;
-;;       gh#pulls                                List project's open pull 
requests
+;;       gh#pulls                                List project's open pull 
requests (PRs)
 ;;       gh#pull/1871                            Display a specific project 
pull request
 ;;
+;;       gh#issues                               List emacs-helm/helm's open 
issues
+;;       gh#1878                                 Display a specific project 
issue (or PR)
+;;
 ;;       gh#branches                             List project's branches
 ;;       gh#branch/global_mouse                  List files in a specific 
branch
 ;;       gh#global_mouse                         You can even leave off the 
`branch' keyword
@@ -129,6 +131,40 @@
 ;;       gh#898e55c                              Display default user and 
default
 ;;                                               project commit diff
 
+;;   Gitlab (remote) reference links support the same reference types as 
Github (but
+;;   substitute the gl# prefix) plus these additional reference types:
+;;
+;;     gl#/libertybsd/libertybsd-status          Group and project
+;;
+;;     gl#gitlab-org/gitlab-ce/activity          Summarize user's project 
activity
+;;     gl#gitlab-org/gitlab-ce/analytics         Display user project's 
cycle_analytics
+;;     gl#gitlab-org/gitlab-ce/boards            Display user project's 
kanban-type issue boards
+;;
+;;     Once you set the default user and project variables, you can leave
+;;     them off any reference links:
+;;
+;;       (setq hibtypes-gitlab-default-user "gitlab-org")
+;;       (setq hibtypes-gitlab-default-project "gitlab-ce")
+;;
+;;     gl#issues or gl#list                      Display default project's 
issue list
+;;     gl#jobs                                   Display default project's 
computing jobs
+;;     gl#labels                                 Display default project's 
issue categories
+;;     gl#members                                Display default project's 
staff list
+;;     gl#contributors                           Show contributor push 
frequency charts
+;;     gl#merge_requests or gl#pulls             Display default project's 
pull requests
+;;     gl#milestones                             Display default project's 
milestones status
+;;     gl#pages                                  Display default project's web 
pages
+;;     gl#pipelines                              List build and test sequences
+;;     gl#pipeline_charts                        Graphical view of pipeline 
run results across time
+;;     gl#schedules                              Display schedules for project 
pipelines
+;;     gl#snippets                               Project snippets, diffs and 
text with discussion
+;;
+;;     gl#groups                                 List all available groups of 
projects
+;;     gl#projects                               List all available projects
+;;
+;;     gl#milestone=38                           Show a specific project 
milestone
+;;     gl#snippet/1689487                        Show a specific project 
snippet
+
 ;;; Code:
 ;;; ************************************************************************
 ;;; Other required Elisp libraries
@@ -147,6 +183,7 @@
   :type '(radio (const "facebook")
                (const "git")
                (const "github")
+               (const "gitlab")
                (const "instagram")
                (const "twitter"))
   :group 'hyperbole-button)
@@ -171,6 +208,16 @@
   :type 'string
   :group 'hyperbole-button)
 
+(defcustom hibtypes-gitlab-default-project nil
+  "Default project name to associate with any Github commit link."
+  :type 'string
+  :group 'hyperbole-button)
+
+(defcustom hibtypes-gitlab-default-user nil
+  "Default user name to associate with any Github commit link."
+  :type 'string
+  :group 'hyperbole-button)
+
 ;;; ************************************************************************
 ;;; Private variables
 ;;; ************************************************************************
@@ -178,6 +225,7 @@
 (defconst hibtypes-social-hashtag-alist
   '(("\\`\\(fb\\|facebook\\)\\'"  . "https://www.facebook.com/hashtag/%s";)
     ("\\`\\(gh\\|github\\)\\'"    . "https://github.com/%s/%s/%s%s";)
+    ("\\`\\(gl\\|gitlab\\)\\'"    . "https://www.gitlab.com/%s/%s/%s%s";)
     ("\\`\\(gt\\|git\\)\\'"       . "(cd %s; git %s %s)")
     ("\\`\\(in\\|instagram\\)\\'" . 
"https://www.instagram.com/explore/tags/%s/";)
     ("\\`\\(tw\\|twitter\\)\\'"   . 
"https://twitter.com/search?q=%%23%s&src=hashtag";)
@@ -187,6 +235,7 @@
 (defconst hibtypes-social-username-alist
   '(("\\`\\(fb\\|facebook\\)\\'"  . "https://www.facebook.com/%s";)
     ("\\`\\(gh\\|github\\)\\'"    . "https://github.com/%s/";)
+    ("\\`\\(gl\\|gitlab\\)\\'"    . "https://www.gitlab.com/%s/";)
     ("\\`\\(in\\|instagram\\)\\'" . "https://www.instagram.com/%s/";)
     ("\\`\\(tw\\|twitter\\)\\'"   . "https://twitter.com/search?q=@%s";)
     )
@@ -212,8 +261,8 @@ See `ibtypes::social-reference' for format details.")
 (defib social-reference ()
   "Display the web page associated with a social hashtag or username reference 
at point.
 Reference format is:
-  [facebook|git|github|instagram|twitter]?[#@]<reference> or
-  [fb|gt|gh|in|tw]?[#@]<reference>.
+  [facebook|git|github|gitlab|instagram|twitter]?[#@]<reference> or
+  [fb|gt|gh|gl|in|tw]?[#@]<reference>.
 
 The first part of the label for a button of this type is the social
 service name.  The service name defaults to the value of
@@ -257,6 +306,8 @@ listed in `hibtypes-social-inhibit-modes'."
             (hact 'git-reference after-hash-str))
            ((string-match "\\`\\(gh\\|github\\)#" ref)
             (hact 'github-reference after-hash-str))
+           ((string-match "\\`\\(gl\\|gitlab\\)#" ref)
+            (hact 'gitlab-reference after-hash-str))
            (t (hact 'social-reference service ref-kind-str after-hash-str))))))
 
 ;; Don't make this a defact or its arguments may be improperly expanded as 
pathnames.
@@ -289,10 +340,11 @@ REFERENCE is a string of one of the following forms:
 or  /<project>.
 
 <ref-item> is one of these:
-  one of the words: branches, commits, issues, pulls, or tags; the associated 
items are listed;
+  one of the words: branches, commits, contributors, issues, people or staff,
+  pulls, status or tags; the associated items are listed;
 
-  one of the words: branch, commit, issue, pull or tag followed by a '/' and
-  item id; the item is shown;
+  one of the words: branch, commit, issue, pull or tag followed by a '/' or 
'=' and 
+  an item-id; the item is shown;
 
   an issue reference given by a positive integer, e.g. 92 or prefaced with 
GH-, e.g. GH-92;
   the issue is displayed;
@@ -314,7 +366,7 @@ PROJECT value is provided, it defaults to the value of
                 (url-to-format (assoc-default "github" 
hibtypes-social-hashtag-alist #'string-match))
                 (ref-type))
             (when url-to-format
-              (cond ((string-match 
"\\`\\(branch\\|commit\\|issue\\|pull\\|tag\\)/" reference)
+              (cond ((string-match 
"\\`\\(branch\\|commit\\|issue\\|pull\\|tag\\)[/=]" reference)
                      ;; [branch | commit | issue | pull | tag]/ref-item
                      nil)
                     ((string-match "\\`/?\\(\\([^/#@]+\\)/\\)\\([^/#@]+\\)\\'" 
reference)
@@ -331,25 +383,34 @@ PROJECT value is provided, it defaults to the value of
                      ;; /project
                      (setq project (or project (match-string-no-properties 1 
reference))
                            reference nil)))
+              (when (or (and project (string-match 
"\\`\\(members\\|people\\|staff\\)\\'" project))
+                        ;; Change <org-name>/[members|people|staff] to 
/orgs/<org-name>/people.
+                        (and reference (string-match 
"\\`\\(members\\|people\\|staff\\)\\'" reference)))
+                ;; Change <org-name>/project/[people|staff] to 
/orgs/<org-name>/people.
+                (setq project user
+                      user "orgs"
+                      reference "people"))
+              (when (equal reference "contributors")
+                ;; Change /user/project/contributors to 
/user/project/graphs/contributors.
+                (setq ref-type "graphs/"
+                      reference "contributors"))
               (unless (stringp user) (setq user hibtypes-github-default-user))
               (unless (stringp project) (setq project 
hibtypes-github-default-project))
               (when reference
-                (cond ((equal user "orgs")
-                       ;; A specific organization reference
-                       (setq ref-type reference
-                             reference ""))
-                      ((member reference '("branches" "commits" "issues" 
"pulls" "tags"))
-                       ;; All branches, commits, open issues, pull requests or 
commit tags reference
+                (cond ((member reference '("branches" "commits" "contributors" 
"issues" "people" "pulls" "tags"))
+                       ;; All branches, commits, contributors, open issues, 
people, pull requests or commit tags reference
                        (setq ref-type reference
                              reference ""))
-                      ((and (< (length reference) 7) (string-match 
"\\`\\([gG][hH]-\\)?[0-9]+\\'" reference))
-                       ;; Specific issue reference
-                       (setq ref-type "issues/"))
-                      ((string-match "\\`\\(commit\\|issue\\|pull\\)/" 
reference)
+                      ((and (< (length reference) 8) (string-match 
"\\`\\([gG][hH]-\\)?[0-9]+\\'" reference))
+                       ;; Issue ref-id reference
+                       (setq ref-type "issues/"
+                             reference (substring reference (match-end 1) 
(match-end 0))))
+                      ((string-match "\\`\\(commit\\|issue\\|pull\\)[/=]" 
reference)
                        ;; Specific reference preceded by keyword branch, 
commit,
                        ;; issue, or pull
-                       (setq ref-type (substring reference 0 (match-end 0))
-                             reference (substring reference (match-end 0))))
+                       (setq ref-type (substring reference 0 (match-end 1))
+                             reference (substring reference (match-end 0))
+                             ref-type (concat ref-type (if (string-equal 
ref-type "issue") "s/" "/"))))
                       ((string-match "\\`[0-9a-f]+\\'" reference)
                        ;; Commit reference
                        (setq ref-type "commit/"))
@@ -363,7 +424,8 @@ PROJECT value is provided, it defaults to the value of
                   (funcall hibtypes-social-display-function
                            (if reference
                                (format url-to-format user project ref-type 
reference)
-                             (format url-to-format user project "" "")))
+                             ;; Remove trailing /
+                             (substring (format url-to-format user project "" 
"") 0 -1)))
                 (cond ((and (null user) (null project))
                        (error "(github-reference): Set 
`hibtypes-github-default-user' and `hibtypes-github-default-project'"))
                       ((null user)
@@ -373,6 +435,169 @@ PROJECT value is provided, it defaults to the value of
             (unless url-to-format
               (error "(github-reference): Add an entry for github to 
`hibtypes-social-hashtag-alist'"))))))
 
+;;; Remote Gitlab commit references
+
+;; Don't make this a defact or its arguments may be improperly expanded as 
pathnames.
+(defun gitlab-reference (reference &optional user project)
+  "Display the Gitlab entity associated with REFERENCE and optional USER and 
PROJECT.
+REFERENCE is a string of one of the following forms:
+    <ref-item>
+    <user>/<project>/<ref-item>
+    <project>/<ref-item>
+    /<group>/<project>
+or  /<project-or-group> (where a group is a collection of projects).
+
+<ref-item> is one of these:
+  one of the words: activity, analytics, boards or kanban, branches, commits, 
contributors,
+  groups, issues or list, jobs, labels, merge_requests, milestones, pages, 
pipelines,
+  pipeline_charts, members or people or staff, projects, pulls, schedules, 
snippets,
+  status or tags; the associated items are listed;
+
+  one of the words: branch, commit(s), issue(s), milestone(s), pull(s), 
snippet(s) or
+  tag(s) followed by a '/' or '=' and an item-id; the item is shown;
+
+  an issue reference given by a positive integer, e.g. 92 or prefaced with 
GL-, e.g. GL-92;
+  the issue is displayed;
+
+  a commit reference given by a hex number, 55a1f0; the commit diff is 
displayed;
+
+  a branch or tag reference given by an alphanumeric name, e.g. hyper20; the
+  files in the branch are listed.
+
+USER defaults to the value of `hibtypes-gitlab-default-user'.
+If given, PROJECT overrides any project value in REFERENCE.  If no
+PROJECT value is provided, it defaults to the value of
+`hibtypes-gitlab-default-project'."
+  (cond ((or (null reference) (equal reference ""))
+        (error "(gitlab-reference): Gitlab reference must not be empty"))
+       ((equal reference "status")
+        (funcall hibtypes-social-display-function "https://status.gitlab.com";))
+       (t (let ((case-fold-search t)
+                (url-to-format (assoc-default "gitlab" 
hibtypes-social-hashtag-alist #'string-match))
+                (ref-type))
+            (when url-to-format
+              (cond ((string-match 
"\\`\\(branch\\|commits?\\|issues?\\milestones?\\|pulls?\\|snippets?\\|tags?\\)[/=]"
 reference)
+                     ;; Reference to a specific ref-item
+                     nil)
+                    ((string-match "\\`/?\\(\\([^/#@]+\\)/\\)\\([^/#@]+\\)\\'" 
reference)
+                     ;; /?user/project
+                     (setq user (or user (match-string-no-properties 2 
reference))
+                           project (or project (match-string-no-properties 3 
reference))
+                           reference nil))
+                    ((string-match 
"\\`/?\\(\\([^/#@]+\\)/\\)?\\([^/#@]+\\)/\\([^#@]+\\)\\'" reference)
+                     ;; /?[user/]project/ref-item
+                     (setq user (or user (match-string-no-properties 2 
reference))
+                           project (or project (match-string-no-properties 3 
reference))
+                           reference (match-string-no-properties 4 reference)))
+                    ((string-match "\\`/\\([^/#@]+\\)\\'" reference)
+                     ;; /project
+                     (setq project (or project (match-string-no-properties 1 
reference))
+                           reference nil)))
+              (when (and (null (and user project)) (string-match 
"\\`\\(groups\\|projects\\)\\'" reference))
+                ;; List all available groups of projects or projects.
+                (setq user "explore"
+                      project (match-string-no-properties 1 reference)
+                      ref-type nil
+                      reference nil))
+              (unless (stringp user) (setq user hibtypes-gitlab-default-user))
+              (unless (stringp project) (setq project 
hibtypes-gitlab-default-project))
+              (when (equal project "pages")
+                ;; Project web pages use a reverse pages/<project> URL format
+                (setq project user
+                      user "pages"
+                      ref-type nil
+                      reference nil))
+              (when reference
+                (cond  ((string-match 
"\\`\\(analytics\\|cycle_analytics\\)\\'" reference)
+                       ;; Project analytics
+                       (setq ref-type "cycle_analytics"
+                             reference ""))
+                       ((string-match "\\`\\(boards\\|kanban\\)\\'" reference)
+                       ;; Kanban-type Issue Stage Boards
+                       (setq ref-type "boards"
+                             reference ""))
+                      ((equal reference "jobs")
+                       ;; Manual/automated project-related jobs that run
+                       (setq ref-type "-/jobs"
+                             reference ""))
+                      ((equal reference "list")
+                       ;; List all issues
+                       (setq ref-type "issues"
+                             reference ""))
+                      ((equal reference "contributors")
+                       (setq ref-type "graphs/master"
+                             reference ""))
+                      ((string-match "\\`\\(members\\|people\\|staff\\)\\'" 
reference)
+                       (setq ref-type "project_members"
+                             reference ""))
+                      ((equal reference "pipeline_charts")
+                       ;; Continuous Integration Pipeline Charts
+                       (setq ref-type "pipelines/charts"
+                             reference ""))
+                      ((equal reference "pulls")
+                       ;; Merge requests for the project
+                       (setq ref-type "merge_requests"
+                             reference ""))
+                      ((equal reference "schedules")
+                       ;; Schedules for CI Pipelines
+                       (setq ref-type "pipeline_schedules"
+                             reference ""))
+                      ((string-match "\\`\\(service\\|service_desk\\)\\'" 
reference)
+                       ;; Project help desk 
+                       (setq ref-type "issues/service_desk"
+                             reference ""))
+                      ((member reference '("activity" "branches" "commits" 
"issues" "labels"
+                                           "merge_requests" "milestones" 
"pages" "pipelines"
+                                           "snippets" "tags"))
+                       ;; All activity, branches, commits, cycle analytics, 
open issues, issue labels,
+                       ;; members, merge requests, milestones, web pages, pull 
requests, code snippets
+                       ;; or commit tags reference
+                       (setq ref-type reference
+                             reference ""))
+                      ((and (< (length reference) 8) (string-match 
"\\`\\([gG][lL]-\\)?[0-9]+\\'" reference))
+                       ;; Issue ref-id reference
+                       (setq ref-type "issues/"
+                             reference (substring reference (match-end 1) 
(match-end 0))))
+                      ((string-match "\\`label[/=]" reference)
+                       ;; Labeled category of issues
+                       (setq ref-type "issues?label_name%5B%5D="
+                             reference (substring reference (match-end 0))))
+                      ((string-match 
"\\`\\(commit\\|issues\\|milestones\\|pull\\|snippets\\|tags\\)[/=]" reference)
+                       ;; Ref-id preceded by a keyword
+                       (setq ref-type (concat (substring reference 0 
(match-end 1)) "/")
+                             reference (substring reference (match-end 0))))
+                      ((string-match 
"\\`\\(issue\\|milestone\\|snippet\\|tag\\)[/=]" reference)
+                       ;; Ref-id preceded by a singular keyword that must be 
converted to plural
+                       (setq ref-type (concat (substring reference 0 
(match-end 1)) "s/")
+                             reference (substring reference (match-end 0))))
+                      ((string-match "\\`\\(commit\\|pull\\)s[/=]" reference)
+                       ;; Ref-id preceded by a plural keyword that must be 
converted to singular
+                       (setq ref-type (concat (substring reference 0 
(match-end 1)) "/")
+                             reference (substring reference (1+ (match-end 
0)))))
+                      ((string-match "\\`[0-9a-f]+\\'" reference)
+                       ;; Commit reference
+                       (setq ref-type "commit/"))
+                      (t
+                       ;; Specific branch or commit tag reference
+                       (setq ref-type "tree/")
+                       (when (string-match "\\`\\(branch\\|tag\\)[/=]" 
reference)
+                         ;; If preceded by optional keyword, remove that from 
the reference.
+                         (setq reference (substring reference (match-end 
0)))))))
+              (if (and (stringp user) (stringp project))
+                  (funcall hibtypes-social-display-function
+                           (setq a (if reference
+                               (format url-to-format user project ref-type 
reference)
+                               ;; Remove trailing /
+                               (substring (format url-to-format user project 
"" "") 0 -1))))
+                (cond ((and (null user) (null project))
+                       (error "(gitlab-reference): Set 
`hibtypes-gitlab-default-user' and `hibtypes-gitlab-default-project'"))
+                      ((null user)
+                       (error "(gitlab-reference): Set 
`hibtypes-gitlab-default-user'"))
+                      (t
+                       (error "(gitlab-reference): Set 
`hibtypes-gitlab-default-project'")))))
+            (unless url-to-format
+              (error "(gitlab-reference): Add an entry for gitlab to 
`hibtypes-social-hashtag-alist'"))))))
+
 ;;; Local git repository commit references
 
 (defib git-commit-reference ()
diff --git a/hibtypes.el b/hibtypes.el
index 4e5b07f..8daddb0 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -1,18 +1,18 @@
 ;;; hibtypes.el --- GNU Hyperbole default implicit button types
 ;;
-;; Author:       Bob Weiner
+;; Author: Bob Weiner
 ;;
-;; Orig-Date:    19-Sep-91 at 20:45:31
+;; Orig-Date: 19-Sep-91 at 20:45:31
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
-;;
 ;;; Commentary:
 ;;
-;;   Implicit button types in this file are defined in increasing order
-;;   of priority within this file (last one is highest priority).
+;;   Implicit button types in this file are defined in increasing
+;;   order of priority within this file (last one is highest
+;;   priority).
 
 ;;; Code:
 ;;; ************************************************************************
@@ -60,11 +60,11 @@
 ;;; ************************************************************************
 ;;; Public implicit button types
 ;;; ************************************************************************
-  
+
 (run-hooks 'hibtypes-begin-load-hook)
 
 ;;; ========================================================================
-;;; Follows Org mode links by invoking a web browser.
+;;; Follows Org mode links and radio targets and cycles Org heading views
 ;;; ========================================================================
 
 (require 'hsys-org)
@@ -74,9 +74,10 @@
 ;;; ========================================================================
 
 (defvar mail-address-mode-list
-  '(emacs-lisp-mode lisp-interaction-mode lisp-mode scheme-mode c-mode
-    c++-mode html-mode java-mode js2-mode objc-mode python-mode
-    smalltalk-mode fundamental-mode text-mode indented-text-mode web-mode) 
+  '(emacs-lisp-mode lisp-interaction-mode lisp-mode scheme-mode
+    c-mode c++-mode html-mode java-mode js2-mode objc-mode
+    python-mode smalltalk-mode fundamental-mode text-mode
+    indented-text-mode web-mode)
   "List of major modes in which mail address implicit buttons are active.")
 
 (defun mail-address-at-p ()
@@ -125,20 +126,24 @@ any buffer attached to a file in `hyrolo-file-list', or 
any buffer with
 
 (defib pathname ()
   "Makes 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.  Emacs Lisp library files (filenames without any directory component
-that end in .el and .elc) are looked up using the `load-path' directory list.
+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
+\"${hyperb:dir}/DEMO#POSIX and MSWindows Paths\" for details).
+Emacs Lisp library files (filenames without any directory
+component that end in .el and .elc) are looked up using the
+`load-path' directory list.
 
 See `hpath:at-p' function documentation for possible delimiters.
-See `hpath:suffixes' variable documentation for suffixes that are added to or
-removed from pathname when searching for a valid match.
-See `hpath:find' function documentation for special file display options."
+See `hpath:suffixes' variable documentation for suffixes that are
+added to or removed from pathname when searching for a valid
+match.  See `hpath:find' function documentation for special file
+display options."
   ;;
   ;; Ignore paths in Buffer menu, dired and helm modes.
   (unless (or (eq major-mode 'helm-major-mode)
-             (delq nil (mapcar (lambda (substring) (string-match
-                                                    substring 
(format-mode-line mode-name)))
+             (delq nil (mapcar (lambda (substring)
+                                 (string-match substring (format-mode-line 
mode-name)))
                                '("Buffer Menu" "IBuffer" "Dired"))))
     (let ((path (hpath:at-p))
          full-path)
@@ -174,9 +179,15 @@ See `hpath:find' function documentation for special file 
display options."
                  ))))))
 
 ;;; ========================================================================
-;;; Displays files at specific lines and optional column number locations.
+;;; Displays files at specific lines and optional column number
+;;; locations.
 ;;; ========================================================================
 
+(defconst hibtypes-path-line-and-col-regexp
+  ;; Allow for 'c:' single letter drive prefixes on MSWindows and
+  ;; Elisp vars with colons in them.
+  "\\([^ 
\t\n\r\f:][^\t\n\r\f:]+\\(:[^0-9\t\n\r\f]*\\)*\\):\\([0-9]+\\)\\(:\\([0-9]+\\)\\)?$")
+
 (defib pathname-line-and-column ()
   "Makes a valid pathname:line-num[:column-num] pattern display the path at 
line-num and optional column-num.
 Also works for remote pathnames.
@@ -187,12 +198,11 @@ removed from pathname when searching for a valid match.
 See `hpath:find' function documentation for special file display options."
   (let ((path-line-and-col (hpath:delimited-possible-path)))
     (if (and (stringp path-line-and-col)
-            (string-match "\\([^ \t\n\r:]+\\):\\([0-9]+\\)\\(:\\([0-9]+\\)\\)?"
-                          path-line-and-col))
-       (let ((file (expand-file-name (match-string-no-properties 1 
path-line-and-col)))
-             (line-num (string-to-number (match-string-no-properties 2 
path-line-and-col)))
-             (col-num (if (match-end 3) (string-to-number 
(match-string-no-properties
-                                                           4 
path-line-and-col)))))
+            (string-match hibtypes-path-line-and-col-regexp path-line-and-col))
+       (let ((file (save-match-data (expand-file-name (hpath:substitute-value 
(match-string-no-properties 1 path-line-and-col)))))
+             (line-num (string-to-number (match-string-no-properties 3 
path-line-and-col)))
+             (col-num (if (match-end 4) (string-to-number 
(match-string-no-properties
+                                                           5 
path-line-and-col)))))
          (when (save-match-data (setq file (hpath:is-p file)))
            (ibut:label-set file (match-beginning 1) (match-end 1))
            (if col-num
@@ -241,29 +251,6 @@ current major mode is one handled by func-menu."
                (hact 'function-in-buffer function-name function-pos)))))))
 
 ;;; ========================================================================
-;;; Use the Emacs imenu library to jump to definition of an identifier
-;;; defined in the same file in which it is referenced.  Identifier
-;;; references across files are handled separately by clauses within
-;;; the `hkey-alist' variable.
-;;; ========================================================================
-
-;;; This implicit button type is not needed because hkey-alist handles imenu 
items.
-;; (defib imenu-item ()
-;;   "Displays the in-buffer definition of an identifier that point is within 
or after, else nil.
-;; This triggers only when imenu has already been used to generate an 
in-buffer item index."
-;;   (when (and (featurep 'imenu) imenu--index-alist)
-;;     (save-excursion
-;;       (skip-syntax-backward "w_")
-;;       (if (looking-at "\\(\\sw\\|\\s_\\)+")
-;;       (let* ((item-name (buffer-substring-no-properties (point) (match-end 
0)))
-;;              (start (point))
-;;              (end (match-end 0))
-;;              (item-pos (imenu-item-p item-name)))
-;;         (when item-pos
-;;           (ibut:label-set item-name start end)
-;;           (hact 'imenu-display-item-where item-name item-pos)))))))
-
-;;; ========================================================================
 ;;; Handles internal references within an annotated bibliography, delimiters=[]
 ;;; ========================================================================
 
@@ -278,7 +265,7 @@ must have an attached file."
        (let ((chr (aref (buffer-name) 0)))
         (not (or (eq chr ?\ ) (eq chr ?*))))
        (not (or (derived-mode-p 'prog-mode)
-               (memq major-mode '(c-mode objc-mode c++-mode java-mode 
markdown-mode))))
+               (apply #'derived-mode-p '(c-mode objc-mode c++-mode java-mode 
markdown-mode org-mode))))
        (let* ((ref-and-pos (hbut:label-p t "[" "]" t))
              (ref (car ref-and-pos)))
         (and ref (eq ?w (char-syntax (aref ref 0)))
@@ -333,10 +320,11 @@ Returns t if jumps and nil otherwise."
             ;; Leave point on the link even if not activated
             ;; here, so that code elsewhere activates it.
             (if (and (markdown-link-p)
-                     (not (or (hpath:www-at-p) (hpath:at-p))))
-                ;; In-file referents will be handled later by the
-                ;; pathname implicit type, not here.
-                (progn (hpath:display-buffer (current-buffer))
+                     (save-match-data (not (or (hpath:www-at-p) 
(hpath:at-p)))))
+                ;; In-file referents are handled by the 
'markdown-internal-link'
+                ;; implicit button type, not here.
+                (progn (ibut:label-set (match-string-no-properties 0) 
(match-beginning 0) (match-end 0))
+                       (hpath:display-buffer (current-buffer))
                        (hact 'markdown-follow-link-at-point))))
     (goto-char opoint)
     nil))
@@ -352,6 +340,7 @@ Returns t if jumps and nil otherwise."
                 ;; Follows a reference link or footnote to its referent.
                 (if (markdown-follow-link-p)
                     (when (/= opoint (point))
+                      (ibut:label-set (match-string-no-properties 0) 
(match-beginning 0) (match-end 0))
                       (setq npoint (point))
                       (goto-char opoint)
                       (hact 'link-to-file buffer-file-name npoint))
@@ -361,6 +350,7 @@ Returns t if jumps and nil otherwise."
               ;; link itself and follow that.
               (error (markdown-follow-inline-link-p opoint))))
            ((markdown-wiki-link-p)
+            (ibut:label-set (match-string-no-properties 0) (match-beginning 0) 
(match-end 0))
             (hpath:display-buffer (current-buffer))
             (hact 'markdown-follow-wiki-link-at-point))))))
             
@@ -631,15 +621,115 @@ Requires the Emacs builtin Tramp library for ftp file 
retrievals."
           (hact 'man topic)))))
 
 ;;; ========================================================================
-;;; Follows links to Hyperbole Koutliner cells.
-;;; ========================================================================
-
-;;; ========================================================================
-;;; Jumps to source line associated with grep or compilation error messages.
-;;; Also supports ripgrep (rg command).
+;;; Links to Hyperbole button types 
+;;; ========================================================================
+
+
+(defconst elink:start "<elink:"
+  "String matching the start of a link to a Hyperbole explicit button.")
+(defconst elink:end   ">"
+  "String matching the end of a link to a Hyperbole explicit button.")
+
+(defib link-to-ebut ()
+  "At point, activates a link to an explicit button.
+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))))
+        (start-pos (nth 1 label-key-start-end))
+        (end-pos (nth 2 label-key-start-end)))
+    (when lbl-key
+      (ibut:label-set (ebut:key-to-label lbl-key) start-pos end-pos)
+      (hact 'link-to-ebut ebut-key))))
+
+(defconst glink:start "<glink:"
+  "String matching the start of a link to a Hyperbole global button.")
+(defconst glink:end   ">"
+  "String matching the end of a link to a Hyperbole global button.")
+
+(defib link-to-gbut ()
+  "At point, activates 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>."
+  (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))))
+        (start-pos (nth 1 label-key-start-end))
+        (end-pos (nth 2 label-key-start-end)))
+    (when lbl-key
+      (ibut:label-set (ebut:key-to-label lbl-key) start-pos end-pos)
+      (hact 'link-to-gbut gbut-key))))
+
+(defconst ilink:start "<ilink:"
+  "String matching the start of a link to a Hyperbole implicit button.")
+(defconst ilink:end   ">"
+  "String matching the end of a link to a Hyperbole implicit button.")
+
+(defib link-to-ibut ()
+  "At point, activates a link to an implicit button.
+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))))
+        (start-pos (nth 1 label-key-start-end))
+        (end-pos (nth 2 label-key-start-end)))
+    (when lbl-key
+      (ibut:label-set (ibut:key-to-label lbl-key) start-pos end-pos)
+      (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.
 ;;; ========================================================================
 
+(defib 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)."
+  ;; Locate and parse ipython stack trace messages found in any buffer other 
than a
+  ;; helm completion buffer.
+  ;;
+  ;; Sample ipython stack trace command output:
+  ;;
+  ;; ~/Dropbox/py/inview/inview_pr.py in ap(name_filter, value_filter, 
print_func)
+  ;; 1389     apc(name_filter, value_filter, print_func, defined_only=True)
+  ;; 1390     print('\n**** Modules/Packages ****')
+  ;; -> 1391     apm(name_filter, value_filter, print_func, defined_only=True)
+  ;; 1392
+  ;; 1393 def apa(name_filter=None, value_filter=None, print_func=pd1, 
defined_only=False):
+  (unless (eq major-mode 'helm-major-mode)
+    (save-excursion
+      (beginning-of-line)
+      (let ((line-num-regexp "\\( *\\|-+> \\)?\\([1-9][0-9]*\\) ")
+           line-num
+           file)
+       (when (looking-at line-num-regexp)
+         ;; ipython stack trace matches and context lines (-A<num> option)
+         (setq line-num (match-string-no-properties 2)
+               file nil)
+         (while (and (= (forward-line -1) 0)
+                     (looking-at line-num-regexp)))
+         (unless (or (looking-at line-num-regexp)
+                     (not (re-search-forward " in " nil (point-at-eol)))
+                     (and (setq file (buffer-substring-no-properties 
(point-at-bol) (match-beginning 0)))
+                          (string-empty-p (string-trim file))))
+           (let* ((but-label (concat file ":" line-num))
+                  (source-loc (if (file-name-absolute-p file)
+                                  nil
+                                (hbut:key-src t))))
+             (if (stringp source-loc)
+                 (setq file (expand-file-name file (file-name-directory 
source-loc))))
+             (when (file-readable-p file)
+               (setq line-num (string-to-number line-num))
+               (ibut:label-set but-label)
+               (hact 'link-to-file-line file line-num)))))))))
+
 (defib ripgrep-msg ()
   "Jumps to line associated with a ripgrep (rg) line numbered msg.
 Ripgrep outputs each pathname once followed by all matching lines in that 
pathname.
@@ -666,12 +756,14 @@ buffer)."
       (beginning-of-line)
       (when (looking-at "\\([1-9][0-9]*\\)[-:]")
        ;; Ripgrep matches and context lines (-A<num> option)
-       (let ((line-num (match-string-no-properties 1)))
+       (let ((line-num (match-string-no-properties 1))
+             file)
          (while (and (= (forward-line -1) 0)
                      (looking-at "[1-9][0-9]*[-:]\\|--$")))
-         (unless (looking-at "[1-9][0-9]*[-:]\\|--$")
-           (let* ((file (buffer-substring-no-properties (point-at-bol) 
(point-at-eol)))
-                  (but-label (concat file ":" line-num))
+         (unless (or (looking-at "[1-9][0-9]*[-:]\\|--$")
+                     (and (setq file (buffer-substring-no-properties 
(point-at-bol) (point-at-eol)))
+                          (string-empty-p (string-trim file))))
+           (let* ((but-label (concat file ":" line-num))
                   (source-loc (if (file-name-absolute-p file) nil
                                 (hbut:key-src t))))
              (if (stringp source-loc)
@@ -693,7 +785,7 @@ in grep and shell buffers."
       (beginning-of-line)
       (if (or
           ;; Grep matches, UNIX C compiler and Introl 68HC11 C compiler errors
-          (looking-at "\\([^ \t\n\r:]+\\): ?\\([1-9][0-9]*\\)[ :]")
+          (looking-at "\\([^ \t\n\r:]+\\)[:\^@] ?\\([1-9][0-9]*\\)[ :]")
           ;; HP C compiler errors
           (looking-at "[a-zA-Z0-9]+: \"\\([^\t\n\r\",]+\\)\", line 
\\([0-9]+\\):")
           ;; BSO/Tasking 68HC08 C compiler errors
@@ -738,13 +830,14 @@ This works with JavaScript and Python tracebacks, gdb, 
dbx, and xdb.  Such lines
   (save-excursion
     (beginning-of-line)
     (cond
-     ;; Python pdb
-     ((looking-at ".+ File \"\\([^\"\n\r]+\\)\", line \\([0-9]+\\)")
-      (let* ((file (match-string-no-properties 1))
-            (line-num (match-string-no-properties 2))
+     ;; Python pdb or traceback, pytype error
+     ((or (looking-at "\\(^\\|.+ \\)File \"\\([^\"\n\r]+\\)\", line 
\\([0-9]+\\)")
+         (looking-at ">?\\(\\s-+\\)\\([^\"()\n\r]+\\)(\\([0-9]+\\))\\S-"))
+      (let* ((file (match-string-no-properties 2))
+            (line-num (match-string-no-properties 3))
             (but-label (concat file ":" line-num)))
        (setq line-num (string-to-number line-num))
-       (ibut:label-set but-label (match-beginning 1) (match-end 1))
+       (ibut:label-set but-label (match-beginning 2) (match-end 2))
        (hact 'link-to-file-line file line-num)))
 
      ;; JavaScript traceback
@@ -1015,8 +1108,11 @@ Activates only if point is within the first line of the 
Info-node name."
                               (hbut:label-p t "``" "''" t t)
                               ;; Regular open and close quotes
                               (hbut:label-p t "`" "'" t t)))
-        (node-ref (hpath:is-p (car node-ref-and-pos) nil t)))
-    (and node-ref (string-match "\\`([^\):]+)" node-ref)
+        (ref (car node-ref-and-pos))
+        (node-ref (and (stringp ref)
+                       (string-match "\\`([^\):]+)" ref)
+                       (hpath:is-p (car node-ref-and-pos) nil t))))
+    (and node-ref
         (ibut:label-set node-ref-and-pos)
         (hact 'link-to-Info-node node-ref))))
 
diff --git a/hinit.el b/hinit.el
index 6f54d65..c9df41b 100644
--- a/hinit.el
+++ b/hinit.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:     1-Oct-91 at 02:32:51
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -43,10 +43,7 @@
   (interactive)
   (unless (featurep 'infodock)
     ;; Initialize now since Emacs startup has finished.
-    (if (and (or (not (featurep 'xemacs))
-                 (and (boundp 'current-menubar) current-menubar))
-            after-init-time)
-       (hyperbole-menubar-menu)
+    (if after-init-time        (hyperbole-menubar-menu)
       ;; Defer initialization until after Emacs startup.  This really is 
needed.
       (add-hook 'after-init-hook #'hyperbole-menubar-menu))
     ;; Avoid returning the large Hyperbole menu.
@@ -59,18 +56,8 @@
 ;;;###autoload
 (defmacro hui-menu-remove (menu-sym &optional keymap)
   "Remove MENU-SYM menu from any menubars generated by optional KEYMAP or the 
global-map."
-  `(prog1 (cond ((not (featurep 'xemacs))
-                (if (null ,keymap) (setq keymap global-map))
-                (define-key (or ,keymap global-map) [menu-bar ,menu-sym] nil))
-               ;; XEmacs
-               ((boundp 'menubar-configuration)
-                (if (memq ',menu-sym menubar-configuration)
-                    (if (fboundp 'customize-set-variable)
-                        (customize-set-variable
-                         'menubar-configuration
-                         (delq ',menu-sym  menubar-configuration))
-                      (setq menubar-configuration 
-                            (delq ',menu-sym menubar-configuration))))))
+  `(prog1 (if (null ,keymap) (setq keymap global-map))
+     (define-key (or ,keymap global-map) [menu-bar ,menu-sym] nil)
      ;; Force a menu-bar update.
      (force-mode-line-update)))
 
diff --git a/hload-path.el b/hload-path.el
index 77f2214..6204e44 100644
--- a/hload-path.el
+++ b/hload-path.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    29-Jun-16 at 14:39:33
 ;;
-;; Copyright (C) 1992-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1992-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -44,8 +44,8 @@ It must end with a directory separator character.")
 ;; Perform Koutliner initializations.
 
 (add-to-list 'load-path (expand-file-name "kotl/" hyperb:dir))
-;; Invoke kotl-mode for files ending in ".kotl".  Also
-;; allow ".kot" for DOS and Windows users.
+;; Invoke kotl-mode for files ending in ".kotl".
+;; Also allow ".kot" for DOS and Windows users.
 (add-to-list 'auto-mode-alist '("\\.kotl?\\'" . kotl-mode))
 
 (provide 'hload-path)
diff --git a/hmh.el b/hmh.el
index 38ac5c9..919903b 100644
--- a/hmh.el
+++ b/hmh.el
@@ -1,4 +1,4 @@
-;;; hmh.el ---  GNU Hyperbole buttons in mail reader: Mh
+;;; hmh.el --- GNU Hyperbole buttons in mail reader: Mh
 ;;
 ;; Author:       Bob Weiner
 ;;
diff --git a/hmouse-drv.el b/hmouse-drv.el
index 792f145..8142cdf 100644
--- a/hmouse-drv.el
+++ b/hmouse-drv.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    04-Feb-90
 ;;
-;; Copyright (C) 1989-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1989-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -16,24 +16,12 @@
 ;;; Other required Elisp libraries
 ;;; ************************************************************************
 
-;; Keep this here at the top to prevent recursive reloads from
-;; Hyperbole autoload commands.
-(provide 'hmouse-drv)
-
-(if (and (boundp 'hmouse-alist) hmouse-alist)
-    (require 'hui-window)
-  ;; Force re-definition of hmouse-alist.
-  (makunbound 'hmouse-alist)
-  ;; Define hmouse-alist.
-  (load "hui-mouse")
-  ;; Add drag actions to hmouse-alist.
-  (load "hui-window"))
+(require 'hui-window)
 (require 'hypb)
 
 ;; Quiet byte compiler warnings for these free variables.
-(eval-when-compile
-  (defvar hkey-action nil)
-  (defvar pred-value nil))
+(defvar hkey-action)
+(defvar pred-value)
 
 ;;; ************************************************************************
 ;;; Public variables
@@ -215,7 +203,7 @@ Any ARGS will be passed to `hmouse-function'."
             (setq action-key-cancelled nil
                   assist-key-depressed-flag nil))
            (assist-key-depressed-flag
-            (hmouse-function nil nil args))
+            (hmouse-function nil nil args))
            ((hkey-mouse-help nil args))
            (t
             (run-hooks 'action-key-release-hook)
@@ -250,13 +238,8 @@ Any ARGS will be passed to `hmouse-function'."
            hkey-value nil))))
 
 ;;; Smart Key Commands
-(defun action-key ()
-  "Use one key to perform functions that vary by context.
-If no matching context is found, the default function set with
-the `action-key-default-function' variable is run.  Return t
-unless the `action-key-default-function' variable is not bound to
-a valid function."
-  (interactive)
+(defun action-key-clear-variables ()
+  "Clear all Action Key variables."
   ;; Clear all these variables so there can be no confusion between
   ;; mouse presses and keyboard presses.
   (setq action-key-depress-prev-point nil
@@ -266,7 +249,29 @@ a valid function."
        action-key-release-position nil
        action-key-release-args nil
        action-key-release-window nil
-       action-key-release-prev-point nil)
+       action-key-release-prev-point nil))
+
+(defun assist-key-clear-variables ()
+  "Clear all Assist Key variables."
+  ;; Clear all these variables so there can be no confusion between
+  ;; mouse presses and keyboard presses.
+  (setq assist-key-depress-prev-point nil
+       assist-key-depress-position nil
+       assist-key-depress-args nil
+       assist-key-depress-window nil
+       assist-key-release-position nil
+       assist-key-release-args nil
+       assist-key-release-window nil
+       assist-key-release-prev-point nil))
+
+(defun action-key ()
+  "Use one key to perform functions that vary by context.
+If no matching context is found, the default function set with
+the `action-key-default-function' variable is run.  Return t
+unless the `action-key-default-function' variable is not bound to
+a valid function."
+  (interactive)
+  (action-key-clear-variables)
   (prog1 (action-key-internal)
     (run-hooks 'action-key-depress-hook 'action-key-release-hook)))
 
@@ -287,16 +292,7 @@ the `assist-key-default-function' variable is run.  Return
 non-nil unless `assist-key-default-function' variable is not
 bound to a valid function."
   (interactive)
-  ;; Clear all these variables so there can be no confusion between
-  ;; mouse presses and keyboard presses.
-  (setq assist-key-depress-prev-point nil
-       assist-key-depress-position nil
-       assist-key-depress-args nil
-       assist-key-depress-window nil
-       assist-key-release-position nil
-       assist-key-release-args nil
-       assist-key-release-window nil
-       assist-key-release-prev-point nil)
+  (assist-key-clear-variables)
   (prog1 (assist-key-internal)
     (run-hooks 'assist-key-depress-hook 'assist-key-release-hook)))
 
@@ -337,7 +333,7 @@ bound to a valid function."
 
 The ace-window package, (see 
\"https://elpa.gnu.org/packages/ace-window.html\";),
 assigns short ids to each Emacs window and lets you jump to or
-operate upon a specific window by giving its letter.  Hyperbole
+operate upqon a specific window by giving its letter.  Hyperbole
 can insert an operation into ace-window that allows you to
 display items such as dired or buffer menu items in a specific
 window.
@@ -358,36 +354,41 @@ window, use {M-o i <id-of-window-to-display-item-in>} and 
watch the
 magic happen."
   (require 'ace-window)
   (when key (global-set-key key 'ace-window))
+  (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
+       ;; allows {i} operation to work when only 2 windows exist
+       aw-dispatch-always t)
   ;; New ace-window frames (window id = z) inherit the size of the
   ;; prior selected frame; same as HyWindow.
   (setq aw-frame-size '(0 . 0)
        aw-dispatch-alist (delq (assq ?t aw-dispatch-alist)
                                (delq (assq ?r aw-dispatch-alist)
                                      (delq (assq ?i aw-dispatch-alist) 
aw-dispatch-alist))))
-  (push '(?i hkey-drag-to "Hyperbole: Drag To") aw-dispatch-alist)
+  (push '(?i hkey-drag-item "Hyperbole: Drag Item") aw-dispatch-alist)
   ;; Ace-window includes ?m as the swap windows key, so it is not added here.
   (push '(?r hkey-replace "Hyperbole: Replace Here") aw-dispatch-alist)
   (push '(?t hkey-throw   "Hyperbole: Throw To") aw-dispatch-alist)
-  (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
-       ;; allows {i} operation to work when only 2 windows exist
-       aw-dispatch-always t)
   (ace-window-display-mode 1))
 
 ;;;###autoload
 (defun hkey-drag (release-window)
-  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
+  "Emulate Smart Mouse Key drag from the selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
 The drag action determines the final selected window.
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
+Optional prefix arg non-nil means emulate Assist Key rather than the
 Action Key.
 
 Works only when running under a window system, not from a dumb terminal."
+  ;; Note: Cannot add start-window as first parameter to this function
+  ;; because it is called like many other functions herein with a
+  ;; single release-window argument by 'hmouse-choose-windows'.
+
   ;; Cancel any partial drag that may have been recorded.
   (interactive (list (aw-select " Ace - Hyperbole: Drag")))
   (condition-case nil
-      ;; This may trigger a No Action error if start-window and
-      ;; release-window are the same; in that case, use the error
-      ;; handler to handle dragging an item.
+      ;; This may trigger a No Action error if starting window
+      ;; (window of depress) and release-window are the same; in that
+      ;; case: use the error handler to emulate dragging an item if on
+      ;; one.
       (progn (if current-prefix-arg
                 (setq assist-key-depressed-flag nil)
               (setq action-key-depressed-flag nil))
@@ -404,7 +405,7 @@ Works only when running under a window system, not from a 
dumb terminal."
 After the drag, the selected window remains the same as it was before
 the drag.
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
+Optional prefix arg non-nil means emulate Assist Key rather than the
 Action Key.
 
 Works only when running under a window system, not from a dumb terminal."
@@ -416,25 +417,75 @@ Works only when running under a window system, not from a 
dumb terminal."
        (hypb:select-window-frame start-window)))))
 
 ;;;###autoload
+(defun hkey-drag-item (release-window)
+  "Emulate Smart Mouse Key drag from an item in a selected window to 
RELEASE-WINDOW, interactively chosen via ace-window.
+RELEASE-WINDOW is left selected unless point is not on an item, in
+which case, an error is signalled.
+
+Optional prefix arg non-nil means emulate Assist Key rather than the
+Action Key.
+
+Works only when running under a window system, not from a dumb terminal."
+  (interactive
+   (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?i 
aw-dispatch-alist)))))
+          (aw-select mode-line-text))))
+  (let ((start-window (if (and (boundp 'start-window) (window-live-p 
start-window))
+                         start-window
+                       (if current-prefix-arg
+                           assist-key-depress-window
+                         action-key-depress-window)))
+       at-item-flag)
+    (unless (window-live-p start-window)
+      (setq start-window (selected-window)))
+    (cond ((and (setq at-item-flag (hmouse-at-item-p))
+               (window-live-p release-window))
+          (hkey-drag release-window)
+          ;; Leave release-window selected
+          (when (window-live-p release-window)
+            (hypb:select-window-frame release-window)))
+         (at-item-flag
+          (error "(hkey-drag-item): No listing item at point"))
+         (t ;; No item at point or selected release is invalid
+          (error "(hkey-drag-item): Invalid final window, %s" 
release-window)))))
+
+;;;###autoload
 (defun hkey-drag-to (release-window)
-  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
+  "Emulate Smart Mouse Key drag from a selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
 If an item is dragged to RELEASE-WINDOW, then RELEASE-WINDOW is selected;
-otherwise, the drag action determines the selected window.
+otherwise, the drag action determines the selected window.  If no drag
+has taken place, then the selected window's buffer is displayed in
+RELEASE-WINDOW and that becomes the selected window.
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
+Optional prefix arg non-nil means emulate Assist Key rather than the
 Action Key.
 
 Works only when running under a window system, not from a dumb terminal."
   (interactive
    (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?i 
aw-dispatch-alist)))))
           (aw-select mode-line-text))))
-  (if (and (hmouse-at-item-p) (window-live-p release-window))
-      (progn (hkey-drag release-window)
-            ;; Leave release-window selected
-            (when (window-live-p release-window)
-              (hypb:select-window-frame release-window)))
-    ;; Leave hkey-drag to choose selected window
-    (hkey-drag release-window)))
+  (let ((start-window (if (and (boundp 'start-window) (window-live-p 
start-window))
+                         start-window
+                       (if current-prefix-arg
+                           assist-key-depress-window
+                         action-key-depress-window))))
+    (unless (window-live-p start-window)
+      (setq start-window (selected-window)))
+    (if (and (hmouse-at-item-p) (window-live-p release-window))
+       (progn (hkey-drag release-window)
+              ;; Leave release-window selected
+              (when (window-live-p release-window)
+                (hypb:select-window-frame release-window)))
+      ;; Leave hkey-drag to choose final selected window
+      (hkey-drag release-window)
+      ;; (if (eq start-window release-window)
+      ;;         ;; Leave hkey-drag to choose final selected window
+      ;;         (hkey-drag release-window)
+      ;;       ;; Replace release window's buffer with selected
+      ;;       ;; window's buffer.
+      ;;       (hkey-buffer-to start-window release-window)
+      ;;       (when (window-live-p release-window)
+      ;;         (hypb:select-window-frame release-window)))
+      )))
 
 ;;;###autoload
 (defun hkey-replace (release-window)
@@ -454,38 +505,63 @@ Leave TO-WINDOW as the selected window."
           (aw-select mode-line-text))))
   (hkey-swap-buffers (selected-window) to-window))
 
+;; Once the "display-until.el" library is added to Emacs, hkey-throw can be 
simplified to the following:
+;;
+;; (defun hkey-throw (release-window)
+;;   "Throw either a displayable item at point or the current buffer for 
display in RELEASE-WINDOW.
+;; The selected window does not change."
+;;   (interactive
+;;    (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?t 
aw-dispatch-alist)))))
+;;            (aw-select mode-line-text))))
+;;   (if (cadr (assq major-mode hmouse-drag-item-mode-forms))
+;;       ;; Throw the item at point
+;;       (let ((action-key-depress-window (selected-window))
+;;             (action-key-release-window release-window)
+;;             (action-key-depress-args))
+;;         (hmouse-item-to-window)
+;;         (select-window action-key-depress-window)
+;;         (display-window-until release-window))
+;;     ;; Throw the current buffer
+;;     (display-window-until release-window (current-buffer))))
+
 ;;;###autoload
 (defun hkey-throw (release-window)
-  "Throw either a displayable item at point or the current buffer to 
RELEASE-WINDOW.
+  "Throw either a displayable item at point or the current buffer for display 
in RELEASE-WINDOW.
 The selected window does not change."
   (interactive
    (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?t 
aw-dispatch-alist)))))
           (aw-select mode-line-text))))
-  (let ((depress-frame (selected-frame)))
+  (let ((depress-frame (selected-frame))
+       (display-delay (if (boundp 'temp-display-delay)
+                          temp-display-delay
+                        0.5)))
     (if (cadr (assq major-mode hmouse-drag-item-mode-forms))
-       ;; On an item to throw
+       ;; Throw the item at point
        (let ((action-key-depress-window (selected-window))
              (action-key-release-window release-window)
              (action-key-depress-args))
          (hypb:save-selected-window-and-input-focus
           (hmouse-item-to-window)
           (unless (eq depress-frame (window-frame release-window))
-            (message "Buffer or item thrown to frame under this one")
+            ;; Force redisplay or item buffer won't be displayed here.
+            (redisplay t)
             ;; Show the frame thrown to before it is covered when
             ;; input-focus is returned to the depress-frame.
-            ;;   (raise-frame (window-frame release-window))
-            ;;   (sit-for 1)
+            (raise-frame (window-frame release-window))
+            ;; Don't use sit-for here because it can be interrupted early.
+            (sleep-for display-delay)
             )))
       ;; Throw the current buffer
       (set-window-buffer release-window (current-buffer))
       (unless (eq depress-frame (window-frame release-window))
-       (message "Buffer or item thrown to frame under this one")
+       ;; Force redisplay or item buffer won't be displayed here.
+       (redisplay t)
        ;; Show the frame thrown to before it is covered when
        ;; input-focus is returned to the depress-frame.
-       ;;   (raise-frame (window-frame release-window))
-       ;;   (sit-for 1)
-       ;;   (select-frame-set-input-focus depress-frame)
-       ))))
+       (raise-frame (window-frame release-window))
+       ;; Don't use sit-for here because it can be interrupted early.
+       (sleep-for display-delay)
+       (select-frame-set-input-focus depress-frame)))))
 
 ;;;###autoload
 (defun hkey-buffer-to (from-window to-window)
@@ -531,6 +607,14 @@ The selected window does not change."
   (hmouse-choose-windows #'hkey-drag-stay))
 
 ;;;###autoload
+(defun hmouse-click-to-drag-item ()
+  "Mouse click on start and end windows for use with `hkey-drag-item'.
+Emulate {M-o i} from start window to end window.
+After the drag, the end window is the selected window."
+  (interactive)
+  (hmouse-choose-windows #'hkey-drag-item))
+
+;;;###autoload
 (defun hmouse-click-to-drag-to ()
   "Mouse click on start and end windows for use with `hkey-drag-to'.
 Emulate Smart Mouse Key drag from start window to end window.
@@ -683,6 +767,10 @@ Return non-nil iff a non-nil predicate is found."
 With optional ASSIST-FLAG non-nil, display help for the Assist Key command.
 Return non-nil iff associated help documentation is found."
   (interactive "P")
+  (unless (or action-key-depressed-flag action-key-help-flag)
+    (action-key-clear-variables))
+  (unless (or assist-key-depressed-flag assist-key-help-flag)
+    (assist-key-clear-variables))
   (let ((hkey-forms hmouse-alist)
        hkey-form pred-value call calls cmd-sym doc)
     (while (and (null pred-value) (setq hkey-form (car hkey-forms)))
@@ -893,7 +981,7 @@ Only works when running under a window system, not from a 
dumb terminal."
        (assist-key-depress)
        (when (called-interactively-p 'interactive)
          (message
-          "Assist Key depressed; go to release point and hit {%s %s}."
+          "Assist Key depressed; go to release point and press {%s %s}."
           (substitute-command-keys "\\[universal-argument]")
           (substitute-command-keys "\\[hkey-operate]"))))
     (if action-key-depressed-flag
@@ -902,7 +990,7 @@ Only works when running under a window system, not from a 
dumb terminal."
                 (message "Action Key released.")))
       (action-key-depress)
       (when (called-interactively-p 'interactive)
-       (message "Action Key depressed; go to release point and hit {%s}."
+       (message "Action Key depressed; go to release point and press {%s}."
                 (substitute-command-keys "\\[hkey-operate]"))))))
 
 (defun hkey-summarize (&optional current-window)
@@ -1171,10 +1259,7 @@ Under InfoDock and XEmacs, `zmacs-region' must be t; 
under GNU Emacs,
 
 
 ;; Save any active region to `hkey-region' when the mouse is moved between 
frames or buffers.
-(if (featurep 'xemacs)
-    (add-hook 'mouse-leave-frame-hook #'hmouse-save-region)
-  ;; GNU Emacs
-  (add-hook 'mouse-leave-buffer-hook #'hmouse-save-region))
+(add-hook 'mouse-leave-buffer-hook #'hmouse-save-region)
 
 ;; BW - Last confirmed in 1999, for some reason, using this next
 ;; function in byte-compiled form caused the first character 
@@ -1189,16 +1274,7 @@ lines or if ARGS is null and there is no graphical 
window system,
 return current point as a marker."
   (and (car args) (listp (car args)) (setq args (car args)))
   (if (and args (hyperb:window-system))
-      (progn (hmouse-set-point-at args)
-            (cond ((featurep 'xemacs)
-                   (if (eventp current-mouse-event)
-                       (copy-event current-mouse-event)))
-                  ((equal (hyperb:window-system) "next")
-                   (let ((win (car args)))
-                     (list win
-                           (+ (nth 1 args) (nth 0 (window-edges win)))
-                           (+ (nth 2 args) (nth 1 (window-edges win))))))
-                  (t args)))
+      (progn (hmouse-set-point-at args) args)
     (list 'keyboard-drag (posn-at-point))))
 
 (defun hmouse-set-point-at (set-point-arg-list)
@@ -1309,4 +1385,5 @@ not."
     (or rtn (progn (beep) (message "End of buffer")))
     rtn))
 
+(provide 'hmouse-drv)
 ;;; hmouse-drv.el ends here
diff --git a/hmouse-info.el b/hmouse-info.el
index b0d74b5..f81b389 100644
--- a/hmouse-info.el
+++ b/hmouse-info.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    04-Apr-89
 ;;
-;; Copyright (C) 1989-2016  Free Software Foundation, Inc.
+;; Copyright (C) 1989-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -170,9 +170,7 @@ Otherwise, return nil."
                  (filep (concat "(" nodename ")" "Top"))
                  (buffer-file-name (concat "(" buffer-file-name ")" nodename))
                  (t nodename)))
-      (if (featurep 'xemacs)
-         (Info-goto-node nodename nil t)
-       (Info-goto-node nodename))
+      (Info-goto-node nodename)
       t)))
 
 (defun Info-handle-in-node-hdr-assist ()
@@ -223,9 +221,7 @@ entry and returns t; otherwise returns nil."
          (forward-char 2)
          (setq node (Info-extract-menu-node-name nil (Info-index-node)))))
       (when node
-       (if (featurep 'xemacs)
-           (Info-goto-node node nil t)
-         (Info-goto-node node))
+       (Info-goto-node node)
        t))))
 
 ;;; ************************************************************************
diff --git a/hmouse-key.el b/hmouse-key.el
index 81e0fd8..5ea6696 100644
--- a/hmouse-key.el
+++ b/hmouse-key.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    30-May-94 at 00:11:57
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -26,7 +26,7 @@
 ;;; Other required Elisp libraries
 ;;; ************************************************************************
 
-(eval-and-compile (mapc #'require '(hsettings hmouse-drv hmouse-sh)))
+(eval-when-compile (mapc #'require '(hsettings hmouse-drv hmouse-sh)))
 
 ;;; ************************************************************************
 ;;; Public functions
diff --git a/hmouse-mod.el b/hmouse-mod.el
index 0c3df2b..4417e2f 100644
--- a/hmouse-mod.el
+++ b/hmouse-mod.el
@@ -1,4 +1,4 @@
-;;; hmouse-mod.el ---  Action Key acts as CONTROL modifier and Assist Key as 
META modifier.
+;;; hmouse-mod.el --- Action Key acts as CONTROL modifier and Assist Key as 
META modifier.
 ;;
 ;; Author:       Bob Weiner
 ;;
diff --git a/hmouse-sh.el b/hmouse-sh.el
index 5fac593..b84d770 100644
--- a/hmouse-sh.el
+++ b/hmouse-sh.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:     3-Sep-91 at 21:40:58
 ;;
-;; Copyright (C) 1991-2016  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -267,114 +267,112 @@ These may be the bindings prior to initializing 
Hyperbole or the Hyperbole bindi
      ;; Get mouse bindings under Emacs or XEmacs, even if not under a
      ;; window system since they can have frames on ttys and windowed
      ;; displays at the same time.
-     (if (not (featurep 'xemacs))
-        (mapcar (lambda (key) (cons key (global-key-binding key)))
-                (if (eq window-system 'dps)
-                    ;; NEXTSTEP offers only 2 shift-mouse buttons which we use
-                    ;; as the Smart Keys.
-                    '([S-down-mouse-1] [S-drag-mouse-1] [S-mouse-1]
-                      [S-down-mouse-2] [S-drag-mouse-2] [S-mouse-2]
-                      [S-double-mouse-1] [S-triple-mouse-1]
-                      [S-double-mouse-2] [S-triple-mouse-2]
-                      [header-line S-down-mouse-1] [header-line S-drag-mouse-1]
-                      [header-line S-mouse-1]
-                      [header-line S-down-mouse-2] [header-line S-drag-mouse-2]
-                      [header-line S-mouse-2]
-                      [left-fringe S-down-mouse-1] [left-fringe S-drag-mouse-1]
-                      [left-fringe S-mouse-1]
-                      [left-fringe S-down-mouse-2] [left-fringe S-drag-mouse-2]
-                      [left-fringe S-mouse-2]
-                      [right-fringe S-down-mouse-1] [right-fringe 
S-drag-mouse-1]
-                      [right-fringe S-mouse-1]
-                      [right-fringe S-down-mouse-2] [right-fringe 
S-drag-mouse-2]
-                      [right-fringe S-mouse-2]
-                      [vertical-line S-down-mouse-1] [vertical-line 
S-drag-mouse-1]
-                      [vertical-line S-mouse-1]
-                      [vertical-line S-down-mouse-2] [vertical-line 
S-drag-mouse-2]
-                      [vertical-line S-mouse-2]
-                      [mode-line S-down-mouse-1] [mode-line S-drag-mouse-1]
-                      [mode-line S-mouse-1]
-                      [mode-line S-down-mouse-2] [mode-line S-drag-mouse-2]
-                      [mode-line S-mouse-2]
-                      )
-                  ;; X, macOS or MS Windows
-                  '([S-down-mouse-2] [S-drag-mouse-2] [S-mouse-2]
-                    [S-down-mouse-3] [S-drag-mouse-3] [S-mouse-3]
-                    [S-double-mouse-2] [S-triple-mouse-2]
-                    [S-double-mouse-3] [S-triple-mouse-3]
-                    [header-line S-down-mouse-2] [header-line S-drag-mouse-2]
-                    [header-line S-mouse-2]
-                    [header-line S-down-mouse-3] [header-line S-drag-mouse-3]
-                    [header-line S-mouse-3]
-                    [left-fringe S-down-mouse-2] [left-fringe S-drag-mouse-2]
-                    [left-fringe S-mouse-2]
-                    [left-fringe S-down-mouse-3] [left-fringe S-drag-mouse-3]
-                    [left-fringe S-mouse-3]
-                    [right-fringe S-down-mouse-2] [right-fringe S-drag-mouse-2]
-                    [right-fringe S-mouse-2]
-                    [right-fringe S-down-mouse-3] [right-fringe S-drag-mouse-3]
-                    [right-fringe S-mouse-3]
-                    [vertical-line S-down-mouse-2] [vertical-line 
S-drag-mouse-2]
-                    [vertical-line S-mouse-2]
-                    [vertical-line S-down-mouse-3] [vertical-line 
S-drag-mouse-3]
-                    [vertical-line S-mouse-3]
-                    [mode-line S-down-mouse-2] [mode-line S-drag-mouse-2]
-                    [mode-line S-mouse-2]
-                    [mode-line S-down-mouse-3] [mode-line S-drag-mouse-3]
-                    [mode-line S-mouse-3]
-                    )))
-       (nconc
-       (mapcar (lambda (key)
-                 (cons key (global-key-binding key)))
-               '([(shift button2)] [(shift button2up)]
-                 [(shift button3)] [(shift button3up)]))
-       (if (boundp 'mode-line-map)
-           (mapcar (lambda (key)
-                     (cons key (lookup-key mode-line-map key)))
-                   '([(shift button3)] [(shift button3up)]))))))))
+     (mapcar (lambda (key) (cons key (global-key-binding key)))
+            (if (eq window-system 'dps)
+                ;; NEXTSTEP offers only 2 shift-mouse buttons which we use
+                ;; as the Smart Keys.
+                '([S-down-mouse-1] [S-drag-mouse-1] [S-mouse-1]
+                  [S-down-mouse-2] [S-drag-mouse-2] [S-mouse-2]
+                  [S-double-mouse-1] [S-triple-mouse-1]
+                  [S-double-mouse-2] [S-triple-mouse-2]
+                  [header-line S-down-mouse-1] [header-line S-drag-mouse-1]
+                  [header-line S-mouse-1]
+                  [header-line S-down-mouse-2] [header-line S-drag-mouse-2]
+                  [header-line S-mouse-2]
+                  [left-fringe S-down-mouse-1] [left-fringe S-drag-mouse-1]
+                  [left-fringe S-mouse-1]
+                  [left-fringe S-down-mouse-2] [left-fringe S-drag-mouse-2]
+                  [left-fringe S-mouse-2]
+                  [right-fringe S-down-mouse-1] [right-fringe S-drag-mouse-1]
+                  [right-fringe S-mouse-1]
+                  [right-fringe S-down-mouse-2] [right-fringe S-drag-mouse-2]
+                  [right-fringe S-mouse-2]
+                  [vertical-line S-down-mouse-1] [vertical-line S-drag-mouse-1]
+                  [vertical-line S-mouse-1]
+                  [vertical-line S-down-mouse-2] [vertical-line S-drag-mouse-2]
+                  [vertical-line S-mouse-2]
+                  [mode-line S-down-mouse-1] [mode-line S-drag-mouse-1]
+                  [mode-line S-mouse-1]
+                  [mode-line S-down-mouse-2] [mode-line S-drag-mouse-2]
+                  [mode-line S-mouse-2]
+                  )
+              ;; X, macOS or MS Windows
+              '([S-down-mouse-2] [S-drag-mouse-2] [S-mouse-2]
+                [S-down-mouse-3] [S-drag-mouse-3] [S-mouse-3]
+                [S-double-mouse-2] [S-triple-mouse-2]
+                [S-double-mouse-3] [S-triple-mouse-3]
+                [header-line S-down-mouse-2] [header-line S-drag-mouse-2]
+                [header-line S-mouse-2]
+                [header-line S-down-mouse-3] [header-line S-drag-mouse-3]
+                [header-line S-mouse-3]
+                [left-fringe S-down-mouse-2] [left-fringe S-drag-mouse-2]
+                [left-fringe S-mouse-2]
+                [left-fringe S-down-mouse-3] [left-fringe S-drag-mouse-3]
+                [left-fringe S-mouse-3]
+                [right-fringe S-down-mouse-2] [right-fringe S-drag-mouse-2]
+                [right-fringe S-mouse-2]
+                [right-fringe S-down-mouse-3] [right-fringe S-drag-mouse-3]
+                [right-fringe S-mouse-3]
+                [vertical-line S-down-mouse-2] [vertical-line S-drag-mouse-2]
+                [vertical-line S-mouse-2]
+                [vertical-line S-down-mouse-3] [vertical-line S-drag-mouse-3]
+                [vertical-line S-mouse-3]
+                [mode-line S-down-mouse-2] [mode-line S-drag-mouse-2]
+                [mode-line S-mouse-2]
+                [mode-line S-down-mouse-3] [mode-line S-drag-mouse-3]
+                [mode-line S-mouse-3]
+                )))
+     (nconc
+      (mapcar (lambda (key)
+               (cons key (global-key-binding key)))
+             '([(shift button2)] [(shift button2up)]
+               [(shift button3)] [(shift button3up)]))
+      (if (boundp 'mode-line-map)
+         (mapcar (lambda (key)
+                   (cons key (lookup-key mode-line-map key)))
+                 '([(shift button3)] [(shift button3up)])))))))
 
 (defun hmouse-get-unshifted-bindings ()
   "Return the list of middle mouse key bindings prior to their use as Smart 
Keys."
   ;; Do nothing when running in batch mode.
-  (if (not (featurep 'xemacs))
-      (mapcar (lambda (key) (cons key (global-key-binding key)))
-             (if (not (eq window-system 'dps))
-                 ;; X, macOS or MS Windows
-                 '([down-mouse-2] [drag-mouse-2] [mouse-2]
-                   [down-mouse-3] [drag-mouse-3] [mouse-3]
-                   [double-mouse-2] [triple-mouse-2]
-                   [double-mouse-3] [triple-mouse-3]
-                   [header-line down-mouse-2] [header-line drag-mouse-2]
-                   [header-line mouse-2]
-                   [left-fringe down-mouse-2] [left-fringe drag-mouse-2]
-                   [left-fringe mouse-2]
-                   [right-fringe down-mouse-2] [right-fringe drag-mouse-2]
-                   [right-fringe mouse-2]
-                   [vertical-line down-mouse-2] [vertical-line drag-mouse-2]
-                   [vertical-line mouse-2]
-                   [left-fringe down-mouse-3] [left-fringe drag-mouse-3]
-                   [left-fringe mouse-3]
-                   [right-fringe down-mouse-3] [right-fringe drag-mouse-3]
-                   [right-fringe mouse-3]
-                   [vertical-line down-mouse-3] [vertical-line drag-mouse-3]
-                   [vertical-line mouse-3]
-                   [mode-line down-mouse-2] [mode-line drag-mouse-2]
-                   [mode-line mouse-2]
-                   [mode-line down-mouse-3] [mode-line drag-mouse-3]
-                   [mode-line mouse-3]
-                   )))
-    (nconc
-     (mapcar (lambda (key)
-              (cons key (global-key-binding key)))
-            '([button2] [button2up]
-              [button3] [button3up]
-              ))
-     (if (boundp 'mode-line-map)
-        (mapcar (function
-                 (lambda (key)
-                   (cons key (lookup-key mode-line-map key))))
-                '([button3] [button3up])))
-     )))
+  (mapcar (lambda (key) (cons key (global-key-binding key)))
+         (if (not (eq window-system 'dps))
+             ;; X, macOS or MS Windows
+             '([down-mouse-2] [drag-mouse-2] [mouse-2]
+               [down-mouse-3] [drag-mouse-3] [mouse-3]
+               [double-mouse-2] [triple-mouse-2]
+               [double-mouse-3] [triple-mouse-3]
+               [header-line down-mouse-2] [header-line drag-mouse-2]
+               [header-line mouse-2]
+               [left-fringe down-mouse-2] [left-fringe drag-mouse-2]
+               [left-fringe mouse-2]
+               [right-fringe down-mouse-2] [right-fringe drag-mouse-2]
+               [right-fringe mouse-2]
+               [vertical-line down-mouse-2] [vertical-line drag-mouse-2]
+               [vertical-line mouse-2]
+               [left-fringe down-mouse-3] [left-fringe drag-mouse-3]
+               [left-fringe mouse-3]
+               [right-fringe down-mouse-3] [right-fringe drag-mouse-3]
+               [right-fringe mouse-3]
+               [vertical-line down-mouse-3] [vertical-line drag-mouse-3]
+               [vertical-line mouse-3]
+               [mode-line down-mouse-2] [mode-line drag-mouse-2]
+               [mode-line mouse-2]
+               [mode-line down-mouse-3] [mode-line drag-mouse-3]
+               [mode-line mouse-3]
+               )))
+  (nconc
+   (mapcar (lambda (key)
+            (cons key (global-key-binding key)))
+          '([button2] [button2up]
+            [button3] [button3up]
+            ))
+   (if (boundp 'mode-line-map)
+       (mapcar (function
+               (lambda (key)
+                 (cons key (lookup-key mode-line-map key))))
+              '([button3] [button3up])))
+   ))
 
 ;; Based on a function from Emacs mouse.el.
 (defun hmouse-posn-set-point (position)
@@ -429,12 +427,6 @@ point determined by 
`mouse-select-region-move-to-beginning'."
 (defun hmouse-move-point-eterm (arg-list)
   (apply 'mouse-move-point arg-list))
 
-(defun hmouse-move-point-xemacs ()
-  (condition-case ()
-      (mouse-set-point current-mouse-event)
-    ;; Catch "not in a window" errors, e.g. on modeline
-    (error nil)))
-
 (defun hmouse-set-key-list (binding key-list)
   (mapc (lambda (key) (hkey-global-set-key key binding)) key-list)
   nil)
@@ -457,42 +449,20 @@ point determined by 
`mouse-select-region-move-to-beginning'."
     ;; this.
     (setq kmacro-call-mouse-event nil)
     ;;
-    (cond
-     ;; GNU Emacs
-     ((not (featurep 'xemacs))
-      (setq hmouse-set-point-command 'hmouse-move-point-emacs)
-      (if (eq window-system 'dps)
-         ;; NEXTSTEP offers only 2 shift-mouse buttons which we use as the 
Smart Keys.
-         (progn
-           (hmouse-bind-shifted-key-emacs 1 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
-           (hmouse-bind-shifted-key-emacs 2 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
-       ;; X, macOS or MS Windows
-       (hmouse-bind-shifted-key-emacs 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
-       (hmouse-bind-shifted-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs)
-       (with-eval-after-load "company"
-         (define-key company-active-map [S-down-mouse-2] 'ignore)
-         (define-key company-active-map [S-mouse-2] 
'smart-company-to-definition)
-         (define-key company-active-map [S-down-mouse-3] 'ignore)
-         (define-key company-active-map [S-mouse-3] 'smart-company-help))))
-     ;;
-     ;; XEmacs
-     ((featurep 'xemacs)
-      ;; Set mouse bindings under XEmacs, even if not under a window
-      ;; system since it can have frames on ttys and windowed displays at
-      ;; the same time.
-      (setq hmouse-set-point-command 'hmouse-move-point-xemacs)
-      (global-set-key '(shift button2)     'action-key-depress)
-      (global-set-key '(shift button2up)   'action-mouse-key)
-      (if (fboundp 'infodock-set-mouse-bindings)
-         (infodock-set-mouse-bindings)
-       (if (boundp 'mode-line-map)
-           (progn (define-key mode-line-map '(shift button3)
-                    'assist-key-depress)
-                  (define-key mode-line-map '(shift button3up)
-                    'assist-mouse-key)
-                  ))
-       (global-set-key '(shift button3)     'assist-key-depress)
-       (global-set-key '(shift button3up)   'assist-mouse-key))))
+    (setq hmouse-set-point-command 'hmouse-move-point-emacs)
+    (if (eq window-system 'dps)
+       ;; NEXTSTEP offers only 2 shift-mouse buttons which we use as the Smart 
Keys.
+       (progn
+         (hmouse-bind-shifted-key-emacs 1 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
+         (hmouse-bind-shifted-key-emacs 2 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
+      ;; X, macOS or MS Windows
+      (hmouse-bind-shifted-key-emacs 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
+      (hmouse-bind-shifted-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs)
+      (with-eval-after-load "company"
+       (define-key company-active-map [S-down-mouse-2] 'ignore)
+       (define-key company-active-map [S-mouse-2] 'smart-company-to-definition)
+       (define-key company-active-map [S-down-mouse-3] 'ignore)
+       (define-key company-active-map [S-mouse-3] 'smart-company-help)))
     (setq hmouse-bindings (hmouse-get-bindings hmouse-middle-flag)
          hmouse-bindings-flag t)))
 
@@ -500,63 +470,38 @@ point determined by 
`mouse-select-region-move-to-beginning'."
   "Binds the middle mouse key as the Action Key and the right mouse key as the 
Assist Key.
 With optional MIDDLE-KEY-ONLY-FLAG non-nil, binds only the middle mouse key."
   (interactive)
-  (cond        ;; GNU Emacs
-   ((not (featurep 'xemacs))
-    ;; Unbind Emacs push-button mouse keys since Hyperbole handles them.
-    (define-key button-map [mouse-2] nil)
-    (define-key button-map [mode-line mouse-2] nil)
-    (define-key button-map [header-line mouse-2] nil)
-    ;; Remove push-button help echo string for mouse-2 key.
-    (put 'default-button 'help-echo nil)
-    ;;
-    ;; In Info-mode, Emacs uses key-translation-map to link mouse-1 to
-    ;; do whatever mouse-2 does but because Hyperbole uses both down
-    ;; and up bindings on mouse2, this does work.  So we rebind
-    ;; mouse-1 in Info mode to be an actual Action Mouse Key (which
-    ;; makes it follow Info links/cross-references properly, doing a
-    ;; superset of what it did before).
-    (var:add-and-run-hook 'Info-mode-hook
-                         (lambda ()
-                           (define-key Info-mode-map [down-mouse-1] 
'action-key-depress-emacs)
-                           (define-key Info-mode-map [mouse-1] 
'action-mouse-key-emacs)
-                           (define-key Info-mode-map [double-down-mouse-1] 
'action-key-depress-emacs)
-                           (define-key Info-mode-map [double-mouse-1] 
'action-mouse-key-emacs)
-                           (define-key Info-mode-map [mouse-2] nil)))
-    ;;
-    (unless (eq window-system 'dps)
-       ;; X, macOS or MS Windows
-      (hmouse-bind-key-emacs 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
-      (unless middle-key-only-flag
-       (hmouse-bind-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
-      `(with-eval-after-load "company"
-        (define-key company-active-map [down-mouse-2] 'ignore)
-        (define-key company-active-map [mouse-2] 'smart-company-to-definition)
-        (unless ,middle-key-only-flag
-          (define-key company-active-map [down-mouse-3] 'ignore)
-          (define-key company-active-map [mouse-3] 'smart-company-help)))))
-   ;;
-   ;; XEmacs
-   ((featurep 'xemacs)
-    ;; Set mouse bindings under XEmacs, even if not under a window
-    ;; system since it can have frames on ttys and windowed displays at
-    ;; the same time.
-    ;;
-    ;; Get rid of Info-mode button 2 and possibly button 3 bindings since 
Hyperbole
-    ;; handles things in Info.
-    (var:add-and-run-hook 'Info-mode-hook
-                         (lambda () (define-key Info-mode-map 'button2 nil)))
-    ;;
-    (global-set-key 'button2     'action-key-depress)
-    (global-set-key 'button2up   'action-mouse-key)
+  ;; Unbind Emacs push-button mouse keys since Hyperbole handles them.
+  (define-key button-map [mouse-2] nil)
+  (define-key button-map [mode-line mouse-2] nil)
+  (define-key button-map [header-line mouse-2] nil)
+  ;; Remove push-button help echo string for mouse-2 key.
+  (put 'default-button 'help-echo nil)
+  ;;
+  ;; In Info-mode, Emacs uses key-translation-map to link mouse-1 to
+  ;; do whatever mouse-2 does but because Hyperbole uses both down
+  ;; and up bindings on mouse2, this does not work.  So we rebind
+  ;; mouse-1 in Info mode to be an actual Action Mouse Key (which
+  ;; makes it follow Info links/cross-references properly, doing a
+  ;; superset of what it did before).
+  (var:add-and-run-hook 'Info-mode-hook
+                       (lambda ()
+                         (define-key Info-mode-map [down-mouse-1] 
'action-key-depress-emacs)
+                         (define-key Info-mode-map [mouse-1] 
'action-mouse-key-emacs)
+                         (define-key Info-mode-map [double-down-mouse-1] 
'action-key-depress-emacs)
+                         (define-key Info-mode-map [double-mouse-1] 
'action-mouse-key-emacs)
+                         (define-key Info-mode-map [mouse-2] nil)))
+  ;;
+  (unless (eq window-system 'dps)
+    ;; X, macOS or MS Windows
+    (hmouse-bind-key-emacs 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
     (unless middle-key-only-flag
-      (if (and (boundp 'Info-mode-map) (keymapp Info-mode-map))
-          (funcall (lambda () (define-key Info-mode-map 'button3 nil)))
-       (add-hook 'Info-mode-hook unbind-but3))
-      (when (boundp 'mode-line-map)
-        (define-key mode-line-map 'button3   'assist-key-depress)
-       (define-key mode-line-map 'button3up 'assist-mouse-key))
-      (global-set-key 'button3     'assist-key-depress)
-      (global-set-key 'button3up   'assist-mouse-key)))))
+      (hmouse-bind-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
+    `(with-eval-after-load "company"
+       (define-key company-active-map [down-mouse-2] 'ignore)
+       (define-key company-active-map [mouse-2] 'smart-company-to-definition)
+       (unless ,middle-key-only-flag
+        (define-key company-active-map [down-mouse-3] 'ignore)
+        (define-key company-active-map [mouse-3] 'smart-company-help)))))
 
 (provide 'hmouse-sh)
 
diff --git a/hmouse-tag.el b/hmouse-tag.el
index f921231..2cb4949 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    24-Aug-91
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -635,6 +635,15 @@ buffer."
       (beginning-of-line)
       (looking-at "\\(;*[ \t]*\\)?(\\(autoload\\|load\\|require\\)")))
 
+(defun smart-lisp-at-change-log-tag-p ()
+  "When in a change-log mode, match to only bound Elisp identifiers and those 
with a '-' somewhere in the middle.
+These tight tests help eliminate undesired matches.
+Returns matching ELisp tag name that point is within, else nil."
+  (when (derived-mode-p 'change-log-mode)
+    (let ((identifier (smart-lisp-at-tag-p)))
+      (and identifier (intern-soft identifier)
+          (string-match "[^-]-[^-]" identifier)))))
+
 (defun smart-lisp-at-tag-p (&optional no-flash)
   "Returns Lisp tag name that point is within, else nil.
 Returns nil when point is on the first line of a non-alias Lisp definition."
@@ -644,7 +653,7 @@ Returns nil when point is on the first line of a non-alias 
Lisp definition."
       (save-excursion
        (skip-chars-backward identifier-chars)
        (if (and (looking-at identifier)
-                ;; Ignore any all punctuation matches.
+                ;; Ignore any punctuation matches.
                 (not (string-match "\\`[-<>*]+\\'" (match-string 0)))
                 ;; Needed to set match string.
                 (looking-at identifier))
@@ -664,7 +673,7 @@ Returns nil when point is on the first line of a non-alias 
Lisp definition."
 (defun smart-lisp-mode-p ()
   "Return t if in a mode which uses Lisp symbols."
   (or (smart-emacs-lisp-mode-p)
-      (memq major-mode '(lisp-mode scheme-mode change-log-mode))))
+      (memq major-mode '(lisp-mode scheme-mode))))
 
 ;;;###autoload
 (defun smart-objc (&optional identifier next)
@@ -761,23 +770,35 @@ If key is pressed:
             (buffer-substring-no-properties (match-beginning 2) (match-end 2))
             (match-beginning 2) (match-end 2)))))))
 
+(defun smart-jedi-find-file (file line column other-window)
+  "Function that reads a source file for jedi navigation.
+It takes these arguments: (file-to-read other-window-flag line_number 
column_number)."
+  (hpath:display-buffer (find-file file) other-window)
+  (jedi:goto--line-column line column))
 
 (defun smart-python-jedi-to-definition-p ()
   "If the Jedi Python identifier server is running, test and use it to jump to 
the definition.
 See https://tkf.github.io/emacs-jedi/latest/.";
   ;; Use functions from jedi-core.el only, not from jedi.el, since
   ;; company-jedi.el users will have loaded only jedi-core.el.
-  (when (featurep 'jedi-core)
+  (when (and (featurep 'jedi-core) jedi-mode)
     (let* ((servers (jedi:-get-servers-in-use))
           (proc (epc:manager-server-process (car servers))))
       (and servers (processp proc)
           (eq 'run (process-status (process-buffer proc)))
           ;; The goto is performed asynchronously.
           ;; It reports in the minibuffer when a definition is not found.
-          (progn (jedi:goto-definition t)
-                 ;; For use as a predicate, always return t if the Jedi server
-                 ;; is running  so other lookup techniques are not tried.
-                 t)))))
+          ;; !! Only works on tag at point, not the tagname passed in as jedi
+          ;; does not accept a tag parameter.
+          ;;
+          ;; jedi:find-file-function is an RSW custom
+          ;; modification that allows display-where to work;
+          ;; otherwise, will just display in another window.
+          (let ((jedi:find-file-function #'smart-jedi-find-file))
+            (jedi:goto-definition hpath:display-where)
+            ;; For use as a predicate, always return t if the Jedi server
+            ;; is running  so other lookup techniques are not tried.
+            t)))))
 
 ;;;###autoload
 (defun smart-python (&optional identifier next)
@@ -1039,7 +1060,7 @@ Returns TAG."
         (tags-add-tables nil))
     ;; For InfoDock (XEmacs may also take this branch), force exact match
     ;; (otherwise tag might = nil and the following stringp test could fail).
-    (if (or (featurep 'infodock) (featurep 'xemacs))
+    (if (featurep 'infodock)
        (if (stringp tag) (setq tag (list tag))))
     (condition-case ()
        (and func (funcall func tag) t)
@@ -1198,7 +1219,7 @@ Look for packages in `smart-java-package-path'."
                    dir-list (if (setq found (file-exists-p path))
                                 nil
                               (cdr dir-list))))
-           (when (and (not found) subpath hyperb:microcruft-os-p)
+           (when (and (not found) subpath hyperb:microsoft-os-p)
                ;; Try .jav suffix.
              (setq subfile (concat subpath ".jav")
                    dir-list smart-java-package-path)
@@ -1257,7 +1278,7 @@ See the \"${hyperb:dir}/smart-clib-sym\" script for more 
information."
     ;; For InfoDock (XEmacs may also take this branch), force exact match
     ;; when `next' is false (otherwise tag would = nil and the following
     ;; stringp test would fail).
-    (if (or (featurep 'infodock) (featurep 'xemacs))
+    (if (featurep 'infodock)
        (if (stringp tag) 
            (setq tag (list tag))))
     (if (and func (setq find-tag-result (funcall func tag)))
@@ -1279,7 +1300,7 @@ See the \"${hyperb:dir}/smart-clib-sym\" script for more 
information."
               (with-no-warnings (find-tag tag))))
       ;; Signals an error if tag is not found which is caught by
       ;; many callers of this function.
-      (with-no-warnings        (find-tag tag)))))
+      (with-no-warnings (find-tag tag)))))
 
 ;;;###autoload
 (defun smart-tags-file-path (file)
diff --git a/hpath.el b/hpath.el
index d26678d..d3151f8 100644
--- a/hpath.el
+++ b/hpath.el
@@ -1,10 +1,10 @@
-;;; hpath.el --- GNU Hyperbole support routines for handling UNIX paths
+;;; hpath.el --- GNU Hyperbole support routines for handling POSIX and 
MSWindows paths
 ;;
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:     1-Nov-91 at 00:44:23
 ;;
-;; Copyright (C) 1991-2016  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -40,6 +40,178 @@ Default is `nil' since this can slow down normal file 
finding."
   :group 'hyperbole-buttons)
 
 ;;; ************************************************************************
+;;; MS WINDOWS PATH CONVERSIONS
+;;; ************************************************************************
+
+;; This section adds automatic recognition of MSWindows implicit path
+;; links and converts disk drive and path separators to whatever
+;; format is needed by the underlying OS upon which Emacs is one,
+;; notably either for POSIX or MSWindows (with no POSIC layer).
+
+;; Especially useful when running Emacs under Windows Subsystem for
+;; Linux (WSL) where the system-type variable is gnu/linux but
+;; MSWindows is underneath so the user likely has many Windows
+;; formatted links.
+
+;; See "https://docs.microsoft.com/en-us/dotnet/standard/io/file-path-formats";
+;; and "https://docs.microsoft.com/en-us/windows/wsl/interop"; for
+;; Windows path specifications and use under WSL.
+
+(defvar hpath:posix-mount-points-regexp
+  "^\\(Filesystem\\|rootfs\\|none\\) "
+  "Regexp of 'mount' command output lines that are not mount points of 
MSWindows paths.")
+
+(defvar hpath:mswindows-mount-prefix
+  (cond ((eq system-type 'cygwin)
+        "/cygdrive/")
+       (hyperb:microsoft-os-p
+        "")
+       (t ;; POSIX
+       "/mnt/"))
+  "Path prefix to add when converting MSWindows drive paths to POSIX-style.
+Must include a trailing directory separator or be nil.")
+
+(defconst hpath:mswindows-drive-regexp (format 
"\\`\\(%s\\)?[\\/]?\\([a-zA-Z]\\)[:\\/]"
+                                              hpath:mswindows-mount-prefix)
+  "Regular expression matching an MSWindows drive letter at the beginning of a 
path string.
+Grouping 2 is the actual letter of the drive.
+If the value of 'hpath:mswindows-mount-prefix' changes, then re-initialize 
this constant.")
+
+(defconst hpath:mswindows-path-regexp "\\`.*\\.*[a-zA-Z0-9_.]"
+  "Regular expression matching the start of an MSWindows path that does not 
start with a drive letter but contains directory separators.")
+
+(defvar hpath:mswindows-path-posix-mount-alist nil
+  "Automatically set alist of (window-path-prefix . posix-mount-point) 
elements.")
+
+(defvar hpath:directory-expand-alist nil
+  "Automatically set alist of (posix-mount-point . window-path-prefix) 
elements.
+   Used to expand windows prefixes to posix mount points during 
mswindows-to-posix.")
+
+;;;###autoload
+(defun hpath:mswindows-to-posix (path)
+  "Convert a recognizable MSWindows PATH to a Posix-style path or return the 
path unchanged.
+If path begins with an MSWindows drive letter, prefix the converted path with 
the value of 'hpath:mswindows-mount-prefix'."
+  (interactive "sMSWindows path to convert to POSIX: ")
+  (when (stringp path)
+    (setq path (hpath:mswindows-to-posix-separators path))
+    (when (string-match hpath:mswindows-drive-regexp path)
+      (when (string-match hpath:mswindows-drive-regexp path)
+       (let* ((drive-prefix (downcase (match-string 2 path)))
+              (rest-of-path (substring path (match-end 0)))
+              (absolute-p (and (not (string-empty-p rest-of-path))
+                               (= (aref rest-of-path 0) ?/))))
+         ;; Convert MSWindows disk drive paths to POSIX-style with a mount 
prefix.
+         (setq path (concat hpath:mswindows-mount-prefix drive-prefix
+                            (cond (hyperb:microsoft-os-p ":")
+                                  (absolute-p "")
+                                  (t "/"))
+                            rest-of-path))))))
+  path)
+
+(defun hpath:mswindows-to-posix-separators (path)
+  "Replace all backslashes with forward slashes in PATH and expand the path 
against `directory-abbrev-alist', if possible.
+Path must be a string or an error will be triggered."
+  (let ((directory-abbrev-alist hpath:directory-expand-alist))
+    (replace-regexp-in-string "\\\\" "/" (abbreviate-file-name path) nil t)))
+
+;;;###autoload
+(defun hpath:posix-to-mswindows (path)
+  "Convert and return a Posix-style PATH to an MSWindows path or return the 
path unchanged.
+If path begins with an optional mount prefix, 'hpath:mswindows-mount-prefix', 
followed by an MSWindows drive letter, remove the mount prefix."
+  (interactive "sPOSIX path to convert to MSWindows: ")
+  (when (stringp path)
+    (setq path (hpath:posix-to-mswindows-separators path))
+    ;; Remove any POSIX mount prefix preceding an MSWindows path.
+    (if (eq 0 (string-match hpath:mswindows-mount-prefix path))
+       (setq path (substring path (match-end 0))))
+    (when (string-match hpath:mswindows-drive-regexp path)
+      (when (string-match hpath:mswindows-drive-regexp path)
+       (let* ((drive-prefix (downcase (match-string 2 path)))
+              (rest-of-path (substring path (match-end 0)))
+              (absolute-p (= (aref path (1- (match-end 0))) ?\\)))
+         ;; Convert formerly Posix-style Windows disk drive paths to 
MSWindows-style.
+         (setq path (concat drive-prefix ":"
+                            (if (or (not absolute-p)
+                                    (string-match "\\`[~/]" rest-of-path))
+                                ""
+                              "\\")
+                            rest-of-path))))))
+  path)
+
+(defun hpath:posix-to-mswindows-separators (path)
+  "Replace all forward slashes with backslashes in PATH and abbreviate the 
path if possible.
+Path must be a string or an error will be triggered.  See
+'abbreviate-file-name' for how path abbreviation is handled."
+  (replace-regexp-in-string "/" "\\\\" (abbreviate-file-name path)))
+
+(defun hpath:posix-path-p (path)
+  "Return non-nil if PATH looks like a Posix path."
+  (and (stringp path) (string-match  "/" path)))
+
+;;;###autoload
+(defun hpath:substitute-posix-or-mswindows-at-point ()
+  "If point is within a recognizable Posix or MSWindows path, change the path 
to the other type of path."
+  (interactive "*")
+  (barf-if-buffer-read-only)
+  (let* ((opoint (point))
+        (str-and-positions (hpath:delimited-possible-path t t))
+        (path (car str-and-positions))
+        (start (nth 1 str-and-positions))
+        (end (nth 2 str-and-positions)))
+      (when path
+       (if (hpath:posix-path-p path)
+           (setq path (hpath:posix-to-mswindows path))
+         (setq path (hpath:mswindows-to-posix path)))
+       (delete-region start end)
+       (insert path)
+       (goto-char (min opoint (point-max))))))
+
+;;;###autoload
+(defun hpath:substitute-posix-or-mswindows (path)
+  "Change a recognizable Posix or MSWindows PATH to the other type of path."
+  (when (stringp path)
+    (if (hpath:posix-path-p path)
+       (hpath:posix-to-mswindows path)
+      (hpath:mswindows-to-posix path))))
+
+;;;###autoload
+(defun hpath:cache-mswindows-mount-points ()
+  "Cache valid MSWindows mount points in 'directory-abbrev-alist' when under a 
non-MSWindows operating system, e.g. WSL.
+Call this function manually if mount points change after Hyperbole is loaded."
+  (interactive)
+  (when (not hyperb:microsoft-os-p)
+    (let ((mount-points-to-add
+          ;; Sort alist of (path-mounted . mount-point) elements from shortest
+          ;; to longest path so that the longest path is selected first within
+          ;; 'directory-abbrev-alist' (elements are added in reverse order).
+          (sort
+           ;; Convert plist to alist for sorting.
+           (hypb:map-plist (lambda (path mount-point)
+                              (if (string-match "\\`\\([a-zA-Z]\\):\\'" path)
+                                  ;; Drive letter must be downcased
+                                  ;; in order to work when converted back to 
Posix.
+                                  (setq path (concat "/" (downcase 
(match-string 1 path)))))
+                              ;; Assume all mounted Windows paths are
+                              ;; lowercase for now.
+                              (cons (downcase path) mount-point))
+                            ;; Return a plist of MSWindows path-mounted 
mount-point pairs.
+                            (split-string (shell-command-to-string (format "df 
-a -t drvfs 2> /dev/null | sort | uniq | grep -v '%s' | sed -e 's+ .*[-%%] /+ 
/+g'" hpath:posix-mount-points-regexp))))
+           (lambda (cons1 cons2) (<= (length (car cons1)) (length (car 
cons2))))))
+         path mount-point)
+      (mapcar (lambda (path-and-mount-point)
+               (setq path (car path-and-mount-point)
+                     mount-point (cdr path-and-mount-point))
+               (add-to-list 'directory-abbrev-alist (cons (format "\\`%s" 
(regexp-quote path))
+                                                          mount-point)))
+             mount-points-to-add)
+      (setq hpath:directory-expand-alist
+           ;; Save the reverse of each mount-points-to-add so
+           ;; can expand paths when going from posix-to-mswindows.
+           (mapcar (lambda (elt) (cons (cdr elt) (car elt))) 
mount-points-to-add))
+      mount-points-to-add)))
+
+
+;;; ************************************************************************
 ;;; FILE VIEWER COMMAND SETTINGS
 ;;; ************************************************************************
 
@@ -58,7 +230,8 @@ See the function `hpath:get-external-display-alist' for 
detailed format document
   :type 'regexp
   :group 'hyperbole-commands)
 
-(defvar hpath:external-display-alist-mswindows (list (cons (format 
"\\.\\(%s\\)$" hpath:external-open-office-suffixes)
+(defvar hpath:external-display-alist-mswindows (list '("\\.vba$" . 
"/c/Windows/System32/cmd.exe //c start \"${@//&/^&}\"")
+                                                    (cons (format 
"\\.\\(%s\\)$" hpath:external-open-office-suffixes)
                                                           "openoffice.exe"))
     "*An alist of (FILENAME-REGEXP . DISPLAY-PROGRAM-STRING-OR-LIST) elements 
for MS Windows.
 See the function `hpath:get-external-display-alist' for detailed format 
documentation.")
@@ -329,7 +502,7 @@ use with string-match.")
 
 (defconst hpath:markup-link-anchor-regexp
   (concat "\\`\\(#?[^#]+\\)\\(#\\)\\([^\]\[#^{}<>\"`'\\\n\t\f\r]*\\)")
-  "Regexp that matches an markup filename followed by a hash (#) and an 
optional in-file anchor name.")
+  "Regexp that matches a markup filename followed by a hash (#) and an 
optional in-file anchor name.")
 
 (defconst hpath:outline-section-pattern "^\*+[ \t]+%s\\([ \t[:punct:]]*\\)$"
   "Regexp matching an Emacs outline section header and containing a %s for 
replacement of a specific section name.")
@@ -345,6 +518,9 @@ These are used to indicate how to display or execute the 
pathname.
   "\\`/[^/:]+:\\|\\`ftp[:.]\\|\\`www\\.\\|\\`https?:"
   "Regexp matching remote pathnames and urls which invoke remote file 
handlers.")
 
+(defconst hpath:texinfo-section-pattern "^@node+[ \t]+%s[ \t]*\\(,\\|$\\)"
+  "Regexp matching a Texinfo section header and containing a %s for 
replacement of a specific section name.")
+
 ;;; ************************************************************************
 ;;; Public functions
 ;;; ************************************************************************
@@ -372,6 +548,14 @@ directories.  The first one in which PATH is found is 
used."
          (or (file-exists-p rtn) (setq rtn nil)))
        (or rtn path)))))
 
+(defun hpath:tramp-file-name-regexp ()
+  "Returns a modified tramp-file-name-regexp for matching to the beginning of 
a remote file name.
+Removes bol anchor and removes match to empty string if present."
+  (let ((tramp-regexp (car (if (fboundp 'tramp-file-name-structure)
+                              (tramp-file-name-structure)
+                            tramp-file-name-structure))))
+    (substring-no-properties (replace-regexp-in-string "\\\\'" "" 
tramp-regexp) 1)))
+
 (defun hpath:remote-at-p ()
   "Returns a remote pathname that point is within or nil.
 See the `(emacs)Remote Files' info documentation for pathname format details.
@@ -385,10 +569,7 @@ Always returns nil if (hpath:remote-available-p) returns 
nil."
              (skip-chars-backward "^[ \t\n\r\f\"`'|\(\{<")
              (cond
               ((and (eq remote-package 'tramp)
-                    ;; Remove match to bol in this regexp before testing.
-                    (looking-at (substring-no-properties (car (if (fboundp 
'tramp-file-name-structure)
-                                                                  
(tramp-file-name-structure)
-                                                                
tramp-file-name-structure)) 1)))
+                    (looking-at (hpath:tramp-file-name-regexp)))
                (match-string-no-properties 0))
               ((looking-at hpath:url-regexp)
                (if (string-equal (match-string-no-properties 
hpath:protocol-grpn) "ftp")
@@ -524,28 +705,37 @@ paths are allowed.  Absolute pathnames must begin with a 
`/' or `~'."
    ((hpath:www-at-p) nil)
    ((hpath:is-p (hpath:delimited-possible-path non-exist) type non-exist))))
 
-(defun hpath:delimited-possible-path (&optional non-exist)
+(defun hpath:delimited-possible-path (&optional non-exist include-positions)
   "Returns delimited possible path or non-delimited remote path at point, if 
any.
 No validity checking is done on the possible path.  Delimiters may be:
 double quotes, open and close single quote, whitespace, or Texinfo file 
references.
+
 With optional NON-EXIST, nonexistent local paths are allowed.  Absolute 
pathnames
-must begin with a `/' or `~'."
-  (or (hargs:delimited "\"" "\"") 
-      ;; Filenames in Info docs or Python files
-      (hargs:delimited "[`'‘]" "[`'’]" t t)
-      ;; Filenames in TexInfo docs
-      (hargs:delimited "@file{" "}")
-      ;; Any existing whitespace delimited filename at point.
-      ;; If match consists of only punctuation, like
-      ;; . or .., don't treat it as a pathname.  Only look for
-      ;; whitespace delimited filenames if non-exist is nil.
-      (unless non-exist
-       (let ((p (hargs:delimited "^\\|\\(\\s \\|[\]\[(){}<>\;&,@]\\)*"
-                                 "\\([\]\[(){}<>\;&,@]\\|:*\\s \\)+\\|$"
-                                 t t))
-             (punc (char-syntax ?.)))
-         (if (delq nil (mapcar (lambda (c) (/= punc (char-syntax c))) p))
-             p)))))
+must begin with a `/' or `~'.
+
+With optional INCLUDE-POSITIONS, returns a triplet list of (path start-pos
+end-pos) or nil."
+  ;; Prevents MSWindows to Posix path substitution
+  (let ((hyperb:microsoft-os-p t))
+    (or (hargs:delimited "\"" "\"" nil nil include-positions "[`'’]")
+       ;; Filenames in Info docs or Python files
+       (hargs:delimited "[`'‘]" "[`'’]" t t include-positions "\"")
+       ;; Filenames in TexInfo docs
+       (hargs:delimited "@file{" "}" nil nil include-positions)
+       ;; Any existing whitespace delimited filename at point.
+       ;; If match consists of only punctuation, like
+       ;; . or .., don't treat it as a pathname.  Only look for
+       ;; whitespace delimited filenames if non-exist is nil.
+       (unless non-exist
+         (let* ((triplet (hargs:delimited "^\\|\\(\\s-\\|[\]\[(){}<>\;&,@]\\)*"
+                                          
"\\([\]\[(){}<>\;&,@]\\|:*\\s-\\)+\\|$"
+                                          t t t))
+                (p (car triplet))
+                (punc (char-syntax ?.)))
+           (if (delq nil (mapcar (lambda (c) (/= punc (char-syntax c))) p))
+               (if include-positions
+                   triplet
+                 p)))))))
 
 ;;;###autoload
 (defun hpath:display-buffer (buffer &optional display-where)
@@ -612,30 +802,29 @@ Returns non-nil iff file is displayed within a buffer 
(not with an external
 program)."
   (interactive "FFind file: ")
   (let ((case-fold-search t)
-       modifier loc dir anchor hash path)
+       (default-directory default-directory)
+       modifier loc anchor hash path)
     (if (string-match hpath:prefix-regexp filename)
        (setq modifier (aref filename 0)
              filename (substring filename (match-end 0))))
-    (setq filename (hpath:substitute-value filename)
+    (setq path (hpath:substitute-value
+               (if (string-match hpath:markup-link-anchor-regexp filename)
+                   (progn (setq hash t
+                                anchor (match-string 3 filename))
+                          (substring filename 0 (match-end 1)))
+                 filename))
          loc (hattr:get 'hbut:current 'loc)
-         dir (file-name-directory
-              ;; Loc may be a buffer without a file
-              (if (stringp loc) loc default-directory))
-         filename (hpath:absolute-to filename dir)
-         path (if (string-match hpath:markup-link-anchor-regexp filename)
-                  (progn (setq hash t
-                               anchor (match-string 3 filename))
-                         (substring filename 0 (match-end 1)))
-                filename))
+         default-directory (file-name-directory
+                            ;; Loc may be a buffer without a file
+                            (if (stringp loc) loc default-directory))
+         filename (hpath:absolute-to path default-directory))
     (let ((remote-filename (hpath:remote-p path)))
       (or modifier remote-filename
-         (file-exists-p path)
-         (error "(hpath:find): \"%s\" does not exist"
-                (file-relative-name filename)))
+         (file-exists-p filename)
+         (error "(hpath:find): \"%s\" does not exist" filename))
       (or modifier remote-filename
-         (file-readable-p path)
-         (error "(hpath:find): \"%s\" is not readable"
-                (file-relative-name filename)))
+         (file-readable-p filename)
+         (error "(hpath:find): \"%s\" is not readable" filename))
       ;; If filename is a remote file (not a directory, we have to copy it to
       ;; a temporary local file and then display that.
       (when (and remote-filename (not (file-directory-p remote-filename)))
@@ -660,7 +849,7 @@ program)."
                            (hpath:command-string display-executables
                                                  filename))
                      nil)
-                    ((hypb:functionp display-executables)
+                    ((functionp display-executables)
                      (funcall display-executables filename)
                      t)
                     ((and (listp display-executables) display-executables)
@@ -707,9 +896,11 @@ program)."
                      (anchor-name (subst-char-in-string ?- ?\  anchor)))
                  (goto-char (point-min))
                  (if (re-search-forward (format 
-                                         (if (string-match 
hpath:markdown-suffix-regexp buffer-file-name)
-                                             hpath:markdown-section-pattern
-                                           hpath:outline-section-pattern)
+                                         (cond ((string-match 
hpath:markdown-suffix-regexp buffer-file-name)
+                                                hpath:markdown-section-pattern)
+                                               ((eq major-mode 'texinfo-mode)
+                                                hpath:texinfo-section-pattern)
+                                               (t 
hpath:outline-section-pattern))
                                          (regexp-quote anchor-name)) nil t)
                      (progn (forward-line 0)
                             (recenter 0))
@@ -719,7 +910,7 @@ program)."
        (hash (goto-char (point-min)))))
 
 (defun hpath:find-executable (executable-list)
-  "Return the first executable string from EXECUTABLE-LIST found within 
`exec-path'."
+  "Return the first executable string from EXECUTABLE-LIST found within 
`exec-path' or nil."
   (catch 'found
     (mapc
      (lambda (executable)
@@ -793,16 +984,14 @@ programs, such as a pdf reader.  The cdr of each element 
may be:
 See also `hpath:internal-display-alist' for internal, window-system 
independent display settings."
   (cond ((memq window-system '(dps ns))
         hpath:external-display-alist-macos)
-       (hyperb:microcruft-os-p
+       (hyperb:microsoft-os-p
         hpath:external-display-alist-mswindows)
        (t (cdr (assoc (hyperb:window-system)
                       (list (cons "emacs" hpath:external-display-alist-x) ; 
GNU Emacs under X
-                            (cons "xemacs" hpath:external-display-alist-x) ; 
XEmacs under X
-                            (cons "xterm"  hpath:external-display-alist-x) ; 
GNU Emacs V18 under X
                             (cons "next" 
hpath:external-display-alist-macos)))))))
 
 (defun hpath:is-p (path &optional type non-exist)
-  "Returns PATH if PATH is a Unix path, else nil.
+  "Returns 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
@@ -810,93 +999,94 @@ 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."
-  (let ((rtn-path path)
-       (suffix))
-    (and (stringp path)
-        ;; 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.
-        (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)))
-        ;; Convert tabs and newlines to space.
-        (setq path (hbut:key-to-label (hbut:label-to-key path)))
-        (or (not (string-match "[()]" path))
-            (string-match "\\`([^ \t\n\r\)]+)[ *A-Za-z0-9]" path))
-        (if (string-match "\\$\{[^\}]+}" path)
-            (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 "@.+:\\|^/.+:\\|.+:/" 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 ""))))))))
+  (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)))
+          ;; Convert tabs and newlines to space.
+          (setq path (hbut:key-to-label (hbut:label-to-key path)))
+          (or (not (string-match "[()]" path))
+              (string-match "\\`([^ \t\n\r\)]+)[ *A-Za-z0-9]" path))
+          (if (string-match "\\$\{[^\}]+}" path)
+              (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 "")))))))))
 
 (defun hpath:push-tag-mark ()
   "Add a tag return marker at point if within a programming language file 
buffer.
@@ -992,7 +1182,7 @@ After any match, the resulting path will contain a varible 
reference like ${vari
       )))
 
 ;;
-;; The following function recursively resolves all UNIX links to their
+;; The following function recursively resolves all POSIX links to their
 ;; final referents.
 ;; Works with variable-based and other strange links like:
 ;; /usr/local -> $(SERVER_LOCAL)/usr/local, /usr/bin ->
@@ -1051,9 +1241,10 @@ validation checks.
 Default-directory should be equal to the current Hyperbole button
 source directory when called, so that PATH is expanded relative
 to it."
-  (cond ((not (stringp path))
-        (error "(hpath:validate): \"%s\" is not a pathname." path))
-       ((or (string-match "[()]" path) (hpath:remote-p path))
+  (unless (stringp path)
+    (error "(hpath:validate): \"%s\" is not a pathname." path))
+  (setq path (hpath:mswindows-to-posix path))
+  (cond ((or (string-match "[()]" path) (hpath:remote-p path))
         ;; info or remote path, so don't validate
         path)
        ((if (not (hpath:www-p path))
@@ -1271,7 +1462,7 @@ Returns \"anonymous\" if no default user is set."
       string)))
 
 (defun hpath:exists-p (path &optional suffix-flag)
-  "Return PATH if it exists.  (This does not mean you can read it.)
+  "Return PATH if it exists.  (This does not mean you can read it).
 If PATH exists with or without a suffix from hpath:suffixes, then that
 pathname is returned.
 
@@ -1321,16 +1512,20 @@ from path or t."
 Return nil if FILENAME is a directory name or an image file that emacs can 
display.
 See also documentation for the function (hpath:get-external-display-alist) and 
the variable
 `hpath:internal-display-alist'."
-  (cond ((let ((case-fold-search t))
-          (hpath:match filename (hpath:get-external-display-alist))))
+  (cond ((and (fboundp 'image-mode)
+             (string-match hpath:native-image-suffixes filename))
+        nil)
        ((let ((case-fold-search nil))
           (hpath:match filename hpath:internal-display-alist)))
+       ((let ((case-fold-search t))
+          (hpath:match filename (hpath:get-external-display-alist))))
        ((and (stringp filename) (file-directory-p filename))
         nil)
-       ((and (fboundp 'image-mode)
-             (string-match hpath:native-image-suffixes filename))
-        nil)
-       (t (hpath:find-file-mailcap filename))))
+       ;; 01/21/2019 - RSW commented this next line out since it can
+       ;; trigger external viewers on many file types that Emacs
+       ;; displays natively.
+       ;; (t (hpath:find-file-mailcap filename))
+       ))
 
 (defun hpath:match (filename regexp-alist)
   "If FILENAME matches the car of any element in REGEXP-ALIST, return its cdr.
diff --git a/hsettings.el b/hsettings.el
index 1935242..0f4ca10 100644
--- a/hsettings.el
+++ b/hsettings.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    15-Apr-91 at 00:48:49
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -34,7 +34,7 @@
 ;; The following section applies only to MS-DOS and MS-Windows OSs.
 ;; Users of other OSs may simply ignore this section.
 
-;; Some versions of Microcruft OSs don't automatically set the
+;; Some versions of Microsoft OSs don't automatically set the
 ;; timezone so that Hyperbole can read it.  Nor do they include a
 ;; UNIX-style date program.  So follow the commented instructions in
 ;; the code below here.
@@ -43,7 +43,7 @@
 ;; timezone properly and you need not do anything.  If you receive a
 ;; timezone error, simply follow the instructions below to set the
 ;; timezone manually and then reload Hyperbole.
-(if (and hyperb:microcruft-os-p
+(if (and hyperb:microsoft-os-p
         (require 'htz)
         (not (stringp htz:local)))
     (progn
@@ -123,6 +123,19 @@ down a windowful."
   (hyperbole-menubar-menu)
   (hyperbole-minibuffer-menu))
 
+(defcustom hyperbole-default-web-search-term-max-lines 2
+  "Provide a default search term using the selected text if the
+active region contains less than or equal to this number of
+lines"
+  :type 'integer
+  :group 'hyperbole-commands)
+
+(defun hyperbole-default-web-search-term ()
+  "Return a default search term if region is active and not too large."
+  (and (region-active-p)
+       (<= (count-lines (region-beginning) (region-end)) 
hyperbole-default-web-search-term-max-lines)
+       (buffer-substring-no-properties (region-beginning) (region-end))))
+
 (defun hyperbole-read-web-search-arguments (&optional service-name search-term)
   "Read from the keyboard a list of (web-search-service-string 
search-term-string) if not given as arguments."
   (let ((completion-ignore-case t))
@@ -130,7 +143,8 @@ down a windowful."
       (setq service-name (completing-read "Search service: " 
hyperbole-web-search-alist
                                          nil t)))
     (while (or (not (stringp search-term)) (equal search-term ""))
-     (setq search-term (read-string (format "Search %s for: " service-name))))
+      (setq search-term (read-string (format "Search %s for: " service-name)
+                                    (hyperbole-default-web-search-term))))
     (list service-name search-term)))
 
 (defun hyperbole-web-search (&optional service-name search-term)
@@ -149,6 +163,24 @@ package to display search results."
                              search-term)))
       (user-error "(Hyperbole): Invalid web search service `%s'" 
service-name))))
 
+(defcustom inhibit-hyperbole-messaging t
+  "*Determines whether Hyperbole supports explicit buttons in mail and news 
buffers.
+The default of t means disable such support (work remains to
+modernize these features).  When t, Hyperbole will not alter
+messaging mode hooks nor overload functions from these packages,
+preventing potential incompatibilities.
+
+If you want to use Hyperbole buttons in mail and news buffers, set
+this variable to nil by adding (hyperbole-toggle-messaging 1)
+to your personal Emacs initialization file, prior to loading
+Hyperbole, and then restart Emacs."
+  :type 'boolean
+  :initialize 'custom-initialize-set
+  :set (lambda (symbol value) 
+        ;; Invert value to produce ARG for hyperbole-toggle-messaging.
+        (hyperbole-toggle-messaging (if value 0 1)))
+  :group 'hyperbole-buttons)
+
 (defcustom hyperbole-web-search-browser-function browse-url-browser-function
   "*Function of one url argument called by any Hyperbole Find/Web search."
   :type 'boolean
@@ -191,7 +223,7 @@ obtained search string."
 ;; No-op unless set by one of the conditionals below.
 (defun hui:but-flash ())
 
-(cond ((and (not (featurep 'xemacs)) (not noninteractive))
+(cond ((not noninteractive)
        (require 'hui-em-but)
        ;; Highlight explicit buttons whenever a file is read in.
        (add-hook 'find-file-hook #'hproperty:but-create t)
@@ -211,29 +243,6 @@ obtained search string."
        ;;
        ;; If you find that the Hyperbole button flash time is too slow
        ;; or too fast, adjust it here.
-       (setq hproperty:but-flash-time 1000))
-
-      ((and (featurep 'xemacs) (not noninteractive))
-       (require 'hui-xe-but)
-       ;;
-       ;; Highlight explicit buttons when files are read in.
-       (add-hook 'find-file-hook #'hproperty:but-create t)
-       (defalias 'hui:but-flash 'hproperty:but-flash)
-       ;;
-       ;; Substitute for the nil argument below a valid X color name with
-       ;; which to highlight buttons if the default highlighting does not
-       ;; appeal to you. See "hui-xe-but.el" for how this works.
-       (hproperty:cycle-but-color nil)
-       ;;
-       ;; Non-nil means highlight all explict buttons with 
`hproperty:but-face'.
-       (setq hproperty:but-highlight-flag t)
-       ;;
-       ;; Non-nil means visually emphasize that button under mouse cursor is
-       ;; selectable.
-       (setq hproperty:but-emphasize-p nil)
-       ;;
-       ;; If you find that the Hyperbole button flash time is too slow
-       ;; or too fast, adjust it here.
        (setq hproperty:but-flash-time 1000)))
 
 ;;; ************************************************************************
diff --git a/hsys-org.el b/hsys-org.el
index f9604db..7c916e1 100644
--- a/hsys-org.el
+++ b/hsys-org.el
@@ -4,16 +4,17 @@
 ;;
 ;; Orig-Date:     2-Jul-16 at 14:54:14
 ;;
-;; Copyright (C) 2016  Free Software Foundation, Inc.
+;; Copyright (C) 2016-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
 
 ;;; Commentary:
 ;;
-;;   This defines a context-sensitive implicit button type, org-mode, triggered
-;;   when the major mode is org-mode and point is anywhere other than
-;;   the end of a line.
+;;   This defines a context-sensitive implicit button type, org-mode,
+;;   triggered when the major mode is org-mode or is derived from
+;;   org-mode and point is anywhere other than at the end of a line.
+;;
 ;;   When:
 ;;     on an Org mode link - displays the link referent
 ;;     on an Org mode heading - cycles through the available display
@@ -28,48 +29,262 @@
 (require 'hbut)
 (require 'org)
 
+(defvar hsys-org-mode-function #'hsys-org-mode-p
+  "*Boolean function of no arguments that determines whether hsys-org actions 
are triggered or not.")
+
+(defun hsys-org-mode-p ()
+  "Returns non-nil if an Org-related major or minor mode is active in the 
current buffer."
+  (or (derived-mode-p 'org-mode)
+      (and (boundp 'outshine-mode) outshine-mode)
+      (and (boundp 'poporg-mode) poporg-mode)))
+
+
+(defun hsys-org-cycle ()
+  "Calls org-cycle and forces it to be set as this-command to cycle through 
all states."
+  (setq last-command 'org-cycle
+       this-command 'org-cycle)
+  (org-cycle))
+
+(defun hsys-org-global-cycle ()
+  "Calls org-global-cycle and forces it to be set as this-command to cycle 
through all states."
+  (setq last-command 'org-cycle
+       this-command 'org-cycle)
+  (org-global-cycle nil))
+
 ;;; ************************************************************************
 ;;; Public Button Types
 ;;; ************************************************************************
 
 (defib org-mode ()
-  "Follows any Org mode link at point or cycles through views of the outline 
subtree at point.
-The variable, `browse-url-browser-function', customizes the url browser that
-is used for urls.  Valid values of this variable include 
`browse-url-default-browser'
-and `browse-url-generic'."
-  (when (eq major-mode 'org-mode)
-    (cond ((org-link-at-p)
-          (hact 'org-link nil))
-         ((org-at-heading-p)
-          (hact 'org-cycle nil))
-         (t (hact 'org-meta-return)))))
+  "Follows Org mode references, cycles outline visibility and executes code 
blocks.
+
+First, this follows internal links in Org mode files.  When pressed on a
+link referent/target, the link definition is displayed, allowing two-way
+navigation between definitions and targets.
+
+Second, this follows Org mode external links.
+
+Third, within a radio target definition, this jumps to the first
+occurrence of an associated radio target.
+
+Fourth, when point is on an outline heading in Org mode, this
+cycles the view of the subtree at point.
+
+Fifth, with point on the first line of a code block definition, this
+executes the code block via the Org mode standard binding of {C-c C-c},
+(org-ctrl-c-ctrl-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)."
+  (when (funcall hsys-org-mode-function)
+    (let (start-end)
+      (cond ((setq start-end (hsys-org-internal-link-target-at-p))
+            (hsys-org-set-ibut-label start-end)
+            (hact 'org-internal-link-target))
+           ((hsys-org-radio-target-def-at-p)
+            (hact 'org-radio-target))
+           ((setq start-end (hsys-org-link-at-p))
+            (hsys-org-set-ibut-label start-end)
+            (hact 'org-link))
+           ((org-at-heading-p)
+            (hact 'hsys-org-cycle))
+           ((hsys-org-at-block-start-p)
+            (org-ctrl-c-ctrl-c))
+           (t
+            (hact 'org-meta-return))))))
 
 (defun org-mode:help (&optional _but)
   "If on an Org mode heading, cycles through views of the whole buffer outline.
 If on an Org mode link, displays standard Hyperbole help."
-  (when (eq major-mode 'org-mode)
-    (cond ((org-link-at-p)
+  (when (derived-mode-p 'org-mode)
+    (cond ((hsys-org-link-at-p)
           (hkey-help current-prefix-arg)
           t)
          ((org-at-heading-p)
-          (org-global-cycle nil)
+          (hact 'hsys-org-global-cycle)
           t))))
 
-(defact org-link (link)
-  "Follows an Org mode LINK.  If LINK is nil, follows the link at point."
+(defact org-link (&optional link)
+  "Follows an optional Org mode LINK to its target.
+If LINK is nil, follows any link at point.  Otherwise, triggers an error."
   (if (stringp link)
       (org-open-link-from-string link) ;; autoloaded
-    (org-open-at-point-global))) ;; autoloaded
+    (org-open-at-point))) ;; autoloaded
+
+(defact org-internal-link-target (&optional link-target)
+  "Follows an optional Org mode LINK-TARGET back to its link definition.
+If LINK-TARGET is nil, follows any link target at point.  Otherwise, triggers 
an error."
+  (let (start-end)
+    (cond ((stringp link-target)
+          (setq start-end t)
+          (hsys-org-search-internal-link-p link-target))
+         ((null link-target)
+          (when (setq start-end (hsys-org-internal-link-target-at-p))
+            (hsys-org-search-internal-link-p (buffer-substring-no-properties
+                                         (car start-end) (cdr start-end))))))
+    (unless start-end
+      (error "(org-internal-link-target): Point must be on a link target (not 
the link itself)"))))
+
+
+(defact org-radio-target (&optional target)
+  "Jumps to the next occurrence of an optional Org mode radio TARGET link.
+If TARGET is nil and point is on a radio target definition or link, it
+uses that one.  Otherwise, triggers an error."
+  (let (start-end)
+    (cond ((stringp target)
+          (setq start-end t)
+          (hsys-org-to-next-radio-target-link target))
+         ((null target)
+          (when (setq start-end (hsys-org-radio-target-at-p))
+            (hsys-org-to-next-radio-target-link (buffer-substring-no-properties
+                                            (car start-end) (cdr 
start-end))))))
+    (unless start-end
+      (error "(org-radio-target): Point must be on a radio target definition 
or link"))))
 
 ;;; ************************************************************************
 ;;; Public functions
 ;;; ************************************************************************
 
+(defun hsys-org-region-with-text-property-value (pos property)
+  "Returns (start . end) buffer positions of the region around POS that shares 
its non-nil text PROPERTY value, else nil."
+  (if (null pos) (setq pos (point)))
+  (let ((property-value (get-text-property pos property))
+       (start-point pos))
+    (when property-value
+       ;; Can't use previous-single-property-change here because it
+       ;; ignores characters that lack the property, i.e. have nil values.
+       (if (bobp)
+           (setq start-point (point-min))
+         (while (equal (get-text-property (1- start-point) property) 
property-value)
+           (setq start-point (1- start-point))))
+       (cons start-point (next-single-property-change start-point property)))))
+
+(defun hsys-org-at-block-start-p ()
+  "Returns non-nil if point is on the first line of an Org block definition, 
else nil."
+  (save-excursion
+    (forward-line 0)
+    (or (looking-at org-block-regexp)
+       (looking-at org-dblock-start-re))))
+
+(defun hsys-org-link-at-p ()
+  "Returns non-nil iff point is on an Org mode link.
+Assumes caller has already checked that the current buffer is in org-mode."
+  (or (org-in-regexp org-any-link-re)
+      (hsys-org-face-at-p 'org-link)))
+
 ;; Assumes caller has already checked that the current buffer is in org-mode.
-(defun org-link-at-p ()
+(defun hsys-org-target-at-p ()
+  "Returns non-nil iff point is on an Org mode radio target (definition) or 
link target (referent).
+Assumes caller has already checked that the current buffer is in org-mode."
+  (hsys-org-face-at-p 'org-target))
+
+(defun hsys-org-radio-target-link-at-p ()
+  "Returns (target-start . target-end) positions iff point is on an Org mode 
radio target link (referent), else nil."
+  (and (get-text-property (point) 'org-linked-text)
+       (hsys-org-link-at-p)
+       (hsys-org-region-with-text-property-value (point) 'org-linked-text)))
+
+(defun hsys-org-radio-target-def-at-p ()
+  "Returns (target-start . target-end) positions iff point is on an Org mode 
radio target (definition), including any delimiter characters, else nil."
+  (when (hsys-org-target-at-p)
+    (save-excursion
+      (if (not (looking-at "<<<"))
+         (goto-char (or (previous-single-property-change (point) 'face) 
(point-min))))
+      (if (looking-at "<<<")
+         (goto-char (match-end 0)))
+      (and (get-text-property (point) 'org-linked-text)
+          (hsys-org-region-with-text-property-value (point) 'face)))))
+
+(defun hsys-org-radio-target-at-p ()
+  "Returns (target-start . target-end) positions iff point is on an Org mode 
<<<radio target definition>>> or radio target link (referent), including any 
delimiter characters, else nil."
+  (or (hsys-org-radio-target-def-at-p)
+      (hsys-org-radio-target-link-at-p)))
+
+(defun hsys-org-internal-link-target-at-p ()
+  "Returns (target-start . target-end) positions iff point is on an Org mode 
<<link target>>, including any delimiter characters, else nil."
+  (when (hsys-org-target-at-p)
+    (save-excursion
+      (if (not (looking-at "<<"))
+         (goto-char (or (previous-single-property-change (point) 'face) 
(point-min))))
+      (if (looking-at "<<<?")
+         (goto-char (match-end 0)))
+      (and (not (get-text-property (point) 'org-linked-text))
+          (hsys-org-region-with-text-property-value (point) 'face)))))
+
+(defun hsys-org-face-at-p (org-face-type)
+  "Returns `org-face-type` iff point is on a character with face 
`org-face-type', a symbol, else nil."
   (let ((face-prop (get-text-property (point) 'face)))
-    (or (eq face-prop 'org-link)
-       (and (listp face-prop) (memq 'org-link face-prop)))))
+    (when (or (eq face-prop org-face-type)
+             (and (listp face-prop) (memq org-face-type face-prop)))
+      org-face-type)))
+
+(defun hsys-org-search-internal-link-p (target)
+  "Searches from buffer start for an Org internal link definition matching 
TARGET.
+White spaces are insignificant.  Returns t if a link is found, else nil."
+  (if (string-match "<<.+>>" target)
+      (setq target (substring target 2 -2)))
+  (let ((re (format "%s"
+                   (mapconcat #'regexp-quote
+                              (split-string target)
+                              "[ \t]+\\(?:\n[ \t]*\\)?")))
+       (origin (point)))
+    (goto-char (point-min))
+    (catch :link-match
+      (while (re-search-forward re nil t)
+       (backward-char)
+       (let ((object (org-element-context)))
+         (when (eq (org-element-type object) 'link)
+           (org-show-context 'link-search)
+           (throw :link-match t))))
+      (goto-char origin)
+      nil)))
+
+(defun hsys-org-search-radio-target-link-p (target)
+  "Searches from point for a radio target link matching TARGET.
+White spaces are insignificant.  Returns t if a target link is found, else 
nil."
+  (if (string-match "<<<.+>>>" target)
+      (setq target (substring target 3 -3)))
+  (let ((re (format "%s"
+                   (mapconcat #'regexp-quote
+                              (split-string target)
+                              "[ \t]+\\(?:\n[ \t]*\\)?")))
+       (origin (point)))
+    (catch :radio-match
+      (while (re-search-forward re nil t)
+       (backward-char)
+       (let ((object (org-element-context)))
+         (when (eq (org-element-type object) 'link)
+           (org-show-context 'link-search)
+           (throw :radio-match t))))
+      (goto-char origin)
+      nil)))
+
+(defun hsys-org-set-ibut-label (start-end)
+  "Record the label and START-END positions of any implicit button at point."
+  (when (consp start-end)
+    (ibut:label-set (ibut:key-to-label
+                    (ibut:label-to-key
+                     (buffer-substring-no-properties (car start-end) (cdr 
start-end))))
+                   (car start-end) (cdr start-end))))
+
+
+(defun hsys-org-to-next-radio-target-link (target)
+  "Moves to the start of the next radio TARGET link if found.  TARGET must be 
a string."
+  (if (string-match "<<<.+>>>" target)
+      (setq target (substring target 3 -3)))
+  (let ((opoint (point))
+       (start-end (hsys-org-radio-target-at-p))
+       found)
+    (if start-end
+       ;; Move past any current target link
+       (goto-char (cdr start-end)))
+    (while (and (hsys-org-search-radio-target-link-p target)
+               (setq found t)
+               (not (hsys-org-radio-target-link-at-p))))
+    (when found
+      (if (hsys-org-radio-target-link-at-p)
+         (goto-char (or (previous-single-property-change (point) 'face) 
(point-min)))
+       (goto-char opoint)))))
 
 ;;; ************************************************************************
 ;;; Private functions
diff --git a/hsys-www.el b/hsys-www.el
index c46b138..663a7c1 100644
--- a/hsys-www.el
+++ b/hsys-www.el
@@ -1,4 +1,4 @@
-;;; hsys-www.el ---  GNU Hyperbole support for Emacs World-Wide Web (WWW) 
browsing
+;;; hsys-www.el --- GNU Hyperbole support for Emacs World-Wide Web (WWW) 
browsing
 ;;
 ;; Author:       Bob Weiner
 ;;
diff --git a/htz.el b/htz.el
index f467077..6ff6713 100644
--- a/htz.el
+++ b/htz.el
@@ -1,4 +1,4 @@
-;;; htz.el ---  Timezone-based time and date support for GNU Hyperbole
+;;; htz.el --- Timezone-based time and date support for GNU Hyperbole
 ;;
 ;; Author:       Masanobu Umeda             / Bob Weiner
 ;;
@@ -61,8 +61,8 @@ Optional 2nd argument TIMEZONE specifies a timezone to be 
represented in."
 
 (defun htz:date-parse (date &optional parsed-current-date)
   "Parse DATE string and return a vector [year month day time timezone].
-19 is prepended to year if necessary.  Timezone in DATE is optional, it
-defaults to the value of `htz:local'.
+If a two-digit year, the first two digits of the current year are prepended.
+Timezone in DATE is optional, it defaults to the value of `htz:local'.
 
 Recognizes the following styles:
  (1) \"(1 30 1999)\" or \"(1 30 1999)\"  `calendar-julian-date'  requires 
`parsed-current-date' arg
@@ -73,11 +73,8 @@ Recognizes the following styles:
  (6) \"Mar 29 14:00\"    `ls -l date'  requires `parsed-current-date' arg
  (7) \"Mar  7  1994\"    `ls -l date'  requires `parsed-current-date' arg"
   (let ((date (or date ""))
-       (year nil)
-       (month nil)
-       (day nil)
-       (time nil)
-       (zone nil))                     ; This may be nil.
+       year month day time
+       zone)                   ; This may be nil.
     (if (listp date)
        (setq month (nth 0 date)
              day   (nth 1 date)
@@ -87,31 +84,34 @@ Recognizes the following styles:
             ;; Style (1)
             (setq year 3 month 1 day 2 time nil zone nil))
            ((string-match
-             
"\\([0-9][0-9][0-9][0-9]\\)\\([0-1][0-9]\\)\\([0-3][0-9]\\):?\\([0-2][0-9]:[0-5][0-9:]+\\)[
 ]*\\'" date)
-            ;; Style (4)
+             ;; Allow for 3 digits in hour to handle prior error in
+             ;; generating hours fixed on 2019-06-10; 3rd digit
+             ;; removed in htz:time-make-string and htz:time-parse.
+             
"\\([0-9][0-9][0-9][0-9]\\)\\([0-1][0-9]\\)\\([0-3][0-9]\\):?\\([0-9][0-9][0-9]?:[0-5][0-9:]+\\)[
 ]*\\'" date)
+            ;; Style (5)
             (setq year 1 month 2 day 3 time 4 zone nil))
            ((string-match
              "\\([0-9]+\\) \\([^ ,]+\\) \\([0-9]+\\) \\([0-9]+:[0-9:]+\\)[ 
]*\\'" date)
-            ;; Styles: (1) and (2) without timezone
+            ;; Styles: (2) and (3) without timezone
             (setq year 3 month 2 day 1 time 4 zone nil))
            ((string-match
              "\\([0-9]+\\) \\([^ ,]+\\) \\([0-9]+\\) \\([0-9]+:[0-9:]+\\)[ 
]*\\([-+a-zA-Z0-9]+\\)" date)
-            ;; Styles: (1) and (2) with timezone and buggy timezone
+            ;; Styles: (2) and (3) with timezone and buggy timezone
             (setq year 3 month 2 day 1 time 4 zone 5))
            ((string-match
-             "\\([^ ,]+\\) +\\([0-9]+\\) \\([0-9]+:[0-9:]+\\) \\([0-9]+\\)" 
date)
-            ;; Styles: (3) without timezone
-            (setq year 4 month 1 day 2 time 3 zone nil))
+             "\\([^ ,]+\\) +\\([0-9]+\\) \\([0-9]+:[0-9:]+\\(:[0-9]+\\)?\\) 
\\([0-9]+\\)" date)
+            ;; Styles: (4) without timezone
+            (setq year 5 month 1 day 2 time 3 zone nil))
            ((string-match
-             "\\([^ ,]+\\) +\\([0-9]+\\) \\([0-9]+:[0-9:]+\\) 
\\([-+a-zA-Z0-9]+\\) \\([0-9]+\\)" date)
-            ;; Styles: (3) with timezone
-            (setq year 5 month 1 day 2 time 3 zone 4))
+             "\\([^ ,]+\\) +\\([0-9]+\\) \\([0-9]+:[0-9:]+\\(:[0-9]+\\)?\\) 
\\([-+a-zA-Z0-9]+\\) \\([0-9]+\\)" date)
+            ;; Styles: (4) with timezone
+            (setq year 6 month 1 day 2 time 3 zone 5))
            ((string-match "^\\([^ ,]+\\) +\\([0-9]+\\) +\\([0-9]+:[0-9:]+\\)$" 
date)
-            ;; Style: (5)
+            ;; Style: (6)
             (setq year nil month 1 day 2 time 3 zone nil))
            ((string-match
              "^\\([^ ,]+\\) +\\([0-9]+\\) +\\([0-9][0-9][0-9][0-9]\\)$" date)
-            ;; Style: (6)
+            ;; Style: (7)
             (setq year 3 month 1 day 2 time nil zone nil))
            (t (error "(htz:date-parse): Invalid date format: `%s'" date)))
       (if year
@@ -249,7 +249,10 @@ See `htz:date-parse' for a list of acceptable date 
formats."
     ;; Return [hour minute second]
     (vector
      (if hour
-        (substring time (match-beginning hour) (match-end hour)) "0")
+        ;; Remove possible 3rd digit in hour to handle prior error in
+        ;; generating hours fixed on 2019-06-10; 3rd digit
+        ;; removed in htz:time-make-string and here.
+        (format "%02.2s" (substring time (match-beginning hour) (match-end 
hour))) "0")
      (if minute
         (substring time (match-beginning minute) (match-end minute)) "0")
      (if second
@@ -322,7 +325,7 @@ Optional argument TIMEZONE specifies a time zone."
 ;; Partly copied from Calendar program by Edward M. Reingold.
 (defun htz:time-make-string (hour minute second)
   "Make time string from HOUR, MINUTE, and SECOND."
-  (format "%02d:%02d:%02d" hour minute second))
+  (format "%02.2d:%02.2d:%02.2d" hour minute second))
 
 (defun htz:zone-to-hour (timezone)
   "Translate TIMEZONE (in zone name or integer) to integer hour."
diff --git a/hui-em-but.el b/hui-em-but.el
index 8d463d9..9292230 100644
--- a/hui-em-but.el
+++ b/hui-em-but.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    21-Aug-92
 ;;
-;; Copyright (C) 1992-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1992-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -16,7 +16,7 @@
 
 ;;; Code:
 
-(when (or (featurep 'xemacs) noninteractive)
+(when noninteractive
   ;; FIXME: Loading a file should always be harmless!
   (error "(hui-em-but.el): Load only when running GNU Emacs interactively"))
 
@@ -125,7 +125,7 @@ expression which matches an entire button string.
 If REGEXP-MATCH is non-nil, only buttons matching this argument are
 highlighted."
   (when hproperty:but-highlight-flag
-    (ebut:map (lambda (lbl start end)
+    (hbut:map (lambda (lbl start end)
                (hproperty:but-add start end hproperty:but-face))
              start-delim end-delim regexp-match 'include-delims)))
 
diff --git a/hui-jmenu.el b/hui-jmenu.el
index 981ab85..59b4861 100644
--- a/hui-jmenu.el
+++ b/hui-jmenu.el
@@ -1,4 +1,4 @@
-;;; hui-jmenu.el ---  Popup menus for jumping to and managing buffers, frames, 
and windows
+;;; hui-jmenu.el --- Popup menus for jumping to and managing buffers, frames, 
and windows
 ;;
 ;; Author:       Bob Weiner
 ;;
@@ -141,13 +141,12 @@
 ;;; ************************************************************************
 
 (defun hui-menu-buffer-mode-name (buffer)
-  (let ((mname (cdr (assq 'mode-name (buffer-local-variables buffer)))))
+  (let ((mname (buffer-local-value 'mode-name buffer)))
     (if mname
        ;; Next line needed to ensure mode name is always formatted as
        ;; a string.
        (format-mode-line mname)
-      (capitalize (symbol-name
-                  (cdr (assq 'major-mode (buffer-local-variables buffer))))))))
+      (capitalize (symbol-name (buffer-local-value 'major-mode buffer))))))
 
 (defun hui-menu-frame-name (frame)
   "Return the name of FRAME."
diff --git a/hui-menu.el b/hui-menu.el
index a725cde..d8335fb 100644
--- a/hui-menu.el
+++ b/hui-menu.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    28-Oct-94 at 10:59:44
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -186,10 +186,7 @@ Return t if cutoff, else nil."
                    ;; setting.  Invoking this item should then make it
                    ;; visible.
                    (hyperb:init-menubar))
-                  ((cond ((not (featurep 'xemacs))
-                          (global-key-binding [menu-bar Hyperbole]))
-                         ((boundp 'current-menubar)
-                          (car (find-menu-item current-menubar 
'("Hyperbole")))))
+                  ((global-key-binding [menu-bar Hyperbole])
                    ;; Already on the menubar, remove it.
                    (hui-menu-remove Hyperbole))
                   (t;; Add it.
@@ -198,10 +195,8 @@ Return t if cutoff, else nil."
             :selected
              (cond ((boundp 'menubar-configuration)
                     (memq 'Hyperbole menubar-configuration))
-                   ((not (featurep 'xemacs))
-                    (and (global-key-binding [menu-bar Hyperbole]) t))
-                   ((boundp 'current-menubar)
-                    (car (find-menu-item current-menubar '("Hyperbole")))))]
+                   (t
+                    (and (global-key-binding [menu-bar Hyperbole]) t)))]
            "----"
            ["Find-File-Accepts-URLs"
             hpath:find-file-urls-mode
@@ -302,7 +297,7 @@ REBUILD-FLAG is non-nil, in which case the menu is rebuilt."
     (setq infodock-hyperbole-menu
          (delq nil
                (list
-                (if (featurep 'xemacs) "%_Hyperbole" "Hyperbole")
+                "Hyperbole"
                 :config 'Hyperbole
                 hui-menu-about
                 ["Demonstration"  (hypb:display-file-with-logo
@@ -363,7 +358,7 @@ REBUILD-FLAG is non-nil, in which case the menu is rebuilt."
                    ))
                 '("Explicit-Button"
                   :filter hui-menu-explicit-buttons
-                  ["Activate" hui:hbut-act t]
+                  ["Activate" hui:ebut-act t]
                   ["Create" hui:ebut-create t]
                   ["Delete" hui:ebut-delete t]
                   ["Edit"   hui:ebut-modify t]
@@ -413,6 +408,8 @@ REBUILD-FLAG is non-nil, in which case the menu is rebuilt."
                   ["Activate-at-Point"    hui:hbut-current-act t]
                   ["Delete-Type"         (hui:htype-delete 'ibtypes) t]
                   ["Help"   hui:hbut-help t]
+                  ["Label"  hui:ibut-label-create t]
+                  ["Rename" hui:ibut-rename t]
                   ["Types"  (hui:htype-help 'ibtypes 'no-sort) t]
                   )
                 '("Koutliner"
diff --git a/hui-mini.el b/hui-mini.el
index a2f1054..70b626a 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    15-Oct-91 at 20:13:17
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -17,6 +17,7 @@
 ;;; ************************************************************************
 
 (require 'hypb)
+(require 'hsettings)                    ;For hyperbole-web-search-alist
 (require 'browse-url)
 
 ;;; ************************************************************************
@@ -149,13 +150,9 @@ With optional HELP-STRING-FLAG, instead returns the one 
line help string for the
   "Uses CHAR-STR or last input character as minibuffer argument."
   (interactive)
   (let ((input (or char-str (aref (recent-keys) (1- (length (recent-keys)))))))
-    (cond ((not (featurep 'xemacs))
-          (and (not (integerp input))
-               (eventp input)
-               (setq input (event-basic-type input))))
-         ((featurep 'xemacs)
-          (if (eventp input)
-              (setq input (event-to-character input)))))
+    (and (not (integerp input))
+        (eventp input)
+        (setq input (event-basic-type input)))
     (if (or (symbolp input)
            (and (integerp input) (= input ?\r)))
        (setq input (hargs:at-p)))
@@ -202,24 +199,6 @@ With optional HELP-STRING-FLAG, instead returns the one 
line help string for the
       (if (eq owind (minibuffer-window))
          (select-window owind)))))
 
-(defun hui:menu-xemacs (&optional menu menu-list)
-  "Returns an XEmacs menu built from a Hyperbole minibuffer menu.
-Optional MENU (a symbol) specifies a specific submenu of optional MENU-LIST.
-a Hyperbole menu list structure.  Otherwise, all menus are used.
-MENU defaults to 'hyperbole and MENU-LIST to `hui:menus'.  See `hui:menus'
-definition for the format of the menu list structure."
-  (mapcar
-   (lambda (entry)
-     (or (consp entry)
-        (error "(hui:menu-xemacs): Invalid menu entry: %s" entry))
-     (let ((label (car entry))
-          (content (car (cdr entry))))
-       (cond ((null content) (hypb:replace-match-string ">$" label "" t))
-            ((and (consp content) (eq (car content) 'menu))
-             (hui:menu-xemacs (cdr content)))
-            (t (vector label content 't)))))
-   (cdr (assq (or menu 'hyperbole) (or menu-list hui:menus)))))
-
 (defun hui:menu-select (menu-alist &optional doc-flag help-string-flag)
   "Prompts user to choose the first character of any item from MENU-ALIST.
 Case is not significant.  If chosen by direct selection with the Assist Key,
@@ -384,10 +363,6 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
   (define-key hui:menu-mode-map [backtab]       #'hui:menu-backward-item) ;; 
Shift-TAB
   (define-key hui:menu-mode-map "\M-\C-i"       #'hui:menu-backward-item) ;; 
M-TAB
   ;;
-  ;; This next binding is necessary since the default button1 binding under
-  ;; XEmacs, mouse-track, is broken under XEmacs V19.8.
-  (and (featurep 'xemacs) window-system
-       (define-key hui:menu-mode-map 'button1 'mouse-set-point))
   (let ((i 32))
     (while (<= i 126)
       (define-key hui:menu-mode-map (char-to-string i) 'hui:menu-enter)
@@ -552,8 +527,8 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
         ))
        '(ebut .
         (("EButton>")
-         ("Act"    hui:hbut-act
-           "Activates button at point or prompts for explicit button.")
+         ("Act"    hui:ebut-act
+           "Activates explicit button at point or prompts for explicit button 
to activate.")
          ("Create" hui:ebut-create)
          ("Delete" hui:ebut-delete)
          ("Edit"   hui:ebut-modify "Modifies any desired button attributes.")
@@ -605,6 +580,10 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
          ("Help"   hui:hbut-help   "Reports on button's attributes.")
          ("Info"   (id-info "(hyperbole)Implicit Buttons")
           "Displays manual section on implicit buttons.")
+         ("Label"  hui:ibut-label-create
+          "Creates an implicit button label preceding an existing implicit 
button at point, if any.")
+         ("Rename" hui:ibut-rename
+          "Modifies a label preceding an implicit button in the current 
buffer.")
          ("Types"  (hui:htype-help 'ibtypes 'no-sort)
           "Displays documentation for one or all implicit button types.")
          ))
@@ -635,7 +614,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
          ))
        '(otl
         . (("Kotl>")
-           ("All"       kotl-mode:show-all "Expand all collapsed cells.") 
+           ("All"       kotl-mode:show-all "Expand all collapsed cells.")
            ("Blanks"    kvspec:toggle-blank-lines
             "Toggle blank lines between cells on or off.")
            ("Create"    kfile:find   "Create or edit an outline file.")
@@ -659,7 +638,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
                                (kotl-mode:show-tree (kcell-view:label)))
             "Expand tree rooted at point.")
            ("Top"       kotl-mode:top-cells
-            "Hide all but top-level cells.") 
+            "Hide all but top-level cells.")
            ("Vspec"     kvspec:activate
             "Prompt for and activate a view specifiction.")
            ))
diff --git a/hui-mouse.el b/hui-mouse.el
index c46b732..d3396b2 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    04-Feb-89
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2018  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -243,10 +243,11 @@ Its default value is #'smart-scroll-down."
     ;;
     ;; Python files - ensure this comes before Imenu for more advanced
     ;; definition lookups
-    ((and (or (and (eq major-mode 'python-mode) buffer-file-name)
-             (string-match "^Pydoc:\\|\\*?Python" (buffer-name)))
-         (smart-python-at-tag-p)) .
-         ((smart-python) . (smart-python nil 'next-tag)))
+    ((and (or (and (derived-mode-p 'python-mode) buffer-file-name)
+             (let ((case-fold-search))
+               (string-match "\\`\\([ *]?Pydoc[: ]\\|\\*?Python\\)" 
(buffer-name))))
+         (setq hkey-value (smart-python-at-tag-p))) .
+         ((smart-python hkey-value) . (smart-python hkey-value 'next-tag)))
     ;;
     ;; Imenu listing in GNU Emacs
     ((smart-imenu-item-at-p)
@@ -271,8 +272,11 @@ Its default value is #'smart-scroll-down."
          buffer-file-name (smart-asm-at-tag-p)) .
          ((smart-asm) . (smart-asm nil 'next-tag)))
     ;;
-    ((and (smart-lisp-mode-p) (smart-lisp-at-tag-p)) .
-     ((smart-lisp) . (smart-lisp 'show-doc)))
+    ((or (and (smart-lisp-mode-p) (smart-lisp-at-tag-p))
+        ;; Tightly limit Lisp matches in change-log-mode.
+        (smart-lisp-at-change-log-tag-p)) .
+        ((smart-lisp) . (smart-lisp 'show-doc)))
+    ;;
     ;;
     ((and (eq major-mode 'java-mode) buffer-file-name
          (or (smart-java-at-tag-p)
@@ -399,7 +403,7 @@ smart keyboard keys.")
 (require 'hmouse-key)
 
 ;; This next library adds drag actions to `hmouse-alist'.
-(load "hui-window")
+(require 'hui-window)
 
 ;;; ************************************************************************
 ;;; support code
@@ -599,7 +603,7 @@ If key is pressed:
        ((< (current-column) 5) (calendar-cursor-to-nearest-date)
         (scroll-calendar-right-three-months 1))
        (t (calendar-cursor-to-nearest-date)
-          (view-diary-entries 1))))
+          (diary-view-entries 1))))
 
 (defun smart-calendar-assist ()
   "Uses a single assist-key or mouse assist-key to manipulate the scrolling 
calendar.
@@ -627,12 +631,12 @@ If assist-key is pressed:
 ;;; ************************************************************************
 
 ;; These functions are called from hkey-alist when keyboard Smart Keys
-;; are used but for mouse keys, they are bound to local keys in
+;; are used.  For mouse keys, they are bound to local keys in
 ;; company-mode's minor mode map.
 
 (defun smart-company-to-definition (event)
   "Action Key binding for company-mode completions popup to show item 
definition.
-Use left mouse key or RET key to select a completion and exit."
+Use left mouse key, RET or TAB key to select a completion and exit."
   (interactive "e")
   (when (mouse-event-p last-command-event)
     (company-select-mouse event))
@@ -735,9 +739,13 @@ If assist-key is pressed:
         (goto-char (point-max)))
        ((looking-at "~") (dired-flag-backup-files))
        ((looking-at "#") (dired-flag-auto-save-files))
-       (t (if (fboundp 'dired-flag-file-deletion)
-              (dired-flag-file-deletion 1)
-            (dired-flag-file-deleted 1)))))
+       (t 
+        ;; Prevent any region selection from causing multiple files
+        ;; to be marked for deletion; we want to mark only one.
+        (deactivate-mark t)
+        (if (fboundp 'dired-flag-file-deletion)
+            (dired-flag-file-deletion 1)
+          (dired-flag-file-deleted 1)))))
 
 ;;; ************************************************************************
 ;;; smart-gnus functions
diff --git a/hui-select.el b/hui-select.el
index 596bb25..aa91d8c 100644
--- a/hui-select.el
+++ b/hui-select.el
@@ -1,10 +1,10 @@
-;;; hui-select.el ---  Select larger and larger syntax-driven regions in a 
buffer.
+;;; hui-select.el --- Select larger and larger syntax-driven regions in a 
buffer.
 ;;
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    19-Oct-96 at 02:25:27
 ;;
-;; Copyright (C) 1996-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1996-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -247,14 +247,12 @@ Also, add language-specific syntax setups to aid in thing 
selection."
   (unless (boundp 'hyperbole-loading)
     (require 'hyperbole))
   (if hkey-init
-      (cond ((not (featurep 'xemacs))
-            (transient-mark-mode 1)
-            (hkey-global-set-key [double-down-mouse-1] nil)
-            (hkey-global-set-key [double-mouse-1] 'hui-select-thing-with-mouse)
-            (hkey-global-set-key [triple-down-mouse-1] nil)
-            (hkey-global-set-key [triple-mouse-1] 
'hui-select-thing-with-mouse))
-           ((featurep 'xemacs)
-            (add-hook 'mouse-track-click-hook 
#'hui-select-double-click-hook))))
+      (progn
+       (transient-mark-mode 1)
+       (hkey-global-set-key [double-down-mouse-1] nil)
+       (hkey-global-set-key [double-mouse-1] 'hui-select-thing-with-mouse)
+       (hkey-global-set-key [triple-down-mouse-1] nil)
+       (hkey-global-set-key [triple-mouse-1] 'hui-select-thing-with-mouse)))
   ;;
   ;; These hooks let you select C++ and Java methods and classes by
   ;; double-clicking on the first character of a definition or on its
@@ -310,6 +308,19 @@ Also, add language-specific syntax setups to aid in thing 
selection."
                          (setq sentence-end "\\([^ 
\t\n\r>]<\\|>\\(<[^>]*>\\)*\\|[.?!][]\"')}]*\\($\\| $\\|\t\\|  \\)\\)[ \t\n]*")
                          (define-key web-mode-map "\C-c." 
'hui-select-goto-matching-tag))))
 
+(defun hui-select-get-region-boundaries ()
+  "Return the (START . END) boundaries of region for `hui-select-thing'."
+  (or (hui-select-boundaries (point))
+      (when (eq hui-select-previous 'punctuation)
+       (hui-select-word (point)))))
+
+;;;###autoload
+(defun hui-select-get-region ()
+  "Return the region that `hui-select-thing' would select."
+  (let ((region-bounds (hui-select-get-region-boundaries)))
+    (when region-bounds
+      (buffer-substring-no-properties (car region-bounds) (cdr 
region-bounds)))))
+
 ;;;###autoload
 (defun hui-select-thing ()
   "Select a region based on the syntax of the thing at point.
@@ -325,7 +336,7 @@ interactively, the type of selection is displayed in the 
minibuffer."
          ;; Reset selection based on the syntax of character at point.
          (hui-select-reset)
          nil)))
-  (let ((region (hui-select-boundaries (point))))
+  (let ((region (hui-select-get-region-boundaries)))
     (unless region
       (when (eq hui-select-previous 'punctuation)
        (setq region (hui-select-word (point)))))
diff --git a/hui-treemacs.el b/hui-treemacs.el
index db1aee6..2cdface 100644
--- a/hui-treemacs.el
+++ b/hui-treemacs.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    19-Nov-17
 ;;
-;; Copyright (C) 2017  Free Software Foundation, Inc.
+;; Copyright (C) 2017-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -18,14 +18,21 @@
 
 (eval-and-compile (require 'treemacs nil t))
 
-(eval-when (load)
-  (unless (>= (string-to-number treemacs-version) 1.14)
-    (error "(hui-treemacs): Hyperbole requires Treemacs package version 1.14 
or greater")))
+(unless (and (featurep 'treemacs) (string-greaterp treemacs-version "v2"))
+  (error "(hui-treemacs): Hyperbole requires Treemacs package version 2.0 or 
greater"))
 
 ;;; ************************************************************************
 ;;; smart-treemacs functions
 ;;; ************************************************************************
 
+;; Want to be able to select Treemacs window with ace-window.
+;; This also averts window labeling problems with ace-window.
+(eval-after-load "ace-window"
+  '(setq aw-ignored-buffers (delq 'treemacs-mode aw-ignored-buffers)))
+
+(unless (fboundp 'treemacs-quit)
+  (fset 'treemacs-quit #'bury-buffer))
+
 ;;;###autoload
 (defun smart-treemacs ()
   "Uses a single key or mouse key to manipulate directory entries.
@@ -51,10 +58,10 @@ If key is pressed:
   (interactive)
   (cond ((first-line-p)
         (if (eolp)
-            (treemacs-toggle)
+            (treemacs-quit)
           (hact 'link-to-directory default-directory)))
        ((and (last-line-p) (eolp))
-        (treemacs-toggle))
+        (treemacs-quit))
        ((eolp)
         (funcall (if assist-flag assist-key-eol-function 
action-key-eol-function)))
        (t (let ((over-icon (and (treemacs-current-button)
@@ -65,7 +72,7 @@ If key is pressed:
                     (hact 'link-to-buffer-tmp (seq-elt result 0) (seq-elt 
result 1))
                   ;; (bufferp result)
                   (hact 'link-to-buffer-tmp result))
-              (treemacs-push-button current-prefix-arg))))))
+              (treemacs-toggle-node current-prefix-arg))))))
 
 ;;;###autoload
 (defun smart-treemacs-modeline ()
@@ -77,28 +84,24 @@ quit/hide the Treemacs window.  Otherwise, display the 
Treemacs window
 with the default directory of the buffer modeline clicked upon.
 
 Suitable for use as a value of `action-key-modeline-buffer-id-function'."
-  (if (fboundp 'treemacs)
-      (progn
-       (require 'treemacs)
-       (cond
-        ;; Clicked on Treemacs buffer id
-        ((if action-key-depress-window
-             (treemacs-is-treemacs-window? action-key-depress-window)
-           (string-match " Treemacs " (format-mode-line mode-line-format)))
-         ;; Quit/hide treemacs.
-         (treemacs-toggle))
-        ;;
-        ;; Treemacs is visible and displaying the same dir as
-        ;; the default dir of the clicked on modeline.
-        ((and (treemacs-buffer-exists?)
-              (string-equal (expand-file-name default-directory)
-                            (with-current-buffer (treemacs-buffer-exists?)
-                              default-directory)))
-         ;; Quit/hide treemacs.
-         (treemacs-toggle))
-        ;;
-        ;; Otherwise, invoke treemacs on the default dir of the clicked on 
modeline.
-        (t (treemacs))))
-    (error "(smart-treemacs-modeline): Treemacs package is not installed")))
+  (cond
+   ;; Clicked on Treemacs buffer id
+   ((if action-key-depress-window
+       (treemacs-is-treemacs-window? action-key-depress-window)
+      (string-match " Treemacs " (format-mode-line mode-line-format)))
+    ;; Quit/hide treemacs.
+    (treemacs-quit))
+   ;;
+   ;; Treemacs is visible and displaying the same dir as
+   ;; the default dir of the clicked on modeline.
+   ((and (eq (treemacs-current-visibility) 'visible)
+        (string-equal (expand-file-name default-directory)
+                      (with-current-buffer (treemacs-get-local-buffer)
+                        default-directory)))
+    ;; Quit/hide treemacs.
+    (treemacs-quit))
+   ;;
+   ;; Otherwise, invoke treemacs on the default dir of the clicked on modeline.
+   (t (treemacs))))
 
 (provide 'hui-treemacs)
diff --git a/hui-window.el b/hui-window.el
index c5b64d4..8b5536f 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    21-Sep-92
 ;;
-;; Copyright (C) 1992-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1992-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -145,10 +145,10 @@ drag release window.")
   :group 'hyperbole-keys)
 
  ;; Mats Lidell says this should be 10 characters for GNU Emacs.
-(defvar hmouse-edge-sensitivity (if (featurep 'xemacs) 3 10)
+(defvar hmouse-edge-sensitivity 10
   "*Number of characters from window edges within which a click is considered 
at an edge.")
 
-(defvar hmouse-side-sensitivity (if (featurep 'xemacs) 1 5)
+(defvar hmouse-side-sensitivity 5
   "*Characters in either direction from window side within which a click is 
considered on the side.")
 
 (defvar hmouse-x-drag-sensitivity 5
@@ -171,9 +171,9 @@ drag release window.")
 
 ;;;
 ;;; Add window handling to hmouse-alist dispatch table.
-;;;
-(if (not (boundp 'hmouse-alist))
-    (error "\"hui-window.el\": `hmouse-alist' must be defined before loading 
this.")
+
+(defvar hmouse-alist)
+(defun hmouse-alist-add-window-handlers ()
   (unless (assoc #'(hmouse-inactive-minibuffer-p) hmouse-alist)
     (setq hmouse-alist
          (append
@@ -241,6 +241,7 @@ drag release window.")
             ;;
             )
           hmouse-alist))))
+(with-eval-after-load 'hui-mouse (hmouse-alist-add-window-handlers))
 
 ;;; ************************************************************************
 ;;; Public functions
@@ -249,7 +250,7 @@ drag release window.")
 (defun hmouse-at-item-p ()
   "Return t if point is on an item draggable by Hyperbole, otherwise nil."
   (let* ((buf (and (window-live-p action-key-depress-window) (window-buffer 
action-key-depress-window)))
-        (mode (and buf (cdr (assq 'major-mode (buffer-local-variables buf))))))
+        (mode (and buf (buffer-local-value 'major-mode buf))))
     (and buf (with-current-buffer buf
               ;; Point must be on an item, not after one
               (not (looking-at "\\s-*$")))
@@ -624,12 +625,7 @@ Value returned is nil if not a vertical line drag, 'up if 
drag moved up or
 (defun hmouse-drag-window-side ()
   "Returns non-nil if Action Key was dragged from a window side divider and 
released in the same window.
 If free variable `assist-flag' is non-nil, uses Assist Key."
-  (cond ((featurep 'xemacs)
-        ;; Depress events in scrollbars or in non-text area of buffer are
-        ;; not visible or identifiable at the Lisp-level, so always return
-        ;; nil.
-        nil)
-       ((hyperb:window-system)
+  (cond ((hyperb:window-system)
         (let* ((depress-args (if assist-flag assist-key-depress-args
                                action-key-depress-args))
                (release-args (if assist-flag assist-key-release-args
@@ -690,14 +686,10 @@ Beeps and prints message if the window cannot be split 
further."
 (defun smart-coords-in-window-p (coords window)
   "Tests if COORDS are in WINDOW.  Returns WINDOW if they are, nil otherwise."
   (cond ((null coords) nil)
-       ((and (not (featurep 'xemacs)) (eventp coords))
+       ((eventp coords)
         (let ((w-or-f (posn-window (event-start coords))))
           (if (framep w-or-f) (setq w-or-f (frame-selected-window w-or-f)))
           (eq w-or-f window)))
-       ((if (featurep 'xemacs)
-            (if (eventp coords)
-                (eq (event-window coords) window)
-              (eq (car coords) window))))
        ((fboundp 'window-edges)
         (let* ((edges (window-edges window))
                  (w-xmin (nth 0 edges))
@@ -715,24 +707,19 @@ Beeps and prints message if the window cannot be split 
further."
 Ignores minibuffer window."
   (cond ((markerp coords)
         (marker-position coords))
-       ((and (not (featurep 'xemacs)) (eventp coords))
-        (posn-point (event-start coords)))
-       ((and (featurep 'xemacs) (eventp coords))
-        (event-point coords))))
+       ((eventp coords)
+        (posn-point (event-start coords)))))
 
 (defun smart-window-of-coords (coords)
   "Returns window in which COORDS fall or nil if none.
 Ignores minibuffer window."
-  (cond ((markerp coords)
+  (cond ((null coords) nil)
+        ((markerp coords)
         (get-buffer-window (marker-buffer coords)))
-       ((and (not (featurep 'xemacs)) (eventp coords))
+       ((eventp coords)
         (let ((w-or-f (posn-window (event-start coords))))
           (if (framep w-or-f) (setq w-or-f (frame-selected-window w-or-f)))
           w-or-f))
-       ((if (featurep 'xemacs)
-            (if (eventp coords)
-                (event-window coords)
-              (car coords))))
        (t (let ((window-list (hypb:window-list 'no-minibuf))
                 (window)
                 (w))
@@ -1005,23 +992,20 @@ If free variable `assist-flag' is non-nil, uses Assist 
Key."
 
 (defun hmouse-emacs-at-modeline-buffer-id-p ()
   "GNU Emacs: Return t if mouse position is within the buffer name field of 
the current window's mode-line, else nil."
-  (unless (featurep 'xemacs)
-    (let* ((coords (hmouse-window-coordinates)) ;; in characters
-          (x-coord (caadr coords))
-          (mode-line-string (and (integerp x-coord) (>= x-coord 0) 
(format-mode-line mode-line-format)))
-          (keymap (and mode-line-string
-                       (<= x-coord (1- (length mode-line-string)))
-                       (plist-get (text-properties-at x-coord 
mode-line-string) 'local-map))))
-      (when keymap
-       (eq (lookup-key keymap [mode-line mouse-1]) 
'mode-line-previous-buffer)))))
+  (let* ((coords (hmouse-window-coordinates)) ;; in characters
+        (x-coord (caadr coords))
+        (mode-line-string (and (integerp x-coord) (>= x-coord 0) 
(format-mode-line mode-line-format)))
+        (keymap (and mode-line-string
+                     (<= x-coord (1- (length mode-line-string)))
+                     (plist-get (text-properties-at x-coord mode-line-string) 
'local-map))))
+    (when keymap
+      (eq (lookup-key keymap [mode-line mouse-1]) 
'mode-line-previous-buffer))))
 
 (defun hmouse-modeline-resize-window ()
   "Resizes window whose mode line was depressed on by the last Smart Key.
 Resize amount depends upon the vertical difference between press and release
 of the Smart Key."
   (cond ((not (hyperb:window-system)) nil)
-       ((and (featurep 'xemacs) (not (fboundp 'window-edges)))
-        (error "Drag from a mode-line with button1 to resize windows."))
        (t (let* ((owind (selected-window))
                  (window (smart-window-of-coords
                           (if assist-flag assist-key-depress-args
@@ -1143,12 +1127,7 @@ release must be."
   "Resizes window whose side was depressed on by the last Smart Key.
 Resize amount depends upon the horizontal difference between press and release
 of the Smart Key."
-  (cond ((featurep 'xemacs)
-        ;; Depress events in scrollbars or in non-text area of buffer are
-        ;; not visible or identifiable at the Lisp-level, so always return
-        ;; nil.
-        nil)
-       ((hyperb:window-system)
+  (cond ((hyperb:window-system)
         (let* ((owind (selected-window))
                (window (smart-window-of-coords
                         (if assist-flag assist-key-depress-args
@@ -1246,10 +1225,6 @@ of the Smart Key."
                                                       (+ (car (posn-col-row 
args))
                                                          (nth 0 (window-edges 
w-or-f)))))
                                                    (t (car args)))))
-                                ("xemacs" .  (if (eventp args)
-                                                 (event-x args)
-                                               (car args)))
-                                ("xterm"  .  (car args))
                                 ("next"   .  (nth 1 args))
                                 )))))))
     (if (integerp x) x)))
@@ -1265,10 +1240,6 @@ of the Smart Key."
                                                          (+ (cdr (posn-col-row 
args))
                                                             (nth 1 
(window-edges w-or-f)))))
                                                       (t (cdr args)))))
-                              ("xemacs" .  (if (eventp args)
-                                               (event-y args)
-                                             (cdr args)))
-                              ("xterm"  .  (nth 1 args))
                               ("next"   .  (nth 2 args))
                               ))))))
     (if (integerp y) y)))
diff --git a/hui-xe-but.el b/hui-xe-but.el
deleted file mode 100644
index 4ce0a77..0000000
--- a/hui-xe-but.el
+++ /dev/null
@@ -1,466 +0,0 @@
-;;; hui-xe-but.el ---  XEmacs button highlighting and flashing support
-;;
-;; Author:       Bob Weiner
-;;
-;; Orig-Date:    21-Aug-92
-;;
-;; Copyright (C) 1992-2017  Free Software Foundation, Inc.
-;; See the "HY-COPY" file for license information.
-;;
-;; This file is part of GNU Hyperbole.
-
-;;; Commentary:
-;;
-;;   Can't use read-only buttons here because then outline-mode
-;;   becomes unusable.
-;;
-
-;;; Code:
-
-(unless (featurep 'xemacs)
-  (error "(hui-xe-but.el):  Load only when running XEmacs."))
-
-;;; ************************************************************************
-;;; Other required Elisp libraries
-;;; ************************************************************************
-
-(require 'custom) ;; For defface.
-(require 'hbut)
-
-(defun hproperty:background ()
-  "Returns default background color for selected frame."
-  (face-background (get-face 'default)))
-
-(defun hproperty:foreground ()
-  "Returns default foreground color for selected frame."
-  (face-foreground (get-face 'default)))
-
-;;; ************************************************************************
-;;; Public variables
-;;; ************************************************************************
-
-(defcustom hproperty:but-highlight-flag t
-  "*Non-nil (default value) means highlight all explict buttons with 
`hproperty:but-face'."
-  :type 'boolean
-  :group 'hyperbole-buttons)
-
-(defcustom hproperty:but-emphasize-flag nil
-  "*Non-nil means visually emphasize that button under mouse cursor is 
selectable."
-  :type 'boolean
-  :group 'hyperbole-buttons)
-
-(defcustom hproperty:but-flash-time 1000
-  "*Machine specific value for empty loop counter, Emacs button flash delay."
-  :type '(integer :match (lambda (_widget value) (and (integerp value) (> 
value 0))))
-  :group 'hyperbole-buttons)
-
-(defcustom hproperty:item-highlight-color (hproperty:foreground)
-  "Color with which to highlight list/menu selections.
-Call (hproperty:set-item-highlight <color>) to change value."
-  :type 'color
-  :initialize (lambda (_symbol _value) (hproperty:foreground))
-  :group 'hyperbole-buttons)
-
-;;; ************************************************************************
-;;; Public functions
-;;; ************************************************************************
-
-(defun hproperty:but-add (start end face)
-  "Add between START and END a button using FACE in current buffer.
-If `hproperty:but-emphasize-flag' is non-nil when this is called, emphasize
-that button is selectable whenever the mouse cursor moves over it."
-  (let ((but (make-extent start end)))
-    (set-extent-face but face)
-    (set-extent-property but 'highlight hproperty:but-emphasize-flag)))
-
-(defun hproperty:but-color ()
-  "Return current color of buffer's buttons."
-  (if hproperty:color-ptr
-      (car hproperty:color-ptr)
-    (hproperty:foreground)))
-
-(defun hproperty:but-clear ()
-  "Delete all Hyperbole buttons from current buffer."
-  (interactive)
-  (map-extents (lambda (extent unused-arg)
-                (if (eq (extent-face extent) 'hbut)
-                    (delete-extent extent)))))
-
-(defun hproperty:but-create (&optional start-delim end-delim regexp-match)
-  "Highlight all hyper-buttons in buffer using XEmacs extents.
-Will use optional strings START-DELIM and END-DELIM instead of default values.
-If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
-expression which matches an entire button string.
-If REGEXP-MATCH is non-nil, only buttons matching this argument are
-highlighted.
-
-If `hproperty:but-emphasize-flag' is non-nil when this is called, emphasize
-that button is selectable whenever the mouse cursor moves over it."
-  (interactive)
-  (hproperty:but-clear)
-  (hproperty:but-create-all start-delim end-delim regexp-match))
-
-(defun hproperty:but-create-all (&optional start-delim end-delim regexp-match)
-  "Mark all hyper-buttons in buffer as XEmacs buttons, for later highlighting.
-Will use optional strings START-DELIM and END-DELIM instead of default values.
-If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
-expression which matches an entire button string.
-If REGEXP-MATCH is non-nil, only buttons matching this argument are
-highlighted."
-  (when hproperty:but-highlight-flag
-    (ebut:map (lambda (lbl start end)
-               (hproperty:but-add start end hproperty:but-face))
-             start-delim end-delim regexp-match 'include-delims)))
-
-(defun hproperty:but-create-on-yank (prop-value start end)
-  (save-restriction
-    (narrow-to-region start end)
-    (hproperty:but-create-all)))
-
-(add-to-list 'yank-handled-properties '(hproperty:but-face . 
hproperty:but-create-on-yank))
-
-(defun hproperty:but-delete (&optional pos)
-  (let ((extent (extent-at (or pos (point)))))
-    (if extent (delete-extent extent))))
-
-;;; ************************************************************************
-;;; Private functions
-;;; ************************************************************************
-
-(defsubst hproperty:list-cycle (list-ptr list)
-  "Move LIST-PTR to next element in LIST or when at end to first element."
-  (or (and list-ptr (setq list-ptr (cdr list-ptr)))
-      (setq list-ptr list)))
-
-;;; ************************************************************************
-;;; Private variables
-;;; ************************************************************************
-
-(defconst hproperty:color-list
-  '("red" "blue" "paleturquoise4" "mediumpurple2"
-    "lightskyblue3" "springgreen2" "salmon" "yellowgreen" "darkorchid2"
-    "aquamarine4" "slateblue4" "slateblue1" "olivedrab1" "goldenrod4"
-    "goldenrod3" "cadetblue2" "burlywood1" "slategrey" "mistyrose"
-    "limegreen" "lightcyan" "goldenrod" "gainsboro" "skyblue1" "honeydew"
-    "yellow2" "tomato3" "skyblue" "purple4" "orange3" "bisque3" "bisque2"
-    "grey34" "gray99" "gray63" "gray44" "gray37" "gray33" "gray26" "azure1"
-    "snow4" "peru" "red" "lightgoldenrod4" "mediumseagreen" "blush"
-    "mediumorchid2" "lightskyblue1" "darkslateblue" "midnightblue"
-    "lightsalmon1" "lemonchiffon" "yellow" "lightsalmon" "coral"
-    "dodgerblue3" "darkorange4" "blue" "royalblue4" "red" "green" "cyan"
-    "darkviolet" "darksalmon" "darkorange" "blue" "pink" "magenta2"
-    "sienna4" "khaki2" "grey75" "grey74" "grey73" "grey69" "grey68" "grey35"
-    "grey13" "gray90" "gray81" "gray55" "gray51" "gray31" "snow2" "pink3"
-    "grey7" "gray1" "red4" "red3" "tan" "red" "yellow" "mediumvioletred"
-    "lightslategrey" "lavenderblush4" "turquoise" "darkturquoise"
-    "darkslategrey" "lightskyblue" "lightsalmon4" "lightsalmon3"
-    "forestgreen" "dodgerblue4" "orchid" "rosybrown4" "brown" "peachpuff3"
-    "palegreen3" "orangered2" "rose" "lightcyan4" "indianred4" "indianred3"
-    "seagreen2" "indianred" "deeppink1" "navyblue" "lavender" "grey"
-    "deeppink" "salmon4" "salmon3" "oldlace" "grey78" "grey77" "grey54"
-    "grey45" "grey21" "gray97" "gray96" "gray95" "gray88" "gray87" "gray86"
-    "gray70" "gray57" "gray38" "gray12" "gray11" "plum3" "linen" "gray9"
-    "gray8" "blue4" "beige" "turquoise" "blue" "lemonchiffon4"
-    "darkseagreen1" "antiquewhite3" "mediumorchid" "springgreen"
-    "turquoise4" "steelblue3" "mistyrose2" "lightcyan2" "red" "firebrick2"
-    "royalblue" "cadetblue" "skyblue3" "yellow3" "salmon1" "orange4"
-    "hotpink" "grey90" "gray56" "gray39" "gray18" "gray14" "plum4" "grey6"
-    "gray6" "gold3" "gold1" "blue2" "tan2" "cyan" "mediumspringgreen"
-    "darkolivegreen2" "goldenrod" "lightsteelblue" "brown" "whip"
-    "chartreuse3" "violetred4" "royalblue2" "royalblue1" "papayawhip"
-    "mistyrose3" "lightcyan1" "aquamarine" "skyblue4" "hotpink4" "hotpink3"
-    "hotpink2" "dimgray" "tomato" "grey66" "grey65" "grey64" "grey33"
-    "grey27" "gray76" "gray69" "gray68" "grey0" "azure" "green"
-    "darkgoldenrod4" "darkgoldenrod3" "darkgoldenrod2" "darkgoldenrod"
-    "brown" "lightsalmon2" "deepskyblue4" "deepskyblue3" "deepskyblue2"
-    "deepskyblue" "darkorange1" "violetred3" "violetred2" "violetred1"
-    "slateblue3" "slateblue2" "drab" "indianred1" "firebrick1" "cadetblue4"
-    "violetred" "rosybrown" "blue" "firebrick" "grey100" "wheat4" "grey79"
-    "grey76" "grey61" "gray93" "gray84" "gray65" "gray36" "gray32" "gray13"
-    "gray10" "azure3" "snow1" "tan1" "gray" "darkolivegreen1" "blue"
-    "almond" "lavenderblush3" "lavenderblush2" "lavenderblush1"
-    "darkolivegreen" "lavenderblush" "aquamarine2" "red" "olivedrab2"
-    "mistyrose4" "mistyrose1" "lightcyan3" "lightcoral" "chartreuse"
-    "peachpuff" "palegreen" "mintcream" "skyblue2" "moccasin" "tomato1"
-    "orchid3" "maroon3" "salmon" "grey81" "grey62" "grey39" "grey38"
-    "grey37" "gray92" "gray83" "gray66" "gray54" "gray50" "gray30" "gray19"
-    "gray15" "azure4" "grey3" "tan3" "pink" "gray" "blue" "lightsteelblue2"
-    "lightsteelblue1" "green" "lightslategray" "lemonchiffon2"
-    "springgreen1" "greenyellow" "chartreuse2" "grey" "royalblue3"
-    "powderblue" "peachpuff2" "palegreen2" "cream" "slateblue" "seashell2"
-    "deeppink2" "darkkhaki" "maroon4" "sienna" "grey71" "grey67" "grey18"
-    "gray59" "gray43" "gray25" "bisque" "red1" "mediumslateblue"
-    "lightgoldenrod1" "goldenrod" "paleturquoise3" "lightskyblue4" "green"
-    "yellow" "smoke" "blue" "white" "steelblue4" "rosybrown3" "peachpuff1"
-    "palegreen1" "blueviolet" "seashell4" "sienna3" "grey40" "gray91"
-    "gray82" "gray5" "cyan2" "cyan1" "blue1" "snow" "lightgoldenrod2"
-    "lightslateblue" "mediumorchid3" "darkseagreen4" "springgreen3" "green"
-    "slategray4" "slategray3" "slategray2" "blue" "peachpuff4" "palegreen4"
-    "green" "orangered3" "goldenrod1" "ghostwhite" "firebrick4" "firebrick3"
-    "cadetblue3" "slategray" "seashell3" "honeydew3" "cornsilk4" "cornsilk2"
-    "purple1" "dimgrey" "khaki1" "ivory3" "grey70" "grey60" "grey32"
-    "grey22" "grey12" "gray98" "gray89" "gray71" "gray64" "gray60" "gray49"
-    "azure2" "gray3" "paleturquoise1" "mediumpurple1" "purple"
-    "lemonchiffon1" "blue" "navajowhite3" "darkorchid1" "orange"
-    "goldenrod2" "khaki" "chocolate2" "burlywood2" "honeydew1" "darkgreen"
-    "thistle3" "thistle2" "thistle1" "thistle" "maroon2" "maroon1" "grey53"
-    "grey44" "grey25" "gray74" "gray45" "gray41" "gray35" "gray27" "gray23"
-    "gray16" "brown4" "wheat" "coral" "tan4" "lightgoldenrodyellow" "blue"
-    "green" "gray" "palevioletred3" "mediumpurple4" "mediumpurple3"
-    "saddlebrown" "blue" "darkorchid4" "darkorchid3" "puff" "olivedrab4"
-    "lightblue4" "lightpink" "lightgray" "honeydew2" "cornsilk1" "lace"
-    "sienna1" "bisque4" "orchid" "khaki3" "grey84" "grey83" "grey82"
-    "grey72" "grey52" "grey43" "grey26" "grey14" "grey10" "gray75" "gray53"
-    "gray21" "gray20" "brown3" "grey8" "red2" "navy" "grey" "gold"
-    "mediumaquamarine" "lightgoldenrod" "darkslategray4" "darkseagreen3"
-    "darkseagreen2" "antiquewhite4" "white" "springgreen4" "lightyellow4"
-    "white" "aquamarine1" "turquoise3" "steelblue2" "rosybrown2" "pink"
-    "gray" "indianred2" "dodgerblue" "green" "seagreen1" "deeppink4"
-    "aliceblue" "magenta1" "pink" "sienna2" "orchid1" "gray100" "grey97"
-    "grey94" "grey87" "grey86" "grey51" "grey42" "grey19" "gray94" "gray85"
-    "gray61" "brown2" "khaki" "grey1" "gold4" "blue" "green" "grey"
-    "turquoise" "paleturquoise" "mediumorchid4" "antiquewhite2"
-    "lightyellow2" "violet" "salmon" "chartreuse1" "turquoise1" "sandybrown"
-    "orangered1" "lightpink1" "lightblue2" "lightblue1" "grey" "seagreen4"
-    "seagreen3" "lightblue" "deeppink3" "burlywood" "seashell" "hotpink1"
-    "gray" "yellow4" "yellow" "purple" "orange" "ivory4" "grey99" "grey89"
-    "grey63" "grey58" "grey49" "grey31" "grey24" "grey20" "green4" "green1"
-    "gray73" "gray67" "coral3" "coral2" "plum2" "pink4" "ivory" "gray4"
-    "gray2" "gold2" "aquamarine" "grey" "lightgoldenrod3" "darkolivegreen3"
-    "darkgoldenrod1" "goldenrod" "orchid" "chiffon" "navajowhite4"
-    "deepskyblue1" "lightyellow" "floralwhite" "blue" "mediumblue"
-    "chocolate4" "chocolate3" "burlywood4" "turquoise" "steelblue" "green"
-    "lawngreen" "honeydew4" "seagreen" "orchid4" "wheat1" "violet" "ivory1"
-    "grey88" "grey85" "grey57" "grey56" "grey55" "grey48" "grey47" "grey46"
-    "grey30" "grey17" "gray47" "gray29" "pink2" "grey5" "grey4" "green"
-    "gray0" "brown" "lightsteelblue4" "darkolivegreen4" "palevioletred4"
-    "blue" "darkslategray3" "darkslategray2" "darkslategray1"
-    "blanchedalmond" "palegoldenrod" "blue" "lightseagreen" "lemonchiffon3"
-    "darkslategray" "green" "darkseagreen" "antiquewhite" "darkorange2"
-    "chartreuse4" "blue" "rosybrown1" "olivedrab3" "lightpink2" "orangered"
-    "thistle4" "blue" "cornsilk" "salmon2" "orchid2" "ivory2" "grey93"
-    "grey92" "grey91" "grey36" "grey29" "grey28" "grey16" "gray79" "gray78"
-    "gray77" "gray48" "gray17" "coral4" "coral1" "plum1" "pink1" "grey9"
-    "grey2" "gray7" "cyan4" "blue3" "plum" "cornflowerblue" "lightskyblue2"
-    "antiquewhite1" "navajowhite2" "navajowhite1" "lightyellow3"
-    "navajowhite" "darkorange3" "whitesmoke" "turquoise2" "steelblue1"
-    "lightpink4" "lightblue3" "green" "chocolate1" "blue" "olivedrab"
-    "lightgrey" "chocolate" "magenta4" "magenta3" "yellow1" "purple3"
-    "purple2" "orange2" "orange1" "magenta" "bisque1" "wheat2" "maroon"
-    "khaki4" "grey96" "grey95" "grey80" "grey50" "grey41" "grey15" "grey11"
-    "gray80" "gray58" "gray40" "gray34" "gray22" "brown1" "snow3"
-    "mediumturquoise" "lightsteelblue3" "palevioletred2" "palevioletred1"
-    "paleturquoise2" "green" "palevioletred" "mediumorchid1" "white"
-    "mediumpurple" "lightyellow1" "dodgerblue2" "dodgerblue1" "violet"
-    "aquamarine3" "slategray1" "gray" "orangered4" "lightpink3" "blue"
-    "darkorchid" "cadetblue1" "burlywood3" "seashell1" "cornsilk3" "tomato4"
-    "tomato2" "wheat3" "grey98" "grey59" "grey23" "green3" "green2" "gray72"
-    "gray62" "gray52" "gray46" "gray42" "gray28" "gray24" "white" "cyan3"
-    "black"))
-
-(defvar hproperty:color-ptr nil
-  "Pointer to current color name table to use for Hyperbole buttons in 
XEmacs.")
-
-(defconst hproperty:good-colors
-  '(
-    "medium violet red" "indianred4" "firebrick1" "DarkGoldenrod" "NavyBlue"
-    "darkorchid" "tomato3" "mediumseagreen" "deeppink" "forestgreen"
-    "mistyrose4" "slategrey" "purple4" "dodgerblue3" "mediumvioletred"
-    "lightsalmon3" "orangered2" "turquoise4" "Gray55"
-    )
-  "Good colors for contrast against wheat background and black foreground.")
-
-
-;;; ************************************************************************
-;;; Public functions
-;;; ************************************************************************
-
-(defun hproperty:cycle-but-color (&optional color)
-  "Switches button color to optional COLOR name or next item referenced by 
hproperty:color-ptr."
-  (interactive "sHyperbole button color: ")
-  (if (not (or (and (fboundp 'device-class) (eq (device-class) 'color))
-              (x-display-color-p)))
-      nil
-    (if color (setq hproperty:color-ptr nil))
-    (set-face-foreground
-     hproperty:but-face
-     (or color (car (hproperty:list-cycle
-                    hproperty:color-ptr hproperty:good-colors))))
-    (hproperty:set-flash-color)
-    (sit-for 0)  ;; Force display update
-    t))
-
-(defun hproperty:set-flash-color ()
-  "Set button flashing colors based upon current color set."
-  (if (not (x-display-color-p))
-      nil
-    (set-face-background hproperty:flash-face (hproperty:but-color))
-    (set-face-foreground hproperty:flash-face (hproperty:background))))
-
-(defun hproperty:but-flash ()
-  "Flash a XEmacs Hyperbole button at or near point to indicate selection."
-  (interactive)
-  (let ((ibut) (prev)
-       (start (hattr:get 'hbut:current 'lbl-start))
-       (end   (hattr:get 'hbut:current 'lbl-end))
-       (b) (a))
-    (if (and start end (setq prev (extent-at start)
-                            ibut t))
-       (progn (if (not prev) (hproperty:but-add start end hproperty:but-face))
-              (setq b (and start (extent-at start))))
-      (setq b (extent-at (point))))
-    (if (setq a (and (extentp b) (extent-face b)))
-       (unwind-protect
-           (progn
-             (set-extent-face b hproperty:flash-face)
-             (sit-for 0);; Force display update
-             ;; Delay before redraw button
-             (let ((i 0)) (while (< i hproperty:but-flash-time) (setq i (1+ 
i)))))
-         (set-extent-face b a)
-         (sit-for 0))) ;; Force display update
-    (if (and ibut (not prev)) (hproperty:but-delete start))))
-
-(defun hproperty:set-item-highlight (&optional background foreground)
-  "Setup or reset item highlight face using optional BACKGROUND and 
FOREGROUND."
-  (make-local-variable 'hproperty:item-face)
-  (if background (setq hproperty:item-highlight-color background))
-  (if (not hproperty:highlight-face)
-      (progn 
-       (setq hproperty:highlight-face
-             (or (find-face 'hproperty:highlight-face)
-                 (face-name
-                  (defface hproperty:highlight-face nil
-                    "Item highlighting face.  Use 
(hproperty:set-item-highlight) to set."))))
-       (set-face-foreground hproperty:highlight-face
-                            (or foreground (hproperty:background)))
-       (set-face-underline-p hproperty:highlight-face nil)))
-
-  (let* ((tty (and (fboundp 'device-type)
-                  (eq 'tty (device-type (selected-device)))))
-        (specifiers-function
-         (if (fboundp 'specifier-specs) 'specifier-specs 'identity))
-        (color-function
-         (if (fboundp 'color-name) 'color-name 'identity))
-        (update-hyrolo-highlight-flag
-         (and (boundp 'hyrolo-highlight-face) (find-face hyrolo-highlight-face)
-              (or (null 
-                   (funcall specifiers-function
-                            (face-foreground hyrolo-highlight-face)))
-                  (equal
-                   (funcall color-function
-                            (face-foreground hyrolo-highlight-face))
-                   (funcall color-function (face-foreground 'default)))
-                  (face-equal hproperty:highlight-face 
hyrolo-highlight-face)))))
-    (if tty
-       (copy-face 'italic 'hproperty:highlight-face)
-      (if (and (funcall specifiers-function
-                       (face-background hproperty:highlight-face))
-              (equal (funcall color-function
-                              (face-background hproperty:highlight-face))
-                     hproperty:item-highlight-color))
-         nil
-       (set-face-background hproperty:highlight-face
-                            hproperty:item-highlight-color))
-      (and background (not (equal (face-background
-                                  hproperty:highlight-face) background))
-          (set-face-background hproperty:highlight-face background))
-      (and foreground (not (equal (face-foreground
-                                  hproperty:highlight-face) foreground))
-          (set-face-foreground hproperty:highlight-face foreground)))
-    ;; If no colors are specified under InfoDock, use the default color
-    ;; scheme.
-    (or background foreground (not (fboundp 'id-set-face))
-       (id-set-face hproperty:highlight-face))
-    (setq hproperty:item-face hproperty:highlight-face)
-    (if update-hyrolo-highlight-flag
-       (if tty
-           (copy-face 'italic 'hyrolo-highlight-face)
-         (copy-face hproperty:highlight-face hyrolo-highlight-face)))))
-
-(defun hproperty:select-item (&optional pnt)
-  "Select item in current buffer at optional position PNT using 
hproperty:item-face."
-  (if hproperty:item-button
-      nil
-    (set-extent-face (setq hproperty:item-button (make-extent (point) (point)))
-                    hproperty:item-face))
-  (if pnt (goto-char pnt))
-  (skip-chars-forward " \t")
-  (skip-chars-backward "^ \t\n\r")
-  (let ((start (point)))
-    (save-excursion
-      (skip-chars-forward "^ \t\n\r")
-      (set-extent-endpoints hproperty:item-button start (point))))
-  ;; Force display update
-  (sit-for 0))
-
-(defun hproperty:select-line (&optional pnt)
-  "Select line in current buffer at optional position PNT using 
hproperty:item-face."
-  (if hproperty:item-button
-      nil
-    (set-extent-face (setq hproperty:item-button (make-extent (point) (point)))
-                    hproperty:item-face))
-  (if pnt (goto-char pnt))
-  (save-excursion
-    (beginning-of-line)
-    (set-extent-endpoints
-     hproperty:item-button (point) (progn (end-of-line) (point))))
-  ;; Force display update
-  (sit-for 0))
-
-;;; ************************************************************************
-;;; Private variables
-;;; ************************************************************************
-
-(defvar hproperty:but-face
-  (face-name (defface hproperty:but-face nil
-              "Face for hyper-buttons."))
-  "Face for hyper-buttons.")
-(setq hproperty:but hproperty:but-face)
-
-;; Init. files may set face properties, so run this after emacs initialization.
-(defun hproperty:set-face-after-init ()
-  (if (and (fboundp 'device-type)
-          (eq 'tty (device-type (selected-device))))
-      (copy-face 'italic 'hproperty:but-face)
-    (set-face-foreground hproperty:but-face (hproperty:but-color))
-    (set-face-background hproperty:but-face (hproperty:background))))
-(if after-init-time
-    (hproperty:set-face-after-init)
-  (add-hook 'after-init-hook #'hproperty:set-face-after-init))
-
-(defvar hproperty:flash-face
-  (face-name (defface hproperty:flash-face nil
-              "Face for flashing hyper-buttons."))
-  "Face for flashing hyper-buttons.")
-(hproperty:set-flash-color)
-
-(defvar hproperty:item-button nil
-  "Button used to highlight an item in a listing buffer.")
-(make-variable-buffer-local 'hproperty:item-button)
-
-(defvar hproperty:item-face nil
-  "Item marking face.")
-(or hproperty:item-face
-    (setq hproperty:item-face
-         (face-name (defface hproperty:item-face nil "Item marking face."))))
-
-(unless (boundp 'hproperty:highlight-face)
-(defvar hproperty:highlight-face nil
-  "Item highlighting face.  Use (hproperty:set-item-highlight) to set.")
-(if hproperty:highlight-face
-    nil
-  (setq hproperty:highlight-face
-       (face-name
-        (defface hproperty:highlight-face nil
-          "Item highlighting face.  Use (hproperty:set-item-highlight) to 
set.")))
-  ;; Reverse foreground and background colors for default block-style 
highlighting.
-  (hproperty:set-item-highlight (hproperty:foreground) 
(hproperty:background))))
-
-(provide 'hui-xe-but)
-
-
-;; Local Variables:
-;; no-byte-compile: t
-;; End:
-
-;;; hui-xe-but.el ends here
diff --git a/hui.el b/hui.el
index d32ea3d..12f2680 100644
--- a/hui.el
+++ b/hui.el
@@ -1,4 +1,4 @@
-;;; hui.el ---  GNU Hyperbole button and hyperlink user interface
+;;; hui.el --- GNU Hyperbole button and hyperlink user interface
 ;;
 ;; Author:       Bob Weiner
 ;;
@@ -65,8 +65,27 @@
               (message "{%s} now runs `%s'; prior {%s} binding removed" 
new-key-text cmd old-key-text))
       (message "{%s} now runs `%s'" new-key-text cmd))))
 
+(defun hui:ebut-act (&optional but)
+  "Executes action for optional explicit button symbol BUT in current buffer.
+Default is the current button."
+  (interactive
+   (let ((but (ebut:at-p)) (lst))
+     (list
+      (cond (but)
+           ((setq lst (ebut:alist))
+            (ebut:get (ebut:label-to-key
+                       (hargs:read-match "Button to execute: " lst nil t
+                                         (ebut:label-p 'as-label) 'ebut))))
+           (t (hypb:error "(ebut-act): No explicit buttons in buffer."))))))
+  (cond ((and (called-interactively-p 'interactive) (null but))
+        (hypb:error "(ebut-act): No current explicit button to activate."))
+       ((not (hbut:is-p but))
+        (hypb:error "(ebut-act): Explicit button is invalid; it has no 
attributes."))
+       (t (or but (setq but 'hbut:current))
+          (hui:but-flash) (hbut:act but))))
+
 (defun hui:ebut-create (&optional start end)
-  "Creates an explicit but starting from label between optional START and END.
+  "Creates an explicit Hyperbole button starting from label between optional 
START and END.
 Indicates by delimiting and adding any necessary instance number of the button
 label."
   (interactive (list (and (marker-position (hypb:mark-marker t))
@@ -79,10 +98,10 @@ label."
            (hui:hbut-label-default start end (not (called-interactively-p 
'interactive)))
            lbl (hui:hbut-label default-lbl "ebut-create"))
       (if (not (equal lbl default-lbl)) (setq default-lbl nil))
-      
+
       (setq but-buf (if default-lbl (current-buffer) (hui:ebut-buf)))
       (hui:buf-writable-err but-buf "ebut-create")
-      
+
       (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
       (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
       (setq actype (hui:actype))
@@ -118,7 +137,7 @@ Signals an error if point is not within a button."
            (hui:ebut-delete-op interactive but-key key-src)
          (message ""))
       (hui:ebut-delete-op interactive but-key key-src))))
-      
+
 (defun hui:ebut-edit ()
   "Creates or modifies an explicit Hyperbole button when conditions are met.
 A region must have been delimited with the action-key and point must now be
@@ -153,13 +172,13 @@ Signals an error when no such button is found in the 
current buffer."
        (but-buf (current-buffer))
        actype but new-lbl)
     (save-excursion
-      (or (called-interactively-p 'interactive)
-         (hui:buf-writable-err but-buf "ebut-modify"))
-      
-      (or (setq but (ebut:get lbl-key but-buf))
-         (progn (pop-to-buffer but-buf)
-                (hypb:error "(ebut-modify): Invalid button, no data for '%s'." 
lbl)))
-      
+      (unless (called-interactively-p 'interactive)
+       (hui:buf-writable-err but-buf "ebut-modify"))
+
+      (unless (setq but (ebut:get lbl-key but-buf))
+       (pop-to-buffer but-buf)
+       (hypb:error "(ebut-modify): Invalid button, no data for '%s'." lbl))
+
       (setq new-lbl
            (hargs:read
             "Change button label to: "
@@ -169,7 +188,7 @@ Signals an error when no such button is found in the 
current buffer."
             (format "(ebut-modify): Enter a string of at most %s chars."
                     ebut:max-len)
             'string))
-      
+
       (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
       (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
       (setq actype (hui:actype (hattr:get but 'actype)))
@@ -220,19 +239,17 @@ Signals an error if any problem occurs."
        (list curr-label new-label))))
 
   (save-excursion
-    (if (called-interactively-p 'interactive)
-       nil
+    (unless (called-interactively-p 'interactive)
       (hui:buf-writable-err (current-buffer) "ebut-rename")
       (if (or (not (stringp curr-label)) (string= curr-label ""))
          (hypb:error "(ebut-rename): 'curr-label' must be a non-empty string: 
%s"
-                curr-label))
+                     curr-label))
       (and (stringp new-label) (string= new-label "")
           (hypb:error "(ebut-rename): 'new-label' must be a non-empty string: 
%s"
-                 new-label)))
+                      new-label)))
     (or (ebut:get (ebut:label-to-key curr-label))
        (hypb:error "(ebut-rename): Can't rename %s since no button data."
-              curr-label))
-    )
+              curr-label)))
   (cond (new-label
         (ebut:operate curr-label new-label)
         (setq hui:ebut-label-prev nil)
@@ -280,8 +297,12 @@ a menu to find any of the occurrences."
   (hypb:error "(hui:error): Obsolete, use hypb:error instead."))
 
 (defun hui:gbut-create (lbl)
-  "Creates Hyperbole global button with LBL."
-  (interactive "sCreate global button labeled: ")
+  "Creates Hyperbole explicit global button with LBL.
+
+To create an implicit global button, add the text for an implicit
+button to `gbut:file` and then with point on the implicit button,
+invoke: {C-h h i l}, to label/name it."
+  (interactive "sCreate explicit global button labeled: ")
   (let (but-buf actype)
     (save-excursion
       (setq actype (hui:actype))
@@ -306,6 +327,7 @@ a menu to find any of the occurrences."
 
 (defun hui:gbut-modify (lbl-key)
   "Modifies a global Hyperbole button given by LBL-KEY.
+The button may be explicit or a labeled implicit button.
 Signals an error when no such button is found."
   (interactive (list (save-excursion
                       (hui:buf-writable-err
@@ -318,14 +340,13 @@ Signals an error when no such button is found."
        (but-buf (find-file-noselect gbut:file))
        actype but new-lbl)
     (save-excursion
-      (or (called-interactively-p 'interactive)
-         (hui:buf-writable-err but-buf "gbut-modify"))
-      
-      (or (setq but (ebut:get lbl-key but-buf))
-         (progn (pop-to-buffer but-buf)
-                (hypb:error
-                 "(gbut-modify): Invalid button, no data for '%s'." lbl)))
-      
+      (unless (called-interactively-p 'interactive)
+       (hui:buf-writable-err but-buf "gbut-modify"))
+
+      (unless (setq but (gbut:get lbl-key))
+       (pop-to-buffer but-buf)
+       (hypb:error "(gbut-modify): Invalid button, no data for '%s'." lbl))
+
       (setq new-lbl
            (hargs:read
             "Change global button label to: "
@@ -335,16 +356,26 @@ Signals an error when no such button is found."
             (format "(gbut-modify): Enter a string of at most %s chars."
                     ebut:max-len)
             'string))
-      
-      (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
-      (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
-      (setq actype (hui:actype (hattr:get but 'actype)))
-      (hattr:set 'hbut:current 'actype actype)
-      (hattr:set 'hbut:current 'args (hargs:actype-get actype 'modifying))
-      (hattr:set 'hbut:current 'action
-                (and hui:ebut-prompt-for-action (hui:action actype)))
-      (set-buffer but-buf)
-      (ebut:operate lbl new-lbl))))
+
+      (if (eq (hattr:get but 'categ) 'explicit)
+         (progn
+           ;; Explicit buttons
+           (hattr:set 'hbut:current 'loc (hui:key-src but-buf))
+           (hattr:set 'hbut:current 'dir (hui:key-dir but-buf))
+           (setq actype (hui:actype (hattr:get but 'actype)))
+           (hattr:set 'hbut:current 'actype actype)
+           (hattr:set 'hbut:current 'args (hargs:actype-get actype 'modifying))
+           (hattr:set 'hbut:current 'action
+                      (and hui:ebut-prompt-for-action (hui:action actype)))
+           (set-buffer but-buf)
+           (ebut:operate lbl new-lbl))
+       ;; Ixplicit buttons
+       (save-excursion
+         (set-buffer but-buf)
+         (ibut:rename lbl new-lbl)
+         (when (and (called-interactively-p 'interactive)
+                    (ibut:at-p))
+           (hui:ibut-message t)))))))
 
 (defun hui:hbut-act (&optional but)
   "Executes action for optional Hyperbole button symbol BUT in current buffer.
@@ -353,11 +384,11 @@ Default is the current button."
    (let ((but (hbut:at-p)) (lst))
      (list
       (cond (but)
-           ((setq lst (ebut:alist))
-            (ebut:get (ebut:label-to-key
+           ((setq lst (nconc (ebut:alist) (ibut:alist)))
+            (hbut:get (hbut:label-to-key
                        (hargs:read-match "Button to execute: " lst nil t
-                                         (ebut:label-p 'as-label) 'ebut))))
-           (t (hypb:error "(hbut-act): No explicit buttons in buffer."))))))
+                                         (hbut:label-p 'as-label) 'hbut))))
+           (t (hypb:error "(hbut-act): No labeled buttons in buffer."))))))
   (cond ((and (called-interactively-p 'interactive) (null but))
         (hypb:error "(hbut-act): No current button to activate."))
        ((not (hbut:is-p but))
@@ -383,28 +414,28 @@ BUT defaults to the button whose label point is within."
                (ebut:get (ebut:label-to-key
                           (hargs:read-match "Help for button: "
                                             (ebut:alist) nil t nil 'ebut)))))
-  (or but
-      (hypb:error "(hbut-help):  Move point to a valid Hyperbole button."))
-  (if (not (hbut:is-p but))
-      (cond (but (hypb:error "(hbut-help): Invalid button."))
-           (t   (hypb:error
-                 "(hbut-help): Not on an implicit button and no buffer 
explicit buttons."))))
+  (unless but
+    (hypb:error "(hbut-help):  Move point to a valid Hyperbole button."))
+  (unless (hbut:is-p but)
+    (cond (but (hypb:error "(hbut-help): Invalid button."))
+         (t   (hypb:error
+               "(hbut-help): Not on an implicit button and no buffer explicit 
buttons."))))
   (let ((type-help-func (intern-soft
                         (concat 
                          (htype:names 'ibtypes (hattr:get but 'categ))
                          ":help"))))
-    (or (equal (hypb:indirect-function 'hui:but-flash)
-              (lambda nil))
-       ;; Only flash button if point is on it.
-       (let ((lbl-key (hattr:get but 'lbl-key)))
-         (and lbl-key
-              (or (equal lbl-key (ebut:label-p))
-                  (equal lbl-key (ibut:label-p)))
-              (hui:but-flash))))
+    (unless (equal (hypb:indirect-function 'hui:but-flash)
+                  (lambda nil))
+      ;; Only flash button if point is on it.
+      (let ((lbl-key (hattr:get but 'lbl-key)))
+       (and lbl-key
+            (or (equal lbl-key (ebut:label-p))
+                (equal lbl-key (ibut:label-p)))
+            (hui:but-flash))))
     (if (functionp type-help-func)
        (funcall type-help-func but)
       (let ((total (hbut:report but)))
-       (if total (hui:help-ebut-highlight))))))
+       (when total (hui:help-ebut-highlight))))))
 
 (defun hui:hbut-label (default-label func-name)
   "Reads button label from user using DEFAULT-LABEL and caller's FUNC-NAME."
@@ -438,12 +469,79 @@ See 'hbut:report'."
   (if (and arg (symbolp arg))
       (hui:hbut-help arg)
     (let ((total (hbut:report arg)))
-      (if total
-         (progn (hui:help-ebut-highlight)
-                (message "%d button%s." total (if (/= total 1) "s" "")))))))
+      (when total
+       (hui:help-ebut-highlight)
+       (message "%d button%s." total (if (/= total 1) "s" ""))))))
 
 (defalias 'hui:hbut-summarize 'hui:hbut-report)
 
+(defun hui:ibut-label-create ()
+  "Creates an implicit button label preceding an existing implicit button at 
point, if any.
+Adds the label and delimiters around it plus any necessary label instance 
number.
+Signals an error if point is not on an implicit button or if the button 
already has a label.
+
+If the implicit button type does not specify the starting locations of
+its buttons, the the label is simply inserted at point."
+  (interactive)
+  (hui:buf-writable-err (current-buffer) "ibut-label-create")
+  (let* ((ibut (ibut:at-p))
+        (ibut-start (when ibut (hattr:get 'hbut:current 'lbl-start)))
+        ;; non-nil when point is within an existing ibut label
+        (label-key-start-end (when ibut (ibut:label-p nil nil nil t t)))
+        lbl actype)
+    (cond (label-key-start-end
+          (error "(hui:ibut-label-create): ibutton at point already has a 
label; try hui:ibut-rename"))
+         (ibut
+          (save-excursion
+            (when ibut-start
+              (goto-char ibut-start))
+            (save-excursion
+              ;; Check if ibut has an existing preceding label
+              (skip-chars-backward "][:=<>a-zA-Z0-9#@!$%^&* -")
+              (skip-chars-forward " ")
+              (when (looking-at (concat (regexp-quote ibut:label-start) 
"\\s-*[:=a-zA-Z0-9#@!$%^&* -]+" (regexp-quote ibut:label-end)))
+                (error "(hui:ibut-label-create): ibutton at point already has 
a label; try hui:ibut-rename")))
+            (setq lbl (hui:hbut-label nil "ibut-label-create")) ; prompts for 
label
+            ;; !! Handle adding instance to label
+            (insert ibut:label-start lbl ibut:label-end ibut:label-separator))
+          (when (called-interactively-p 'interactive)
+            (hui:ibut-message nil)))
+         (t (error "(hui:ibut-label-create): To add a label, point must be 
within the text of an implicit button")))))
+
+(defun hui:ibut-rename (lbl-key)
+  "Renames a label preceding a Hyperbole implicit button in the current buffer 
given by LBL-KEY.
+Signals an error when no such button is found in the current buffer."
+  (interactive (list (save-excursion
+                      (hui:buf-writable-err (current-buffer) "ibut-rename")
+                      (or (ibut:label-p)
+                          (ibut:label-to-key
+                           (hargs:read-match "Labeled implicit button to 
rename: "
+                                             (ibut:alist) nil t nil 'ibut))))))
+  (let ((lbl (ibut:key-to-label lbl-key))
+       (but-buf (current-buffer))
+       actype but new-lbl)
+    (unless (called-interactively-p 'interactive)
+      (hui:buf-writable-err but-buf "ibut-rename"))
+
+    (unless (setq but (ibut:get lbl-key but-buf))
+      (hypb:error "(ibut-rename): Invalid button: '%s'." lbl))
+
+    (setq new-lbl
+         (hargs:read
+          "Change implicit button label to: "
+          (lambda (lbl)
+            (and (not (string= lbl "")) (<= (length lbl) ebut:max-len)))
+          lbl
+          (format "(ibut-rename): Enter a string of at most %s chars."
+                  ebut:max-len)
+          'string))
+
+    (save-excursion
+      (ibut:rename lbl new-lbl)
+      (when (and (called-interactively-p 'interactive)
+                (ibut:at-p))
+       (hui:ibut-message t)))))
+
 (defun hui:link-directly ()
   "Creates a Hyperbole link button at depress point, linked to release point.
 See also documentation for `hui:link-possible-types'."
@@ -724,8 +822,8 @@ All args are optional, the current button and buffer file 
are the defaults."
 
 (defun hui:hbut-term-highlight (start end)
   "For terminals only: Emphasize a button spanning from START to END."
-  (save-restriction
-    (save-excursion
+  (save-excursion
+    (save-restriction
       (goto-char start)
       (narrow-to-region (point-min) start)
       (sit-for 0)
@@ -739,8 +837,8 @@ All args are optional, the current button and buffer file 
are the defaults."
 
 (defun hui:hbut-term-unhighlight (start end)
   "For terminals only: Remove any emphasis from hyper-button at START to END."
-  (save-restriction
-    (save-excursion
+  (save-excursion
+    (save-restriction
       (goto-char start)
       (narrow-to-region (point-min) start)
       (sit-for 0)
@@ -817,13 +915,25 @@ Optional NO-SORT means display in decreasing priority 
order (natural order)."
         '(("\\`*Help" . ((lambda (buf _alist) (switch-to-buffer buf)))))))
     (hui:htype-help htype-sym no-sort)))
 
+(defun hui:ibut-message (but-modify-flag)
+  (let ((actype (symbol-name (hattr:get 'hbut:current 'actype)))
+       (args (hattr:get 'hbut:current 'args)))
+    (if (string-match "\\`actypes::" actype)
+       (setq actype (intern (substring actype (match-end 0)))))
+    (message "%s%s%s %s %S"
+            ibut:label-start
+            (hbut:key-to-label (hattr:get 'hbut:current 'lbl-key))
+            ibut:label-end
+            (if but-modify-flag "now executes" "executes")
+            (cons actype args))))
+
 (defun hui:key-dir (but-buf)
   "Returns button key src directory based on BUT-BUF, a buffer."
   (if (bufferp but-buf)
       (let ((file (buffer-file-name but-buf)))
        (if file
            (file-name-directory (hpath:symlink-referent file))
-         (cdr (assq 'default-directory (buffer-local-variables but-buf)))))
+         (buffer-local-value 'default-directory but-buf)))
     (hypb:error "(hui:key-dir): '%s' is not a valid buffer.")))
 
 (defun hui:key-src (but-buf)
@@ -836,7 +946,7 @@ button's source file name when the button data is stored 
externally."
          (t but-buf))))
 
 (defun hui:link-create (modify but-window lbl-key but-loc but-dir 
type-and-args)
-  "Creates or modifies a new Hyperbole link button.
+  "Creates or modifies a new Hyperbole explicit link button.
 If MODIFY is non-nil, modifies button at point in BUT-WINDOW,
 otherwise, prompts for button label and creates a button.
 LBL-KEY is internal form of button label.  BUT-LOC is file or buffer
@@ -864,7 +974,9 @@ possible types.
 
 Referent Context         Possible Link Type Returned
 ----------------------------------------------------
+Global Button            link-to-gbut
 Explicit Button          link-to-ebut
+Implicit Button          link-to-ibut
 Info Index Item          link-to-Info-index-item
 Info Node                link-to-Info-node
 Mail Reader Message      link-to-mail
@@ -879,8 +991,12 @@ Buffer without File      link-to-buffer-tmp"
 
   (let (val)
     (delq nil
-         (list (if (ebut:at-p)
-                   (list 'link-to-ebut buffer-file-name (ebut:label-p)))
+         (list (cond ((eq (current-buffer) (get-file-buffer gbut:file))
+                      (list 'link-to-gbut buffer-file-name (hbut:label-p)))
+                     ((ebut:at-p)
+                      (list 'link-to-ebut buffer-file-name (ebut:label-p)))
+                     ((setq val (ibut:at-p t))
+                      (list 'link-to-ibut buffer-file-name val)))
                (cond ((eq major-mode 'Info-mode)
                       (if (and Info-current-node
                                (member Info-current-node
diff --git a/hversion.el b/hversion.el
index ae92998..4b2845a 100644
--- a/hversion.el
+++ b/hversion.el
@@ -5,7 +5,7 @@
 ;;
 ;; Orig-Date:     1-Jan-94
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -23,17 +23,23 @@
 ;;; Public variables
 ;;; ************************************************************************
 
-(defconst hyperb:version "7.0.2a" "GNU Hyperbole revision number.")
+(defconst hyperb:version "7.0.3b" "GNU Hyperbole revision number.")
 
 ;;;###autoload
-(defvar hyperb:microcruft-os-p
+(defvar hyperb:microsoft-os-p
   (memq system-type '(ms-windows windows-nt ms-dos win32))
-  "T iff Hyperbole is running under a Microcruft OS.")
+  "Non-nil iff Hyperbole is running under a Microsoft OS but not under Windows 
Subsystem for Linux (WSL).
+Use `hyperb:wsl-os-p' to test if running under WSL.")
+
+;;;###autoload
+(defvar hyperb:wsl-os-p
+  (and (eq system-type 'gnu/linux) (executable-find "wsl.exe") t)
+  "T iff Hyperbole is running under Microsoft Windows Subsystem for Linux 
(WSL).")
 
 ;;;###autoload
 (defvar hyperb:mouse-buttons
-  (if (or (and hyperb:microcruft-os-p (not (memq window-system '(w32 w64 x))))
-         (and (not (featurep 'xemacs)) (memq window-system '(ns dps))))
+  (if (or (and hyperb:microsoft-os-p (not (memq window-system '(w32 w64 x))))
+         (memq window-system '(ns dps)))
       2 3)
   "Number of live buttons available on the mouse.
 Override this if the system-computed default is incorrect for your specific 
mouse.")
@@ -127,7 +133,7 @@ Where a part in the term-type is delimited by a `-' or  an 
`_'."
                          ;; then there is a window system to support.
                          (display-mouse-p))
                      ;; X11, macOS, NEXTSTEP (DPS), or OS/2 Presentation 
Manager (PM)
-                     (if (featurep 'xemacs) "xemacs" "emacs"))
+                     "emacs")
                     ((or (featurep 'eterm-fns)
                          (equal (getenv "TERM") "NeXT")
                          (equal (getenv "TERM") "eterm"))
diff --git a/hvm.el b/hvm.el
index 50417dd..8351d0e 100644
--- a/hvm.el
+++ b/hvm.el
@@ -1,4 +1,4 @@
-;;; hvm.el ---  GNU Hyperbole buttons in mail reader: Vm
+;;; hvm.el --- GNU Hyperbole buttons in mail reader: Vm
 ;;
 ;; Author:       Bob Weiner
 ;;
diff --git a/hypb.el b/hypb.el
index 8701d85..29b11b1 100644
--- a/hypb.el
+++ b/hypb.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:     6-Oct-91 at 03:42:38
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -27,7 +27,11 @@
 This should end with a space.")
 
 (defcustom hypb:rgrep-command
-  (format "%sgrep -insIHr" (if (executable-find "zgrep") "z" ""))
+  ;; Only the FreeBSD version of zgrep supports all of the grep
+  ;; options that Hyperbole needs: -r, --include, and --exclude
+  (format "%sgrep -insIHr" (if (and (executable-find "zgrep")
+                                    (string-match-p "bsd" 
(shell-command-to-string "zgrep --version | head -1")))
+                               "z" ""))
   "*Grep command string and initial arguments to send to `hypb:rgrep' command.
 It must end with a space."
   :type 'string
@@ -220,7 +224,10 @@ Global keymap is used unless optional KEYMAP is given."
 
 (defun hypb:error (&rest args)
   "Signals an error typically to be caught by `hyperbole'."
-  (let ((msg (if (< (length args) 2) (car args) (apply 'format args))))
+  (let ((msg (if (< (length args) 2)
+                (car args)
+              (apply 'format (cons (car args)
+                                   (mapcar #'hypb:format-quote (cdr args)))))))
     (put 'error 'error-message msg)
     (error msg)))
 
@@ -233,25 +240,16 @@ FILE is temporarily read into a buffer to determine the 
major mode if necessary.
       (unless (or existing-flag (null buf))
        (kill-buffer buf)))))
 
-(defun hypb:format-quote (string)
-  "Replace all single % with %% in STRING so a call to `format' or `message' 
ignores them."
-  (if (stringp string)
+(defun hypb:format-quote (arg)
+  "Replace all single % with %% in any string ARG so that a call to `format' 
or `message' ignores them.
+Return either the modified string or the original ARG."
+  (if (stringp arg)
       (replace-regexp-in-string
        "@@@" "%%" (replace-regexp-in-string
-                  "%" "%%" (replace-regexp-in-string "%%" "@@@" string nil t)
+                  "%" "%%" (replace-regexp-in-string "%%" "@@@" arg nil t)
                   nil t)
-       nil t)))
-
-;;;###autoload
-(defun hypb:functionp (obj)
-"Returns t if OBJ is a function, nil otherwise."
-  (cond
-    ((symbolp obj) (fboundp obj))
-    ((subrp obj))
-    ((hypb:emacs-byte-code-p obj))
-    ((consp obj)
-     (if (eq (car obj) 'lambda) (listp (car (cdr obj)))))
-    (t nil)))
+       nil t)
+    arg))
 
 (defun hypb:function-copy (func-symbol)
   "Copies FUNC-SYMBOL's body for overloading.  Returns copy of body."
@@ -455,13 +453,18 @@ then `locate-post-command-hook'."
 
 (defalias 'hypb:mark #'mark)
 
-(if (featurep 'xemacs)
-    (defalias 'hypb:mark-marker 'mark-marker)
-  (defun hypb:mark-marker (inactive-p)
-    "Return this buffer's mark as a marker object, or nil if no mark.
+(defun hypb:mark-marker (inactive-p)
+  "Return this buffer's mark as a marker object, or nil if no mark.
 INACTIVE-P is unused, it is for compatibility with XEmacs' version of
 mark-marker."
-    (mark-marker)))
+  (mark-marker))
+
+;;;###autoload
+(defun hypb:map-plist (func plist)
+  "Returns result of applying FUNC of two args, key and value, to key-value 
pairs in PLIST, a property list."
+  (cl-loop for (k v) on plist by #'cddr
+          collect (funcall func k v) into result
+          finally return result))
 
 (defun hypb:map-sublists (func list)
   "Applies FUNC to every atom found at any level of LIST.
@@ -512,7 +515,7 @@ NEWTEXT may instead be a function of one argument (the 
string to replace in)
 that returns a replacement string."
   (unless (stringp str)
     (error "(hypb:replace-match-string): 2nd arg must be a string: %s" str))
-  (unless (or (stringp newtext) (hypb:functionp newtext))
+  (unless (or (stringp newtext) (functionp newtext))
     (error "(hypb:replace-match-string): 3rd arg must be a string or function: 
%s"
           newtext))
   (let ((rtn-str "")
@@ -526,7 +529,7 @@ that returns a replacement string."
            (concat
              rtn-str
              (substring str prev-start match)
-             (cond ((hypb:functionp newtext)
+             (cond ((functionp newtext)
                     (hypb:replace-match-string
                      regexp (substring str match start)
                      (funcall newtext str) literal))
@@ -688,14 +691,9 @@ nor nil it means to not count the minibuffer window even 
if it is active."
 
 (defvar hypb:hyperbole-banner-keymap
   (let ((map (make-sparse-keymap)))
-    (cond ((not (featurep 'xemacs))
-          (define-key map [mouse-1]  'hypb:browse-home-page)
-          (define-key map [mouse-2]  'hypb:browse-home-page)
-          (define-key map "\C-m"     'hypb:browse-home-page))
-         ((featurep 'xemacs)
-          (define-key map 'button1  'hypb:browse-home-page)
-          (define-key map 'button2  'hypb:browse-home-page)
-          (define-key map '(return) 'hypb:browse-home-page)))
+    (define-key map [mouse-1]  'hypb:browse-home-page)
+    (define-key map [mouse-2]  'hypb:browse-home-page)
+    (define-key map "\C-m"     'hypb:browse-home-page)
     map)
   "Keymap used when on the Hyperbole banner glyph.")
 
@@ -706,9 +704,7 @@ Without file, the banner is prepended to the current 
buffer."
   (if file
       ;; A stub for this function is defined in hversion.el when not running 
in InfoDock.
       (id-browse-file file))
-  (if (not (featurep 'xemacs))
-      (hypb:display-file-with-logo-emacs file)
-    (hypb:display-file-with-logo-xemacs file))
+  (hypb:display-file-with-logo-emacs file)
   (goto-char (point-min))
   (skip-syntax-forward "-")
   (set-window-start (selected-window) 1)
@@ -767,39 +763,9 @@ Without file, the banner is prepended to the current 
buffer."
        (setq button (make-button (- (point) 3) (- (point) 2) :type 
'hyperbole-banner))
        (button-put button 'help-echo (concat "Click to visit " hypb:home-page))
        (button-put button 'action #'hypb:browse-home-page)
+       (button-put button 'face 'default)
        (button-put button 'keymap hypb:hyperbole-banner-keymap)))))
 
-(defun hypb:display-file-with-logo-xemacs (&optional file)
-  "Display an optional text FILE with the Hyperbole banner prepended.
-Without file, the banner is prepended to the current buffer."
-  (let ((hyperbole-banner-path (expand-file-name "hyperbole-banner.png" 
hyperb:dir)))
-    (if (not (file-readable-p hyperbole-banner-path))
-       (setq hyperbole-banner-path (if (fboundp 'locate-data-file)
-                                       (locate-data-file 
"hyperbole-banner.png")
-                                     (expand-file-name "hyperbole-banner.png"
-                                                       data-directory))))
-    (if (or (not (fboundp 'make-glyph))
-           (let ((extent (next-extent (current-buffer))))
-             (and extent (extent-property extent 'hyperbole-banner)))
-           (not hyperbole-banner-path)
-           (not (file-readable-p hyperbole-banner-path)))
-       ;; Either image support is unavailable, the file cannot be read
-       ;; or the image has already been inserted, so don't reinsert it.
-       nil
-      (let ((hyperbole-banner (make-glyph hyperbole-banner-path))
-            (buffer-read-only)
-            extent)
-       (goto-char (point-min))
-       (insert "\n")
-       (indent-to (startup-center-spaces hyperbole-banner))
-       (insert "\n\n")
-       (setq extent (make-extent (- (point) 3) (- (point) 2)))
-       (set-extent-end-glyph extent hyperbole-banner)
-       (set-extent-property extent 'hyperbole-banner t)
-       (set-extent-property extent 'help-echo
-                            (concat "Click to visit " hypb:home-page))
-       (set-extent-property extent 'keymap hypb:hyperbole-banner-keymap)))))
-
 (defun hypb:locate-pathnames ()
   (save-excursion
     (goto-char (point-min))
@@ -824,7 +790,7 @@ Without file, the banner is prepended to the current 
buffer."
 ;;; Private variables
 ;;; ************************************************************************
 
-(if (not (featurep 'xemacs)) (define-button-type 'hyperbole-banner))
+(define-button-type 'hyperbole-banner)
 
 (provide 'hypb)
 
diff --git a/hyperbole-pkg.el b/hyperbole-pkg.el
deleted file mode 100644
index c2390d7..0000000
--- a/hyperbole-pkg.el
+++ /dev/null
@@ -1,8 +0,0 @@
-;; -*- no-byte-compile: t -*-
-(define-package "hyperbole" "7.0.2a" "GNU Hyperbole: The Everyday Hypertextual 
Information Manager"
-  '((emacs "24.4"))
-  :url "http://www.gnu.org/software/hyperbole";
-  :keywords '("comm" "convenience" "files" "frames" "hypermedia" "languages"
-             "mail" "matching" "mouse" "multimedia" "outlines" "tools" "wp"))
-
-(setq byte-compile-warnings '(not interactive-only find-tag free-vars 
unresolved))
diff --git a/hyperbole.el b/hyperbole.el
index 73b1b61..fd50086 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -1,12 +1,12 @@
 ;;; hyperbole.el --- GNU Hyperbole: The Everyday Hypertextual Information 
Manager
 
-;; Copyright (C) 1992-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1992-2019  Free Software Foundation, Inc.
 
 ;; Author:           Bob Weiner
-;; Maintainer:       Bob Weiner <address@hidden> and Mats Lidell 
<address@hidden>
+;; Maintainer:       Bob Weiner <address@hidden>, Mats Lidell <address@hidden>
 ;; Created:          06-Oct-92 at 11:52:51
-;; Released:         23-Nov-17
-;; Version:          7.0.2a
+;; Released:         21-Jan-19
+;; Version:          7.0.3
 ;; Keywords:         comm, convenience, files, frames, hypermedia, languages, 
mail, matching, mouse, multimedia, outlines, tools, wp
 ;; Package:          hyperbole
 ;; Package-Requires: ((emacs "24.4"))
@@ -177,24 +177,6 @@ context (wherever point is).  {C-u \\[hkey-help]} shows 
what the Assist Key will
   :type 'boolean
   :group 'hyperbole-keys)
 
-(defcustom inhibit-hyperbole-messaging t
-  "*Determines whether Hyperbole supports explicit buttons in mail and news 
buffers.
-The default of t means disable such support (work remains to
-modernize these features).  When t, Hyperbole will not alter
-messaging mode hooks nor overload functions from these packages,
-preventing potential incompatibilities.
-
-If you want to use Hyperbole buttons in mail and news buffers, set
-this variable to nil by adding (hyperbole-toggle-messaging t)
-to your personal Emacs initialization file, prior to loading
-Hyperbole, and then restart Emacs."
-  :type 'boolean
-  :initialize (lambda (symbol value) (set symbol value))
-  :set (lambda (symbol value) 
-        (set symbol (not value))
-        (hyperbole-toggle-messaging nil))
-  :group 'hyperbole-buttons)
-
 ;;; ************************************************************************
 ;;; Public key bindings
 ;;; ************************************************************************
@@ -318,7 +300,7 @@ With third argument NO-ADD non-nil, skip storage of prior 
KEY binding
 which prevents automatic removal of any local bindings to the same key."
   (or (global-key-binding key)
       (where-is-internal command)
-      (hkey-global-set-key key command)))
+      (hkey-global-set-key key command no-add)))
 
 (defun hkey-set-bindings (key-binding-list)
   "Set keys bound by Hyperbole to those in KEY-BINDING-LIST.
@@ -353,6 +335,16 @@ bindings after load)."
 ;;; Load Hyperbole mouse bindings
 ;;; ************************************************************************
 
+;; From mouse-position.c in Emacs:
+;;    f = SELECTED_FRAME ();
+;;    XSETFRAME (lispy_dummy, f);
+;;
+;;  It seems like the XSETFRAME macro is not properly copying the value of f 
on initial frame selection under the macOS window system.
+;;  The problem occurs on other systems as well, e.g. Emacs 25.2 under Windows 
7.
+;;
+;;  Hyperbole resolves this problem by setting the
+;;  `mouse-position-function' variable below to properly set the
+;;  newly selected frame.
 (if (boundp 'mouse-position-function)
     (setq mouse-position-function
          (lambda (frame-x-dot-y)
@@ -362,7 +354,8 @@ frame, those functions by default still return the prior 
frame."
            (if (consp frame-x-dot-y) (setcar frame-x-dot-y (selected-frame)))
            frame-x-dot-y)))
 
-(require 'hmouse-key)
+;; hmouse-drv will load hui-mouse and hmouse-key
+(mapc #'require '(hsettings hmouse-drv hmouse-sh))
 
 ;;; ************************************************************************
 ;;; You shouldn't need to modify anything below here.
@@ -530,7 +523,7 @@ With optional ARG, override them iff ARG is positive."
 ;;   "Creates implicit button TYPE (unquoted sym) with PARAMS, described by 
DOC."
 ;;   nil 'macro)
 
-;; (autoload 'ebut:map          "hyperbole"      "Map over Hyperbole buffer 
buttons." nil)
+;; (autoload 'ebut:map          "hyperbole"      "Map over the Hyperbole 
explicit buttons in a buffer." nil)
 ;; (autoload 'hbut:key-src      "hyperbole"      "Called by {e} command in 
rolo match buffer.")
 ;; (autoload 'hui:ebut-rename   "hyperbole"      "Rename a Hyperbole button."  
   t)
 ;; (autoload 'hyperbole         "hyperbole"      "Hyperbole info manager 
menus."  t)
@@ -668,8 +661,6 @@ If FLAG is nil then text is shown, while if FLAG is t the 
text is hidden."
 ;;; Load Site-specific Configurations and Initialize Hyperbole Package
 ;;; ************************************************************************
 
-(require 'hsettings)
-
 (defun hyperb:init ()
   "Standard configuration routine for Hyperbole."
   (interactive)
@@ -687,6 +678,14 @@ If FLAG is nil then text is shown, while if FLAG is t the 
text is hidden."
   ;; Conditionally initialize Hyperbole key bindings (when hkey-init is t)
   (hkey-initialize)
   ;;
+  ;; Abbreviate MSWindows mount point paths.
+  (when (or (file-exists-p "/mnt/c")
+           (file-exists-p "/cygdrive"))
+    (add-to-list 'directory-abbrev-alist '("\\`\\(/mnt\\|/cygdrive\\)/" . 
"/")))
+  ;; When running under a POSIX system with possible access to MSWindows 
servers,
+  ;; cache valid MSWindows mount points.
+  (hpath:cache-mswindows-mount-points)
+  ;;
   ;; Save button attribute file whenever same dir file is saved and
   ;; `ebut:hattr-save' is non-nil.
   (add-hook (if (boundp 'write-file-functions)
diff --git a/hyrolo-logic.el b/hyrolo-logic.el
index e257df8..d532b6c 100644
--- a/hyrolo-logic.el
+++ b/hyrolo-logic.el
@@ -1,4 +1,4 @@
-;;; hyrolo-logic.el ---  Logic functions for GNU Hyperbole Rolo files
+;;; hyrolo-logic.el --- Logic functions for GNU Hyperbole Rolo files
 ;;
 ;; Author:       Bob Weiner
 ;;
diff --git a/hyrolo-menu.el b/hyrolo-menu.el
index 75e70b0..874dbe5 100644
--- a/hyrolo-menu.el
+++ b/hyrolo-menu.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    28-Oct-94 at 10:59:44
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -35,9 +35,10 @@
     ["Display-Prior-Matches" (id-tool-invoke 'hyrolo-display-matches) t]
     ["Edit-Entry"        (id-tool-invoke 'hyrolo-edit) t]
     ["Edit-Rolo"         (id-tool-invoke
-                         '(progn (require 'hyrolo)
-                                 (find-file (car hyrolo-file-list))
-                                 (setq buffer-read-only nil)))
+                         '(lambda ()
+                            (require 'hyrolo)
+                            (find-file (car hyrolo-file-list))
+                            (setq buffer-read-only nil)))
      t]
     ["Insert-Entry-at-Point" (id-tool-invoke 'hyrolo-yank) t]
     ["Mail-to-Address"   (id-tool-invoke 'hyrolo-mail-to) t]
@@ -112,21 +113,15 @@
 ;;; Public functions
 ;;; ************************************************************************
 
-;;; This definition is used only by XEmacs and Emacs.
+;;; This definition is used only by Emacs.
 (defun hyrolo-menubar-menu ()
   "Add a HyRolo menu to the rolo match buffer menubar."
   (cond ((fboundp 'popup-mode-menu)
         (setq mode-popup-menu id-popup-hyrolo-menu))
-       ((featurep 'xemacs)
-        (define-key hyrolo-mode-map 'button3 'hyrolo-popup-menu))
-       (t ;; (not (featurep 'xemacs))
+       (t
         (define-key hyrolo-mode-map [C-down-mouse-3] 'hyrolo-popup-menu)
         (define-key hyrolo-mode-map [C-mouse-3] nil)))
-  (unless (cond ((not (featurep 'xemacs))
-                (global-key-binding [menu-bar Rolo]))
-               ((boundp 'current-menubar)
-                (car (find-menu-item current-menubar '("Rolo")))))
-    (if (featurep 'xemacs) (set-buffer-menubar (copy-sequence 
current-menubar)))
+  (unless (global-key-binding [menu-bar Rolo])
     (easy-menu-define nil hyrolo-mode-map "Rolo Menubar Menu" 
id-popup-hyrolo-menu)
     ;; Force a menu-bar update.
     (force-mode-line-update)))
diff --git a/hyrolo.el b/hyrolo.el
index b5fbb92..b6058ff 100644
--- a/hyrolo.el
+++ b/hyrolo.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:     7-Jun-89 at 22:08:29
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1991-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -85,10 +85,10 @@ executable must be found as well (for Oauth security)."
         (ms "c:/_rolo.otl")
         (unix "~/.rolo.otl")
         (list (delq nil (if (and (boundp 'bbdb-file) (stringp bbdb-file))
-                            (if hyperb:microcruft-os-p
+                            (if hyperb:microsoft-os-p
                                 (list ms bbdb-file gcontacts)
                               (list  "~/.rolo.otl" bbdb-file gcontacts))
-                          (if hyperb:microcruft-os-p (list ms gcontacts) (list 
unix gcontacts))))))
+                          (if hyperb:microsoft-os-p (list ms gcontacts) (list 
unix gcontacts))))))
     (setq hyrolo-file-list list)
     (when (called-interactively-p 'interactive)
       (message "HyRolo Search List: %S" list))
@@ -112,16 +112,10 @@ A hyrolo-file consists of:
   :group 'hyperbole-rolo)
 (unless hyrolo-highlight-face
   (setq hyrolo-highlight-face
-       (cond ((not (featurep 'xemacs))
-              (if (fboundp 'defface)
-                  (defface hyrolo-highlight-face nil
-                           "*Face used to highlight rolo search matches."
-                           :group 'hyperbole-rolo)))
-             (t (if (fboundp 'defface)
-                    (face-name
-                     (defface hyrolo-highlight-face nil
-                       "*Face used to highlight rolo search matches."
-                       :group 'hyperbole-rolo))))))
+       (if (fboundp 'defface)
+           (defface hyrolo-highlight-face nil
+             "*Face used to highlight rolo search matches."
+             :group 'hyperbole-rolo)))
   (if (fboundp 'hproperty:set-item-highlight)
       (hproperty:set-item-highlight)))
 
@@ -189,10 +183,8 @@ entry which begins with the parent string."
            parent (substring name 0 end)
            name (substring name (min (1+ end) (length name))))
       (if (re-search-forward
-          (concat "\\(" hyrolo-entry-regexp "\\)[ \t]*" 
-                  (regexp-quote parent)) nil t)
-         (setq level (buffer-substring-no-properties (match-beginning 1)
-                                                     (match-end 1)))
+          (concat hyrolo-entry-regexp (regexp-quote parent)) nil t)
+         (setq level (match-string-no-properties hyrolo-entry-group-number))
        (error "(hyrolo-add): `%s' category not found in \"%s\"."
               parent file)))
     (narrow-to-region (point)
@@ -210,10 +202,10 @@ entry which begins with the parent string."
       ;; entry by moving to an entry with the same (or nearest) first character
       ;; to that of `name'.
       (if (and (= level-len 1)
-              (equal hyrolo-entry-regexp "^\\*+"))
+              (equal hyrolo-entry-regexp "^\\(\\*+\\)\\([ \t]+\\)"))
          (progn (goto-char (point-min))
-                (if (re-search-forward (concat "^\\*[ \t]*"
-                                               (char-to-string first-char))
+                (if (re-search-forward (concat hyrolo-entry-regexp
+                                               (regexp-quote (char-to-string 
first-char)))
                                        nil t)
                     (goto-char (match-beginning 0))
                   (goto-char (point-max))
@@ -235,17 +227,12 @@ entry which begins with the parent string."
                              (setq again nil)))))
        (goto-char (point-min)))
 
-      (while (and again
-                 (re-search-forward
-                  (concat "\\(" hyrolo-entry-regexp "\\)\\([ \t]*\\)")
-                  nil 'end))
-       (setq entry-level (buffer-substring-no-properties (match-beginning 1)
-                                                         (match-end 1)))
+      (while (and again (re-search-forward hyrolo-entry-regexp nil 'end))
+       (setq entry-level (match-string-no-properties 
hyrolo-entry-group-number))
        (if (/= (length entry-level) level-len)
            (hyrolo-to-entry-end t entry-level)
          (setq entry (buffer-substring-no-properties (point) (+ (point) len))
-               entry-spc (buffer-substring-no-properties (match-beginning 2)
-                                                         (match-end 2)))
+               entry-spc (match-string-no-properties 
hyrolo-entry-trailing-space-group-number))
          (cond ((string< entry name)
                 (hyrolo-to-entry-end t entry-level))
                ((string< name entry)
@@ -534,7 +521,7 @@ Returns t if entry is killed, nil otherwise."
 (defun hyrolo-locate ()
   "Interactively search for an entry beginning with a set of search 
characters."
   (interactive)
-  (hyrolo-isearch-for-regexp (concat hyrolo-entry-regexp "[ \t]*")))
+  (hyrolo-isearch-for-regexp hyrolo-entry-regexp))
 
 (defun hyrolo-mail-to ()
   "Start composing mail addressed to the first e-mail address at or after 
point."
@@ -606,7 +593,7 @@ XEmacs only."
 
 (defun hyrolo-rename (old-file new-file)
   "Prompt user to rename OLD-FILE to NEW-FILE."
-  (interactive (if hyperb:microcruft-os-p
+  (interactive (if hyperb:microsoft-os-p
                   '("c:/_rolodex.otl" "c:/_rolo.otl")
                 '("~/.rolodex.otl" "~/.rolo.otl")))
   (if (and (equal (car hyrolo-file-list) new-file)
@@ -694,7 +681,7 @@ If ARG is zero, move to the beginning of the current line."
   (if (null arg) (setq arg 1))
   (forward-visible-line arg))
 
-;; Derived from `sort-lines' in "sort.el" since through Emacs 25.0
+;; Derived from `sort-lines' in "sort.el" since through at least Emacs 25.0
 ;; invisible lines are not grouped with the prior visible line, making
 ;; rolo entry (or any record) sorts fail.  This next function fixes that.
 (defun hyrolo-sort-lines (reverse beg end)
@@ -1276,8 +1263,7 @@ Name is returned as `last, first-and-middle'."
                   "\\([^\" \t()]+\\)[ \t]*[)\"]\\)?[ \t]*$")
           from)
          (setq name (hyrolo-format-name from 3 4))
-         (or email (setq email (substring from (match-beginning 1)
-                                          (match-end 1)))))
+         (or email (setq email (match-string 1 from))))
         ;; Match: <email>, name <email>, "name" <email>
         ((string-match
           (concat "^\\(\"?\\([^\"<>()\n]+\\)[ \t]+"
@@ -1285,8 +1271,7 @@ Name is returned as `last, first-and-middle'."
                   "<\\([^\"<>() \t\n\r\f]+\\)>[ \t]*$")
           from)
          (setq name (hyrolo-format-name from 2 3))
-         (or email (setq email (substring from (match-beginning 4)
-                                          (match-end 4)))))))
+         (or email (setq email (match-string 4 from))))))
     (if (or name email)
        (list name email))))
 
@@ -1301,8 +1286,7 @@ Name is returned as `last, first-and-middle'."
                   (skip-chars-forward " \t")
                   (if (or (looking-at "[^ \t\n\r]+ ?, ?[^ \t\n\r]+")
                           (looking-at "\\( ?[^ \t\n\r]+\\)+"))
-                      (buffer-substring-no-properties (match-beginning 0)
-                                                      (match-end 0))))))))
+                      (match-string-no-properties 0)))))))
 
 (defun hyrolo-narrowed-p ()
   (or (/= (point-min) 1) (/= (1+ (buffer-size)) (point-max))))
@@ -1393,11 +1377,8 @@ Returns point where matching entry begins or nil if not 
found."
                   (while (and (not level) (search-forward parent nil t))
                     (save-excursion
                       (beginning-of-line)
-                      (if (looking-at
-                           (concat "\\(" hyrolo-entry-regexp "\\)[ \t]*" 
-                                   (regexp-quote parent)))
-                          (setq level (buffer-substring-no-properties 
(match-beginning 1)
-                                                                      
(match-end 1))))))
+                      (if (looking-at (concat hyrolo-entry-regexp 
(regexp-quote parent)))
+                          (setq level (match-string-no-properties 
hyrolo-entry-group-number)))))
                   level))
                ((equal name real-name)) ;; Try next file.
                (t ;; Found parent but not child
@@ -1415,9 +1396,7 @@ Returns point where matching entry begins or nil if not 
found."
                           (beginning-of-line)
                           (setq found
                                 (if (looking-at
-                                     (concat "\\(" hyrolo-entry-regexp
-                                             "\\)[ \t]*"
-                                             (regexp-quote name)))
+                                     (concat hyrolo-entry-regexp (regexp-quote 
name)))
                                     (point))))))))
       (or found (hyrolo-kill-buffer))) ;; conditionally kill
     (widen)
@@ -1425,11 +1404,7 @@ Returns point where matching entry begins or nil if not 
found."
 
 (defun hyrolo-to-buffer (buffer &optional other-window-flag frame)
   "Pop to BUFFER."
-  (cond ((featurep 'xemacs)
-        (pop-to-buffer buffer other-window-flag
-                       ;; default is to use selected frame
-                       (or frame (selected-frame))))
-       (t (pop-to-buffer buffer other-window-flag))))
+  (pop-to-buffer buffer other-window-flag))
 
 (defun hyrolo-to-entry-end (&optional include-sub-entries curr-entry-level)
   "Moves point to the end of the whole entry that point is within if optional 
INCLUDE-SUB-ENTRIES is non-nil.
@@ -1472,10 +1447,18 @@ Calls the functions given by `hyrolo-mode-hook'.
   "Buffer used to display set of last matching rolo entries.")
 (define-obsolete-variable-alias 'rolo-display-buffer 'hyrolo-display-buffer 
"06.00")
 
-(defvar hyrolo-entry-regexp "^\\*+"
+(defvar hyrolo-entry-group-number 1
+  "Group number within `hyrolo-entry-regexp' whose length represents the level 
of any entry matched.")
+
+(defvar hyrolo-entry-trailing-space-group-number 2
+  "Group number within `hyrolo-entry-regexp; containing trailing space.")
+
+(defvar hyrolo-entry-regexp "^\\(\\*+\\)\\([ \t]+\\)"
   "Regular expression to match the beginning of a rolo entry.
-This pattern must match the beginning of the line.  Entries may be nested
-through the use of increasingly longer beginning patterns.")
+This pattern must match the beginning of the line.  Use
+`hyrolo-entry-group-number' to compute the entry's level in the
+hierarchy.  Use `hyrolo-entry-trailing-space-group-number' to capture
+the whitespace following the entry hierarchy level.")
 (define-obsolete-variable-alias 'rolo-entry-regexp 'hyrolo-entry-regexp 
"06.00")
 
 (defconst hyrolo-hdr-format
diff --git a/hywconfig.el b/hywconfig.el
index d11318f..983a6f3 100644
--- a/hywconfig.el
+++ b/hywconfig.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    15-Mar-89
 ;;
-;; Copyright (C) 1989-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1989-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -51,12 +51,6 @@
 (require 'ring)
 (require 'set)
 
-;; XEmacs compatibility
-(or (fboundp 'frame-parameter)
-    (fset 'frame-parameter 'frame-property))
-(or (fboundp 'set-frame-parameter)
-    (fset 'set-frame-parameter 'set-frame-property))
-
 ;;; ************************************************************************
 ;;; Public variables
 ;;; ************************************************************************
diff --git a/kotl/kexport.el b/kotl/kexport.el
index d0a0de3..501a5d4 100644
--- a/kotl/kexport.el
+++ b/kotl/kexport.el
@@ -89,10 +89,10 @@
    ;; make klinks into hyperlinks
    (cons (concat "&lt;\\s-*@\\s-*" kexport:kcell-reference-regexp
                 "[^&>]*&gt;")
-        "<A HREF=\"#\\1\">\\0</A>")
+        "<A HREF=\"#k\\1\">\\0</A>")
    (cons (format "&lt;\\s-*@\\s-*\\(%s\\)[^=&>]*&gt;"
                 kexport:kcell-partial-reference-regexp)
-        "<A HREF=\"#\\1\">\\0</A>")
+        "<A HREF=\"#k\\1\">\\0</A>")
    (cons (format "&lt;\\s-*\\([^ \t\n\r,<>]+\\)\\s-*,\\s-*%s[^=&>]*&gt;"
                 kexport:kcell-reference-regexp)
         'kexport:html-file-klink)
@@ -185,7 +185,7 @@ STILL TODO:
                                 title)))
 
     (princ "<HTML><HEAD>\n\n")
-    (princ "<A ID=\"top\"></A><A ID=\"0\"></A>\n")
+    (princ "<A ID=\"top\"></A><A ID=\"k0\"></A>\n")
     (princ (format "<TITLE>%s</TITLE>\n" title))
     (if kexport:html-description
        (princ (format "<META ID=\"description\" CONTENT=\"%s\">\n"
@@ -211,8 +211,8 @@ STILL TODO:
           (setq i (1- i)))
         (princ "<TABLE><TR>\n")
         (setq label (kcell-view:label))
-        (princ (format "<A ID=\"%s\"></A>" label))
-        (princ (format "<A ID=\"%s\"></A>\n" (kcell-view:idstamp)))
+        (princ (format "<A ID=\"k%s\"></A>" label))
+        (princ (format "<A ID=\"k%s\"></A>\n" (kcell-view:idstamp)))
         (princ "<TD WIDTH=2% VALIGN=top><PRE>\n")
         (princ (format
                 "<FONT %s>%s%s</FONT></PRE></TD>\n"
@@ -251,8 +251,8 @@ Works exclusively within a call to 
`hypb:replace-match-string'."
                             (match-end 1))))
     (if (equal filename (file-name-nondirectory
                         kexport:input-filename))
-       "<A HREF=\"#\\2\">\\0</A>"
-      (format "<A HREF=\"file://%s#\\2\">\\0</A>"
+       "<A HREF=\"#k\\2\">\\0</A>"
+      (format "<A HREF=\"file://%s#k\\2\">\\0</A>"
              (expand-file-name filename
                                (if kexport:input-filename
                                    (file-name-directory
diff --git a/kotl/kfill.el b/kotl/kfill.el
index 238d7f5..27a8b6c 100644
--- a/kotl/kfill.el
+++ b/kotl/kfill.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    23-Jan-94
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -95,7 +95,7 @@ number of lines that could not be moved, otherwise 0."
     (forward-visible-line n)
     (if (< n 0)
        nil
-      (skip-chars-forward "[\n\r]"))
+      (skip-chars-forward "\n\r"))
 ;    (- (abs n) (count-matches "\n" opoint (point)))
     0))
 
@@ -106,6 +106,7 @@ number of lines that could not be moved, otherwise 0."
              ;; Need this or Emacs ignores fill-prefix when inside a
              ;; comment.
              (comment-multi-line t)
+             (fill-paragraph-handle-comment t)
              fill-prefix)
          (kfill:adapt nil)
          (do-auto-fill))
@@ -150,8 +151,8 @@ number of lines that could not be moved, otherwise 0."
   (if (not (derived-mode-p 'kotl-mode))
       (apply orig-fun args)
     (setq prior-fill-prefix fill-prefix)
-    (if (equal prior-fill-prefix "")
-        (setq prior-fill-prefix nil))
+    (when (equal prior-fill-prefix "")
+      (setq prior-fill-prefix nil))
     (apply orig-fun args)
     (cond (fill-prefix
           (message "fill-prefix: \"%s\"; prior-fill-prefix: \"%s\""
diff --git a/kotl/kmenu.el b/kotl/kmenu.el
index cee1760..344868a 100644
--- a/kotl/kmenu.el
+++ b/kotl/kmenu.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    28-Mar-94 at 11:22:09
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -197,16 +197,10 @@
   (cond ((fboundp 'popup-mode-menu)
          (defvar mode-popup-menu)
         (setq mode-popup-menu id-popup-kotl-menu))
-       ((featurep 'xemacs)
-        (define-key kotl-mode-map 'button3 'kotl-popup-menu))
-       (t ;; (not (featurep 'xemacs))
+       (t
         (define-key kotl-mode-map [C-down-mouse-3] 'kotl-popup-menu)
         (define-key kotl-mode-map [C-mouse-3] nil)))
-  (unless (cond ((not (featurep 'xemacs))
-                (global-key-binding [menu-bar Koutline]))
-               ((boundp 'current-menubar)
-                (car (find-menu-item current-menubar '("Koutline")))))
-    (if (featurep 'xemacs) (set-buffer-menubar (copy-sequence 
current-menubar)))
+  (unless (global-key-binding [menu-bar Koutline])
     (easy-menu-define nil kotl-mode-map "Koutline Menubar Menu" 
id-popup-kotl-menu)
     ;; Force a menu-bar update.
     (force-mode-line-update)))
diff --git a/kotl/kotl-autoloads.el b/kotl/kotl-autoloads.el
index 287ece2..daf4bc0 100644
--- a/kotl/kotl-autoloads.el
+++ b/kotl/kotl-autoloads.el
@@ -3,7 +3,7 @@
 ;;; Code:
 
 
-;;;### (autoloads nil "kexport" "kexport.el" (23052 38385 0 0))
+;;;### (autoloads nil "kexport" "kexport.el" (0 0 0 0))
 ;;; Generated autoloads from kexport.el
 
 (autoload 'kexport:html "kexport" "\
@@ -16,6 +16,8 @@ STILL TODO:
 
 \(fn EXPORT-FROM OUTPUT-TO &optional SOFT-NEWLINES-FLAG)" t nil)
 
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kexport" '("kexport:")))
+
 ;;;***
 
 ;;;### (autoloads nil "kfile" "kfile.el" (22412 20800 0 0))
@@ -39,7 +41,14 @@ View an existing kotl version-2 file FILE-NAME in a 
read-only mode.
 
 ;;;***
 
-;;;### (autoloads nil "kimport" "kimport.el" (23052 38368 0 0))
+;;;### (autoloads nil "kfill" "kfill.el" (0 0 0 0))
+;;; Generated autoloads from kfill.el
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kfill" '("fill-paragraph" "kfill:" "prior-fill-prefix" "set-fill-prefix")))
+
+;;;***
+
+;;;### (autoloads nil "kimport" "kimport.el" (0 0 0 0))
 ;;; Generated autoloads from kimport.el
 
 (defvar kimport:mode-alist '((t . kimport:text) (outline-mode . 
kimport:star-outline)) "\
@@ -124,6 +133,8 @@ The variable, `paragraph-start,' is used to determine 
paragraphs.
 
 \(fn IMPORT-FROM OUTPUT-TO &optional CHILDREN-P)" t nil)
 
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kimport" '("kimport:")))
+
 ;;;***
 
 ;;;### (autoloads nil "klink" "klink.el" (22481 28335 0 0))
@@ -138,7 +149,14 @@ See documentation for `kcell:ref-to-id' for valid cell-ref 
formats.
 
 ;;;***
 
-;;;### (autoloads nil "kotl-mode" "kotl-mode.el" (23052 38304 0 0))
+;;;### (autoloads nil "kmenu" "kmenu.el" (0 0 0 0))
+;;; Generated autoloads from kmenu.el
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kmenu" '("id-" "kotl-")))
+
+;;;***
+
+;;;### (autoloads nil "kotl-mode" "kotl-mode.el" (0 0 0 0))
 ;;; Generated autoloads from kotl-mode.el
 
 (autoload 'kotl-mode "kotl-mode" "\
@@ -187,11 +205,26 @@ Signal an error if current buffer is not a Hyperbole 
outline, else return t.
 
 \(fn)" nil nil)
 
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kotl-mode" '("delete-selection-pre-hook" "kotl-mode" "yank-")))
+
+;;;***
+
+;;;### (autoloads nil "kview" "kview.el" (0 0 0 0))
+;;; Generated autoloads from kview.el
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kview" '("kcell-view:" "kview:")))
+
+;;;***
+
+;;;### (autoloads nil "kvspec" "kvspec.el" (0 0 0 0))
+;;; Generated autoloads from kvspec.el
+
+(if (fboundp 'register-definition-prefixes) (register-definition-prefixes 
"kvspec" '("kvspec:")))
+
 ;;;***
 
-;;;### (autoloads nil nil ("kcell.el" "kfill.el" "klabel.el" "kmenu.el"
-;;;;;;  "knode.el" "kprop-em.el" "kprop-xe.el" "kproperty.el" "kview.el"
-;;;;;;  "kvspec.el") (23052 38356 0 0))
+;;;### (autoloads nil nil ("kcell.el" "klabel.el" "knode.el" "kprop-em.el"
+;;;;;;  "kprop-xe.el" "kproperty.el") (0 0 0 0))
 
 ;;;***
 
diff --git a/kotl/kotl-mode.el b/kotl/kotl-mode.el
index 7e2f70c..72e5761 100644
--- a/kotl/kotl-mode.el
+++ b/kotl/kotl-mode.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    6/30/93
 ;;
-;; Copyright (C) 1993-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1993-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -257,8 +257,10 @@ It provides the following keys:
   (set-syntax-table text-mode-syntax-table)
   ;; Turn off filladapt minor mode if on, so that it does not interfere with
   ;; the filling code in "kfill.el".
-  (and (bound-and-true-p 'filladapt-mode)
-       (fboundp 'filladapt-mode) (filladapt-mode 0))
+  ;; FIXME: Is it still needed now that they all use advice?
+  (and (fboundp 'filladapt-mode)
+       (bound-and-true-p 'filladapt-mode)
+       (filladapt-mode 0))
   ;; Ensure that outline structure data is saved when save-buffer is called
   ;; from save-some-buffers, {C-x s}.
   (add-hook (if (featurep 'xemacs)
@@ -325,7 +327,7 @@ It provides the following keys:
       (kvspec:activate))))
   ;; We have been converting a buffer from a foreign format to a koutline.
   ;; Now that it is converted, ensure that `kotl-previous-mode' is set to
-  ;; koutline now.
+  ;; koutline.
   (setq kotl-previous-mode 'kotl-mode)
   (add-hook 'change-major-mode-hook #'kotl-mode:show-all nil t)
   ;; Always run the mode-hook last.
@@ -392,10 +394,7 @@ Direction is determined from the value of 
`delete-key-deletes-forward' or
 whether the Backspace key exists on the keyboard.  If there is no Backspace
 key, the delete key should always delete backward one character."
   (interactive "*p")
-  (if (not (featurep 'xemacs))
-      (kotl-mode:delete-char (if normal-erase-is-backspace arg (- arg)) nil)
-    ;; XEmacs
-    (kotl-mode:delete-char (if (delete-forward-p) arg (- arg)) nil)))
+  (kotl-mode:delete-char (if normal-erase-is-backspace arg (- arg)) nil))
 
 (defun kotl-mode:center-line ()
   "Center the line point is on, within the width specified by `fill-column'.
@@ -848,15 +847,17 @@ too long."
 With arg N, insert N newlines."
   (interactive "*p")
   (let* ((bolp (and (kotl-mode:bolp) (not (kotl-mode:bocp))))
-        (indent (kcell-view:indent)))
+        (indent (kcell-view:indent))
+        (add-prefix (and (stringp fill-prefix)
+                         (not (string-empty-p fill-prefix)))))
     (while (> arg 0)
       (save-excursion
         (insert ?\n)
-       (if (and (not bolp) fill-prefix)
+       (if (and (not bolp) add-prefix)
            (insert fill-prefix)
          (insert-char ?\  indent)))
       (setq arg (1- arg)))
-    (if (and bolp fill-prefix)
+    (if (and bolp add-prefix)
        (progn (delete-horizontal-space)
               (insert fill-prefix)))))
 
@@ -1441,20 +1442,6 @@ doc string for `insert-for-yank-1', which see."
 (defalias 'kotl-mode:scroll-down-command 'kotl-mode:scroll-down)
 (defalias 'kotl-mode:scroll-up-command  'kotl-mode:scroll-up)
 
-;;; Cursor and keypad key functions aliases for XEmacs.
-(if (featurep 'xemacs)
-    (progn
-      (defalias 'kotl-mode:backward-char-command 'kotl-mode:backward-char)
-      (defalias 'kotl-mode:forward-char-command  'kotl-mode:forward-char)
-      (defalias 'kotl-mode:fkey-backward-char 'kotl-mode:backward-char)
-      (defalias 'kotl-mode:fkey-forward-char  'kotl-mode:forward-char)
-      (defalias 'kotl-mode:fkey-next-line     'kotl-mode:next-line)
-      (defalias 'kotl-mode:fkey-previous-line 'kotl-mode:previous-line)
-      (defalias 'kotl-mode:deprecated-scroll-down 'kotl-mode:scroll-down)
-      (defalias 'kotl-mode:deprecated-scroll-up 'kotl-mode:scroll-up)
-      (defalias 'kotl-mode:deprecated-bob     'kotl-mode:beginning-of-buffer)
-      (defalias 'kotl-mode:deprecated-eob     'kotl-mode:end-of-buffer)))
-
 (defun kotl-mode:back-to-indentation ()
   "Move point to the first non-read-only non-whitespace character on this 
line."
   (interactive)
@@ -2145,7 +2132,7 @@ If key is pressed:
      otherwise hide it;
  (3) between cells or within the read-only indentation region to the left of
      a cell, then move point to prior location and begin creation of a
-     klink to some other outline cell; hit the Action Key twice to select the
+     klink to some other outline cell; press the Action Key twice to select the
      link referent cell;
  (4) anywhere else, invoke `action-key-eol-function', typically to scroll up
      a windowful."
@@ -2180,7 +2167,7 @@ If assist-key is pressed:
      each cell in tree beginning at point;
  (3) between cells or within the read-only indentation region to the left of
      a cell, then move point to prior location and prompt to move one tree to
-     a new location in the outline; hit the Action Key twice to select the
+     a new location in the outline; press the Action Key twice to select the
      tree to move and where to move it;
  (4) anywhere else, invoke `assist-key-eol-function', typically to scroll down
      a windowful."
@@ -2737,7 +2724,8 @@ With optional prefix ARG, toggle display of blank lines 
between cells."
             (kview:set-attr kview 'lines-to-show 0)
             (outline-flag-region (point-min) (point-max) nil)
             (if arg (kvspec:toggle-blank-lines))
-            (kvspec:update t))))
+            (if (called-interactively-p 'interactive)
+                (kvspec:update t)))))
 
 ;;;###autoload
 (defun kotl-mode:top-cells (&optional arg)
diff --git a/kotl/kproperty.el b/kotl/kproperty.el
index 134e737..3734548 100644
--- a/kotl/kproperty.el
+++ b/kotl/kproperty.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    7/27/93
 ;;
-;; Copyright (C) 1993-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1993-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
diff --git a/kotl/kview.el b/kotl/kview.el
index 14954a4..ff0ddf9 100644
--- a/kotl/kview.el
+++ b/kotl/kview.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    6/30/93
 ;;
-;; Copyright (C) 1993-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1993-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -689,43 +689,25 @@ the lines displayed, since it has hidden branches."
   (save-excursion (and (kcell-view:next nil label-sep-len)
                       (kcell-view:invisible-p (point) label-sep-len))))
 
-(cond ((not (featurep 'xemacs))
-       (defun kview:goto-cell-id (id-string)
-        "Move point to start of cell with idstamp ID-STRING and return t, else 
nil."
-        (let ((cell-id (string-to-number id-string))
-              (opoint (point))
-              pos kcell)
-          (goto-char (point-min))
-          (while (and (setq pos (kproperty:next-single-change (point) 'kcell))
-                      (goto-char pos)
-                      (or (null (setq kcell (kproperty:get pos 'kcell)))
-                          (/= (kcell:idstamp kcell) cell-id))
-                      ;; Skip to the end of this kcell property
-                      (setq pos (kproperty:next-single-change (point) 'kcell))
-                      (goto-char pos)))
-          (if pos
-              (progn
-                (forward-char (kview:label-separator-length kview))
-                t)
-            (goto-char opoint)
-            nil))))
-      ;;
-      ;; XEmacs
-      (t (defun kview:goto-cell-id (id-string)
-          "Move point to start of cell with idstamp ID-STRING and return t, 
else nil."
-          (let ((cell-id (string-to-number id-string))
-                label-end kcell)
-            (setq label-end
-                  (map-extents
-                   (lambda (extent _)
-                     (setq kcell (extent-property extent 'kcell))
-                     (and kcell (= (kcell:idstamp kcell) cell-id)
-                          (extent-end-position extent)))
-                   nil nil nil nil nil 'kcell))
-            (if (null label-end)
-                nil
-              (goto-char label-end)
-              t)))))
+(defun kview:goto-cell-id (id-string)
+  "Move point to start of cell with idstamp ID-STRING and return t, else nil."
+  (let ((cell-id (string-to-number id-string))
+       (opoint (point))
+       pos kcell)
+    (goto-char (point-min))
+    (while (and (setq pos (kproperty:next-single-change (point) 'kcell))
+               (goto-char pos)
+               (or (null (setq kcell (kproperty:get pos 'kcell)))
+                   (/= (kcell:idstamp kcell) cell-id))
+               ;; Skip to the end of this kcell property
+               (setq pos (kproperty:next-single-change (point) 'kcell))
+               (goto-char pos)))
+    (if pos
+       (progn
+         (forward-char (kview:label-separator-length kview))
+         t)
+      (goto-char opoint)
+      nil)))
 
 (defun kview:id-counter (kview)
   "Return the highest current idstamp (an integer) used by KVIEW."
diff --git a/kotl/kvspec.el b/kotl/kvspec.el
index a9e5354..d6c111d 100644
--- a/kotl/kvspec.el
+++ b/kotl/kvspec.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    21-Oct-95 at 15:17:07
 ;;
-;; Copyright (C) 1995-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1995-2019  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -116,16 +116,15 @@ display all levels of cells."
   (kview:set-attr kview 'levels-to-show levels-to-keep))
 
 (defun kvspec:show-lines-per-cell (num)
-  "Show NUM lines per cell."
+  "Show NUM lines per visible cell; 0 means show all lines in each visible 
cell."
   (if (or (not (integerp num)) (< num 0))
       (error "(kvspec:show-lines-per-cell): Invalid lines per cell, `%d'" num))
   (kview:set-attr kview 'lines-to-show num)
-  (if (not (zerop num))
-      ;; Now show NUM lines in cells.
-      (kview:map-tree (lambda (_kview)
-                       (kcell-view:expand (point))
-                       (kvspec:show-lines-this-cell num))
-                      kview t t)))
+  ;; Now show NUM lines in cells.
+  (kview:map-tree (lambda (_kview)
+                   (kcell-view:expand (point))
+                   (kvspec:show-lines-this-cell num))
+                  kview t t))
 
 (defun kvspec:toggle-blank-lines ()
   "Toggle blank lines between cells on or off."
@@ -251,32 +250,25 @@ characters at run-time.")
   ;; "l" means use value of kview:default-levels-to-show.
   ;; "l0" means show all levels.
   (let (levels)
-    (if (not (string-match "l\\([0-9]+\\)?" kvspec:current))
-       ;; Don't change the view if no view spec is given but note that
-       ;; all levels should be shown in the future.
-       (kview:set-attr kview 'levels-to-show 0)
-      (if (match-beginning 1)
-         (setq levels (string-to-number (match-string 1 kvspec:current)))
-       (setq levels kview:default-levels-to-show))
-      (kvspec:levels-to-show levels))))
+    (if (and (string-match "l\\([0-9]+\\)?" kvspec:current)
+            (match-beginning 1))
+       (setq levels (string-to-number (match-string 1 kvspec:current)))
+      (setq levels kview:default-levels-to-show))
+    (kvspec:levels-to-show levels)))
 
 (defun kvspec:lines-to-show ()
   "Show a set number of lines per cell according to `kvspec:current'."
-  ;; "c" means use value of kview:default-lines-to-show.
+  ;; "c" or no "c" means use value of kview:default-lines-to-show.
   ;; "c0" means show all lines.
-  (cond ((not (string-match "c\\([0-9]+\\)?" kvspec:current))
-        ;; Don't change the view if no view spec is given but note that all
-        ;; lines should be shown in the future.
-        (kview:set-attr kview 'lines-to-show 0))
-       ((match-beginning 1)
-        (kvspec:show-lines-per-cell 
-         (string-to-number (match-string 1 kvspec:current))))
-       (t (kvspec:show-lines-per-cell kview:default-lines-to-show))))
+  (if (and (string-match "c\\([0-9]+\\)?" kvspec:current)
+          (match-beginning 1))
+      (kvspec:show-lines-per-cell
+       (string-to-number (match-string 1 kvspec:current)))
+    (kvspec:show-lines-per-cell kview:default-lines-to-show)))
 
 (defun kvspec:numbering ()
   "Set the type of numbering (label) display according to `kvspec:current'."
-  (if (not (string-match "n\\([.*~0-2]\\)?" kvspec:current))
-      nil
+  (when (string-match "n\\([.*~0-2]\\)?" kvspec:current)
     ;; "n"  means use value of kview:default-label-type.
     ;; "n0" means display idstamps.
     ;; "n1" means display alpha labels.
@@ -286,23 +278,22 @@ characters at run-time.")
     ;; "n~" means no labels.
     (let (spec type)
       (if (match-beginning 1)
-         (setq spec (string-to-char
-                     (substring kvspec:current
-                                (match-beginning 1) (match-end 1)))
+         (setq spec (string-to-char (match-string 1 kvspec:current))
                type (cdr (assq spec kvspec:label-type-alist)))
        (setq type kview:default-label-type))
       (kview:set-label-type kview type))))
 
 (defun kvspec:show-lines-this-cell (num)
   "Assume the current cell is fully expanded and collapse to show NUM lines 
within it.
-If NUM is greater than the number of lines available, the cell remains fully 
expanded."
+If NUM is less than 1 or greater than the number of lines available, the cell 
remains fully expanded."
   ;; Use free variable label-sep-len bound in kview:map-* for speed.
-  (defvar label-sep-len)
-  (goto-char (kcell-view:start (point) label-sep-len))
-  (let ((end (kcell-view:end-contents)))
-    ;; Hide all but num lines of the cell.
-    (and (> num 0) (search-forward "\n" end t num)
-        (outline-flag-region (1- (point)) end t))))
+  (unless (< num 1)
+    (defvar label-sep-len)
+    (goto-char (kcell-view:start (point) label-sep-len))
+    (let ((end (kcell-view:end-contents)))
+      ;; Hide all but num lines of the cell.
+      (and (search-forward "\n" end t num)
+          (outline-flag-region (1- (point)) end t)))))
 
 (defun kvspec:update-modeline ()
   "Setup or update display of the current kview spec in the modeline."
@@ -315,19 +306,7 @@ If NUM is greater than the number of lines available, the 
cell remains fully exp
                   (memq 'modeline-buffer-identification
                         mode-line-format))))
       (if elt
-         (setcdr elt (cons 'kvspec:string (cdr elt)))
-       ;;
-       ;; XEmacs 19.14 introduced extents into the modeline that we
-       ;; must work around.  Assume any XEmacs is at least that new.
-       (if (featurep 'xemacs)
-           (let ((mf modeline-format)
-                 elt)
-             (while mf
-               (setq elt (car mf))
-               (if (and (consp elt) (eq (cdr elt) 
'modeline-buffer-identification))
-                   (progn (setcdr mf (cons 'kvspec:string (cdr mf)))
-                          (setq mf nil)))
-               (setq mf (cdr mf)))))))))
+         (setcdr elt (cons 'kvspec:string (cdr elt)))))))
 
 (defun kvspec:update-view ()
   "Update view according to current setting of local `kvspec:current' 
variable."
diff --git a/man/hkey-help.txt b/man/hkey-help.txt
index 25dca92..c567c6d 100644
--- a/man/hkey-help.txt
+++ b/man/hkey-help.txt
@@ -9,7 +9,7 @@ Hyperbole
     1st press at an arg value   Value copied to minibuffer <- same
     2nd press at an arg value   Value used as argument     <- same
     In minibuffer               Accepts minibuffer arg     Completion help
-  On an implicit button         Activates button           Button help
+  On an implicit button/path    Activates button           Button help
   Within a koutline cell        Collapses and expands      Shows tree props
   Left of a koutline cell       Creates a klink            Moves a tree
   HyRolo Match Buffer           Edits entries and mails to e-mail addresses
@@ -73,6 +73,8 @@ Mouse-only Control
 
 Hyperbole Key Press/Click in Special Modes
   Region Active                 Yanks region at release    Kills and yanks at 
release
+  Company Mode Completion       Displays definition        Displays 
documentation
+  Treemacs                      Displays item              Display item
   Emacs Push Button             Activates button           Button help
   Thing Begin or End            Mark thing region          Mark & kill thing 
region
   Page Directory Listing        Jumps to page              <- same
@@ -81,7 +83,8 @@ Hyperbole Key Press/Click in Special Modes
   Assembly Language Mode        Jumps to id/include def    Jumps to next def
   Java Cross-reference Tag      Jumps to identifier def    Jumps to next def
   JavaScript and Python Modes   Jumps to identifier def    Jumps to next def
-  Any Lisp or Fortran Mode      Jumps to identifier def    Jumps to next def
+  Any Known Lisp or ChangeLog   Jumps to identifier def    Referent Doc
+  Fortran Mode                  Jumps to identifier def    Jumps to next def
   Emacs Lisp Compiler Error     Jumps to def with error    <- same
   Other Compiler Error          Jumps to src error line    <- same
   Grep or Occur Match           Jumps to match source line <- same
diff --git a/man/hyperbole.html b/man/hyperbole.html
index bd2b5c6..21c93f1 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -1,9 +1,9 @@
 <!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.2a, Published December 12, 2017).
+(Edition 7.0.3b, Published August 11, 2019).
 
-Copyright (C) 1989-2017  Free Software Foundation, Inc.
+Copyright (C) 1989-2019  Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -154,7 +154,10 @@ ul.no-bullet {list-style: none}
 <ul class="no-bullet">
   <li><a name="toc-Explicit-Buttons-1" href="#Explicit-Buttons">3.1 Explicit 
Buttons</a></li>
   <li><a name="toc-Global-Buttons-1" href="#Global-Buttons">3.2 Global 
Buttons</a></li>
-  <li><a name="toc-Implicit-Buttons-1" href="#Implicit-Buttons">3.3 Implicit 
Buttons</a></li>
+  <li><a name="toc-Implicit-Buttons-1" href="#Implicit-Buttons">3.3 Implicit 
Buttons</a>
+  <ul class="no-bullet">
+    <li><a name="toc-Implicit-Button-Type-Summaries-1" 
href="#Implicit-Button-Type-Summaries">3.3.1 Implicit Button Type 
Summaries</a></li>
+  </ul></li>
   <li><a name="toc-Button-Files-1" href="#Button-Files">3.4 Button 
Files</a></li>
   <li><a name="toc-Action-Types-1" href="#Action-Types">3.5 Action 
Types</a></li>
   <li><a name="toc-Button-Type-Precedence-1" 
href="#Button-Type-Precedence">3.6 Button Type Precedence</a></li>
@@ -260,47 +263,48 @@ ul.no-bullet {list-style: none}
   </ul></li>
   <li><a name="toc-Smart-Keyboard-Keys-1" href="#Smart-Keyboard-Keys">E.2 
Smart Keyboard Keys</a>
   <ul class="no-bullet">
-    <li><a name="toc-Smart-Key-_002d-Treemacs-1" 
href="#Smart-Key-_002d-Treemacs">E.2.1 Smart Key - Treemacs</a></li>
-    <li><a name="toc-Smart-Key-_002d-Emacs-Pushbuttons-1" 
href="#Smart-Key-_002d-Emacs-Pushbuttons">E.2.2 Smart Key - Emacs 
Pushbuttons</a></li>
-    <li><a name="toc-Smart-Key-_002d-Argument-Completion-1" 
href="#Smart-Key-_002d-Argument-Completion">E.2.3 Smart Key - Argument 
Completion</a></li>
-    <li><a name="toc-Smart-Key-_002d-ID-Edit-Mode-1" 
href="#Smart-Key-_002d-ID-Edit-Mode">E.2.4 Smart Key - ID Edit Mode</a></li>
-    <li><a 
name="toc-Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029-1" 
href="#Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029">E.2.5 Smart 
Key - Emacs Cross-references (Xrefs)</a></li>
-    <li><a name="toc-Smart-Key-_002d-Smart-Scrolling-1" 
href="#Smart-Key-_002d-Smart-Scrolling">E.2.6 Smart Key - Smart 
Scrolling</a></li>
-    <li><a name="toc-Smart-Key-_002d-Smart-Menus-1" 
href="#Smart-Key-_002d-Smart-Menus">E.2.7 Smart Key - Smart Menus</a></li>
-    <li><a name="toc-Smart-Key-_002d-Dired-Mode-1" 
href="#Smart-Key-_002d-Dired-Mode">E.2.8 Smart Key - Dired Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Hyperbole-Buttons-1" 
href="#Smart-Key-_002d-Hyperbole-Buttons">E.2.9 Smart Key - Hyperbole 
Buttons</a></li>
-    <li><a name="toc-Smart-Key-_002d-View-Mode-1" 
href="#Smart-Key-_002d-View-Mode">E.2.10 Smart Key - View Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Delimited-Things-1" 
href="#Smart-Key-_002d-Delimited-Things">E.2.11 Smart Key - Delimited 
Things</a></li>
-    <li><a name="toc-Smart-Key-_002d-The-Koutliner-1" 
href="#Smart-Key-_002d-The-Koutliner">E.2.12 Smart Key - The Koutliner</a></li>
-    <li><a name="toc-Smart-Key-_002d-RDB-Mode-1" 
href="#Smart-Key-_002d-RDB-Mode">E.2.13 Smart Key - RDB Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Help-Buffers-1" 
href="#Smart-Key-_002d-Help-Buffers">E.2.14 Smart Key - Help Buffers</a></li>
-    <li><a name="toc-Smart-Key-_002d-Pages-Directory-Mode-1" 
href="#Smart-Key-_002d-Pages-Directory-Mode">E.2.15 Smart Key - Pages Directory 
Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Python-Source-Code-1" 
href="#Smart-Key-_002d-Python-Source-Code">E.2.16 Smart Key - Python Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Identifier-Menu-Mode-1" 
href="#Smart-Key-_002d-Identifier-Menu-Mode">E.2.17 Smart Key - Identifier Menu 
Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-C-Source-Code-1" 
href="#Smart-Key-_002d-C-Source-Code">E.2.18 Smart Key - C Source Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-C_002b_002b-Source-Code-1" 
href="#Smart-Key-_002d-C_002b_002b-Source-Code">E.2.19 Smart Key - C++ Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Assembly-Source-Code-1" 
href="#Smart-Key-_002d-Assembly-Source-Code">E.2.20 Smart Key - Assembly Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Lisp-Source-Code-1" 
href="#Smart-Key-_002d-Lisp-Source-Code">E.2.21 Smart Key - Lisp Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Java-Source-Code-1" 
href="#Smart-Key-_002d-Java-Source-Code">E.2.22 Smart Key - Java Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-JavaScript-Source-Code-1" 
href="#Smart-Key-_002d-JavaScript-Source-Code">E.2.23 Smart Key - JavaScript 
Source Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Objective_002dC-Source-Code-1" 
href="#Smart-Key-_002d-Objective_002dC-Source-Code">E.2.24 Smart Key - 
Objective-C Source Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Fortran-Source-Code-1" 
href="#Smart-Key-_002d-Fortran-Source-Code">E.2.25 Smart Key - Fortran Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Occurrence-Matches-1" 
href="#Smart-Key-_002d-Occurrence-Matches">E.2.26 Smart Key - Occurrence 
Matches</a></li>
-    <li><a name="toc-Smart-Key-_002d-Calendar-Mode-1" 
href="#Smart-Key-_002d-Calendar-Mode">E.2.27 Smart Key - Calendar Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Man-Page-Apropos-1" 
href="#Smart-Key-_002d-Man-Page-Apropos">E.2.28 Smart Key - Man Page 
Apropos</a></li>
-    <li><a name="toc-Smart-Key-_002d-Emacs-Outline-Mode-1" 
href="#Smart-Key-_002d-Emacs-Outline-Mode">E.2.29 Smart Key - Emacs Outline 
Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Info-Manuals-1" 
href="#Smart-Key-_002d-Info-Manuals">E.2.30 Smart Key - Info Manuals</a></li>
-    <li><a name="toc-Smart-Key-_002d-Email-Composers-1" 
href="#Smart-Key-_002d-Email-Composers">E.2.31 Smart Key - Email 
Composers</a></li>
-    <li><a name="toc-Smart-Key-_002d-GNUS-Newsreader-1" 
href="#Smart-Key-_002d-GNUS-Newsreader">E.2.32 Smart Key - GNUS 
Newsreader</a></li>
-    <li><a name="toc-Smart-Key-_002d-Buffer-Menus-1" 
href="#Smart-Key-_002d-Buffer-Menus">E.2.33 Smart Key - Buffer Menus</a></li>
-    <li><a name="toc-Smart-Key-_002d-Tar-File-Mode-1" 
href="#Smart-Key-_002d-Tar-File-Mode">E.2.34 Smart Key - Tar File Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Man-Pages-1" 
href="#Smart-Key-_002d-Man-Pages">E.2.35 Smart Key - Man Pages</a></li>
-    <li><a name="toc-Smart-Key-_002d-WWW-URLs-1" 
href="#Smart-Key-_002d-WWW-URLs">E.2.36 Smart Key - WWW URLs</a></li>
-    <li><a name="toc-Smart-Key-_002d-HyRolo-Match-Buffers-1" 
href="#Smart-Key-_002d-HyRolo-Match-Buffers">E.2.37 Smart Key - HyRolo Match 
Buffers</a></li>
-    <li><a name="toc-Smart-Key-_002d-Image-Thumbnails-1" 
href="#Smart-Key-_002d-Image-Thumbnails">E.2.38 Smart Key - Image 
Thumbnails</a></li>
-    <li><a name="toc-Smart-Key-_002d-Gomoku-Game-1" 
href="#Smart-Key-_002d-Gomoku-Game">E.2.39 Smart Key - Gomoku Game</a></li>
-    <li><a name="toc-Smart-Key-_002d-The-OO_002dBrowser-1" 
href="#Smart-Key-_002d-The-OO_002dBrowser">E.2.40 Smart Key - The 
OO-Browser</a></li>
-    <li><a name="toc-Smart-Key-_002d-Default-Context-1" 
href="#Smart-Key-_002d-Default-Context">E.2.41 Smart Key - Default 
Context</a></li>
+    <li><a name="toc-Smart-Key-_002d-Company-Mode-1" 
href="#Smart-Key-_002d-Company-Mode">E.2.1 Smart Key - Company Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Treemacs-1" 
href="#Smart-Key-_002d-Treemacs">E.2.2 Smart Key - Treemacs</a></li>
+    <li><a name="toc-Smart-Key-_002d-Emacs-Pushbuttons-1" 
href="#Smart-Key-_002d-Emacs-Pushbuttons">E.2.3 Smart Key - Emacs 
Pushbuttons</a></li>
+    <li><a name="toc-Smart-Key-_002d-Argument-Completion-1" 
href="#Smart-Key-_002d-Argument-Completion">E.2.4 Smart Key - Argument 
Completion</a></li>
+    <li><a name="toc-Smart-Key-_002d-ID-Edit-Mode-1" 
href="#Smart-Key-_002d-ID-Edit-Mode">E.2.5 Smart Key - ID Edit Mode</a></li>
+    <li><a 
name="toc-Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029-1" 
href="#Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029">E.2.6 Smart 
Key - Emacs Cross-references (Xrefs)</a></li>
+    <li><a name="toc-Smart-Key-_002d-Smart-Scrolling-1" 
href="#Smart-Key-_002d-Smart-Scrolling">E.2.7 Smart Key - Smart 
Scrolling</a></li>
+    <li><a name="toc-Smart-Key-_002d-Smart-Menus-1" 
href="#Smart-Key-_002d-Smart-Menus">E.2.8 Smart Key - Smart Menus</a></li>
+    <li><a name="toc-Smart-Key-_002d-Dired-Mode-1" 
href="#Smart-Key-_002d-Dired-Mode">E.2.9 Smart Key - Dired Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Hyperbole-Buttons-1" 
href="#Smart-Key-_002d-Hyperbole-Buttons">E.2.10 Smart Key - Hyperbole 
Buttons</a></li>
+    <li><a name="toc-Smart-Key-_002d-View-Mode-1" 
href="#Smart-Key-_002d-View-Mode">E.2.11 Smart Key - View Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Delimited-Things-1" 
href="#Smart-Key-_002d-Delimited-Things">E.2.12 Smart Key - Delimited 
Things</a></li>
+    <li><a name="toc-Smart-Key-_002d-The-Koutliner-1" 
href="#Smart-Key-_002d-The-Koutliner">E.2.13 Smart Key - The Koutliner</a></li>
+    <li><a name="toc-Smart-Key-_002d-RDB-Mode-1" 
href="#Smart-Key-_002d-RDB-Mode">E.2.14 Smart Key - RDB Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Help-Buffers-1" 
href="#Smart-Key-_002d-Help-Buffers">E.2.15 Smart Key - Help Buffers</a></li>
+    <li><a name="toc-Smart-Key-_002d-Pages-Directory-Mode-1" 
href="#Smart-Key-_002d-Pages-Directory-Mode">E.2.16 Smart Key - Pages Directory 
Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Python-Source-Code-1" 
href="#Smart-Key-_002d-Python-Source-Code">E.2.17 Smart Key - Python Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Identifier-Menu-Mode-1" 
href="#Smart-Key-_002d-Identifier-Menu-Mode">E.2.18 Smart Key - Identifier Menu 
Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-C-Source-Code-1" 
href="#Smart-Key-_002d-C-Source-Code">E.2.19 Smart Key - C Source Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-C_002b_002b-Source-Code-1" 
href="#Smart-Key-_002d-C_002b_002b-Source-Code">E.2.20 Smart Key - C++ Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Assembly-Source-Code-1" 
href="#Smart-Key-_002d-Assembly-Source-Code">E.2.21 Smart Key - Assembly Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Lisp-Source-Code-1" 
href="#Smart-Key-_002d-Lisp-Source-Code">E.2.22 Smart Key - Lisp Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Java-Source-Code-1" 
href="#Smart-Key-_002d-Java-Source-Code">E.2.23 Smart Key - Java Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-JavaScript-Source-Code-1" 
href="#Smart-Key-_002d-JavaScript-Source-Code">E.2.24 Smart Key - JavaScript 
Source Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Objective_002dC-Source-Code-1" 
href="#Smart-Key-_002d-Objective_002dC-Source-Code">E.2.25 Smart Key - 
Objective-C Source Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Fortran-Source-Code-1" 
href="#Smart-Key-_002d-Fortran-Source-Code">E.2.26 Smart Key - Fortran Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Occurrence-Matches-1" 
href="#Smart-Key-_002d-Occurrence-Matches">E.2.27 Smart Key - Occurrence 
Matches</a></li>
+    <li><a name="toc-Smart-Key-_002d-Calendar-Mode-1" 
href="#Smart-Key-_002d-Calendar-Mode">E.2.28 Smart Key - Calendar Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Man-Page-Apropos-1" 
href="#Smart-Key-_002d-Man-Page-Apropos">E.2.29 Smart Key - Man Page 
Apropos</a></li>
+    <li><a name="toc-Smart-Key-_002d-Emacs-Outline-Mode-1" 
href="#Smart-Key-_002d-Emacs-Outline-Mode">E.2.30 Smart Key - Emacs Outline 
Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Info-Manuals-1" 
href="#Smart-Key-_002d-Info-Manuals">E.2.31 Smart Key - Info Manuals</a></li>
+    <li><a name="toc-Smart-Key-_002d-Email-Composers-1" 
href="#Smart-Key-_002d-Email-Composers">E.2.32 Smart Key - Email 
Composers</a></li>
+    <li><a name="toc-Smart-Key-_002d-GNUS-Newsreader-1" 
href="#Smart-Key-_002d-GNUS-Newsreader">E.2.33 Smart Key - GNUS 
Newsreader</a></li>
+    <li><a name="toc-Smart-Key-_002d-Buffer-Menus-1" 
href="#Smart-Key-_002d-Buffer-Menus">E.2.34 Smart Key - Buffer Menus</a></li>
+    <li><a name="toc-Smart-Key-_002d-Tar-File-Mode-1" 
href="#Smart-Key-_002d-Tar-File-Mode">E.2.35 Smart Key - Tar File Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-Man-Pages-1" 
href="#Smart-Key-_002d-Man-Pages">E.2.36 Smart Key - Man Pages</a></li>
+    <li><a name="toc-Smart-Key-_002d-WWW-URLs-1" 
href="#Smart-Key-_002d-WWW-URLs">E.2.37 Smart Key - WWW URLs</a></li>
+    <li><a name="toc-Smart-Key-_002d-HyRolo-Match-Buffers-1" 
href="#Smart-Key-_002d-HyRolo-Match-Buffers">E.2.38 Smart Key - HyRolo Match 
Buffers</a></li>
+    <li><a name="toc-Smart-Key-_002d-Image-Thumbnails-1" 
href="#Smart-Key-_002d-Image-Thumbnails">E.2.39 Smart Key - Image 
Thumbnails</a></li>
+    <li><a name="toc-Smart-Key-_002d-Gomoku-Game-1" 
href="#Smart-Key-_002d-Gomoku-Game">E.2.40 Smart Key - Gomoku Game</a></li>
+    <li><a name="toc-Smart-Key-_002d-The-OO_002dBrowser-1" 
href="#Smart-Key-_002d-The-OO_002dBrowser">E.2.41 Smart Key - The 
OO-Browser</a></li>
+    <li><a name="toc-Smart-Key-_002d-Default-Context-1" 
href="#Smart-Key-_002d-Default-Context">E.2.42 Smart Key - Default 
Context</a></li>
   </ul></li>
 </ul></li>
 <li><a name="toc-Suggestion-or-Bug-Reporting-1" 
href="#Suggestion-or-Bug-Reporting">Appendix F Suggestion or Bug 
Reporting</a></li>
@@ -328,7 +332,10 @@ Next: <a href="#Introduction" accesskey="n" 
rel="next">Introduction</a>, Previou
 
 <CENTER><H2>The Everyday Hypertextual Information Manager</H2></CENTER>
 
-<P>Copyright &copy; 1989-2017  Free Software Foundation, Inc.</P>
+<CENTER><H3><A HREF="https://saythanks.io/to/rswgnu";>Say thanks if you like 
Hyperbole.</A></H3></CENTER>
+
+
+<P>Copyright &copy; 1989-2019  Free Software Foundation, Inc.</P>
 
 <P>GNU Hyperbole is available for use, modification, and distribution under
 the terms of the GNU General Public License (GPL) Version 3 or later,
@@ -340,8 +347,8 @@ WITHOUT ANY WARRANTY, without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
-Edition 7.0.2a
-Printed December 12, 2017.
+Edition 7.0.3b
+Printed August 11, 2019.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -512,6 +519,12 @@ Buttons
 </td></tr>
 <tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
 
+Implicit Buttons
+
+</pre></th></tr><tr><td align="left" valign="top">&bull; <a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><th colspan="3" align="left" valign="top"><pre class="menu-comment">
+
 Utilizing Explicit Buttons
 
 </pre></th></tr><tr><td align="left" valign="top">&bull; <a 
href="#Creation">Creation</a>:</td><td>&nbsp;&nbsp;</td><td align="left" 
valign="top">
@@ -692,7 +705,9 @@ Smart Mouse Keys
 
 Smart Keyboard Keys
 
-</pre></th></tr><tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Treemacs">Smart Key - 
Treemacs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</pre></th></tr><tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Company-Mode">Smart Key - Company 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Treemacs">Smart Key - 
Treemacs</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Emacs-Pushbuttons">Smart Key - Emacs 
Pushbuttons</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
@@ -722,6 +737,8 @@ Smart Keyboard Keys
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Pages-Directory-Mode">Smart Key - Pages Directory 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Python-Source-Code">Smart Key - Python Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Identifier-Menu-Mode">Smart Key - Identifier Menu Mode 
</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-C-Source-Code">Smart Key - C Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
@@ -736,8 +753,6 @@ Smart Keyboard Keys
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-JavaScript-Source-Code">Smart Key - JavaScript Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Python-Source-Code">Smart Key - Python Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
-</td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Objective_002dC-Source-Code">Smart Key - Objective-C 
Source Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Fortran-Source-Code">Smart Key - Fortran Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
@@ -788,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.2a or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.3b 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,
@@ -826,16 +841,17 @@ Next: <a href="#Motivation" accesskey="n" 
rel="next">Motivation</a>, Previous: <
 you prefer a simpler, more interactive introduction to Hyperbole,
 the <samp>DEMO</samp> file included in the Hyperbole distribution demonstrates
 many of Hyperbole&rsquo;s standard facilities without the need to read through
-this reference manual.  It is a good way to rapidly understand some of what
-Hyperbole can do for you.  Once Hyperbole is installed, (see <a 
href="#Setup">Setup</a>),
-you can access the DEMO with the key sequence <kbd>{C-h h d d}</kbd>.
+this reference manual.  The DEMO is a good way to rapidly understand some
+of what Hyperbole can do for you.  Once Hyperbole is installed,
+(see <a href="#Setup">Setup</a>), you can access the DEMO with the key 
sequence <kbd>{C-h h
+d d}</kbd>.
 </p>
 <p>See <a href="#Glossary">Glossary</a>, for definitions of Hyperbole terms.  
In some cases,
-terms are not precisely defined within the body of this manual since
-they are defined within the glossary.  Be sure to reference the
-glossary if a term is unclear to you.  Although you need not have a keen
-understanding of all of these terms, a quick scan of the glossary should
-help throughout Hyperbole use.
+terms are not precisely defined within the body of this manual since they
+are defined within the glossary.  Be sure to reference the glossary if a
+term is unclear to you.  Although you need not have a keen understanding of
+all of these terms, a quick scan of the glossary helps throughout Hyperbole
+use.
 </p>
 <p>See <a href="#Setup">Setup</a>, for explanations of how to obtain, install, 
configure
 and load Hyperbole for use.  This appendix includes information on
@@ -911,19 +927,19 @@ its use as the prime means of organizing and interlinking 
the constant
 flows of daily information.
 </p>
 <p>GNU Hyperbole takes a distinctly different approach.  It has its own
-hypertext technology that can interface perfectly with web links but
-which are much easier to create (simply drag from the source to the
-destination of a link to create a new hyperlink).  Hyperbole
-hyperbuttons can link not only to static information but can perform
-arbitrary actions through the use of button types written in a single,
-highly interactive language, Emacs Lisp.  Hyperbole adds all of this
-power to your written documents, e-mail, news articles, contact
-management, outlines, directory listings, and much more.  Hyperbole
-works well with the very latest versions of GNU Emacs.
+hypertext technology that can interface perfectly with web links but which
+are much easier to create (simply drag from the source to the destination
+of a link to create a new hyperlink).  Hyperbole hyperbuttons can link not
+only to static information but can perform arbitrary actions (through the
+use of button types written in a single, highly interactive language, Emacs
+Lisp).  Hyperbole adds all of this power to your written documents, e-mail,
+news articles, contact management, outlines, directory listings, and much
+more.  Hyperbole works well with the very latest versions of GNU Emacs
+across every editing and viewing mode in Emacs.
 </p>
-<p>Unlock the power of GNU Hyperbole to make your information work for
-you.  One system. One language.  One manual.  One solution.  Learn GNU
-Hyperbole and start moving further, faster.
+<p>Unlock the power of GNU Hyperbole to make your information work for you.
+One system. One language.  One manual.  One solution.  Learn Hyperbole and
+start moving further, faster.
 </p>
 <hr>
 <a name="Hyperbole-Overview"></a>
@@ -940,7 +956,7 @@ Next: <a href="#Mail-Lists" accesskey="n" rel="next">Mail 
Lists</a>, Previous: <
 <a name="index-Emacs-Lisp"></a>
 <a name="index-Emacs"></a>
 <p>GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is
-an efficient and programmable hypertextual information management
+an efficient, programmable hypertextual information management
 system.  It is intended for everyday work on any GNU Emacs platform.
 Hyperbole allows hypertext buttons to be embedded within unstructured
 and structured files, mail messages and news articles.  It offers
@@ -954,9 +970,12 @@ archives, and the World-Wide Web (WWW).
 <dt><em>Buttons and Smart Keys</em></dt>
 <dd><p>Hyperbole hyperlink and other kinds of buttons (explicit buttons) may be
 added to documents with a simple drag between windows, no markup language
-needed.  Implicit buttons are patterns automatically recognized within text
-that perform actions, e.g. bug#24568 displays the bug status information
-for that bug number.  See <a href="#Buttons">Buttons</a>.
+needed.  Implicit buttons are patterns automatically recognized within
+existing text that perform actions, e.g. bug#24568 displays the bug status
+information for that Emacs bug number, without the need for any additional
+markup.  Global buttons are buttons that are activated by name from
+anywhere within Emacs.
+See <a href="#Buttons">Buttons</a>.
 </p>
 <p>Buttons are accessed by clicking on them or referenced by name (global
 buttons), so they can be activated regardless of what is on screen.
@@ -978,7 +997,8 @@ fast, flexible file and text finding commands.  A powerful, 
hierarchical
 contact manager, see <a href="#HyRolo">HyRolo</a>, which anyone can use, is 
also included.
 It is easy to learn since it introduces only a few new mechanisms
 and has a menu interface, which may be operated from the keyboard or the
-mouse;
+mouse; it may also be used to look up any record-based information and
+Hyperbole buttons may be embedded in any records;
 </p>
 </dd>
 <dt><em>Screen Control</em></dt>
@@ -987,14 +1007,15 @@ Emacs, see <a href="#HyControl">HyControl</a>.  With 
just a few keystrokes, you
 increasing a window&rsquo;s height by 5 lines to moving a frame by 220 pixels
 or immediately moving it to a screen corner.  Text in each window or
 frame may be enlarged or shrunk (zoomed) for easy viewing, plus many
-other features;
+other features; this allows Hyperbole to quickly control the way
+information is presented on-screen;
 </p>
 </dd>
 <dt><em>Hypertextual Outliner</em></dt>
 <dd><p>an advanced outliner, see <a href="#Koutliner">Koutliner</a>, with 
multi-level
 autonumbering and permanent identifiers attached to each outline node
 for use as hypertext link anchors, per node properties and flexible
-view specifications that can be embedded within links or used
+view specifications that can be included in links or used
 interactively;
 </p>
 </dd>
@@ -1048,7 +1069,7 @@ links to external information sources.  See <a 
href="#Koutliner">Koutliner</a>.
 <p>Some of Hyperbole&rsquo;s most significant features are:
 </p>
 <ul>
-<li> Buttons may link to information or may execute procedures, such as
+<li> Buttons may link to information or may execute functions, such as
 starting or communicating with external programs;
 
 </li><li> A simple mouse drag from a button source location to its link
@@ -1292,7 +1313,7 @@ Hyperbole
     1st press at an arg value   Value copied to minibuffer &lt;- same
     2nd press at an arg value   Value used as argument     &lt;- same
     In minibuffer               Accepts minibuffer arg     Completion help
-  On an implicit button         Activates button           Button help
+  On an implicit button/path    Activates button           Button help
   Within a koutline cell        Collapses and expands      Shows tree props
   Left of a koutline cell       Creates a klink            Moves a tree
   HyRolo Match Buffer           Edits entries and mails to e-mail addresses
@@ -1356,6 +1377,8 @@ Mouse-only Control
 
 Hyperbole Key Press/Click in Special Modes
   Region Active                 Yanks region at release    Kills and yanks at 
release
+  Company Mode Completion       Displays definition        Displays 
documentation
+  Treemacs                      Displays item              Display item
   Emacs Push Button             Activates button           Button help
   Thing Begin or End            Mark thing region          Mark &amp; kill 
thing region
   Page Directory Listing        Jumps to page              &lt;- same
@@ -1364,7 +1387,8 @@ Hyperbole Key Press/Click in Special Modes
   Assembly Language Mode        Jumps to id/include def    Jumps to next def
   Java Cross-reference Tag      Jumps to identifier def    Jumps to next def
   JavaScript and Python Modes   Jumps to identifier def    Jumps to next def
-  Any Lisp or Fortran Mode      Jumps to identifier def    Jumps to next def
+  Any Known Lisp or ChangeLog   Jumps to identifier def    Referent Doc
+  Fortran Mode                  Jumps to identifier def    Jumps to next def
   Emacs Lisp Compiler Error     Jumps to def with error    &lt;- same
   Other Compiler Error          Jumps to src error line    &lt;- same
   Grep or Occur Match           Jumps to match source line &lt;- same
@@ -1671,7 +1695,7 @@ on the last line to end the dired session (bury its 
buffer).
 <p>If you use the Treemacs file viewer Emacs package, you can configure 
Hyperbole
 to use this instead of Dired when you click on a modeline buffer id.
 </p>
-<p>Since this is a customization option, it may be change permanently like so.
+<p>Since this is a customization option, it may be changed permanently like so.
 Use <kbd>{M-x customize-set-variable <span class="key">RET</span> 
action-key-modeline-buffer-id-function <span class="key">RET</span>}</kbd>.
 Change the value to <code>smart-treemacs-modeline</code>.  Then press <tt 
class="key">RET</tt>.  To change it back
 to Hyperbole&rsquo;s default, use the value, <code>dired-jump</code>.
@@ -1963,14 +1987,15 @@ Next: <a href="#Keyboard-Drags" accesskey="n" 
rel="next">Keyboard Drags</a>, Pre
 <a name="index-drag_002c-dired-item"></a>
 <a name="index-drag_002c-buffer-menu-item"></a>
 <a name="index-drag_002c-Treemacs-item"></a>
-<p>You can do the same thing with items in dired, buffer menu and ibuffer menu
-listing buffers rather than buffers themselves.  Drag with the Action Mouse Key
-and the selected item will be displayed in any Emacs window in which you
-release.  Drag outside Emacs and it will be displayed in a new frame.  To
-display the last item you want, press the Action Key on it and it will display
-within the listing window itself.  (If you use the Treemacs file viewer 
package,
-item dragging works there as well).  Remember that you can emulate these drags
-from the keyboard when needed, see <a href="#Keyboard-Drags">Keyboard 
Drags</a>.
+<p>You can also drag items to other windows with the Action Key in Dired,
+Buffer Menu, Ibuffer and Treemacs listing buffers, rather than the
+buffers themselves.  Drag with the Action Mouse Key and the selected
+item will be displayed in any Emacs window in which you release.  Drag
+outside Emacs and it will be displayed in a new frame.  To display the
+last item you want within the listing window itself, press and release
+the Action Key on that item after dragging your other items to their
+respective windows.  Remember that you can emulate these drags from
+the keyboard when needed, see <a href="#Keyboard-Drags">Keyboard Drags</a>.
 </p>
 <p>So now you can put a bunch of buffers and files on your screen wherever
 you like.  Typically, a brief visual pulse is shown first at the source item 
and
@@ -2010,38 +2035,71 @@ session since drag actions are not supported without a 
window system.
 <a name="index-window-by-letter"></a>
 <a name="index-jump-to-window-by-letter"></a>
 <a name="index-keyboard_002c-jump-to-window"></a>
-<p>For even faster keyboard-based display of items, use the Emacs
-package <code>ace-window</code> (see <a 
href="https://elpa.gnu.org/packages/ace-window.html";>https://elpa.gnu.org/packages/ace-window.html</a>).
+<p>For even faster keyboard-based display of items and drag emulations,
+use the Emacs package <code>ace-window</code>
+(see <a 
href="https://elpa.gnu.org/packages/ace-window.html";>https://elpa.gnu.org/packages/ace-window.html</a>).
 </p>
 <p>The ace-window package assigns short letter IDs to each Emacs window and 
lets
 you jump to or operate upon a specific window by giving its ID.  Hyperbole can
 add commands to ace-window that replace the two-step drag emulation key
-described above with a single key sequence that displays dired or
-buffer menu <em>items</em>.
+described above with a single key sequence that does not require moving to
+the drag target window since it is specified by ID as part of the command.
 </p>
 <p>To enable this feature, in your Emacs initialization file after
 Hyperbole is initialized, if you do not have a key bound for
 <code>ace-window</code>, then call: <code>(hkey-ace-window-setup 
\&quot;\M-o\&quot;)</code>
-to bind it to <kbd>{M-o}</kbd>.  Otherwise, call the setup function without
-a key: <code>(hkey-ace-window-setup)</code>.
+to bind it to <kbd>{M-o}</kbd>, replacing Hyperbole&rsquo;s
+default <code>hkey-operate</code> command there (because ace-window can emulate
+the drags performed by <code>hkey-operate</code>).  If you already have a key 
bound
+for <code>ace-window</code>, then just ensure it is initialized by calling
+<code>(hkey-ace-window-setup)</code> without a key argument.
 </p>
 <a name="index-link-creation-from-keyboard"></a>
 <a name="index-keyboard-link-creation"></a>
 <a name="index-M_002do-i-_003cwindow_002did_003e"></a>
+<a name="index-M_002do-m-_003cwindow_002did_003e"></a>
+<a name="index-M_002do-r-_003cwindow_002did_003e"></a>
 <a name="index-M_002do-t-_003cwindow_002did_003e"></a>
 <a name="index-drag-item"></a>
+<a name="index-replace-window-buffer"></a>
+<a name="index-swap-window-buffers"></a>
 <a name="index-throw-item"></a>
+<a name="index-buffer-replace"></a>
+<a name="index-buffers-swap"></a>
 <a name="index-item-drag"></a>
 <a name="index-item-throw"></a>
 <p>After setup, the leftmost character or two of each window&rsquo;s modeline 
will show
 the ID to type to use that window as the drag destination.  Then whenever point
 is on an item you want displayed in another window, use <kbd>{M-o i
-&lt;id-of-window-to-display-item-in&gt;}</kbd> and watch the magic happen.  
You can also use
-this command to create explicit button links to other window buffers when in 
an editable
-buffer rather than on an item.  If you want to display multiple items in 
different
-windows, instead use the <kbd>{M-o t 
&lt;id-of-window-to-display-item-in&gt;}</kbd> key sequence to
-<em>throw</em> the item to the window.
+&lt;id-of-window-to-display-item-in&gt;}</kbd> and watch the magic happen.  If 
you
+want to display multiple items in different windows, instead use
+the <kbd>{M-o t &lt;id-of-window-to-display-item-in&gt;}</kbd> key sequence to
+<em>throw</em> the item to the window.  To <em>replace</em>
+the selected window&rsquo;s buffer with that of another window, use
+<kbd>{M-o r &lt;id-of-window-displaying-desired-buffer&gt;}</kbd>.  To instead
+<em>swap</em> the selected window&rsquo;s buffer with that of another window,
+use <kbd>{M-o m &lt;id-of-window-to-swap-with&gt;}</kbd>.
+</p>
+<p>In summary:
+</p><dl compact="compact">
+<dt>M-o i &lt;window&gt;</dt>
+<dd><p>insert listing item at point into &lt;window&gt;; if not on a listing 
item,
+trigger an error
+</p>
+</dd>
+<dt>M-o m &lt;window&gt;</dt>
+<dd><p>swap the buffers in the selected window and &lt;window&gt;
+</p>
+</dd>
+<dt>M-o r &lt;window&gt;</dt>
+<dd><p>replace the selected (current) window&rsquo;s buffer with that of 
&lt;window&gt;
 </p>
+</dd>
+<dt>M-o t &lt;window&gt;</dt>
+<dd><p>throw listing item at point or current buffer to &lt;window&gt;
+</p></dd>
+</dl>
+
 
 
 
@@ -2280,10 +2338,10 @@ type</em> identifies a pattern or state that when 
matched triggers
 an <em>action</em> associated with the implicit button type.  The action
 is specified by either a Hyperbole action type (see <a 
href="#Action-Types">Action Types</a>)
 or an Emacs Lisp function.  Implicit button types may use the same
-action types that explicit buttons use.  As an example, a pathname
-implicit button type would match to any existing local filename or
-directory name and its action would be to display the associated file
-or directory, typically in another window.
+action types that explicit buttons use.  As an example, the pathname
+implicit button type matches to any existing local filename or
+directory name and its action displays the associated file or
+directory, typically in another window.
 </p>
 <a name="index-file_002c-hibtypes_002eel"></a>
 <a name="index-context"></a>
@@ -2291,28 +2349,60 @@ or directory, typically in another window.
 <a name="index-activating-implicit-button"></a>
 <a name="index-menu-item_002c-Ibut_002fAct"></a>
 <a name="index-C_002dh-h-i-a"></a>
-<p>Unlike explicit buttons, implicit buttons have no individual button data
-other than their textual labels.  You use implicit button types which
-include boolean expressions (predicates) that match to both the label
-and the context required of any button of the type.  Each time a Smart
-Key is pressed at a location, Hyperbole evaluates the predicates from
-the list of implicit button types and the first one that evaluates true
-is selected and its associated action is triggered.  The Ibut/Act menu
-item, <kbd>{C-h h i a}</kbd>, also activates any implicit button found at the
+<p>Unlike explicit buttons, implicit buttons have no individual button
+data other than their text and optional labels.  You use implicit
+button types which include boolean expressions (predicates) that match
+to both the label and the context required of any button of the type.
+Each time a Smart Key is pressed at a location, Hyperbole evaluates
+the predicates from the list of implicit button types and the first
+one that evaluates true is selected and its associated action is
+triggered.  Alternatively, you can use the Ibut/Act menu
+item, <kbd>{C-h h i a}</kbd>, to activate any implicit button found at the
 current point.
 </p>
 <p>All of this happens transparently and is easy to use once you try it.
 The Hyperbole Smart Keys offer additional extensive context-sensitive
 point-and-click type behavior beyond implicit button types.  See <a 
href="#Smart-Key-Operations">Smart Key Operations</a>.
 </p>
+<a name="index-implicit-button-labels"></a>
+<a name="index-labeling-implicit-buttons"></a>
+<a name="index-naming-implicit-buttons"></a>
+<p>Individual implicit buttons may be labeled, allowing activation by
+name or use as a link target by other buttons.  Here is a pathname
+button with a label of &rsquo;My Emacs Files&rsquo;:
+</p>
+<div class="example">
+<pre class="example">&lt;[My Emacs Files]&gt;: &quot;~/.emacs.d&quot;
+</pre></div>
+
+<p>The label is delimited by &lsquo;<samp>&lt;[</samp>&rsquo; and 
&lsquo;<samp>]&gt;</samp>&rsquo; and can be followed
+by any number of :, - or = separator characters, including none.  You
+can activate the button either from its label or its text.  With point
+on an implicit button, <kbd>{C-h h i l}</kbd> will label it or you
+may simply type the label and delimiters manually.
+</p>
+<table class="menu" border="0" cellspacing="0">
+<tr><td align="left" valign="top">&bull; <a 
href="#Implicit-Button-Type-Summaries" accesskey="1">Implicit Button Type 
Summaries</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</table>
+
+<hr>
+<a name="Implicit-Button-Type-Summaries"></a>
+<div class="header">
+<p>
+Previous: <a href="#Implicit-Buttons" accesskey="p" rel="prev">Implicit 
Buttons</a>, Up: <a href="#Implicit-Buttons" accesskey="u" rel="up">Implicit 
Buttons</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+</div>
+<a name="Implicit-Button-Type-Summaries-1"></a>
+<h4 class="subsection">3.3.1 Implicit Button Type Summaries</h4>
+
 <a name="index-ibtypes_002c-list-of"></a>
 <a name="index-implicit-button-types"></a>
 <p>Below, standard implicit button types are listed in the order in which
 Hyperbole tries to match to the types when looking for an implicit
 button; <kbd>{C-h h i t <span class="key">RET</span>}</kbd> provides similar 
information.  See
 the Hyperbole file, <samp>hibtypes.el</samp>, for complete examples of
-implicit button types (where they are listed in reverse in increasing
-order of priority).
+implicit button types (they are listed in increasing order of
+priority).
 </p>
 <dl compact="compact">
 <dd>
@@ -2434,14 +2524,63 @@ within an error line.
 breakpoint line.  This works with gdb, dbx, and xdb.  Such lines are
 recognized in any buffer.
 </p>
-<a name="index-ibtypes-grep_002dmsg"></a>
+<a name="index-ibtypes-ripgrep_002dmsg"></a>
 <a name="index-grep"></a>
+<a name="index-ripgrep"></a>
+<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.
+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).
+</p>
+<a name="index-ibtypes-ipython_002dstack_002dframe"></a>
+<a name="index-ipython"></a>
+<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).
+</p>
+<a name="index-ibtypes-grep_002dmsg"></a>
+<a name="index-grep-1"></a>
 <a name="index-compiler-error-1"></a>
+<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.
 Messages are recognized in any buffer.
 </p>
+<a name="index-ibtypes-link_002dto_002dibut"></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;.
+</p>
+<a name="index-ibtypes-link_002dto_002dgbut"></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.
+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-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.
+Recognizes the format ’&lt;elink:’ &lt;button label&gt; ’&gt;’, e.g. 
&lt;elink: project-list&gt;.
+</p>
 <a name="index-ibtypes-klink"></a>
 <a name="index-klink"></a>
 <a name="index-koutline-link"></a>
@@ -2477,11 +2616,13 @@ retrievals.
 </p>
 <a name="index-ibtypes-kbd_002dkey"></a>
 <a name="index-key-sequence"></a>
+<a name="index-sequence-of-keys"></a>
 </dd>
 <dt><code>kbd-key</code></dt>
-<dd><p>Executes a key sequence found around point, delimited by curly braces, 
{}, if any.
-Key sequences should be in human readable form, e.g. <kbd>{C-x C-b}</kbd>.  
Formats such
-as {^x^b} will not be recognized.
+<dd><p>Executes 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.
 </p>
 <p>Any key sequence must be a string of one of the following:
 </p><ul>
@@ -2497,7 +2638,7 @@ as {^x^b} will not be recognized.
 </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 file name must be at the beginning of the
+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.
 </p>
@@ -2507,7 +2648,7 @@ non-space, non-parenthesis, non-brace character.
 </dd>
 <dt><code>text-toc</code></dt>
 <dd><p>Jumps to the text file section referenced by a table of contents entry
-at point.  The file name of the current buffer must contain
+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
 table of contents.  Each toc entry must begin with some whitespace
@@ -2624,7 +2765,7 @@ produced by git log.
 </dd>
 <dt><code>github-reference</code></dt>
 <dd><p>Displays the Github entity associated with REFERENCE and optional USER 
and PROJECT.
-See <samp>DEMO#Github (Remote) References</samp> for examples.
+See <samp>../DEMO#Github (Remote) References</samp> for examples.
 </p>
 <p>REFERENCE is a string of one of the following forms:
 </p><ul>
@@ -2659,6 +2800,51 @@ If given, PROJECT overrides any project value in 
REFERENCE.  If no
 PROJECT value is provided, it defaults to the value of
 <code>hibtypes-github-default-project</code>.
 </p>
+<a name="index-ibtypes-gitlab_002dreference"></a>
+<a name="index-gitlab-reference"></a>
+<a name="index-version-control-3"></a>
+<a name="index-hibtypes_002dgitlab_002ddefault_002dproject"></a>
+<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.
+See <samp>../DEMO#Gitlab (Remote) References</samp> for examples.
+</p>
+<p>REFERENCE is a string of one of the following forms:
+</p><ul>
+<li> &lt;ref-item&gt;
+</li><li> &lt;user&gt;/&lt;project&gt;/&lt;ref-item&gt;
+</li><li> &lt;project&gt;/&lt;ref-item&gt;
+</li><li> /&lt;group&gt;/&lt;project&gt;.
+or
+</li><li> /&lt;project-or-group&gt; (where a group is a colection of projects)
+</li></ul>
+
+<p>&lt;ref-item&gt; is one of these:
+</p><dl compact="compact">
+<dt>&bull; one of the words: activity, analytics, boards or kanban, branches, 
commits, contributors, groups, issues or list, jobs, labels, merge_requests, 
milestones, pages, pipelines, pipeline_charts, members or people or staff, 
projects, pulls, schedules, snippets, status or tags</dt>
+<dd><p>the associated items are listed
+</p></dd>
+<dt>&bull; one of the words: branch, commit(s), issue(s), milestone(s), 
pull(s), snippet(s) or tag(s) followed by a &rsquo;/&rsquo; or &rsquo;=&rsquo; 
and an item-id</dt>
+<dd><p>the item is shown
+</p></dd>
+<dt>&bull; an issue reference given by a positive integer, e.g. <em>92</em> or 
prefaced with <em>GL-</em>, like GL-92</dt>
+<dd><p>the issue is displayed
+</p></dd>
+<dt>&bull; a commit reference given by a hex number, 55a1f0</dt>
+<dd><p>the commit diff is displayed
+</p></dd>
+<dt>&bull; a branch or tag reference given by an alphanumeric name, e.g. 
hyper20</dt>
+<dd><p>the files in the branch are listed.
+</p></dd>
+</dl>
+
+<a name="index-hibtypes_002dgitlab_002ddefault_002duser-1"></a>
+<p>USER defaults to the value of <code>hibtypes-gitlab-default-user</code>.
+If given, PROJECT overrides any project value in REFERENCE.  If no
+PROJECT value is provided, it defaults to the value of
+<code>hibtypes-gitlab-default-project</code>.
+</p>
 <a name="index-ibtypes-social_002dreference"></a>
 <a name="index-hashtag"></a>
 <a name="index-username"></a>
@@ -2763,11 +2949,12 @@ at line-num and optional column-num.  Also works for 
remote pathnames.
 </dd>
 <dt><code>pathname</code></dt>
 <dd><p>Makes a valid pathname display the path entry.  Also works for
-delimited and non-delimited remote pathnames, Texinfo <samp></samp> entries,
-and hash-style link references to HTML, Markdown or Emacs outline
-headings.  Emacs Lisp library files (filenames without any directory
-component that end in .el and .elc) are looked up using
-the <code>load-path</code> directory list.
+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
+and MSWindows Paths</samp> for details).  Emacs Lisp library files
+(filenames without any directory component that end in .el and .elc)
+are looked up using the <code>load-path</code> directory list.
 </p>
 <p>See the function documentation for <code>hpath:at-p</code> for possible
 delimiters.  See the variable documentation for <code>hpath:suffixes</code> for
@@ -2776,21 +2963,38 @@ for a valid match.  See the function documentation for 
<code>hpath:find</code>
 for special file display options.
 </p>
 <a name="index-ibtypes-org_002dmode"></a>
-<a name="index-browse_002durl_002dbrowser_002dfunction-1"></a>
 <a name="index-org_002dmode"></a>
 <a name="index-Org-mode"></a>
+<a name="index-radio-target"></a>
+<a name="index-code-block"></a>
+<a name="index-C_002dc-C_002dc"></a>
+<a name="index-M_002dRET-1"></a>
+<a name="index-org_002dctrl_002dc_002dctrl_002dc"></a>
+<a name="index-org_002dmeta_002dreturn"></a>
 </dd>
 <dt><code>org-mode</code></dt>
-<dd><p>The Action Key follows any Org mode link at point or cycles through
-views of the outline subtree at point.  In any other context besides
-the end of a line, the Action Key will invoke the Org mode standard
-binding of <kbd>{M-<span class="key">RET</span>}</kbd>, (org-meta-return).  
The Assist Key on
-an Org mode heading cycles through views of the whole buffer outline
-and on an Org mode link, displays standard Hyperbole help.
+<dd><p>For users of Emacs Org mode, Hyperbole does quite a few things.
+</p>
+<p>First, the Action Key follows internal links in Org mode files.  When
+pressed on a link referent/target, the link definition is displayed,
+allowing two-way navigation between definitions and targets.
+</p>
+<p>Second, the Action Key follows Org mode external links.  The Assist
+Key displays help when pressed on an Org mode link.
+</p>
+<p>Third, within a radio target definition, the Action Key jumps to the
+first occurrence of an associated radio target.
 </p>
-<p>The variable, <code>browse-url-browser-function</code>, customizes the url
-browser that is used for urls.  Valid values of this variable
-include <code>browse-url-default-browser</code> and 
<code>browse-url-generic</code>.
+<p>Fourth, when point is on an outline heading in Org mode, the Action Key
+cycles the view of the subtree at point and the Assist Key cycles the
+view of all headings in the buffer.
+</p>
+<p>Fifth, with point on the first line of a code block definition, the
+Action Key executes the code block via the Org mode standard binding
+of <kbd>{C-c C-c}</kbd>, <code>org-ctrl-c-ctrl-c</code>.
+</p>
+<p>In any other context besides the end of a line, the Action Key invokes
+the Org mode standard binding of <kbd>{M-RET}</kbd>, 
<code>org-meta-return</code>.
 </p>
 <a name="index-ibtypes-doc_002did"></a>
 <a name="index-online-library"></a>
@@ -2978,7 +3182,7 @@ signalled.
 <a name="index-actypes-link_002dto_002debut"></a>
 </dd>
 <dt><code>link-to-ebut</code></dt>
-<dd><p>Performs an action given by another explicit button, specified by KEY 
and KEY-FILE.
+<dd><p>Performs an action given by an explicit button, specified by KEY and 
KEY-FILE.
 </p>
 <a name="index-actypes-link_002dto_002delisp_002ddoc"></a>
 </dd>
@@ -2996,6 +3200,11 @@ the buffer is displayed with POINT at the top of the 
window.
 <dt><code>link-to-file-line</code></dt>
 <dd><p>Displays 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.
+</p>
 <a name="index-actypes-link_002dto_002dInfo_002dindex_002ditem"></a>
 </dd>
 <dt><code>link-to-Info-index-item</code></dt>
@@ -3012,6 +3221,11 @@ available.  Filename may be given without the .info 
suffix.&quot;
 filename and nodename is available.  Filename may be given without the
 .info suffix.
 </p>
+<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.
+</p>
 <a name="index-actypes-link_002dto_002dkcell"></a>
 <a name="index-kcell_003aref_002dto_002did"></a>
 </dd>
@@ -3108,15 +3322,18 @@ at point.
 <a name="index-URL-1"></a>
 <a name="index-World_002dwide-Web-1"></a>
 <a name="index-WWW-1"></a>
-<a name="index-browse_002durl_002dbrowser_002dfunction-2"></a>
+<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,
 <code>browse-url-browser-function</code>, customizes the url browser
-that is used.  See its documentation string for details.
+that is used.  Valid values of this variable include
+<code>browse-url-default-browser</code> and <code>browse-url-generic</code>.
+See its documentation string for details.
 </p></dd>
 </dl>
 
+
 <a name="index-action-1"></a>
 <a name="index-hui_003aebut_002dprompt_002dfor_002daction"></a>
 <p>Action types create a convenient way of specifying button behavior
@@ -3272,12 +3489,14 @@ upon the referent context in which the Action Key is 
released.
 <div class="example">
 <pre class="example">Referent Context         Link Type
 ----------------------------------------------------
+Global Button            link-to-gbut
 Explicit Button          link-to-ebut
+Implicit Button          link-to-ibut
 Info Index Item          link-to-Info-index-item
 Info Node                link-to-Info-node
 Mail Reader Message      link-to-mail
 Directory Name           link-to-directory
-File Name                link-to-file
+Filename                 link-to-file
 Koutline Cell            link-to-kcell
 Outline Heading          link-to-string-match
 Buffer attached to File  link-to-file
@@ -3792,7 +4011,7 @@ access to popular web search engines.
 </p>
 <p>Below are each of the commands on the Find menu.
 </p>
-<a name="index-match-lines"></a>
+<a name="index-match-lines-2"></a>
 <a name="index-remove-lines"></a>
 <a name="index-save-lines"></a>
 <a name="index-locate-files"></a>
@@ -4870,7 +5089,7 @@ level to insertion at the child level.
 <dt><kbd>{C-u C-c c}</kbd></dt>
 <dd><p>Copy &lt;tree&gt; to follow as the first child of &lt;cell&gt;.
 </p>
-<a name="index-C_002dc-C_002dc"></a>
+<a name="index-C_002dc-C_002dc-1"></a>
 </dd>
 <dt><kbd>{C-c C-c}</kbd></dt>
 <dd><p>Copy &lt;tree&gt; to be the predecessor of &lt;cell&gt;.
@@ -5139,8 +5358,8 @@ Next: <a href="#Exporting" accesskey="n" 
rel="next">Exporting</a>, Previous: <a
 <a name="index-outline_002c-foreign-file"></a>
 <p>The paragraphs of another buffer or file may be inserted into a koutline
 as a set of cells by using the <kbd>{C-x i}</kbd> command.  When prompted,
-you may use a buffer name or file name from which to insert;
-completion is provided for file names only.
+you may use a buffer name or filename from which to insert;
+completion is provided for filenames only.
 </p>
 <a name="index-koutliner_002c-C_002du-C_002dx-i"></a>
 <p>The elements from the original buffer are converted into kcells and
@@ -5172,7 +5391,7 @@ entire file into the current cell following point.
 files.  You can import a file into an existing koutline,
 following the tree at point, or can create a new koutline from the
 imported file contents.  <kbd>{M-x kimport:file <span 
class="key">RET</span>}</kbd> selects the
-importation type based on the buffer or file name suffix of the file to
+importation type based on the buffer or filename suffix of the file to
 import.
 </p>
 <a name="index-kotl_002dmode-1"></a>
@@ -5233,7 +5452,7 @@ World-Wide Web.
 </p>
 <p><kbd>{M-x kexport:html <span class="key">RET</span>}</kbd> prompts for the 
koutline buffer or
 file to export, the HTML file or buffer to which to output, and the
-title to use for the HTML file.  Completion of file names is provided.
+title to use for the HTML file.  Completion of filenames is provided.
 The conversion will then be done and the output file or buffer will be
 written; the output file will not be displayed.
 </p>
@@ -5595,7 +5814,7 @@ that reference the cell.
 <dt><em>create-time</em></dt>
 <dd><p>The time at which the cell was created.  This is stored in a form that
 allows for easy data comparisons but is displayed in a human readable
-format, such as &lsquo;<samp>Jan 28 18:27:59 CST 2017</samp>&rsquo;.
+format, such as &lsquo;<samp>Jan 28 18:27:59 CST 2019</samp>&rsquo;.
 </p></dd>
 </dl>
 
@@ -5727,7 +5946,7 @@ automatically added by HyRolo whenever a new record is 
added.
 ==================================================================
 *   Smith, John       &lt;address@hidden&gt; W708-555-2001  F708-321-1492
         Chief Ether Maintainer, HiHo Industries
-        05/24/2017
+        05/24/2019
 </pre></div>
 
 <p>We call rolo records, <em>entries</em>.  Entries begin with a delimiter
@@ -6099,7 +6318,7 @@ list.  In general, you should leave your personal rolo 
file as the
 first entry in the list, since this is the only file to which the Add
 command on the rolo menu adds entries.
 </p>
-<p>Hyperbole releases earlier than 4.17 used a different file name for the
+<p>Hyperbole releases earlier than 4.17 used a different filename for the
 personal rolo.  If such a file exists, you will be prompted to rename
 it whenever the HyRolo system is loaded.
 </p>
@@ -6668,7 +6887,7 @@ identifier or a permanent idstamp.
 <a name="index-argument_002c-mail-message"></a>
 </dd>
 <dt><code>+M</code></dt>
-<dd><p>Prompts for a mail message date and the file name in which it resides.
+<dd><p>Prompts for a mail message date and the filename in which it resides.
 The mail parameters prompted for by this character code may change in
 the future.
 </p>
@@ -7194,13 +7413,13 @@ windows exist within a frame.
 <a name="index-gbut_003afile"></a>
 </dd>
 <dt><b>Global Button</b></dt>
-<dd><p>A form of explicit button which is accessed by name rather than direct
+<dd><p>A Hyperbole button which is accessed by name rather than direct
 selection.  Global buttons are useful when one wants quick access to
 actions such as jumping to common file locations or for performing
-sequences of operations.  One need not locate them since they are always
-available by name, with full completion offered.  All global buttons are
-stored in the file given by the variable <code>gbut:file</code> and may be
-activated as regular explicit buttons by visiting this file.  By
+sequences of operations.  One need not locate them since they are
+always available by name, with full completion offered.  All global
+buttons are stored in the file given by the variable <code>gbut:file</code>
+and may be activated with the Action Key when editing this file.  By
 default, this is the same as the user&rsquo;s personal button file.
 </p>
 </dd>
@@ -7255,7 +7474,8 @@ DataBase (BBDB) package.
 </dd>
 <dt><b>Implicit Button</b></dt>
 <dd><p>A button recognized contextually by Hyperbole.  Such buttons contain no
-button data.  See also <b>implicit button type</b>.
+button data but may have an optional preceding label that looks like this:
+&lsquo;<samp>&lt;[label]&gt;</samp>&rsquo;.  See also <b>implicit button 
type</b>.
 </p>
 </dd>
 <dt><b>Implicit Button Type</b></dt>
@@ -7265,7 +7485,20 @@ to documents created and managed by tools other than 
Hyperbole, for
 example, programming documentation.  <b>Ibtype</b> is a synonym for
 implicit button type.  See also <b>system encapsulation</b>.
 </p>
-
+<a name="index-InfoDock"></a>
+</dd>
+<dt><b>InfoDock</b></dt>
+<dd><p>InfoDock was an integrated productivity toolset for software engineers
+and knowledge workers built atop XEmacs; it is no longer maintained or
+updated.  An older version from 1999 may be found at
+infodock.sf.net.
+</p>
+<p>InfoDock has much of the power of GNU Emacs, but with an
+easier to use and more comprehensive menu-based user interface.  Most
+objections people raise to using emacs have already been addressed in
+InfoDock.  InfoDock was meant for people who wanted a complete,
+pre-customized environment in one package.
+</p>
 </dd>
 <dt><b>Instance Number</b></dt>
 <dd><p>A colon prefaced number appended to the label of a newly created button
@@ -7280,6 +7513,16 @@ any number of buttons with the same base label within a 
single buffer.
 <p>Jedi is a Emacs package for Python completion, definition and documentation 
lookup.
 </p>
 </dd>
+<dt><b>Key Sequence</b></dt>
+<dd><p>A single sequence of keys that can invoke an Emacs command.
+</p>
+</dd>
+<dt><b>Key Series</b></dt>
+<dd><p>A series of one or more Emacs key sequences delimited by braces that
+Hyperbole processes when activated as an implicit button, as if the
+keys were typed in by the user.
+</p>
+</dd>
 <dt><b>Koutline</b></dt>
 <dd><p>A hierarchically ordered grouping of cells which may be stored as a file
 and viewed and edited as an outline.
@@ -7530,12 +7773,11 @@ Next: <a href="#Invocation" accesskey="n" 
rel="next">Invocation</a>, Previous: <
 installed by using the Emacs Package Manager.  If you are not familiar
 with it, see <a 
href="http://www.gnu.org/software/emacs/manual/html_mono/emacs.html#Packages";>Packages</a>
 in <cite>the GNU Emacs Manual</cite>.
 </p>
-<p>If you have Hyperbole 5.10 or higher installed and simply want to
-upgrade it, invoke the Emacs Package Manager with <kbd>{M-x
-list-packages <span class="key">RET</span>}</kbd>, then use the <kbd>{U}</kbd> 
key followed by
-the <kbd>{x}</kbd> key to upgrade all out-of-date packages, Hyperbole among
-them.  Then skip the text below and move on to the next
-section, see <a href="#Invocation">Invocation</a>.
+<p>If you have Hyperbole installed and simply want to upgrade it, invoke
+the Emacs Package Manager with <kbd>{M-x list-packages <span 
class="key">RET</span>}</kbd>,
+then use the <kbd>{U}</kbd> key followed by the <kbd>{x}</kbd> key to upgrade 
all
+out-of-date packages, Hyperbole among them.  Then skip the text below
+and move on to the next section, see <a href="#Invocation">Invocation</a>.
 </p>
 <p>Otherwise, to download and install the Hyperbole package, you should add
 several lines to your personal Emacs initialization file, 
<samp>~/.emacs</samp>.
@@ -7724,25 +7966,86 @@ Next: <a href="#Internal-Viewers" accesskey="n" 
rel="next">Internal Viewers</a>,
 <a name="index-referent-display"></a>
 <a name="index-link-display"></a>
 <a name="index-display-where"></a>
+<a name="index-display-outside-Emacs"></a>
 <a name="index-where-to-display"></a>
-<p>Hyperbole lets you control where link referents are displayed and even
-what Emacs function or external program is used to display them.
-There are three categories of referents, each with its own display
-setting:
-</p><div class="example">
+<a name="index-image-display"></a>
+<a name="index-internal-display"></a>
+<a name="index-external-display"></a>
+<p>Hyperbole lets you control where link referents are displayed.  It also
+permits setting a specific Emacs function or external program
+to display them.  There are four categories of referents, each with
+its own display setting, listed in decreasing order of priority.  All
+of these variables are defined within <samp>hpath.el</samp>.
+</p>
+<div class="example">
 <pre class="example">Referent Category             Variable Setting
 ========================================================================
-Internal Standard Display     hpath:display-where
+Internal Image Display        hpath:native-image-suffixes
 Internal Custom Display       hpath:internal-display-alist
 External Display              hpath:external-display-alist
+Internal Standard Display     hpath:display-where
 
 </pre></div>
 
+<p>Continue reading the next sections for information on how referents
+are displayed internally and externally.
+</p>
+<hr>
+<a name="Internal-Viewers"></a>
+<div class="header">
+<p>
+Next: <a href="#External-Viewers" accesskey="n" rel="next">External 
Viewers</a>, Previous: <a href="#Referent-Display" accesskey="p" 
rel="prev">Referent Display</a>, Up: <a href="#Customization" accesskey="u" 
rel="up">Customization</a> &nbsp; [<a href="#SEC_Contents" title="Table of 
contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+</div>
+<a name="Internal-Viewers-1"></a>
+<h4 class="subsection">B.3.2 Internal Viewers</h4>
+<a name="index-hpath_003ainternal_002ddisplay_002dalist"></a>
+<a name="index-file-display-function"></a>
+<a name="index-display-function"></a>
+<a name="index-internal-viewer"></a>
+<a name="index-link_002c-display-function"></a>
+
+<a name="index-internal-image-display"></a>
+<a name="index-hpath_003anative_002dimage_002dsuffixes"></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>
+<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
+the value of <code>hpath:display-where</code> to display the image within an
+Emacs buffer.
+</p>
+<p>If no match is found, the <code>hpath:internal-display-alist</code> variable
+is checked for a filename match.  Its value is an association list
+whose elements are (&lt;file-name-regular-expression&gt;
+. &lt;function-of-one-arg&gt;) pairs.  Any path whose name matches
+a &lt;file-name-regular-expression&gt; will be displayed by calling the
+associated &lt;function-of-one-arg&gt; with the filename as the argument.
+The first regular expression that matches each filename is the one
+used.  This can be used to format raw data files for convenient
+display.
+</p>
+<p>By default, this setting handles the following types of files:
+</p><dl compact="compact">
+<dt><em>Audio Files</em></dt>
+<dd><p>Major audio format files are played with the 
<code>play-sound-file</code> command.
+</p></dd>
+<dt><em>Info Manuals</em></dt>
+<dd><p>Files with a <samp>.info</samp> suffix (may also be compressed) are 
displayed in the Info browser.
+</p></dd>
+<dt><em>RDB Files</em></dt>
+<dd><p>Files with an <samp>.rdb</samp> suffix are displayed as relational 
databases using the RDB package
+available with InfoDock.
+</p></dd>
+</dl>
+
 <a name="index-menu_002c-Cust_002fReferents"></a>
 <a name="index-C_002dh-h-c-r"></a>
-<p>Regular file links are displayed in an Emacs window specified by the
-<code>hpath:display-where</code> setting which may be changed with the 
Cust/Referents
-<kbd>{C-h h c r}</kbd> menu.
+<p>Links to standard files, those which don&rsquo;t match any special referent
+category described earlier, are displayed in an Emacs window specified
+by the <code>hpath:display-where</code> setting.  It may be changed with the
+Cust/Referents <kbd>{C-h h c r}</kbd> menu.
 </p>
 <p>Available options are:
 </p>
@@ -7764,7 +8067,7 @@ External Display              hpath:external-display-alist
 the default)
 </p></dd>
 <dt><em>&bull; Single-Win</em></dt>
-<dd><p>Display in  a window of the selected frame and delete its other windows
+<dd><p>Display in a window of the selected frame and delete its other windows
 </p></dd>
 </dl>
 
@@ -7775,51 +8078,7 @@ the default)
 <img src="im/menu-display-referents.png" alt="Display Referents Menu">
 <div class="float-caption"><p><strong>Image B.2: </strong>Display Referents 
Menu</p></div></div><br>
 
-<p>Continue reading the next sections for information on custom Internal
-and External Viewers for link referencts.
-</p>
-<hr>
-<a name="Internal-Viewers"></a>
-<div class="header">
-<p>
-Next: <a href="#External-Viewers" accesskey="n" rel="next">External 
Viewers</a>, Previous: <a href="#Referent-Display" accesskey="p" 
rel="prev">Referent Display</a>, Up: <a href="#Customization" accesskey="u" 
rel="up">Customization</a> &nbsp; [<a href="#SEC_Contents" title="Table of 
contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
-</div>
-<a name="Internal-Viewers-1"></a>
-<h4 class="subsection">B.3.2 Internal Viewers</h4>
-<a name="index-hpath_003ainternal_002ddisplay_002dalist"></a>
-<a name="index-file-display-function"></a>
-<a name="index-display-function"></a>
-<a name="index-internal-viewer"></a>
-<a name="index-link_002c-display-function"></a>
-<p>When given a file name, Hyperbole will by default display the file for
-editing within an Emacs buffer.  The <code>hpath:internal-display-alist</code>
-variable can be used to specify file name patterns, such as matching
-suffixes, which will invoke a special Emacs Lisp function to display
-any matching files within Emacs.  This can be used to format raw data
-files for convenient display.
-</p>
-<p>For those who want to change this variable, 
<code>hpath:internal-display-alist</code>
-is defined in <samp>hpath.el</samp>.  Its value is an association list whose
-elements are (&lt;file-name-regular-expression&gt; . 
&lt;function-of-one-arg&gt;)
-pairs.  Any path whose name matches a &lt;file-name-regular-expression&gt;
-will be displayed by calling the associated &lt;function-of-one-arg&gt; with
-the file name as the argument.
-</p>
-<p>By default, this variable handles the following types of files:
-</p><dl compact="compact">
-<dt><em>Audio Files</em></dt>
-<dd><p>Major audio format files are played with the 
<code>play-sound-file</code> command.
-</p></dd>
-<dt><em>Info Manuals</em></dt>
-<dd><p>Files with a <samp>.info</samp> suffix (may also be compressed) are 
displayed in the Info browser.
-</p></dd>
-<dt><em>RDB Files</em></dt>
-<dd><p>Files with an <samp>.rdb</samp> suffix are displayed as relational 
databases using the RDB package
-available with InfoDock.
-</p></dd>
-</dl>
-
-<p>See <a href="#External-Viewers">External Viewers</a>, for instructions on 
associating file names with
+<p>See <a href="#External-Viewers">External Viewers</a>, for instructions on 
associating filenames with
 external, window-system specific viewers.
 </p>
 <hr>
@@ -7838,10 +8097,13 @@ Next: <a href="#Link-Variable-Substitution" 
accesskey="n" rel="next">Link Variab
 <a name="index-external-program"></a>
 <a name="index-external-viewer"></a>
 <a name="index-link_002c-viewer-program"></a>
-<p>If you will be using Hyperbole under a window system,
-the <code>hpath:get-external-display-alist</code> function
-in <samp>hpath.el</samp> supports hyperlinks that open files using external, 
non-Emacs
-tools, e.g. a pdf reader or a vector graphic viewer.
+
+<a name="index-external-display-1"></a>
+<a name="index-hpath_003aexternal_002ddisplay_002dalist"></a>
+<p>If you use Hyperbole under a window system,
+the <code>hpath:get-external-display-alist</code> function in 
<samp>hpath.el</samp>
+supports hyperlinks that open files using external, non-Emacs tools, e.g.
+a pdf reader or a vector graphics viewer.
 </p>
 <p>The value returned by <code>hpath:get-external-display-alist</code> is 
determined
 based on the window system supported by the current frame and the version
@@ -7851,8 +8113,8 @@ path whose name matches a 
&lt;file-name-regular-expression&gt; will be
 displayed using the corresponding viewer-program or the first
 viewer-program found on the system from a list of programs.  If a
 &lt;viewer-program&gt; entry contains a &lsquo;<samp>%s</samp>&rsquo; string, 
the filename to
-display will be substituted at that point within the string.
-Otherwise, the filename will be appended to the &lt;viewer-program&gt;
+display is substituted at that point within the string.
+Otherwise, the filename is appended to the &lt;viewer-program&gt;
 entry.  Alternatively, the viewer-program may be a Lisp function that
 takes a single filename argument.
 </p>
@@ -7862,14 +8124,7 @@ for each available window system: 
<code>hpath:external-display-alist-macos</code
 <code>hpath:external-display-alist-x</code>.  Examine and modify these
 values to suit your needs.
 </p>
-<a name="index-MIME"></a>
-<a name="index-mailcap"></a>
-<a name="index-external-viewer-1"></a>
-<p>On systems that have a MIME mailcap file (see
-<samp>www.wikiwand.com/en/Mailcap</samp>), this is used as a fallback
-set of external viewer associations when none are found
-within <code>hpath:get-external-display-alist</code>.
-</p>
+
 <hr>
 <a name="Link-Variable-Substitution"></a>
 <div class="header">
@@ -7890,16 +8145,15 @@ compared against the values in 
<code>hpath:variables</code>.  The first
 match found, if any, is selected and its associated variable name is
 substituted into the link pathname, in place of its literal value.
 When a link button is activated, potentially at a different site,
-Hyperbole replaces each variable within the link pathname with the
-first matching value from this list to recreate the literal pathname.
+Hyperbole replaces each variable in the link pathname with the first
+matching value from this list to recreate the literal pathname.
 Environment variables are also replaced whenever link paths are
 resolved.
 </p>
 <p>This permits sharing of links over wide areas, where the variable values
 differ between link creator and link activator.  The entire process
 is wholly transparent to the user; it is explained here simply to help
-you in deciding whether or not to modify the value of
-<code>hpath:variables</code>.
+you in deciding whether or not to modify the value of 
<code>hpath:variables</code>.
 </p>
 <hr>
 <a name="Web-Search-Engines"></a>
@@ -7981,7 +8235,7 @@ Hyperbole: <code>(hpath:find-file-urls-mode 1)</code>.
 <a name="index-URLs_002c-abbreviated"></a>
 <a name="index-Tramp-1"></a>
 <p>Both full URLs and abbreviated ones, like <samp>www.gnu.org</samp>, are
-recognized.  File name completion does not work with URLs; you
+recognized.  filename completion does not work with URLs; you
 have to type or paste in the entire URL.  This feature will work only
 if you have the builtin Tramp Emacs Lisp package; if you don&rsquo;t have
 Tramp, an error message will be displayed when you try to enable
@@ -8017,9 +8271,11 @@ through invisible/hidden text, making the text 
temporarily visible
 until point moves past that hidden part.  When a search match is
 selected, the surrounding text remains visible.
 </p>
-<p>This command toggles that setting (turns it off if a prefix
-argument less than or equal to 0 is given) and makes searches look at
-only visible text.
+<p>You can temporarily disable searching of hidden text by typing <kbd>{M-s 
i}</kbd>
+while in an incremental search.  This key sequence toggles that
+setting and makes searches look at only visible text (or the reverse
+when invoked again).  The setting lasts only through the current
+interactive search.
 </p>
 <hr>
 <a name="Button-Colors"></a>
@@ -8096,7 +8352,7 @@ shown here:
 </p>
 <dl compact="compact">
 <dd><a name="index-key-binding_002c-M_002dRET"></a>
-<a name="index-M_002dRET-1"></a>
+<a name="index-M_002dRET-2"></a>
 </dd>
 <dt><kbd>{M-<span class="key">RET</span>}</kbd></dt>
 <dd><p>Action Key: Invoke the Action Key in the present context.
@@ -8635,7 +8891,7 @@ Called from a program, takes three args: START, END and 
COLUMN.
 <dt><code>kimport:insert-file  <kbd>{C-x i}</kbd></code></dt>
 <dd><p>Insert each paragraph in IMPORT-FROM as a separate cell in the current 
view.
 Insert as sibling cells following the current cell.  IMPORT-FROM may be a
-buffer name or file name (file name completion is provided).
+buffer name or filename (filename completion is provided).
 </p>
 <a name="index-kimport_003ainsert_002dregister"></a>
 </dd>
@@ -9338,23 +9594,25 @@ Previous: <a href="#Smart-Mouse-Keys" accesskey="p" 
rel="prev">Smart Mouse Keys<
 <h3 class="section">E.2 Smart Keyboard Keys</h3>
 
 <table class="menu" border="0" cellspacing="0">
-<tr><td align="left" valign="top">&bull; <a href="#Smart-Key-_002d-Treemacs" 
accesskey="1">Smart Key - Treemacs</a>:</td><td>&nbsp;&nbsp;</td><td 
align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Company-Mode" accesskey="1">Smart Key - Company 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top">&bull; <a href="#Smart-Key-_002d-Treemacs" 
accesskey="2">Smart Key - Treemacs</a>:</td><td>&nbsp;&nbsp;</td><td 
align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Emacs-Pushbuttons" accesskey="2">Smart Key - Emacs 
Pushbuttons</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Emacs-Pushbuttons" accesskey="3">Smart Key - Emacs 
Pushbuttons</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Argument-Completion" accesskey="3">Smart Key - Argument 
Completion</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Argument-Completion" accesskey="4">Smart Key - Argument 
Completion</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-ID-Edit-Mode" accesskey="4">Smart Key - ID Edit 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-ID-Edit-Mode" accesskey="5">Smart Key - ID Edit 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029" 
accesskey="5">Smart Key - Emacs Cross-references 
(Xrefs)</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029" 
accesskey="6">Smart Key - Emacs Cross-references 
(Xrefs)</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Smart-Scrolling" accesskey="6">Smart Key - Smart 
Scrolling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Smart-Scrolling" accesskey="7">Smart Key - Smart 
Scrolling</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Smart-Menus" accesskey="7">Smart Key - Smart 
Menus</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Smart-Menus" accesskey="8">Smart Key - Smart 
Menus</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a href="#Smart-Key-_002d-Dired-Mode" 
accesskey="8">Smart Key - Dired Mode</a>:</td><td>&nbsp;&nbsp;</td><td 
align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a href="#Smart-Key-_002d-Dired-Mode" 
accesskey="9">Smart Key - Dired Mode</a>:</td><td>&nbsp;&nbsp;</td><td 
align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Hyperbole-Buttons" accesskey="9">Smart Key - Hyperbole 
Buttons</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Hyperbole-Buttons">Smart Key - Hyperbole 
Buttons</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-View-Mode">Smart Key - View 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
@@ -9368,6 +9626,8 @@ Previous: <a href="#Smart-Mouse-Keys" accesskey="p" 
rel="prev">Smart Mouse Keys<
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Pages-Directory-Mode">Smart Key - Pages Directory 
Mode</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
+<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Python-Source-Code">Smart Key - Python Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Identifier-Menu-Mode">Smart Key - Identifier Menu Mode 
</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-C-Source-Code">Smart Key - C Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
@@ -9382,8 +9642,6 @@ Previous: <a href="#Smart-Mouse-Keys" accesskey="p" 
rel="prev">Smart Mouse Keys<
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-JavaScript-Source-Code">Smart Key - JavaScript Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
-<tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Python-Source-Code">Smart Key - Python Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
-</td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Objective_002dC-Source-Code">Smart Key - Objective-C 
Source Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
 </td></tr>
 <tr><td align="left" valign="top">&bull; <a 
href="#Smart-Key-_002d-Fortran-Source-Code">Smart Key - Fortran Source 
Code</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
@@ -9422,14 +9680,37 @@ Previous: <a href="#Smart-Mouse-Keys" accesskey="p" 
rel="prev">Smart Mouse Keys<
 </td></tr>
 </table>
 
+
+<hr>
+<a name="Smart-Key-_002d-Company-Mode"></a>
+<div class="header">
+<p>
+Next: <a href="#Smart-Key-_002d-Treemacs" accesskey="n" rel="next">Smart Key - 
Treemacs</a>, Previous: <a href="#Smart-Keyboard-Keys" accesskey="p" 
rel="prev">Smart Keyboard Keys</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Smart-Key-_002d-Company-Mode-1"></a>
+<h4 class="subsection">E.2.1 Smart Key - Company Mode</h4>
+
+<a name="index-company_002dmode"></a>
+<a name="index-completion-2"></a>
+<p>Company mode is an extensive in-buffer completion framework, often used to 
complete programming identifiers.
+</p>
+<div class="format">
+<pre class="format">When company-mode is active:
+  ACTION KEY
+     Displays selected item&rsquo;s definition.
+  ASSIST KEY
+     Displays the documentation, if any, for the selected item.
+</pre></div>
+
+
 <hr>
 <a name="Smart-Key-_002d-Treemacs"></a>
 <div class="header">
 <p>
-Next: <a href="#Smart-Key-_002d-Emacs-Pushbuttons" accesskey="n" 
rel="next">Smart Key - Emacs Pushbuttons</a>, Previous: <a 
href="#Smart-Keyboard-Keys" accesskey="p" rel="prev">Smart Keyboard Keys</a>, 
Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard 
Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+Next: <a href="#Smart-Key-_002d-Emacs-Pushbuttons" accesskey="n" 
rel="next">Smart Key - Emacs Pushbuttons</a>, Previous: <a 
href="#Smart-Key-_002d-Company-Mode" accesskey="p" rel="prev">Smart Key - 
Company Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Treemacs-1"></a>
-<h4 class="subsection">E.2.1 Smart Key - Treemacs</h4>
+<h4 class="subsection">E.2.2 Smart Key - Treemacs</h4>
 
 <a name="index-Treemacs-1"></a>
 <p>Treemacs is an add-on Emacs package that offers a fixed, per-frame, 
graphical
@@ -9447,10 +9728,10 @@ See <a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer Items
          collapse the entry;
      (2) elsewhere within an entry line, the item is displayed for editing,
          normally in another window;
-     (3) at the end of an entry line: invoke 
<code>action-key-eol-function</code>,
-         typically to scroll up proportionally, if an Action Key press; invoke
-         <code>assist-key-eol-function</code>, typically to scroll down 
proportionally,
-         if an Asisst Key press;
+     (3) at the end of an entry line: if an Action Key press, invokes
+         <code>action-key-eol-function</code>, typically to scroll up 
proportionally;
+         if an Assist Key press, invokes <code>assist-key-eol-function</code>, 
typically
+         to scroll down proportionally;
      (4) on the first line of the buffer (other than the end of line),
          dired is run on the current directory of this Treemacs;
      (5) at the end of the first or last line of the buffer,
@@ -9465,7 +9746,7 @@ See <a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer Items
 Next: <a href="#Smart-Key-_002d-Argument-Completion" accesskey="n" 
rel="next">Smart Key - Argument Completion</a>, Previous: <a 
href="#Smart-Key-_002d-Treemacs" accesskey="p" rel="prev">Smart Key - 
Treemacs</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Emacs-Pushbuttons-1"></a>
-<h4 class="subsection">E.2.2 Smart Key - Emacs Pushbuttons</h4>
+<h4 class="subsection">E.2.3 Smart Key - Emacs Pushbuttons</h4>
 
 <div class="format">
 <pre class="format">When over an Emacs pushbutton:
@@ -9482,7 +9763,7 @@ Next: <a href="#Smart-Key-_002d-Argument-Completion" 
accesskey="n" rel="next">Sm
 Next: <a href="#Smart-Key-_002d-ID-Edit-Mode" accesskey="n" rel="next">Smart 
Key - ID Edit Mode</a>, Previous: <a href="#Smart-Key-_002d-Emacs-Pushbuttons" 
accesskey="p" rel="prev">Smart Key - Emacs Pushbuttons</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Argument-Completion-1"></a>
-<h4 class="subsection">E.2.3 Smart Key - Argument Completion</h4>
+<h4 class="subsection">E.2.4 Smart Key - Argument Completion</h4>
 
 <a name="index-Smart-Keyboard-Keys"></a>
 <div class="format">
@@ -9493,7 +9774,7 @@ Next: <a href="#Smart-Key-_002d-ID-Edit-Mode" 
accesskey="n" rel="next">Smart Key
      Offers completions for the current minibuffer argument.
 </pre></div>
 
-<a name="index-completion-2"></a>
+<a name="index-completion-3"></a>
 <div class="format">
 <pre class="format">When reading a Hyperbole menu item or an argument with 
completion:
   ACTION KEY
@@ -9513,7 +9794,7 @@ Next: <a href="#Smart-Key-_002d-ID-Edit-Mode" 
accesskey="n" rel="next">Smart Key
 Next: <a href="#Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029" 
accesskey="n" rel="next">Smart Key - Emacs Cross-references (Xrefs)</a>, 
Previous: <a href="#Smart-Key-_002d-Argument-Completion" accesskey="p" 
rel="prev">Smart Key - Argument Completion</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-ID-Edit-Mode-1"></a>
-<h4 class="subsection">E.2.4 Smart Key - ID Edit Mode</h4>
+<h4 class="subsection">E.2.5 Smart Key - ID Edit Mode</h4>
 <div class="format">
 <pre class="format">If in ID Edit mode (a package within InfoDock, not 
included in
 Hyperbole, that supports rapid marking, killing, copying, yanking and
@@ -9529,7 +9810,7 @@ display-management):
 Next: <a href="#Smart-Key-_002d-Smart-Scrolling" accesskey="n" 
rel="next">Smart Key - Smart Scrolling</a>, Previous: <a 
href="#Smart-Key-_002d-ID-Edit-Mode" accesskey="p" rel="prev">Smart Key - ID 
Edit Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029-1"></a>
-<h4 class="subsection">E.2.5 Smart Key - Emacs Cross-references (Xrefs)</h4>
+<h4 class="subsection">E.2.6 Smart Key - Emacs Cross-references (Xrefs)</h4>
 
 <div class="format">
 <pre class="format">When over an Emacs cross-reference:
@@ -9547,7 +9828,7 @@ Next: <a href="#Smart-Key-_002d-Smart-Scrolling" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-Smart-Menus" accesskey="n" rel="next">Smart 
Key - Smart Menus</a>, Previous: <a 
href="#Smart-Key-_002d-Emacs-Cross_002dreferences-_0028Xrefs_0029" 
accesskey="p" rel="prev">Smart Key - Emacs Cross-references (Xrefs)</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Smart-Scrolling-1"></a>
-<h4 class="subsection">E.2.6 Smart Key - Smart Scrolling</h4>
+<h4 class="subsection">E.2.7 Smart Key - Smart Scrolling</h4>
 
 <a name="index-smart_002dscroll_002dproportional"></a>
 <a name="index-proportional-scrolling-1"></a>
@@ -9585,7 +9866,7 @@ Next: <a href="#Smart-Key-_002d-Smart-Menus" 
accesskey="n" rel="next">Smart Key
 Next: <a href="#Smart-Key-_002d-Dired-Mode" accesskey="n" rel="next">Smart Key 
- Dired Mode</a>, Previous: <a href="#Smart-Key-_002d-Smart-Scrolling" 
accesskey="p" rel="prev">Smart Key - Smart Scrolling</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Smart-Menus-1"></a>
-<h4 class="subsection">E.2.7 Smart Key - Smart Menus</h4>
+<h4 class="subsection">E.2.8 Smart Key - Smart Menus</h4>
 
 <p>Smart Menus are an older in-buffer menu system that worked on dumb
 terminals and pre-dated Emacs&rsquo; own dumb terminal menu support.  They
@@ -9619,7 +9900,7 @@ necesary for its use.
 Next: <a href="#Smart-Key-_002d-Hyperbole-Buttons" accesskey="n" 
rel="next">Smart Key - Hyperbole Buttons</a>, Previous: <a 
href="#Smart-Key-_002d-Smart-Menus" accesskey="p" rel="prev">Smart Key - Smart 
Menus</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Dired-Mode-1"></a>
-<h4 class="subsection">E.2.8 Smart Key - Dired Mode</h4>
+<h4 class="subsection">E.2.9 Smart Key - Dired Mode</h4>
 <a name="index-click_002c-dired"></a>
 <a name="index-drag_002c-dired"></a>
 <a name="index-dired-browsing"></a>
@@ -9660,7 +9941,7 @@ Next: <a href="#Smart-Key-_002d-Hyperbole-Buttons" 
accesskey="n" rel="next">Smar
 Next: <a href="#Smart-Key-_002d-View-Mode" accesskey="n" rel="next">Smart Key 
- View Mode</a>, Previous: <a href="#Smart-Key-_002d-Dired-Mode" accesskey="p" 
rel="prev">Smart Key - Dired Mode</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Hyperbole-Buttons-1"></a>
-<h4 class="subsection">E.2.9 Smart Key - Hyperbole Buttons</h4>
+<h4 class="subsection">E.2.10 Smart Key - Hyperbole Buttons</h4>
 
 <a name="index-click_002c-button"></a>
 <a name="index-button-click"></a>
@@ -9680,7 +9961,7 @@ Next: <a href="#Smart-Key-_002d-View-Mode" accesskey="n" 
rel="next">Smart Key -
 Next: <a href="#Smart-Key-_002d-Delimited-Things" accesskey="n" 
rel="next">Smart Key - Delimited Things</a>, Previous: <a 
href="#Smart-Key-_002d-Hyperbole-Buttons" accesskey="p" rel="prev">Smart Key - 
Hyperbole Buttons</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-View-Mode-1"></a>
-<h4 class="subsection">E.2.10 Smart Key - View Mode</h4>
+<h4 class="subsection">E.2.11 Smart Key - View Mode</h4>
 
 <a name="index-view-mode"></a>
 <div class="format">
@@ -9699,7 +9980,7 @@ Next: <a href="#Smart-Key-_002d-Delimited-Things" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-The-Koutliner" accesskey="n" rel="next">Smart 
Key - The Koutliner</a>, Previous: <a href="#Smart-Key-_002d-View-Mode" 
accesskey="p" rel="prev">Smart Key - View Mode</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Delimited-Things-1"></a>
-<h4 class="subsection">E.2.11 Smart Key - Delimited Things</h4>
+<h4 class="subsection">E.2.12 Smart Key - Delimited Things</h4>
 
 <a name="index-thing-1"></a>
 <a name="index-list-1"></a>
@@ -9737,7 +10018,7 @@ original location and yanks it at the new location.
 Next: <a href="#Smart-Key-_002d-RDB-Mode" accesskey="n" rel="next">Smart Key - 
RDB Mode</a>, Previous: <a href="#Smart-Key-_002d-Delimited-Things" 
accesskey="p" rel="prev">Smart Key - Delimited Things</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-The-Koutliner-1"></a>
-<h4 class="subsection">E.2.12 Smart Key - The Koutliner</h4>
+<h4 class="subsection">E.2.13 Smart Key - The Koutliner</h4>
 <div class="format">
 <pre class="format">When pressed within a Hyperbole Koutliner buffer 
(kotl-mode):
   ACTION KEY
@@ -9772,7 +10053,7 @@ Next: <a href="#Smart-Key-_002d-RDB-Mode" accesskey="n" 
rel="next">Smart Key - R
 Next: <a href="#Smart-Key-_002d-Help-Buffers" accesskey="n" rel="next">Smart 
Key - Help Buffers</a>, Previous: <a href="#Smart-Key-_002d-The-Koutliner" 
accesskey="p" rel="prev">Smart Key - The Koutliner</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-RDB-Mode-1"></a>
-<h4 class="subsection">E.2.13 Smart Key - RDB Mode</h4>
+<h4 class="subsection">E.2.14 Smart Key - RDB Mode</h4>
 <a name="index-rdb_002dmode"></a>
 <a name="index-database"></a>
 <div class="format">
@@ -9805,7 +10086,7 @@ relational databases (part of InfoDock):
 Next: <a href="#Smart-Key-_002d-Pages-Directory-Mode" accesskey="n" 
rel="next">Smart Key - Pages Directory Mode</a>, Previous: <a 
href="#Smart-Key-_002d-RDB-Mode" accesskey="p" rel="prev">Smart Key - RDB 
Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Help-Buffers-1"></a>
-<h4 class="subsection">E.2.14 Smart Key - Help Buffers</h4>
+<h4 class="subsection">E.2.15 Smart Key - Help Buffers</h4>
 <a name="index-help-buffer"></a>
 <div class="format">
 <pre class="format">
@@ -9819,10 +10100,10 @@ When pressed at the end of a Help buffer:
 <a name="Smart-Key-_002d-Pages-Directory-Mode"></a>
 <div class="header">
 <p>
-Next: <a href="#Smart-Key-_002d-Identifier-Menu-Mode" accesskey="n" 
rel="next">Smart Key - Identifier Menu Mode</a>, Previous: <a 
href="#Smart-Key-_002d-Help-Buffers" accesskey="p" rel="prev">Smart Key - Help 
Buffers</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+Next: <a href="#Smart-Key-_002d-Python-Source-Code" accesskey="n" 
rel="next">Smart Key - Python Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Help-Buffers" accesskey="p" rel="prev">Smart Key - Help 
Buffers</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Pages-Directory-Mode-1"></a>
-<h4 class="subsection">E.2.15 Smart Key - Pages Directory Mode</h4>
+<h4 class="subsection">E.2.16 Smart Key - Pages Directory Mode</h4>
 
 <div class="format">
 <pre class="format">Pages-directory-mode is used in special buffers that 
contain title lines extracted from files consisting of titled, page-delimited 
contents, e.g. Info files.
@@ -9838,10 +10119,10 @@ When pressed on a pages-directory-mode entry line:
 <a name="Smart-Key-_002d-Python-Source-Code"></a>
 <div class="header">
 <p>
-Next: <a href="#Smart-Key-_002d-Objective_002dC-Source-Code" accesskey="n" 
rel="next">Smart Key - Objective-C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-JavaScript-Source-Code" accesskey="p" rel="prev">Smart 
Key - JavaScript Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
+Next: <a href="#Smart-Key-_002d-Identifier-Menu-Mode" accesskey="n" 
rel="next">Smart Key - Identifier Menu Mode</a>, Previous: <a 
href="#Smart-Key-_002d-Pages-Directory-Mode" accesskey="p" rel="prev">Smart Key 
- Pages Directory Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Python-Source-Code-1"></a>
-<h4 class="subsection">E.2.16 Smart Key - Python Source Code</h4>
+<h4 class="subsection">E.2.17 Smart Key - Python Source Code</h4>
 <div class="format">
 <pre class="format">When the Jedi identifier server or the OO-Browser has been 
loaded and the press is
 within a Python buffer:
@@ -9869,16 +10150,17 @@ within a Python buffer:
 <a name="Smart-Key-_002d-Identifier-Menu-Mode"></a>
 <div class="header">
 <p>
-Next: <a href="#Smart-Key-_002d-C-Source-Code" accesskey="n" rel="next">Smart 
Key - C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Pages-Directory-Mode" accesskey="p" rel="prev">Smart Key 
- Pages Directory Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+Next: <a href="#Smart-Key-_002d-C-Source-Code" accesskey="n" rel="next">Smart 
Key - C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Python-Source-Code" accesskey="p" rel="prev">Smart Key - 
Python Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Identifier-Menu-Mode-1"></a>
-<h4 class="subsection">E.2.17 Smart Key - Identifier Menu Mode</h4>
+<h4 class="subsection">E.2.18 Smart Key - Identifier Menu Mode</h4>
 
 <div class="format">
-<pre class="format">This works only for identifiers defined within the same 
source file in which they are referenced.
-It requires either Emacs&rsquo; imenu or XEmacs&rsquo; func-menu library and 
it requires that an index of
-identifiers has been built for the current buffer.  Other handlers handle 
identifier references
-and definitions across multiple files.
+<pre class="format">This works only for identifiers defined within the same 
source file in
+which they are referenced.  It requires either Emacs&rsquo; imenu library
+and it requires that an index of identifiers has been built for the
+current buffer.  Other handlers handle identifier references and
+definitions across multiple files.
 
 When pressed on an identifier name after an identifier index has been 
generated:
   ACTION KEY
@@ -9895,7 +10177,7 @@ When pressed on an identifier name after an identifier 
index has been generated:
 Next: <a href="#Smart-Key-_002d-C_002b_002b-Source-Code" accesskey="n" 
rel="next">Smart Key - C++ Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Identifier-Menu-Mode" accesskey="p" rel="prev">Smart Key 
- Identifier Menu Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-C-Source-Code-1"></a>
-<h4 class="subsection">E.2.18 Smart Key - C Source Code</h4>
+<h4 class="subsection">E.2.19 Smart Key - C Source Code</h4>
 
 <a name="index-smart_002dc_002dcpp_002dinclude_002dpath"></a>
 <a name="index-smart_002dc_002dinclude_002dpath"></a>
@@ -9927,7 +10209,7 @@ Next: <a href="#Smart-Key-_002d-C_002b_002b-Source-Code" 
accesskey="n" rel="next
 Next: <a href="#Smart-Key-_002d-Assembly-Source-Code" accesskey="n" 
rel="next">Smart Key - Assembly Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-C-Source-Code" accesskey="p" rel="prev">Smart Key - C 
Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-C_002b_002b-Source-Code-1"></a>
-<h4 class="subsection">E.2.19 Smart Key - C++ Source Code</h4>
+<h4 class="subsection">E.2.20 Smart Key - C++ Source Code</h4>
 
 <a name="index-c_002b_002b_002dcpp_002dinclude_002dpath"></a>
 <a name="index-c_002b_002b_002dinclude_002dpath"></a>
@@ -9980,7 +10262,7 @@ buffer:
 Next: <a href="#Smart-Key-_002d-Lisp-Source-Code" accesskey="n" 
rel="next">Smart Key - Lisp Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-C_002b_002b-Source-Code" accesskey="p" rel="prev">Smart 
Key - C++ Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Assembly-Source-Code-1"></a>
-<h4 class="subsection">E.2.20 Smart Key - Assembly Source Code</h4>
+<h4 class="subsection">E.2.21 Smart Key - Assembly Source Code</h4>
 
 <a name="index-smart_002dasm_002dinclude_002dpath"></a>
 <div class="format">
@@ -10005,11 +10287,12 @@ Next: <a href="#Smart-Key-_002d-Lisp-Source-Code" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-Java-Source-Code" accesskey="n" 
rel="next">Smart Key - Java Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Assembly-Source-Code" accesskey="p" rel="prev">Smart Key 
- Assembly Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Lisp-Source-Code-1"></a>
-<h4 class="subsection">E.2.21 Smart Key - Lisp Source Code</h4>
+<h4 class="subsection">E.2.22 Smart Key - Lisp Source Code</h4>
 
 <div class="format">
-<pre class="format">When pressed on a Lisp symbol within any of these types of 
buffers
-(Lisp code, debugger, compilation, or help):
+<pre class="format"><a name="index-change_002dlog_002dmode"></a><a 
name="index-lisp-identifier"></a><a name="index-elisp-identifier"></a>When 
pressed on a Lisp symbol within any of these types of buffers
+(Lisp code, debugger, compilation, or help) or in change-log-mode
+on an Emacs Lisp bound identifier:
   ACTION KEY
      Jumps to the definition of any selected Lisp construct.  If on an
      Emacs Lisp require, load, or autoload clause and the (find-library)
@@ -10027,7 +10310,7 @@ Next: <a href="#Smart-Key-_002d-Java-Source-Code" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-JavaScript-Source-Code" accesskey="n" 
rel="next">Smart Key - JavaScript Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Lisp-Source-Code" accesskey="p" rel="prev">Smart Key - 
Lisp Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Java-Source-Code-1"></a>
-<h4 class="subsection">E.2.22 Smart Key - Java Source Code</h4>
+<h4 class="subsection">E.2.23 Smart Key - Java Source Code</h4>
 
 <a name="index-smart_002djava_002dpackage_002dpath"></a>
 <div class="format">
@@ -10067,10 +10350,10 @@ buffer:
 <a name="Smart-Key-_002d-JavaScript-Source-Code"></a>
 <div class="header">
 <p>
-Next: <a href="#Smart-Key-_002d-Python-Source-Code" accesskey="n" 
rel="next">Smart Key - Python Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Java-Source-Code" accesskey="p" rel="prev">Smart Key - 
Java Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+Next: <a href="#Smart-Key-_002d-Objective_002dC-Source-Code" accesskey="n" 
rel="next">Smart Key - Objective-C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Java-Source-Code" accesskey="p" rel="prev">Smart Key - 
Java Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-JavaScript-Source-Code-1"></a>
-<h4 class="subsection">E.2.23 Smart Key - JavaScript Source Code</h4>
+<h4 class="subsection">E.2.24 Smart Key - JavaScript Source Code</h4>
 
 <div class="format">
 <pre class="format">When pressed within a JavaScript source code file:
@@ -10088,10 +10371,10 @@ Next: <a href="#Smart-Key-_002d-Python-Source-Code" 
accesskey="n" rel="next">Sma
 <a name="Smart-Key-_002d-Objective_002dC-Source-Code"></a>
 <div class="header">
 <p>
-Next: <a href="#Smart-Key-_002d-Fortran-Source-Code" accesskey="n" 
rel="next">Smart Key - Fortran Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Python-Source-Code" accesskey="p" rel="prev">Smart Key - 
Python Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
+Next: <a href="#Smart-Key-_002d-Fortran-Source-Code" accesskey="n" 
rel="next">Smart Key - Fortran Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-JavaScript-Source-Code" accesskey="p" rel="prev">Smart 
Key - JavaScript Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Objective_002dC-Source-Code-1"></a>
-<h4 class="subsection">E.2.24 Smart Key - Objective-C Source Code</h4>
+<h4 class="subsection">E.2.25 Smart Key - Objective-C Source Code</h4>
 
 <a name="index-objc_002dcpp_002dinclude_002dpath"></a>
 <a name="index-objc_002dinclude_002dpath"></a>
@@ -10142,7 +10425,7 @@ OO-Browser):
 Next: <a href="#Smart-Key-_002d-Occurrence-Matches" accesskey="n" 
rel="next">Smart Key - Occurrence Matches</a>, Previous: <a 
href="#Smart-Key-_002d-Objective_002dC-Source-Code" accesskey="p" 
rel="prev">Smart Key - Objective-C Source Code</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Fortran-Source-Code-1"></a>
-<h4 class="subsection">E.2.25 Smart Key - Fortran Source Code</h4>
+<h4 class="subsection">E.2.26 Smart Key - Fortran Source Code</h4>
 
 <div class="format">
 <pre class="format">When pressed within a Fortran source code file:
@@ -10160,7 +10443,7 @@ Next: <a href="#Smart-Key-_002d-Occurrence-Matches" 
accesskey="n" rel="next">Sma
 Next: <a href="#Smart-Key-_002d-Calendar-Mode" accesskey="n" rel="next">Smart 
Key - Calendar Mode</a>, Previous: <a 
href="#Smart-Key-_002d-Fortran-Source-Code" accesskey="p" rel="prev">Smart Key 
- Fortran Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Occurrence-Matches-1"></a>
-<h4 class="subsection">E.2.26 Smart Key - Occurrence Matches</h4>
+<h4 class="subsection">E.2.27 Smart Key - Occurrence Matches</h4>
 
 <div class="format">
 <pre class="format">When pressed within an occur-mode, moccur-mode or 
amoccur-mode buffer:
@@ -10175,7 +10458,7 @@ Next: <a href="#Smart-Key-_002d-Calendar-Mode" 
accesskey="n" rel="next">Smart Ke
 Next: <a href="#Smart-Key-_002d-Man-Page-Apropos" accesskey="n" 
rel="next">Smart Key - Man Page Apropos</a>, Previous: <a 
href="#Smart-Key-_002d-Occurrence-Matches" accesskey="p" rel="prev">Smart Key - 
Occurrence Matches</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Calendar-Mode-1"></a>
-<h4 class="subsection">E.2.27 Smart Key - Calendar Mode</h4>
+<h4 class="subsection">E.2.28 Smart Key - Calendar Mode</h4>
 
 <div class="format">
 <pre class="format">When pressed within a calendar-mode buffer:
@@ -10202,7 +10485,7 @@ Next: <a href="#Smart-Key-_002d-Man-Page-Apropos" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-Emacs-Outline-Mode" accesskey="n" 
rel="next">Smart Key - Emacs Outline Mode</a>, Previous: <a 
href="#Smart-Key-_002d-Calendar-Mode" accesskey="p" rel="prev">Smart Key - 
Calendar Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Man-Page-Apropos-1"></a>
-<h4 class="subsection">E.2.28 Smart Key - Man Page Apropos</h4>
+<h4 class="subsection">E.2.29 Smart Key - Man Page Apropos</h4>
 <div class="format">
 <pre class="format">When pressed within a man page apropos buffer or listing:
   ACTION KEY
@@ -10224,7 +10507,7 @@ Next: <a href="#Smart-Key-_002d-Emacs-Outline-Mode" 
accesskey="n" rel="next">Sma
 Next: <a href="#Smart-Key-_002d-Info-Manuals" accesskey="n" rel="next">Smart 
Key - Info Manuals</a>, Previous: <a href="#Smart-Key-_002d-Man-Page-Apropos" 
accesskey="p" rel="prev">Smart Key - Man Page Apropos</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Emacs-Outline-Mode-1"></a>
-<h4 class="subsection">E.2.29 Smart Key - Emacs Outline Mode</h4>
+<h4 class="subsection">E.2.30 Smart Key - Emacs Outline Mode</h4>
 <a name="index-selective_002ddisplay"></a>
 <div class="format">
 <pre class="format">If pressed within an outline-mode buffer or when no other 
context is matched
@@ -10261,7 +10544,7 @@ and outline-minor-mode is enabled:
 Next: <a href="#Smart-Key-_002d-Email-Composers" accesskey="n" 
rel="next">Smart Key - Email Composers</a>, Previous: <a 
href="#Smart-Key-_002d-Emacs-Outline-Mode" accesskey="p" rel="prev">Smart Key - 
Emacs Outline Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Info-Manuals-1"></a>
-<h4 class="subsection">E.2.30 Smart Key - Info Manuals</h4>
+<h4 class="subsection">E.2.31 Smart Key - Info Manuals</h4>
 
 <div class="format">
 <pre class="format"><a name="index-click_002c-Info"></a><a 
name="index-Info-browsing"></a><a name="index-Info_002dglobal_002dnext"></a><a 
name="index-Info_002dglobal_002dprev"></a>If pressed within an Info manual node:
@@ -10302,7 +10585,7 @@ Use <kbd>{s}</kbd> within an Info manual to search for 
any concept that interest
 Next: <a href="#Smart-Key-_002d-GNUS-Newsreader" accesskey="n" 
rel="next">Smart Key - GNUS Newsreader</a>, Previous: <a 
href="#Smart-Key-_002d-Info-Manuals" accesskey="p" rel="prev">Smart Key - Info 
Manuals</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Email-Composers-1"></a>
-<h4 class="subsection">E.2.31 Smart Key - Email Composers</h4>
+<h4 class="subsection">E.2.32 Smart Key - Email Composers</h4>
 <a name="index-hmail_003areader"></a>
 <a name="index-hmail_003alister"></a>
 <div class="format">
@@ -10341,7 +10624,7 @@ Next: <a href="#Smart-Key-_002d-GNUS-Newsreader" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-Buffer-Menus" accesskey="n" rel="next">Smart 
Key - Buffer Menus</a>, Previous: <a href="#Smart-Key-_002d-Email-Composers" 
accesskey="p" rel="prev">Smart Key - Email Composers</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-GNUS-Newsreader-1"></a>
-<h4 class="subsection">E.2.32 Smart Key - GNUS Newsreader</h4>
+<h4 class="subsection">E.2.33 Smart Key - GNUS Newsreader</h4>
 <a name="index-click_002c-Gnus"></a>
 <a name="index-Gnus-browsing"></a>
 <div class="format">
@@ -10408,7 +10691,7 @@ Next: <a href="#Smart-Key-_002d-Buffer-Menus" 
accesskey="n" rel="next">Smart Key
 Next: <a href="#Smart-Key-_002d-Tar-File-Mode" accesskey="n" rel="next">Smart 
Key - Tar File Mode</a>, Previous: <a href="#Smart-Key-_002d-GNUS-Newsreader" 
accesskey="p" rel="prev">Smart Key - GNUS Newsreader</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Buffer-Menus-1"></a>
-<h4 class="subsection">E.2.33 Smart Key - Buffer Menus</h4>
+<h4 class="subsection">E.2.34 Smart Key - Buffer Menus</h4>
 <a name="index-click_002c-buffer-menu"></a>
 <a name="index-buffer-menu-2"></a>
 <div class="format">
@@ -10465,7 +10748,7 @@ Next: <a href="#Smart-Key-_002d-Tar-File-Mode" 
accesskey="n" rel="next">Smart Ke
 Next: <a href="#Smart-Key-_002d-Man-Pages" accesskey="n" rel="next">Smart Key 
- Man Pages</a>, Previous: <a href="#Smart-Key-_002d-Buffer-Menus" 
accesskey="p" rel="prev">Smart Key - Buffer Menus</a>, Up: <a 
href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart Keyboard Keys</a> 
&nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Tar-File-Mode-1"></a>
-<h4 class="subsection">E.2.34 Smart Key - Tar File Mode</h4>
+<h4 class="subsection">E.2.35 Smart Key - Tar File Mode</h4>
 <a name="index-click_002c-tar"></a>
 <a name="index-tar-archive-browsing"></a>
 <a name="index-extracting-from-tar-files"></a>
@@ -10492,7 +10775,7 @@ Next: <a href="#Smart-Key-_002d-Man-Pages" 
accesskey="n" rel="next">Smart Key -
 Next: <a href="#Smart-Key-_002d-WWW-URLs" accesskey="n" rel="next">Smart Key - 
WWW URLs</a>, Previous: <a href="#Smart-Key-_002d-Tar-File-Mode" accesskey="p" 
rel="prev">Smart Key - Tar File Mode</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Man-Pages-1"></a>
-<h4 class="subsection">E.2.35 Smart Key - Man Pages</h4>
+<h4 class="subsection">E.2.36 Smart Key - Man Pages</h4>
 <a name="index-man-page-references"></a>
 <a name="index-smart_002dman_002dc_002droutine_002dref"></a>
 <div class="format">
@@ -10512,11 +10795,11 @@ containing its pathname:
 Next: <a href="#Smart-Key-_002d-HyRolo-Match-Buffers" accesskey="n" 
rel="next">Smart Key - HyRolo Match Buffers</a>, Previous: <a 
href="#Smart-Key-_002d-Man-Pages" accesskey="p" rel="prev">Smart Key - Man 
Pages</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-WWW-URLs-1"></a>
-<h4 class="subsection">E.2.36 Smart Key - WWW URLs</h4>
+<h4 class="subsection">E.2.37 Smart Key - WWW URLs</h4>
 <a name="index-click_002c-world_002dwide-web"></a>
 <a name="index-W3"></a>
 <a name="index-URL-2"></a>
-<a name="index-browse_002durl_002dbrowser_002dfunction-3"></a>
+<a name="index-browse_002durl_002dbrowser_002dfunction-2"></a>
 <a name="index-World_002dwide-Web-2"></a>
 <a name="index-WWW-2"></a>
 <a name="index-C_002dh-h-c-u-1"></a>
@@ -10538,7 +10821,7 @@ Next: <a href="#Smart-Key-_002d-HyRolo-Match-Buffers" 
accesskey="n" rel="next">S
 Next: <a href="#Smart-Key-_002d-Image-Thumbnails" accesskey="n" 
rel="next">Smart Key - Image Thumbnails</a>, Previous: <a 
href="#Smart-Key-_002d-WWW-URLs" accesskey="p" rel="prev">Smart Key - WWW 
URLs</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-HyRolo-Match-Buffers-1"></a>
-<h4 class="subsection">E.2.37 Smart Key - HyRolo Match Buffers</h4>
+<h4 class="subsection">E.2.38 Smart Key - HyRolo Match Buffers</h4>
 <a name="index-click_002c-hyrolo-matches"></a>
 <a name="index-hyrolo-matches"></a>
 <div class="format">
@@ -10554,7 +10837,7 @@ Next: <a href="#Smart-Key-_002d-Image-Thumbnails" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-Gomoku-Game" accesskey="n" rel="next">Smart 
Key - Gomoku Game</a>, Previous: <a 
href="#Smart-Key-_002d-HyRolo-Match-Buffers" accesskey="p" rel="prev">Smart Key 
- HyRolo Match Buffers</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Image-Thumbnails-1"></a>
-<h4 class="subsection">E.2.38 Smart Key - Image Thumbnails</h4>
+<h4 class="subsection">E.2.39 Smart Key - Image Thumbnails</h4>
 <a name="index-images"></a>
 <a name="index-thumbnails"></a>
 <a name="index-dired_002c-images"></a>
@@ -10575,7 +10858,7 @@ Next: <a href="#Smart-Key-_002d-Gomoku-Game" 
accesskey="n" rel="next">Smart Key
 Next: <a href="#Smart-Key-_002d-The-OO_002dBrowser" accesskey="n" 
rel="next">Smart Key - The OO-Browser</a>, Previous: <a 
href="#Smart-Key-_002d-Image-Thumbnails" accesskey="p" rel="prev">Smart Key - 
Image Thumbnails</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Gomoku-Game-1"></a>
-<h4 class="subsection">E.2.39 Smart Key - Gomoku Game</h4>
+<h4 class="subsection">E.2.40 Smart Key - Gomoku Game</h4>
 <a name="index-game_002c-gomoku"></a>
 <a name="index-gomoku"></a>
 <div class="format">
@@ -10593,7 +10876,7 @@ Next: <a href="#Smart-Key-_002d-The-OO_002dBrowser" 
accesskey="n" rel="next">Sma
 Next: <a href="#Smart-Key-_002d-Default-Context" accesskey="n" 
rel="next">Smart Key - Default Context</a>, Previous: <a 
href="#Smart-Key-_002d-Gomoku-Game" accesskey="p" rel="prev">Smart Key - Gomoku 
Game</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" rel="up">Smart 
Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table of contents" 
rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-The-OO_002dBrowser-1"></a>
-<h4 class="subsection">E.2.40 Smart Key - The OO-Browser</h4>
+<h4 class="subsection">E.2.41 Smart Key - The OO-Browser</h4>
 
 <a name="index-OO_002dBrowser"></a>
 <a name="index-object_002doriented-code-browsing"></a>
@@ -10667,7 +10950,7 @@ buffer after an OO-Browser Environment has been loaded:
 Previous: <a href="#Smart-Key-_002d-The-OO_002dBrowser" accesskey="p" 
rel="prev">Smart Key - The OO-Browser</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Default-Context-1"></a>
-<h4 class="subsection">E.2.41 Smart Key - Default Context</h4>
+<h4 class="subsection">E.2.42 Smart Key - Default Context</h4>
 <a name="index-action_002dkey_002ddefault_002dfunction-1"></a>
 <a name="index-assist_002dkey_002ddefault_002dfunction-1"></a>
 <a name="index-hyperbole-1"></a>
@@ -10906,10 +11189,8 @@ providing sketches of possible additions;
 </li><li> and to acknowledge known weaknesses in the current system.
 </li></ul>
 
-<p>If you would like to see some of this work done, consider funding
-its development.  Without any serious interest from users, progress
-on these fronts will be slow.  Here are some new features we have
-in mind, however.
+<p>Without any serious interest from users, progress on these fronts will
+be slow.  Here are some new features we have in mind, however.
 </p>
 <dl compact="compact">
 <dt>Button Copying, Killing, and Yanking</dt>
@@ -11279,7 +11560,7 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a 
href="#index-a"><code>a</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-A"><code>A</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Action-Key-1"><code>Action 
Key</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-Action-Key_002c-web-browsing-1"><code>Action Key, web 
browsing</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-Action-Key_002c-web-browsing-1"><code>Action Key, web 
browsing</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-Assist-Key-1"><code>Assist 
Key</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Keys">Smart 
Keys</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Key-Index_ky_letter-B">B</a></th><td></td><td></td></tr>
@@ -11304,7 +11585,8 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-C_002dc-c"><code>C-c 
c</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002da"><code>C-c 
C-a</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002db"><code>C-c 
C-b</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Moving-Around">Moving Around</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dc"><code>C-c 
C-c</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dc"><code>C-c 
C-c</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-C_002dc-C_002dc-1"><code>C-c 
C-c</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dd"><code>C-c 
C-d</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Moving-Around">Moving Around</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002df"><code>C-c 
C-f</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Moving-Around">Moving Around</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dc-C_002dh"><code>C-c 
C-h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
@@ -11335,7 +11617,7 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-1"><code>C-h 
h</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-a"><code>C-h h c 
a</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-d"><code>C-h h c 
d</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-r"><code>C-h h c 
r</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Referent-Display">Referent Display</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-r"><code>C-h h c 
r</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Internal-Viewers">Internal Viewers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-u"><code>C-h h c 
u</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-u-1"><code>C-h h c 
u</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002dh-h-c-w"><code>C-h h c 
w</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Web-Search-Engines">Web Search Engines</a></td></tr>
@@ -11450,9 +11732,12 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a 
href="#index-M_002do"><code>M-o</code></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-M_002do-1"><code>M-o</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-M_002do-i-_003cwindow_002did_003e"><code>M-o i 
&lt;window-id&gt;</code></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-M_002do-m-_003cwindow_002did_003e"><code>M-o m 
&lt;window-id&gt;</code></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-M_002do-r-_003cwindow_002did_003e"><code>M-o r 
&lt;window-id&gt;</code></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-M_002do-t-_003cwindow_002did_003e"><code>M-o t 
&lt;window-id&gt;</code></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-M_002dRET"><code>M-<span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-M_002dRET-1"><code>M-<span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-M_002dRET-1"><code>M-RET</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-M_002dRET-2"><code>M-<span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-M_002dx-kotl_002dmode_003ashow_002dsubtree"><code>M-x 
kotl-mode:show-subtree</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-middle-mouse-key-1"><code>middle 
mouse key</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
@@ -11735,6 +12020,8 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-actypes-link_002dto_002delisp_002ddoc"><code>actypes 
link-to-elisp-doc</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-link_002dto_002dfile"><code>actypes 
link-to-file</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-link_002dto_002dfile_002dline"><code>actypes 
link-to-file-line</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-link_002dto_002dgbut"><code>actypes 
link-to-gbut</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-link_002dto_002dibut"><code>actypes 
link-to-ibut</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-link_002dto_002dInfo_002dindex_002ditem"><code>actypes 
link-to-Info-index-item</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-link_002dto_002dInfo_002dnode"><code>actypes 
link-to-Info-node</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-link_002dto_002dkcell"><code>actypes 
link-to-kcell</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Action-Types">Action Types</a></td></tr>
@@ -11763,10 +12050,9 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-assist_002dmouse_002dkey"><code>assist-mouse-key</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Function_fn_letter-B">B</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-browse_002durl_002dbrowser_002dfunction">browse-url-browser-function</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-browse_002durl_002dbrowser_002dfunction-1">browse-url-browser-function</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-browse_002durl_002dbrowser_002dfunction-2">browse-url-browser-function</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-browse_002durl_002dbrowser_002dfunction-3">browse-url-browser-function</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW 
URLs</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-browse_002durl_002dbrowser_002dfunction">browse-url-browser-function</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-browse_002durl_002dbrowser_002dfunction-1">browse-url-browser-function</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-browse_002durl_002dbrowser_002dfunction-2">browse-url-browser-function</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW 
URLs</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Function_fn_letter-C">C</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-c_002b_002b_002dcpp_002dinclude_002dpath">c++-cpp-include-path</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-C_002b_002b-Source-Code">Smart Key - 
C++ Source Code</a></td></tr>
@@ -11809,14 +12095,14 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a href="#index-file_002c-_002ehypb">file, 
.hypb</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-_002ekotl-suffix">file, .kotl 
suffix</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Outlines">Creating Outlines</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-DEMO-1">file, 
DEMO</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-file_002c-DIR">file, 
DIR</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-file_002c-DIR">file, 
DIR</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-file_002c-EXAMPLE_002ekotl">file, 
EXAMPLE.kotl</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner">Koutliner</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-file_002c-func_002dmenu_002eel">file, 
func-menu.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-file_002c-func_002dmenu_002eel">file, 
func-menu.el</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-file_002c-hactypes_002eel">file, 
hactypes.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Types">Creating Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-hactypes_002eel-1">file, 
hactypes.el</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-file_002c-hbut_002eel">file, 
hbut.el</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-file_002c-hbut_002eel-1">file, 
hbut.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Programmatic-Button-Creation">Programmatic Button Creation</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-file_002c-hib_002ddebbugs_002eel">file, 
hib-debbugs.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-file_002c-hib_002ddebbugs_002eel">file, 
hib-debbugs.el</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-file_002c-hib_002dkbd_002eel">file, 
hib-kbd.el</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-file_002c-hibtypes_002eel">file, 
hibtypes.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-hibtypes_002eel-1">file, 
hibtypes.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Types">Creating Types</a></td></tr>
@@ -11836,7 +12122,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-man_002fhyperbole_002einfo">file, 
man/hyperbole.info</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invocation">Invocation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-man_002fhyperbole_002epdf">file, 
man/hyperbole.pdf</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invocation">Invocation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-man_002fhyperbole_002etexi">file, 
man/hyperbole.texi</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invocation">Invocation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-file_002c-MANIFEST">file, 
MANIFEST</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-file_002c-MANIFEST">file, 
MANIFEST</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-fill_002dcolumn">fill-column</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Koutliner-Keys">Koutliner Keys</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-fill_002dprefix">fill-prefix</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Button-Label-Normalization">Button Label 
Normalization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-find_002dfile"><code>find-file</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Using-URLs-with-Find_002dFile">Using URLs with 
Find-File</a></td></tr>
@@ -11854,12 +12140,15 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-hbut_003alabel_002dto_002dkey">hbut:label-to-key</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Button-Label-Normalization">Button Label 
Normalization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dbegin_002dload_002dhook">hibtypes-begin-load-hook</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dend_002dload_002dhook">hibtypes-end-load-hook</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dgit_002ddefault_002dproject">hibtypes-git-default-project</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dgit_002ddefault_002dproject-1">hibtypes-git-default-project</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dgithub_002ddefault_002dproject">hibtypes-github-default-project</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dgithub_002ddefault_002duser">hibtypes-github-default-user</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dgithub_002ddefault_002duser-1">hibtypes-github-default-user</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dsocial_002ddefault_002dservice">hibtypes-social-default-service</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hibtypes_002dgit_002ddefault_002dproject">hibtypes-git-default-project</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-hibtypes_002dgit_002ddefault_002dproject-1">hibtypes-git-default-project</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-hibtypes_002dgithub_002ddefault_002dproject">hibtypes-github-default-project</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-hibtypes_002dgithub_002ddefault_002duser">hibtypes-github-default-user</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-hibtypes_002dgithub_002ddefault_002duser-1">hibtypes-github-default-user</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-hibtypes_002dgitlab_002ddefault_002dproject">hibtypes-gitlab-default-project</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-hibtypes_002dgitlab_002ddefault_002duser">hibtypes-gitlab-default-user</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-hibtypes_002dgitlab_002ddefault_002duser-1">hibtypes-gitlab-default-user</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-hibtypes_002dsocial_002ddefault_002dservice">hibtypes-social-default-service</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-hkey_002dace_002dwindow_002dsetup"><code>hkey-ace-window-setup</code></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-hkey_002dalist">hkey-alist</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Questions-and-Answers">Questions and 
Answers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hkey_002dalways_002ddisplay_002dmenu">hkey-always-display-menu</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Smart-Menus">Smart Key - Smart 
Menus</a></td></tr>
@@ -11886,16 +12175,20 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-hmouse_002dx_002ddrag_002dsensitivity">hmouse-x-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-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-Buttons">Implicit Buttons</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_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>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aexternal_002ddisplay_002dalist_002dx">hpath:external-display-alist-x</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_003afind"><code>hpath:find</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003afind"><code>hpath:find</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_003afind_002dfile_002durls_002dmode"><code>hpath:find-file-urls-mode</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Using-URLs-with-Find_002dFile">Using URLs with 
Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hpath_003aget_002dexternal_002ddisplay_002dalist"><code>hpath:get-external-display-alist</code></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_003ainternal_002ddisplay_002dalist">hpath:internal-display-alist</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_003asuffixes">hpath:suffixes</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hpath_003ainternal_002ddisplay_002dalist-1">hpath:internal-display-alist</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_003anative_002dimage_002dsuffixes">hpath:native-image-suffixes</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_003asuffixes">hpath:suffixes</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_003avariables">hpath:variables</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Link-Variable-Substitution">Link Variable 
Substitution</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hproperty_003abut_002dcreate"><code>hproperty:but-create</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Button-Colors">Button Colors</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hproperty_003abut_002demphasize_002dflag">hproperty:but-emphasize-flag</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Button-Colors">Button Colors</a></td></tr>
@@ -11975,42 +12268,48 @@ 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-annot_002dbib"><code>ibtypes 
annot-bib</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-ibtypes-ctags"><code>ibtypes 
ctags</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-debbugs_002dgnu_002dmode"><code>ibtypes 
debbugs-gnu-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-debbugs_002dgnu_002dquery"><code>ibtypes 
debbugs-gnu-query</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-git_002dcommit_002dreference"><code>ibtypes 
git-commit-reference</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</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-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-org_002dmode"><code>ibtypes 
org-mode</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-patch_002dmsg"><code>ibtypes 
patch-msg</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-ibtypes-pathname"><code>ibtypes 
pathname</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-pathname_002dline_002dand_002dcolumn"><code>ibtypes 
pathname-line-and-column</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-ibtypes-rfc"><code>ibtypes 
rfc</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-rfc_002dtoc"><code>ibtypes 
rfc-toc</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-social_002dreference"><code>ibtypes 
social-reference</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-texinfo_002dref"><code>ibtypes 
texinfo-ref</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-text_002dtoc"><code>ibtypes 
text-toc</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ibtypes-www_002durl"><code>ibtypes 
www-url</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</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>
+<tr><td></td><td valign="top"><a href="#index-ibtypes-ctags"><code>ibtypes 
ctags</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-debbugs_002dgnu_002dmode"><code>ibtypes 
debbugs-gnu-mode</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-debbugs_002dgnu_002dquery"><code>ibtypes 
debbugs-gnu-query</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-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-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>
+<tr><td></td><td valign="top"><a 
href="#index-ibtypes-git_002dcommit_002dreference"><code>ibtypes 
git-commit-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-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-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-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>
+<tr><td></td><td valign="top"><a 
href="#index-ibtypes-org_002dmode"><code>ibtypes 
org-mode</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-patch_002dmsg"><code>ibtypes 
patch-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-pathname"><code>ibtypes 
pathname</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-pathname_002dline_002dand_002dcolumn"><code>ibtypes 
pathname-line-and-column</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-rfc"><code>ibtypes 
rfc</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-rfc_002dtoc"><code>ibtypes 
rfc-toc</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-ripgrep_002dmsg"><code>ibtypes 
ripgrep-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-social_002dreference"><code>ibtypes 
social-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-texinfo_002dref"><code>ibtypes 
texinfo-ref</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-text_002dtoc"><code>ibtypes 
text-toc</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-www_002durl"><code>ibtypes 
www-url</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-ibut_003aat_002dp"><code>ibut:at-p</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-image_002ddired_002dexternal_002dviewer">image-dired-external-viewer</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Image-Thumbnails">Smart Key - Image 
Thumbnails</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Info_002ddirectory_002dlist">Info-directory-list</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Invocation">Invocation</a></td></tr>
@@ -12158,6 +12457,8 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><th><a name="Function_fn_letter-O">O</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-objc_002dcpp_002dinclude_002dpath">objc-cpp-include-path</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Objective_002dC-Source-Code">Smart Key 
- Objective-C Source Code</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-objc_002dinclude_002dpath">objc-include-path</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Objective_002dC-Source-Code">Smart Key 
- Objective-C Source Code</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-org_002dctrl_002dc_002dctrl_002dc"><code>org-ctrl-c-ctrl-c</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-org_002dmeta_002dreturn"><code>org-meta-return</code></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="Function_fn_letter-R">R</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-run_002dhooks"><code>run-hooks</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Glossary">Glossary</a></td></tr>
@@ -12305,7 +12606,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <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>
 <tr><td></td><td valign="top"><a 
href="#index-Action-Key_002c-hide-or-show-cell">Action Key, hide or show 
cell</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Action-Key_002c-klink">Action 
Key, klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-Action-Key_002c-web-browsing">Action Key, web 
browsing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-Action-Key_002c-web-browsing">Action Key, web 
browsing</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-Mouse-Key">Action Mouse 
Key</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-Action-Mouse-Key-1">Action Mouse 
Key</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-Action-Mouse-Key-drag">Action 
Mouse Key drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Drags">Smart Mouse Key Drags</a></td></tr>
@@ -12317,7 +12618,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-active-region-1">active 
region</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-actype_002c-link_002dto_002dmail">actype, 
link-to-mail</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-actypes_002c-list-of">actypes, 
list of</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-address">address</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-address">address</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-alpha-labels">alpha 
labels</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Autonumbering">Autonumbering</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-anonymous-ftp">anonymous 
ftp</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Top">Top</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-API">API</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Embedding-Hyperbole">Embedding Hyperbole</a></td></tr>
@@ -12355,12 +12656,12 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><th><a name="Concept-Index_cp_letter-B">B</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a href="#index-balance-windows">balance 
windows</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-BBDB">BBDB</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Settings">HyRolo Settings</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-bibliography">bibliography</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-bibliography">bibliography</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-Big-Brother-DataBase">Big 
Brother DataBase</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Settings">HyRolo Settings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-blank-lines_002c-toggle">blank 
lines, toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#View-Specs">View Specs</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-bookmarks">bookmarks</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Buttons">Global Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-boolean-expressions">boolean 
expressions</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-breakpoint">breakpoint</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-breakpoint">breakpoint</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-browsing-URLs">browsing 
URLs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-browsing-URLs-in-find_002dfile">browsing URLs in 
find-file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer-id">buffer 
id</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
@@ -12368,12 +12669,14 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-buffer-menu-1">buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer-menu-2">buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer-menu-item-drag">buffer 
menu item drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer 
Items</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-buffer-replace">buffer 
replace</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-buffer_002c-bury">buffer, 
bury</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-copy">buffer, 
copy</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Displaying-Buffers">Displaying Buffers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-swap">buffer, 
swap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Swapping-Buffers">Swapping Buffers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-swap-1">buffer, 
swap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-unbury">buffer, 
unbury</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-bug-tracking">bug 
tracking</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-buffers-swap">buffers 
swap</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-bug-tracking">bug 
tracking</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-bury-buffer">bury 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-burying">burying</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-button">button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons">Buttons</a></td></tr>
@@ -12423,14 +12726,14 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-button_002c-moving">button, 
moving</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-button_002c-multiple-lines">button, multiple 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Label-Normalization">Button Label Normalization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-button_002c-split-across-lines">button, split across 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Label-Normalization">Button Label Normalization</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-byte-compiler-error">byte 
compiler error</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-byte-compiler-error">byte 
compiler error</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-C">C</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C-call-tree">C call 
tree</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-C-flow-graph">C flow 
graph</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-C_002fC_002b_002b-call-trees">C/C++ call 
trees</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-C_002fC_002b_002b-cross_002dreference">C/C++ 
cross-reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-call-tree_002c-C">call tree, 
C</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Implicit-Buttons">Implicit 
Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-C-call-tree">C call 
tree</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-C-flow-graph">C flow 
graph</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-C_002fC_002b_002b-call-trees">C/C++ call 
trees</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-C_002fC_002b_002b-cross_002dreference">C/C++ 
cross-reference</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-call-tree_002c-C">call tree, 
C</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-cell_002c-adding">cell, 
adding</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Adding-and-Killing">Adding and Killing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-cell_002c-appending">cell, 
appending</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Splitting-and-Appending">Splitting and Appending</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-cell_002c-attribute">cell, 
attribute</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cell-Attributes">Cell Attributes</a></td></tr>
@@ -12461,6 +12764,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-cell_002c-yanking-contents">cell, yanking 
contents</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Adding-and-Killing">Adding and Killing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-change-key-bindings">change key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-change-key-bindings-1">change 
key bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-change_002dlog_002dmode">change-log-mode</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Lisp-Source-Code">Smart Key - Lisp 
Source Code</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-changing-the-view-spec">changing 
the view spec</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#View-Specs">View Specs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-click_002c-buffer-menu">click, 
buffer menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-click_002c-button">click, 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Hyperbole-Buttons">Smart Key - Hyperbole 
Buttons</a></td></tr>
@@ -12475,17 +12779,20 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-clone-window">clone 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cloning-Windows">Cloning Windows</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-clone-window-1">clone 
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-clone-window-2">clone 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Drags-outside-a-Window">Smart Mouse Drags outside a 
Window</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-code-block">code 
block</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-code-block-selection">code block 
selection</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-collaboration">collaboration</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Koutliner-History">Koutliner History</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-collapse-lines">collapse 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a href="#View-Specs">View 
Specs</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-collapsing">collapsing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-comment">comment</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-comment-1">comment</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-compiler-error">compiler 
error</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-compiler-error-1">compiler 
error</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-company_002dmode">company-mode</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-Company-Mode">Smart Key - Company 
Mode</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-compiler-error">compiler 
error</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-compiler-error-1">compiler 
error</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-completion">completion</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Argument-Selection">Smart Key Argument Selection</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-completion-1">completion</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-completion-2">completion</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-Argument-Completion">Smart Key - 
Argument Completion</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-completion-1">completion</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-completion-2">completion</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-Company-Mode">Smart Key - Company 
Mode</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-completion-3">completion</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-Argument-Completion">Smart Key - 
Argument Completion</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-configuration">configuration</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-contacts_002c-Google">contacts, 
Google</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Settings">HyRolo Settings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-context">context</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
@@ -12502,9 +12809,9 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-creator-attribute">creator 
attribute</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cell-Attributes">Cell Attributes</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-credits">credits</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Top">Top</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-cross-referencing">cross 
referencing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner-History">Koutliner History</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-cross_002dreference_002c-Texinfo">cross-reference, 
Texinfo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-Cscope">Cscope</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-ctags-entry">ctags 
entry</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-cross_002dreference_002c-Texinfo">cross-reference, 
Texinfo</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-Cscope">Cscope</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-ctags-entry">ctags 
entry</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-customization">customization</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-customization-1">customization</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-customize">customize</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
@@ -12518,7 +12825,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><th><a name="Concept-Index_cp_letter-D">D</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-database">database</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-RDB-Mode">Smart Key - RDB Mode</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-datestamps">datestamps</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-dbx">dbx</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-dbx">dbx</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-debugging-Smart-Keys">debugging 
Smart Keys</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-default-label-type">default 
label type</a>:</td><td>&nbsp;</td><td valign="top"><a href="#View-Specs">View 
Specs</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-default-Smart-Key-context">default Smart Key 
context</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Operations">Smart Key Operations</a></td></tr>
@@ -12545,10 +12852,11 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-disable-local-key-override">disable local key 
override</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-display">display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-display-function">display 
function</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-display-outside-Emacs">display 
outside Emacs</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-display-where">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-DisplayHere-mode">DisplayHere 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Dired-Mode">Smart Key - Dired Mode</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-distributed-collaboration">distributed 
collaboration</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner-History">Koutliner History</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-document-identifier">document 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-document-identifier">document 
identifier</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-double-click">double 
click</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Argument-Selection">Smart Key Argument Selection</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-drag">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-drag-1">drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Thing-Selection">Thing Selection</a></td></tr>
@@ -12580,13 +12888,15 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-dragging-outside-Emacs">dragging 
outside Emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Drags-outside-a-Window">Smart Mouse Drags outside a 
Window</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-E">E</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-e_002dmail-address">e-mail 
address</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-e_002dmail-address">e-mail 
address</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-e_002dmail-address-1">e-mail 
address</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cell-Attributes">Cell Attributes</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-elink">elink</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-elisp-identifier">elisp 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Lisp-Source-Code">Smart Key - Lisp Source 
Code</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ellipses">ellipses</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#View-Specs">View Specs</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Emacs">Emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Emacs-1">Emacs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Emacs-Lisp">Emacs 
Lisp</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Emacs-Lisp-compiler-error">Emacs 
Lisp compiler error</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Emacs-Lisp-compiler-error">Emacs 
Lisp compiler error</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-Emacs-Lisp-variables">Emacs Lisp 
variables</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Link-Variable-Substitution">Link Variable Substitution</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-emacs-outline">emacs 
outline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Emacs-support">Emacs 
support</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Colors">Button Colors</a></td></tr>
@@ -12597,7 +12907,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-Engelbart-1">Engelbart</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-environment-variables">environment 
variables</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Link-Variable-Substitution">Link Variable Substitution</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-equalize-windows">equalize 
windows</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-etags-entry">etags 
entry</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-etags-entry">etags 
entry</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-exchanging-cells">exchanging 
cells</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Transposing">Transposing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-exit-HyControl">exit 
HyControl</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-expanding">expanding</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
@@ -12606,6 +12916,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-explicit-button-creation">explicit button 
creation</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-explicit-button-deletion">explicit button 
deletion</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Deletion">Deletion</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-explicit-button-formats">explicit button 
formats</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Operational-and-Storage-Formats">Operational and Storage 
Formats</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-explicit-button-link">explicit 
button link</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-explicit-button-modification">explicit button 
modification</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modification">Modification</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-explicit-button-renaming">explicit button 
renaming</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Renaming">Renaming</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-explicit-button-searching">explicit button 
searching</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Searching-and-Summarizing">Searching and Summarizing</a></td></tr>
@@ -12614,10 +12925,11 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-explicit-button_002c-creation">explicit button, 
creation</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Programmatic-Button-Creation">Programmatic Button Creation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-exporting">exporting</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Exporting">Exporting</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-exporting-an-outline">exporting 
an outline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-external-display">external 
display</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-external-display-1">external 
display</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-external-klink">external 
klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-external-program">external 
program</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-external-viewer">external 
viewer</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-external-viewer-1">external 
viewer</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-extracting-from-tar-files">extracting from tar 
files</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Tar-File-Mode">Smart Key - Tar File Mode</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-F">F</a></th><td></td><td></td></tr>
@@ -12626,7 +12938,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-file_002c-DEMO">file, 
DEMO</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manual-Overview">Manual 
Overview</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-file_002c-hycontrol_002eel">file, 
hycontrol.el</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-file_002c-importing">file, 
importing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-filename">filename</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-filename">filename</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-fill-prefix">fill 
prefix</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Label-Normalization">Button Label Normalization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-filling">filling</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Filling">Filling</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-filling-1">filling</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Filling">Filling</a></td></tr>
@@ -12647,22 +12959,25 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-frame_002c-to-edge">frame, to 
edge</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-frame_002c-zoom">frame, 
zoom</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-frames-control">frames 
control</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ftp">ftp</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-ftp-1">ftp</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-func_002dmenu">func-menu</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-ftp">ftp</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-ftp-1">ftp</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-func_002dmenu">func-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-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-Buttons">Implicit Buttons</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 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>
-<tr><td></td><td valign="top"><a 
href="#index-gdb">gdb</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-git-commit-reference">git commit 
reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-git-reference">git 
reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-github-reference">github 
reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-gdb">gdb</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-git-commit-reference">git commit 
reference</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-git-reference">git 
reference</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-github-reference">github 
reference</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-gitlab-reference">gitlab 
reference</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-glink">glink</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-global-button">global 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons">Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-global-button-1">global 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Buttons">Global Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-global-button-2">global 
button</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Button-Files">Button 
Files</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-global-button-link">global 
button link</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-global-button_002c-modify">global button, 
modify</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Questions-and-Answers">Questions and Answers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-glossary">glossary</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Gmail-Contacts">Gmail 
Contacts</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Settings">HyRolo Settings</a></td></tr>
@@ -12671,10 +12986,11 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-Gnus">Gnus</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-Gnus-1">Gnus</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-News">Buttons in News</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Gnus-browsing">Gnus 
browsing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-GNUS-Newsreader">Smart Key - GNUS 
Newsreader</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-GNUS-push_002dbuttons">GNUS 
push-buttons</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-GNUS-push_002dbuttons">GNUS 
push-buttons</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-gomoku">gomoku</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Gomoku-Game">Smart Key - Gomoku Game</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Google-Contacts">Google 
Contacts</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Settings">HyRolo Settings</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-grep">grep</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-grep">grep</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-grep-1">grep</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-Grep">Grep</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-grep-files">grep 
files</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-grid-of-windows">grid of 
windows</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -12682,7 +12998,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-groupware">groupware</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-H">H</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-hashtag">hashtag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-hashtag">hashtag</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-help-buffer">help 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Help-Buffers">Smart Key - Help Buffers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-help_002c-button">help, 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Operations">Smart Key Operations</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-help_002c-menu-items">help, menu 
items</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
@@ -12692,7 +13008,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-hide-subtree">hide 
subtree</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-hide-tree">hide 
tree</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hiding">hiding</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-hiding-signatures">hiding 
signatures</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-hiding-signatures">hiding 
signatures</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-highlighting-buttons">highlighting 
buttons</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Colors">Button Colors</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-history">history</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-hook-variables">hook 
variables</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hook-Variables">Hook Variables</a></td></tr>
@@ -12718,13 +13034,13 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-Hyperbole-features">Hyperbole 
features</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Hyperbole-help">Hyperbole 
help</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Argument-Selection">Smart Key Argument Selection</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole-mail-comment">Hyperbole mail 
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-Hyperbole-mail-list">Hyperbole 
mail list</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Hyperbole-mail-list">Hyperbole 
mail list</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-Hyperbole-main-menu">Hyperbole 
main menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Hyperbole-manual">Hyperbole 
manual</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invocation">Invocation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole-menubar-menu">Hyperbole menubar 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-hyperbole-popup-menu">hyperbole 
popup menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole-pulldown-menu">Hyperbole pulldown 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Hyperbole-report">Hyperbole 
report</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Hyperbole-report">Hyperbole 
report</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-Hyperbole-types">Hyperbole 
types</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Types">Creating Types</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Hyperbole-version">Hyperbole 
version</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Suggestion-or-Bug-Reporting">Suggestion or Bug Reporting</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Hyperbole_002c-embedding">Hyperbole, 
embedding</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Embedding-Hyperbole">Embedding Hyperbole</a></td></tr>
@@ -12752,7 +13068,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-ibtype_002c-help">ibtype, 
help</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_002c-predicate">ibtype, 
predicate</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_002c-return-val">ibtype, 
return val</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_002c-list-of">ibtypes, 
list of</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-ibtypes_002c-list-of">ibtypes, 
list of</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-ibuffer-menu">ibuffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-ibuffer-menu-1">ibuffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-idea-structuring">idea 
structuring</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner-History">Koutliner History</a></td></tr>
@@ -12761,18 +13077,23 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-idstamp-0">idstamp 
0</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-idstamp-attribute">idstamp 
attribute</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cell-Attributes">Cell Attributes</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-idstamp-counter">idstamp 
counter</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-ilink">ilink</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-image-display">image 
display</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-images">images</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Image-Thumbnails">Smart Key - Image 
Thumbnails</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-implicit-button">implicit 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons">Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-implicit-button-1">implicit 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-implicit-button-labels">implicit 
button labels</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-implicit-button-link">implicit 
button link</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-implicit-button-type">implicit 
button type</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-implicit-button-types">implicit 
button types</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-implicit-button-types">implicit 
button types</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-importing">importing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-importing-a-file">importing a 
file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-inactive-minibuffer">inactive 
minibuffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Info-browser">Info 
browser</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Info-browsing">Info 
browsing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Info-Manuals">Smart Key - Info Manuals</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Info-manual">Info 
manual</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invocation">Invocation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Info-node">Info 
node</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Info-node">Info 
node</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-InfoDock">InfoDock</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-initialization-file">initialization 
file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Autonumbering">Autonumbering</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-inserting-tabs">inserting 
tabs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-insertion">insertion</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
@@ -12786,14 +13107,19 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-interactive-cmd-char_002c-_002bX">interactive cmd char, 
+X</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-interactive-computing">interactive 
computing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-interactive-form">interactive 
form</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-internal-custom-display">internal custom 
display</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-internal-display">internal 
display</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-internal-image-display">internal 
image display</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-internal-klink">internal 
klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-internal-standard-display">internal standard 
display</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-internal-viewer">internal 
viewer</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-Internet-RFC">Internet 
RFC</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Internet-RFC-1">Internet 
RFC</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Internet-RFC">Internet 
RFC</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-Internet-RFC-1">Internet 
RFC</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-invoking-HyControl">invoking 
HyControl</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-invoking-Hyperbole">invoking 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-ipython">ipython</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-isearch">isearch</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invisible-Text-Searches">Invisible Text Searches</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-issue-tracking">issue 
tracking</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-issue-tracking">issue 
tracking</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-item-drag">item 
drag</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-item-throw">item 
throw</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
@@ -12803,7 +13129,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-jump-to-window-by-letter">jump 
to window by letter</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-K">K</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-kcell-link">kcell 
link</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-kcell-link">kcell 
link</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-key-binding-list">key binding 
list</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-key-binding_002c-C_002dc-_002e">key binding, C-c 
.</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-key-binding_002c-C_002dc-_0040">key binding, C-c 
@</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
@@ -12819,7 +13145,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-key-binding_002c-smart-keys">key 
binding, smart keys</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle">key 
bindings, toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-key-bindings_002c-toggle-1">key 
bindings, toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-key-sequence">key 
sequence</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-key-sequence">key 
sequence</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-keyboard-drags">keyboard 
drags</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-keyboard-link-creation">keyboard 
link creation</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-keyboard_002c-jump-to-window">keyboard, jump to 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
@@ -12828,7 +13154,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-kill-and-yank-1">kill and 
yank</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Drags-between-Windows">Smart Mouse Drags between 
Windows</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-kill-and-yank-2">kill and 
yank</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-kill-region">kill 
region</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-klink">klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-klink">klink</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-klink-1">klink</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-klink-referent">klink 
referent</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-klink_002c-activating">klink, 
activating</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
@@ -12838,7 +13164,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-klink_002c-internal">klink, 
internal</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-klink_002c-view-spec">klink, 
view spec</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-knowledge-transfer">knowledge 
transfer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner-History">Koutliner History</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-koutline-link">koutline 
link</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-koutline-link">koutline 
link</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-koutline-mode">koutline 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Koutliner-commands">Koutliner 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Menu-Commands">Menu 
Commands</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Koutliner-menu">Koutliner 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Menu-Commands">Menu 
Commands</a></td></tr>
@@ -12856,23 +13182,28 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-label-type_002c-legal-1">label 
type, legal</a>:</td><td>&nbsp;</td><td valign="top"><a href="#View-Specs">View 
Specs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-label_002c-button">label, 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-label_002c-button-1">label, 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Buttons">Global Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-labeling-implicit-buttons">labeling implicit 
buttons</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-legal-labels">legal 
labels</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Autonumbering">Autonumbering</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-level">level</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-level-1">level</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#View-Specs">View Specs</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-line-and-column">line and 
column</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-line-and-column">line and 
column</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-link">link</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Links">Links</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-link-action-types">link action 
types</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-link-button">link 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-link-creation">link 
creation</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-link-creation-from-keyboard">link creation from 
keyboard</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-link-display">link 
display</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-link-to-explicit-button">link to 
explicit 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-link-to-global-button">link to 
global 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-link-to-implicit-button">link to 
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-link_002c-creation">link, 
creation</a>:</td><td>&nbsp;</td><td valign="top"><a href="#By-Menu">By 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-link_002c-display-function">link, display 
function</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-link_002c-pathname">link, 
pathname</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-link_002c-pathname-line-and-column">link, pathname line and 
column</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-link_002c-pathname">link, 
pathname</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-link_002c-pathname-line-and-column">link, pathname line and 
column</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-link_002c-viewer-program">link, 
viewer program</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-link_002c-web-search">link, web 
search</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-linking_002c-in_002dplace">linking, 
in-place</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-lisp-identifier">lisp 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Lisp-Source-Code">Smart Key - Lisp Source 
Code</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Lisp-variables">Lisp 
variables</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Link-Variable-Substitution">Link Variable Substitution</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-list">list</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-list-1">list</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Delimited-Things">Smart Key - Delimited 
Things</a></td></tr>
@@ -12888,20 +13219,21 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-mail-hooks">mail 
hooks</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-mail-inclusion">mail 
inclusion</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-mail-reader">mail 
reader</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-mailcap">mailcap</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-mailer-initialization">mailer 
initialization</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-mailing-an-outline">mailing an 
outline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-mailing-buttons">mailing 
buttons</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-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-Buttons">Implicit Buttons</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-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-Buttons">Implicit Buttons</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>
-<tr><td></td><td valign="top"><a href="#index-markdown-link">markdown 
link</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-markdown-link">markdown 
link</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-markup-pair">markup 
pair</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-markup-pair-1">markup 
pair</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-match-lines">match 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-match-lines">match 
lines</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-match-lines-1">match 
lines</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-match-lines-2">match 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-maximize-frame">maximize 
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-maximize-window">maximize 
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-menu-help">menu 
help</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
@@ -12938,7 +13270,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Button_002dFile">menu, 
Button-File</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Cust">menu, 
Cust</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Cust-1">menu, 
Cust</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fReferents">menu, 
Cust/Referents</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-menu_002c-Cust_002fReferents">menu, 
Cust/Referents</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-menu_002c-Cust_002fURL_002dDisplay">menu, 
Cust/URL-Display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fURL_002dDisplay-1">menu, 
Cust/URL-Display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Cust_002fWeb_002dSearch">menu, 
Cust/Web-Search</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Web-Search-Engines">Web Search Engines</a></td></tr>
@@ -12985,7 +13317,6 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-Messages-buffer">Messages 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-MH_002de">MH-e</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-middle-mouse-key">middle mouse 
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-MIME">MIME</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-minibuffer-menu">minibuffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-minibuffer-menu-1">minibuffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-minibuffer-menus">minibuffer 
menus</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
@@ -13022,6 +13353,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><th><a name="Concept-Index_cp_letter-N">N</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a href="#index-name_002c-button">name, 
button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-named-window-configuration">named window 
configuration</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Window-Configurations">Window Configurations</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-naming-implicit-buttons">naming 
implicit buttons</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-news">news</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-news-comment">news 
comment</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-News">Buttons in News</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-news-hooks">news 
hooks</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Hook-Variables">Hook 
Variables</a></td></tr>
@@ -13035,13 +13367,13 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><th><a name="Concept-Index_cp_letter-O">O</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-object_002doriented-code-browsing">object-oriented code 
browsing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-The-OO_002dBrowser">Smart Key - The 
OO-Browser</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-obtaining-Hyperbole">obtaining 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Installation">Installation</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-online-library">online 
library</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-online-library">online 
library</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-OO_002dBrowser">OO-Browser</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-The-OO_002dBrowser">Smart Key - The 
OO-Browser</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-option-setting">option 
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-option-settings">option 
settings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Org-mode">Org 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Org-mode">Org 
mode</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-Org-mode-1">Org 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Questions-and-Answers">Questions and Answers</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-org_002dmode">org-mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-org_002dmode">org-mode</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-other-frame">other 
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-other-window">other 
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-outline-file-suffix">outline 
file suffix</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Outlines">Creating Outlines</a></td></tr>
@@ -13083,9 +13415,9 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-pasting-a-region">pasting a 
region</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-pasting-a-region-1">pasting a 
region</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Drags-between-Windows">Smart Mouse Drags between 
Windows</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-pasting-a-region-2">pasting a 
region</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-patch-output">patch 
output</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-pathname">pathname</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-pathname_002c-line-and-column">pathname, line and 
column</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-patch-output">patch 
output</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-pathname">pathname</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-pathname_002c-line-and-column">pathname, line and 
column</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-permanent-identifier">permanent 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner">Koutliner</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-permanent-identifier-1">permanent 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-pipe-character">pipe 
character</a>:</td><td>&nbsp;</td><td valign="top"><a href="#View-Specs">View 
Specs</a></td></tr>
@@ -13106,10 +13438,11 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-quit-HyControl">quit 
HyControl</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-R">R</a></th><td></td><td></td></tr>
+<tr><td></td><td valign="top"><a href="#index-radio-target">radio 
target</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-raise-frame">raise 
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-rdb_002dmode">rdb-mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-RDB-Mode">Smart Key - RDB Mode</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rebalance-windows">rebalance 
windows</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-and-Deleting-Windows">Creating and Deleting 
Windows</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-reference">reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-reference">reference</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-referent">referent</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Explicit-Buttons">Explicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-referent-display">referent 
display</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-refilling">refilling</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Filling">Filling</a></td></tr>
@@ -13117,21 +13450,23 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-region_002c-active">region, 
active</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-relative-autonumber">relative 
autonumber</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner">Koutliner</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-relative-identifier">relative 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Autonumbering">Autonumbering</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-remote-file">remote 
file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-remote-path">remote 
path</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-remote-file">remote 
file</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-remote-path">remote 
path</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-remote-pathnames">remote 
pathnames</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-remove-lines">remove 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-removing-Hyperbole-menu">removing Hyperbole 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Request-For-Comment">Request For 
Comment</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Request-For-Comment-1">Request 
For Comment</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-replace-window-buffer">replace 
window buffer</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-Request-For-Comment">Request For 
Comment</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-Request-For-Comment-1">Request 
For Comment</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-resize-frame-percentage">resize 
frame percentage</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-resizing-windows">resizing 
windows</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Resizing-Windows">Resizing Windows</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-restoring-windows">restoring 
windows</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Window-Configurations">Window Configurations</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-RFC">RFC</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-RFC-1">RFC</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-RFC">RFC</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-RFC-1">RFC</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-ripgrep">ripgrep</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-Rmail">Rmail</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-Rolo">Rolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo">HyRolo</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-rolo-address">rolo 
address</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-rolo-address">rolo 
address</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-Rolo-commands">Rolo 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-entry">rolo 
entry</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Concepts">HyRolo Concepts</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-file">rolo 
file</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Concepts">HyRolo 
Concepts</a></td></tr>
@@ -13171,6 +13506,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-searching_002c-rolo">searching, 
rolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Searching">HyRolo Searching</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-selection">selection</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-selection_002c-menu-items">selection, menu 
items</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-sequence-of-keys">sequence of 
keys</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-set">set</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-set-1">set</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-setting-the-view-spec">setting 
the view spec</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#View-Specs">View Specs</a></td></tr>
@@ -13182,7 +13518,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-shrink-frame">shrink 
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-shrink-window">shrink 
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-side-drag">side 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Side_002dby_002dSide-Window-Resizing">Side-by-Side Window 
Resizing</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-signatures_002c-hiding">signatures, 
hiding</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-signatures_002c-hiding">signatures, 
hiding</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-Smart-Key">Smart 
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-Smart-Key-1">Smart 
Key</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Smart-Key-2">Smart 
Key</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Questions-and-Answers">Questions and Answers</a></td></tr>
@@ -13205,11 +13541,12 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-Smart-Mouse-Key-toggle">Smart 
Mouse Key toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Smart-Mouse-Keys">Smart Mouse 
Keys</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Smart-Mouse-Keys">Smart 
Mouse Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-smart-selection">smart 
selection</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-social-media">social 
media</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-social-reference">social 
reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-source-line">source 
line</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-social-media">social 
media</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-social-reference">social 
reference</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-source-line">source 
line</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-splitting-a-cell">splitting a 
cell</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Splitting-and-Appending">Splitting and Appending</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-stack-frame">stack 
frame</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-stack-frame">stack 
frame</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-stack-frame-1">stack 
frame</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-star-outline">star 
outline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-starting-HyControl">starting 
HyControl</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-starting-Hyperbole">starting 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
@@ -13221,20 +13558,21 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-subtree_002c-hide">subtree, 
hide</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-subtree_002c-show">subtree, 
show</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-swap-buffers">swap 
buffers</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Swapping-Buffers">Swapping Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-swap-window-buffers">swap window 
buffers</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-swapping">swapping</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-system-encapsulation">system 
encapsulation</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Encapsulating-Systems">Encapsulating Systems</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-T">T</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a href="#index-table-of-contents">table of 
contents</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-table-of-contents-1">table of 
contents</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-table-of-contents">table of 
contents</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-table-of-contents-1">table of 
contents</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-table-of-contents-2">table of 
contents</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-tabs_002c-inserting">tabs, 
inserting</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-tag">tag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-TAGS-file">TAGS 
file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-tags-file">tags 
file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-tag">tag</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-TAGS-file">TAGS 
file</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-tags-file">tags 
file</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-tar-archive-browsing">tar 
archive browsing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Tar-File-Mode">Smart Key - Tar File Mode</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-terminal-use">terminal 
use</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons">Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-Texinfo-cross_002dreference">Texinfo 
cross-reference</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-Texinfo-cross_002dreference">Texinfo 
cross-reference</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-Texinfo-manual">Texinfo 
manual</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Invocation">Invocation</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-text-file">text 
file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-thing">thing</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Thing-Selection">Thing Selection</a></td></tr>
@@ -13243,7 +13581,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-throw-item">throw 
item</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-thumbnails">thumbnails</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Image-Thumbnails">Smart Key - Image 
Thumbnails</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-toc-action-type">toc action 
type</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-toc-implicit-button-type">toc 
implicit button type</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-toc-implicit-button-type">toc 
implicit button type</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Type-Summaries">Implicit Button Type 
Summaries</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-toggle-HyControl-mode">toggle 
HyControl mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-toggle-key-bindings">toggle key 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-toggle-key-bindings-1">toggle 
key bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
@@ -13252,7 +13590,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-top_002dlevel-cell-1">top-level 
cell</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-top_002dlevel-menu">top-level 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-top_002dlevel-view">top-level 
view</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-Tramp">Tramp</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-Tramp">Tramp</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-Tramp-1">Tramp</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-transposing-cells">transposing 
cells</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Transposing">Transposing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-tree_002c-copying">tree, 
copying</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
@@ -13279,26 +13617,27 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><th><a name="Concept-Index_cp_letter-U">U</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a href="#index-unbury-buffer">unbury 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-unburying">unburying</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-UNIX-manual">UNIX 
manual</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-UNIX-manual">UNIX 
manual</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-unshifted-mouse-bindings">unshifted mouse 
bindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-unshifted-mouse-keys">unshifted 
mouse keys</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-URL">URL</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-URL">URL</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-URL-1">URL</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-URL-2">URL</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-URLs_002c-abbreviated">URLs, 
abbreviated</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-URLs_002c-using-with-find_002dfile">URLs, using with 
find-file</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-USENET">USENET</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-USENET-1">USENET</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-News">Buttons in News</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-username">username</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<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-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>
 <tr><td></td><td valign="top"><a 
href="#index-vector-1">vector</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-version-control">version 
control</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-version-control-1">version 
control</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-version-control-2">version 
control</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-version-control">version 
control</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-version-control-1">version 
control</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-version-control-2">version 
control</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-version-control-3">version 
control</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-version-description">version 
description</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Suggestion-or-Bug-Reporting">Suggestion or Bug Reporting</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-vertical-drag">vertical 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-and-Deleting-Windows">Creating and Deleting 
Windows</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-vertical-drag-1">vertical 
drag</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>
@@ -13353,15 +13692,15 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-windows_002c-equalize">windows, 
equalize</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-windows_002c-rebalance">windows, 
rebalance</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-and-Deleting-Windows">Creating and Deleting 
Windows</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-word-wrap">word 
wrap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Filling">Filling</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-World_002dwide-Web">World-wide 
Web</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-World_002dwide-Web">World-wide 
Web</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-World_002dwide-Web-1">World-wide 
Web</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-World_002dwide-Web-2">World-wide 
Web</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-WWW">WWW</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-WWW">WWW</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-WWW-1">WWW</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-WWW-2">WWW</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-X">X</a></th><td></td><td></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-xdb">xdb</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-xdb">xdb</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-Y">Y</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a href="#index-yank-region">yank 
region</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Thing-Selection">Smart Key Thing Selection</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index 24fd99a..4465571 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index 314f65f..157752d 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index c699a03..fad543c 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -52,7 +52,7 @@
 This manual is for GNU Hyperbole
 (Edition @value{EDITION}, Published @value{UPDATED}).
 
-Copyright @copyright{} 1989-2017  Free Software Foundation, Inc.
+Copyright @copyright{} 1989-2019  Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -139,7 +139,10 @@ Texinfo markup language.
 
 <CENTER><H2>The Everyday Hypertextual Information Manager</H2></CENTER>
 
-<P>Copyright &copy; 1989-2017  Free Software Foundation, Inc.</P>
+<CENTER><H3><A HREF="https://saythanks.io/to/rswgnu";>Say thanks if you like 
Hyperbole.</A></H3></CENTER>
+
+
+<P>Copyright &copy; 1989-2019  Free Software Foundation, Inc.</P>
 
 <P>GNU Hyperbole is available for use, modification, and distribution under
 the terms of the GNU General Public License (GPL) Version 3 or later,
@@ -151,8 +154,8 @@ WITHOUT ANY WARRANTY, without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
-Edition 7.0.2a
-Printed December 12, 2017.
+Edition 7.0.3b
+Printed August 11, 2019.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -176,11 +179,11 @@ Printed December 12, 2017.
 
 @center The Everyday Hypertextual Information Manager
 
-@center Edition 7.0.2a, December 12, 2017.
+@center Say thanks: https://saythanks.io/to/rswgnu
 
 @sp 2
 @noindent
-Copyright @copyright{} 1989-2017  Free Software Foundation, Inc.
+Copyright @copyright{} 1989-2019  Free Software Foundation, Inc.
 
 GNU Hyperbole is available for use, modification, and distribution
 under the terms of the GNU General Public License (GPL) Version 3 or
@@ -193,6 +196,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 @sp 2
 
 @example
+Edition 7.0.3b
+Augut 11, 2019
+
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
   E-mail:    <hyperbole-users@@gnu.org>  (This is a mail list).
@@ -309,6 +315,10 @@ Buttons
 * Button Type Precedence::
 * Utilizing Explicit Buttons::
 
+Implicit Buttons
+
+* Implicit Button Type Summaries::
+
 Utilizing Explicit Buttons
 
 * Creation::
@@ -413,6 +423,7 @@ Smart Mouse Keys
 
 Smart Keyboard Keys
 
+* Smart Key - Company Mode::
 * Smart Key - Treemacs::
 * Smart Key - Emacs Pushbuttons::
 * Smart Key - Argument Completion::
@@ -428,6 +439,7 @@ Smart Keyboard Keys
 * Smart Key - RDB Mode::
 * Smart Key - Help Buffers::
 * Smart Key - Pages Directory Mode::
+* Smart Key - Python Source Code::
 * Smart Key - Identifier Menu Mode ::
 * Smart Key - C Source Code::
 * Smart Key - C++ Source Code::
@@ -435,7 +447,6 @@ Smart Keyboard Keys
 * Smart Key - Lisp Source Code::
 * Smart Key - Java Source Code::
 * Smart Key - JavaScript Source Code::
-* Smart Key - Python Source Code::
 * Smart Key - Objective-C Source Code::
 * Smart Key - Fortran Source Code::
 * Smart Key - Occurrence Matches::
@@ -462,7 +473,7 @@ Smart Keyboard Keys
 @chapter Introduction
 
 This edition of the GNU Hyperbole Manual is for use with any version
-7.0.2a or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.3b 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,
@@ -490,16 +501,17 @@ This is a reference manual with extensive details about 
Hyperbole use.  If
 you prefer a simpler, more interactive introduction to Hyperbole,
 the @file{DEMO} file included in the Hyperbole distribution demonstrates
 many of Hyperbole's standard facilities without the need to read through
-this reference manual.  It is a good way to rapidly understand some of what
-Hyperbole can do for you.  Once Hyperbole is installed, (@pxref{Setup}),
-you can access the DEMO with the key sequence @bkbd{C-h h d d}.
+this reference manual.  The DEMO is a good way to rapidly understand some
+of what Hyperbole can do for you.  Once Hyperbole is installed,
+(@pxref{Setup}), you can access the DEMO with the key sequence @bkbd{C-h h
+d d}.
 
 @xref{Glossary}, for definitions of Hyperbole terms.  In some cases,
-terms are not precisely defined within the body of this manual since
-they are defined within the glossary.  Be sure to reference the
-glossary if a term is unclear to you.  Although you need not have a keen
-understanding of all of these terms, a quick scan of the glossary should
-help throughout Hyperbole use.
+terms are not precisely defined within the body of this manual since they
+are defined within the glossary.  Be sure to reference the glossary if a
+term is unclear to you.  Although you need not have a keen understanding of
+all of these terms, a quick scan of the glossary helps throughout Hyperbole
+use.
 
 @xref{Setup}, for explanations of how to obtain, install, configure
 and load Hyperbole for use.  This appendix includes information on
@@ -570,19 +582,19 @@ its use as the prime means of organizing and interlinking 
the constant
 flows of daily information.
 
 GNU Hyperbole takes a distinctly different approach.  It has its own
-hypertext technology that can interface perfectly with web links but
-which are much easier to create (simply drag from the source to the
-destination of a link to create a new hyperlink).  Hyperbole
-hyperbuttons can link not only to static information but can perform
-arbitrary actions through the use of button types written in a single,
-highly interactive language, Emacs Lisp.  Hyperbole adds all of this
-power to your written documents, e-mail, news articles, contact
-management, outlines, directory listings, and much more.  Hyperbole
-works well with the very latest versions of GNU Emacs.
-
-Unlock the power of GNU Hyperbole to make your information work for
-you.  One system. One language.  One manual.  One solution.  Learn GNU
-Hyperbole and start moving further, faster.
+hypertext technology that can interface perfectly with web links but which
+are much easier to create (simply drag from the source to the destination
+of a link to create a new hyperlink).  Hyperbole hyperbuttons can link not
+only to static information but can perform arbitrary actions (through the
+use of button types written in a single, highly interactive language, Emacs
+Lisp).  Hyperbole adds all of this power to your written documents, e-mail,
+news articles, contact management, outlines, directory listings, and much
+more.  Hyperbole works well with the very latest versions of GNU Emacs
+across every editing and viewing mode in Emacs.
+
+Unlock the power of GNU Hyperbole to make your information work for you.
+One system. One language.  One manual.  One solution.  Learn Hyperbole and
+start moving further, faster.
 
 @node Hyperbole Overview, Mail Lists, Motivation, Introduction
 @section   Hyperbole Overview
@@ -593,7 +605,7 @@ Hyperbole and start moving further, faster.
 @cindex Emacs Lisp
 @cindex Emacs
 GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is
-an efficient and programmable hypertextual information management
+an efficient, programmable hypertextual information management
 system.  It is intended for everyday work on any GNU Emacs platform.
 Hyperbole allows hypertext buttons to be embedded within unstructured
 and structured files, mail messages and news articles.  It offers
@@ -609,9 +621,12 @@ Hyperbole consists of five parts:
 @item Buttons and Smart Keys
 Hyperbole hyperlink and other kinds of buttons (explicit buttons) may be
 added to documents with a simple drag between windows, no markup language
-needed.  Implicit buttons are patterns automatically recognized within text
-that perform actions, e.g. bug#24568 displays the bug status information
-for that bug number.  @xref{Buttons}.
+needed.  Implicit buttons are patterns automatically recognized within
+existing text that perform actions, e.g. bug#24568 displays the bug status
+information for that Emacs bug number, without the need for any additional
+markup.  Global buttons are buttons that are activated by name from
+anywhere within Emacs.
+@xref{Buttons}.
 
 Buttons are accessed by clicking on them or referenced by name (global
 buttons), so they can be activated regardless of what is on screen.
@@ -632,7 +647,8 @@ fast, flexible file and text finding commands.  A powerful, 
hierarchical
 contact manager, @pxref{HyRolo}, which anyone can use, is also included.
 It is easy to learn since it introduces only a few new mechanisms
 and has a menu interface, which may be operated from the keyboard or the
-mouse;
+mouse; it may also be used to look up any record-based information and
+Hyperbole buttons may be embedded in any records;
 
 @item Screen Control
 the fastest, easiest-to-use window and frame control available for GNU
@@ -640,13 +656,14 @@ Emacs, @pxref{HyControl}.  With just a few keystrokes, 
you can shift from
 increasing a window's height by 5 lines to moving a frame by 220 pixels
 or immediately moving it to a screen corner.  Text in each window or
 frame may be enlarged or shrunk (zoomed) for easy viewing, plus many
-other features;
+other features; this allows Hyperbole to quickly control the way
+information is presented on-screen;
 
 @item Hypertextual Outliner
 an advanced outliner, @pxref{Koutliner}, with multi-level
 autonumbering and permanent identifiers attached to each outline node
 for use as hypertext link anchors, per node properties and flexible
-view specifications that can be embedded within links or used
+view specifications that can be included in links or used
 interactively;
 
 @item Programming Library
@@ -701,7 +718,7 @@ Some of Hyperbole's most significant features are:
 
 @itemize @bullet
 @item
-Buttons may link to information or may execute procedures, such as
+Buttons may link to information or may execute functions, such as
 starting or communicating with external programs;
 
 @item
@@ -1179,7 +1196,7 @@ on the last line to end the dired session (bury its 
buffer).
 If you use the Treemacs file viewer Emacs package, you can configure Hyperbole
 to use this instead of Dired when you click on a modeline buffer id.
 
-Since this is a customization option, it may be change permanently like so.
+Since this is a customization option, it may be changed permanently like so.
 Use @bkbd{M-x customize-set-variable @key{RET} 
action-key-modeline-buffer-id-function @key{RET}}.
 Change the value to @code{smart-treemacs-modeline}.  Then press @key{RET}.  To 
change it back
 to Hyperbole's default, use the value, @code{dired-jump}.
@@ -1409,14 +1426,15 @@ unless it is the only window in that frame.
 @cindex drag, dired item
 @cindex drag, buffer menu item
 @cindex drag, Treemacs item
-You can do the same thing with items in dired, buffer menu and ibuffer menu
-listing buffers rather than buffers themselves.  Drag with the Action Mouse Key
-and the selected item will be displayed in any Emacs window in which you
-release.  Drag outside Emacs and it will be displayed in a new frame.  To
-display the last item you want, press the Action Key on it and it will display
-within the listing window itself.  (If you use the Treemacs file viewer 
package,
-item dragging works there as well).  Remember that you can emulate these drags
-from the keyboard when needed, @pxref{Keyboard Drags}.
+You can also drag items to other windows with the Action Key in Dired,
+Buffer Menu, Ibuffer and Treemacs listing buffers, rather than the
+buffers themselves.  Drag with the Action Mouse Key and the selected
+item will be displayed in any Emacs window in which you release.  Drag
+outside Emacs and it will be displayed in a new frame.  To display the
+last item you want within the listing window itself, press and release
+the Action Key on that item after dragging your other items to their
+respective windows.  Remember that you can emulate these drags from
+the keyboard when needed, @pxref{Keyboard Drags}.
 
 So now you can put a bunch of buffers and files on your screen wherever
 you like.  Typically, a brief visual pulse is shown first at the source item 
and
@@ -1450,37 +1468,66 @@ session since drag actions are not supported without a 
window system.
 @cindex window by letter
 @cindex jump to window by letter
 @cindex keyboard, jump to window
-For even faster keyboard-based display of items, use the Emacs
-package @code{ace-window} (see 
@url{https://elpa.gnu.org/packages/ace-window.html}).
+For even faster keyboard-based display of items and drag emulations,
+use the Emacs package @code{ace-window}
+(see @url{https://elpa.gnu.org/packages/ace-window.html}).
 
 The ace-window package assigns short letter IDs to each Emacs window and lets
 you jump to or operate upon a specific window by giving its ID.  Hyperbole can
 add commands to ace-window that replace the two-step drag emulation key
-described above with a single key sequence that displays dired or
-buffer menu @emph{items}.
+described above with a single key sequence that does not require moving to
+the drag target window since it is specified by ID as part of the command.
 
 To enable this feature, in your Emacs initialization file after
 Hyperbole is initialized, if you do not have a key bound for
 @code{ace-window}, then call: @code{(hkey-ace-window-setup \"\M-o\")}
-to bind it to @bkbd{M-o}.  Otherwise, call the setup function without
-a key: @code{(hkey-ace-window-setup)}.
+to bind it to @bkbd{M-o}, replacing Hyperbole's
+default @code{hkey-operate} command there (because ace-window can emulate
+the drags performed by @code{hkey-operate}).  If you already have a key bound
+for @code{ace-window}, then just ensure it is initialized by calling
+@code{(hkey-ace-window-setup)} without a key argument.
 
 @cindex link creation from keyboard
 @cindex keyboard link creation
 @kindex M-o i <window-id>
+@kindex M-o m <window-id>
+@kindex M-o r <window-id>
 @kindex M-o t <window-id>
 @cindex drag item
+@cindex replace window buffer
+@cindex swap window buffers
 @cindex throw item
+@cindex buffer replace
+@cindex buffers swap
 @cindex item drag
 @cindex item throw
 After setup, the leftmost character or two of each window's modeline will show
 the ID to type to use that window as the drag destination.  Then whenever point
 is on an item you want displayed in another window, use @bkbd{M-o i
-<id-of-window-to-display-item-in>} and watch the magic happen.  You can also 
use
-this command to create explicit button links to other window buffers when in 
an editable
-buffer rather than on an item.  If you want to display multiple items in 
different
-windows, instead use the @bkbd{M-o t <id-of-window-to-display-item-in>} key 
sequence to
-@emph{throw} the item to the window.
+<id-of-window-to-display-item-in>} and watch the magic happen.  If you
+want to display multiple items in different windows, instead use
+the @bkbd{M-o t <id-of-window-to-display-item-in>} key sequence to
+@emph{throw} the item to the window.  To @emph{replace}
+the selected window's buffer with that of another window, use
+@bkbd{M-o r <id-of-window-displaying-desired-buffer>}.  To instead
+@emph{swap} the selected window's buffer with that of another window,
+use @bkbd{M-o m <id-of-window-to-swap-with>}.
+
+In summary:
+@table @asis
+@item M-o i <window>
+insert listing item at point into <window>; if not on a listing item,
+trigger an error
+
+@item M-o m <window>
+swap the buffers in the selected window and <window>
+
+@item M-o r <window>
+replace the selected (current) window's buffer with that of <window>
+
+@item M-o t <window>
+throw listing item at point or current buffer to <window>
+@end table
 
 @c -------
 
@@ -1517,7 +1564,7 @@ windows, instead use the @bkbd{M-o t 
<id-of-window-to-display-item-in>} key sequ
 @c normally under Hyperbole.
 
 @c The code for Smart Key modifiers can be found in
-@c @file{@code{$@{hyperb:dir@}}/hmouse-mod.el}.
+@c @file{$@{hyperb:dir@}/hmouse-mod.el}.
 
 
 @node Buttons, Menus, Smart Keys, Top
@@ -1719,10 +1766,10 @@ type} identifies a pattern or state that when matched 
triggers
 an @emph{action} associated with the implicit button type.  The action
 is specified by either a Hyperbole action type (@pxref{Action Types})
 or an Emacs Lisp function.  Implicit button types may use the same
-action types that explicit buttons use.  As an example, a pathname
-implicit button type would match to any existing local filename or
-directory name and its action would be to display the associated file
-or directory, typically in another window.
+action types that explicit buttons use.  As an example, the pathname
+implicit button type matches to any existing local filename or
+directory name and its action displays the associated file or
+directory, typically in another window.
 
 @vindex file, hibtypes.el
 @cindex context
@@ -1730,14 +1777,15 @@ or directory, typically in another window.
 @cindex activating implicit button
 @cindex menu item, Ibut/Act
 @kindex C-h h i a
-Unlike explicit buttons, implicit buttons have no individual button data
-other than their textual labels.  You use implicit button types which
-include boolean expressions (predicates) that match to both the label
-and the context required of any button of the type.  Each time a Smart
-Key is pressed at a location, Hyperbole evaluates the predicates from
-the list of implicit button types and the first one that evaluates true
-is selected and its associated action is triggered.  The Ibut/Act menu
-item, @bkbd{C-h h i a}, also activates any implicit button found at the
+Unlike explicit buttons, implicit buttons have no individual button
+data other than their text and optional labels.  You use implicit
+button types which include boolean expressions (predicates) that match
+to both the label and the context required of any button of the type.
+Each time a Smart Key is pressed at a location, Hyperbole evaluates
+the predicates from the list of implicit button types and the first
+one that evaluates true is selected and its associated action is
+triggered.  Alternatively, you can use the Ibut/Act menu
+item, @bkbd{C-h h i a}, to activate any implicit button found at the
 current point.
 
 All of this happens transparently and is easy to use once you try it.
@@ -1745,14 +1793,38 @@ The Hyperbole Smart Keys offer additional extensive 
context-sensitive
 point-and-click type behavior beyond implicit button types.  @xref{Smart
 Key Operations}.
 
+@cindex implicit button labels
+@cindex labeling implicit buttons
+@cindex naming implicit buttons
+Individual implicit buttons may be labeled, allowing activation by
+name or use as a link target by other buttons.  Here is a pathname
+button with a label of 'My Emacs Files':
+
+@example
+<[My Emacs Files]>: "~/.emacs.d"
+@end example
+
+The label is delimited by @samp{<[} and @samp{]>} and can be followed
+by any number of :, - or = separator characters, including none.  You
+can activate the button either from its label or its text.  With point
+on an implicit button, @bkbd{C-h h i l} will label it or you
+may simply type the label and delimiters manually.
+
+@menu
+* Implicit Button Type Summaries::
+@end menu
+
+@node Implicit Button Type Summaries,  , Implicit Buttons, Implicit Buttons
+@subsection  Implicit Button Type Summaries
+
 @cindex ibtypes, list of
 @cindex implicit button types
 Below, standard implicit button types are listed in the order in which
 Hyperbole tries to match to the types when looking for an implicit
 button; @bkbd{C-h h i t @key{RET}} provides similar information.  See
 the Hyperbole file, @file{hibtypes.el}, for complete examples of
-implicit button types (where they are listed in reverse in increasing
-order of priority).
+implicit button types (they are listed in increasing order of
+priority).
 
 @table @code
 
@@ -1863,13 +1935,57 @@ Jumps 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.
 
+@findex ibtypes ripgrep-msg
+@cindex grep
+@cindex ripgrep
+@cindex match lines
+@item ripgrep-msg
+Jumps 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).
+
+@findex ibtypes ipython-stack-frame
+@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).
+
 @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.
 Messages are recognized in any buffer.
 
+@findex ibtypes link-to-ibut
+@cindex implicit button link
+@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.
+Recognizes the format ’<ilink:’ <button label> ’>’, e.g. <ilink: my sequence 
of keys>.
+
+@findex ibtypes link-to-gbut
+@cindex global button link
+@cindex link to global button
+@cindex glink
+@item link-to-gbut <glink>
+At point, activates 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>.
+
+@findex ibtypes link-to-ebut
+@cindex explicit button link
+@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.
+Recognizes the format ’<elink:’ <button label> ’>’, e.g. <elink: project-list>.
+
 @findex ibtypes klink
 @cindex klink
 @cindex koutline link
@@ -1902,10 +2018,12 @@ retrievals.
 
 @findex ibtypes kbd-key
 @cindex key sequence
+@cindex sequence of keys
 @item kbd-key
-Executes a key sequence found around point, delimited by curly braces, @{@}, 
if any.
-Key sequences should be in human readable form, e.g.@: @bkbd{C-x C-b}.  
Formats such
-as @{^x^b@} will not be recognized.
+Executes 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.
 
 Any key sequence must be a string of one of the following:
 @itemize @bullet
@@ -1920,7 +2038,7 @@ Any key sequence must be a string of one of the following:
 @vindex file, DIR
 @item dir-summary
 Detects filename buttons in files named "MANIFEST" or "DIR".
-Displays selected files.  Each file name must be at the beginning of the
+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.
 
@@ -1929,7 +2047,7 @@ non-space, non-parenthesis, non-brace character.
 @cindex toc implicit button type
 @item text-toc
 Jumps to the text file section referenced by a table of contents entry
-at point.  The file name of the current buffer must contain
+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
 table of contents.  Each toc entry must begin with some whitespace
@@ -2033,7 +2151,7 @@ produced by git log.
 @vindex hibtypes-github-default-user
 @item github-reference
 Displays the Github entity associated with REFERENCE and optional USER and 
PROJECT.
-See @file{DEMO#Github (Remote) References} for examples.
+See @file{../DEMO#Github (Remote) References} for examples.
 
 REFERENCE is a string of one of the following forms:
 @itemize @bullet
@@ -2063,6 +2181,45 @@ If given, PROJECT overrides any project value in 
REFERENCE.  If no
 PROJECT value is provided, it defaults to the value of
 @code{hibtypes-github-default-project}.
 
+@findex ibtypes gitlab-reference
+@cindex gitlab reference
+@cindex version control
+@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.
+See @file{../DEMO#Gitlab (Remote) References} for examples.
+
+REFERENCE is a string of one of the following forms:
+@itemize @bullet
+@item <ref-item>
+@item <user>/<project>/<ref-item>
+@item <project>/<ref-item>
+@item /<group>/<project>.
+or
+@item /<project-or-group> (where a group is a colection of projects)
+@end itemize
+
+<ref-item> is one of these:
+@table @asis
+@item @bullet{} one of the words: activity, analytics, boards or kanban, 
branches, commits, contributors, groups, issues or list, jobs, labels, 
merge_requests, milestones, pages, pipelines, pipeline_charts, members or 
people or staff, projects, pulls, schedules, snippets, status or tags
+the associated items are listed
+@item @bullet{} one of the words: branch, commit(s), issue(s), milestone(s), 
pull(s), snippet(s) or tag(s) followed by a '/' or '=' and an item-id
+the item is shown
+@item @bullet{} an issue reference given by a positive integer, e.g. @emph{92} 
or prefaced with @emph{GL-}, like GL-92
+the issue is displayed
+@item @bullet{} a commit reference given by a hex number, 55a1f0
+the commit diff is displayed
+@item @bullet{} a branch or tag reference given by an alphanumeric name, e.g. 
hyper20
+the files in the branch are listed.
+@end table
+
+@vindex hibtypes-gitlab-default-user
+USER defaults to the value of @code{hibtypes-gitlab-default-user}.
+If given, PROJECT overrides any project value in REFERENCE.  If no
+PROJECT value is provided, it defaults to the value of
+@code{hibtypes-gitlab-default-project}.
+
 @findex ibtypes social-reference
 @cindex hashtag
 @cindex username
@@ -2170,11 +2327,12 @@ at line-num and optional column-num.  Also works for 
remote pathnames.
 @cindex link, pathname
 @item pathname
 Makes 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.  Emacs Lisp library files (filenames without any directory
-component that end in .el and .elc) are looked up using
-the @code{load-path} directory list.
+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
+and MSWindows Paths} for details).  Emacs Lisp library files
+(filenames without any directory component that end in .el and .elc)
+are looked up using the @code{load-path} directory list.
 
 @noindent
 See the function documentation for @code{hpath:at-p} for possible
@@ -2184,20 +2342,37 @@ for a valid match.  See the function documentation for 
@code{hpath:find}
 for special file display options.
 
 @findex ibtypes org-mode
-@vindex browse-url-browser-function
 @cindex org-mode
 @cindex Org mode
+@cindex radio target
+@cindex code block
+@kindex C-c C-c
+@kindex M-RET
+@findex org-ctrl-c-ctrl-c
+@findex org-meta-return
 @item org-mode
-The Action Key follows any Org mode link at point or cycles through
-views of the outline subtree at point.  In any other context besides
-the end of a line, the Action Key will invoke the Org mode standard
-binding of @bkbd{M-@key{RET}}, (org-meta-return).  The Assist Key on
-an Org mode heading cycles through views of the whole buffer outline
-and on an Org mode link, displays standard Hyperbole help.
+For users of Emacs Org mode, Hyperbole does quite a few things.
+
+First, the Action Key follows internal links in Org mode files.  When
+pressed on a link referent/target, the link definition is displayed,
+allowing two-way navigation between definitions and targets.
+
+Second, the Action Key follows Org mode external links.  The Assist
+Key displays help when pressed on an Org mode link.
+
+Third, within a radio target definition, the Action Key jumps to the
+first occurrence of an associated radio target.
+
+Fourth, when point is on an outline heading in Org mode, the Action Key
+cycles the view of the subtree at point and the Assist Key cycles the
+view of all headings in the buffer.
+
+Fifth, with point on the first line of a code block definition, the
+Action Key executes the code block via the Org mode standard binding
+of @bkbd{C-c C-c}, @code{org-ctrl-c-ctrl-c}.
 
-The variable, @code{browse-url-browser-function}, customizes the url
-browser that is used for urls.  Valid values of this variable
-include @code{browse-url-default-browser} and @code{browse-url-generic}.
+In any other context besides the end of a line, the Action Key invokes
+the Org mode standard binding of @bkbd{M-RET}, @code{org-meta-return}.
 
 @findex ibtypes doc-id
 @cindex online library
@@ -2357,7 +2532,7 @@ signalled.
 
 @findex actypes link-to-ebut
 @item link-to-ebut
-Performs an action given by another explicit button, specified by KEY and 
KEY-FILE.
+Performs an action given by an explicit button, specified by KEY and KEY-FILE.
 
 @findex actypes link-to-elisp-doc
 @item link-to-elisp-doc
@@ -2372,6 +2547,10 @@ the buffer is displayed with POINT at the top of the 
window.
 @item link-to-file-line
 Displays 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.
+
 @findex actypes link-to-Info-index-item
 @item link-to-Info-index-item
 Displays an Info index ITEM cross-reference.
@@ -2386,6 +2565,10 @@ Displays an Info NODE.  NODE must be a string of the form
 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-FILE, KEY and 
optional POINT.
+
 @findex actypes link-to-kcell
 @findex kcell:ref-to-id
 @item link-to-kcell
@@ -2477,9 +2660,12 @@ at point.
 @item www-url
 Follows a link given by a URL.  The variable,
 @code{browse-url-browser-function}, customizes the url browser
-that is used.  See its documentation string for details.
+that is used.  Valid values of this variable include
+@code{browse-url-default-browser} and @code{browse-url-generic}.
+See its documentation string for details.
 @end table
 
+
 @cindex action
 @vindex hui:ebut-prompt-for-action
 Action types create a convenient way of specifying button behavior
@@ -2602,12 +2788,14 @@ upon the referent context in which the Action Key is 
released.
 @example
 Referent Context         Link Type
 ----------------------------------------------------
+Global Button            link-to-gbut
 Explicit Button          link-to-ebut
+Implicit Button          link-to-ibut
 Info Index Item          link-to-Info-index-item
 Info Node                link-to-Info-node
 Mail Reader Message      link-to-mail
 Directory Name           link-to-directory
-File Name                link-to-file
+Filename                 link-to-file
 Koutline Cell            link-to-kcell
 Outline Heading          link-to-string-match
 Buffer attached to File  link-to-file
@@ -4189,8 +4377,8 @@ This helps maintain any special formatting the appended 
text may have.
 @cindex outline, foreign file
 The paragraphs of another buffer or file may be inserted into a koutline
 as a set of cells by using the @bkbd{C-x i} command.  When prompted,
-you may use a buffer name or file name from which to insert;
-completion is provided for file names only.
+you may use a buffer name or filename from which to insert;
+completion is provided for filenames only.
 
 @kindex koutliner, C-u C-x i
 The elements from the original buffer are converted into kcells and
@@ -4222,7 +4410,7 @@ The outliner supports conversion of three types of files 
into koutline
 files.  You can import a file into an existing koutline,
 following the tree at point, or can create a new koutline from the
 imported file contents.  @bkbd{M-x kimport:file @key{RET}} selects the
-importation type based on the buffer or file name suffix of the file to
+importation type based on the buffer or filename suffix of the file to
 import.
 
 @findex kotl-mode
@@ -4277,7 +4465,7 @@ World-Wide Web.
 
 @bkbd{M-x kexport:html @key{RET}} prompts for the koutline buffer or
 file to export, the HTML file or buffer to which to output, and the
-title to use for the HTML file.  Completion of file names is provided.
+title to use for the HTML file.  Completion of filenames is provided.
 The conversion will then be done and the output file or buffer will be
 written; the output file will not be displayed.
 
@@ -4588,7 +4776,7 @@ The e-mail address of the person who created this cell.
 @item create-time
 The time at which the cell was created.  This is stored in a form that
 allows for easy data comparisons but is displayed in a human readable
-format, such as @samp{Jan 28 18:27:59 CST 2017}.
+format, such as @samp{Jan 28 18:27:59 CST 2019}.
 @end table
 
 @kindex koutliner, C-c C-i
@@ -4699,7 +4887,7 @@ automatically added by HyRolo whenever a new record is 
added.
 ==================================================================
 *   Smith, John       <js@@hiho.com> W708-555-2001  F708-321-1492
         Chief Ether Maintainer, HiHo Industries
-        05/24/2017
+        05/24/2019
 @end group
 @end example
 
@@ -5046,7 +5234,7 @@ list.  In general, you should leave your personal rolo 
file as the
 first entry in the list, since this is the only file to which the Add
 command on the rolo menu adds entries.
 
-Hyperbole releases earlier than 4.17 used a different file name for the
+Hyperbole releases earlier than 4.17 used a different filename for the
 personal rolo.  If such a file exists, you will be prompted to rename
 it whenever the HyRolo system is loaded.
 
@@ -5503,7 +5691,7 @@ Prompts for a klink specification.  See the documentation 
for the function
 @cindex interactive cmd char, +M
 @cindex argument, mail message
 @item +M
-Prompts for a mail message date and the file name in which it resides.
+Prompts for a mail message date and the filename in which it resides.
 The mail parameters prompted for by this character code may change in
 the future.
 
@@ -5955,13 +6143,13 @@ windows exist within a frame.
 
 @vindex gbut:file
 @item Global Button
-A form of explicit button which is accessed by name rather than direct
+A Hyperbole button which is accessed by name rather than direct
 selection.  Global buttons are useful when one wants quick access to
 actions such as jumping to common file locations or for performing
-sequences of operations.  One need not locate them since they are always
-available by name, with full completion offered.  All global buttons are
-stored in the file given by the variable @code{gbut:file} and may be
-activated as regular explicit buttons by visiting this file.  By
+sequences of operations.  One need not locate them since they are
+always available by name, with full completion offered.  All global
+buttons are stored in the file given by the variable @code{gbut:file}
+and may be activated with the Action Key when editing this file.  By
 default, this is the same as the user's personal button file.
 
 @item Global Button File
@@ -6007,7 +6195,8 @@ DataBase (BBDB) package.
 
 @item Implicit Button
 A button recognized contextually by Hyperbole.  Such buttons contain no
-button data.  See also @b{implicit button type}.
+button data but may have an optional preceding label that looks like this:
+@samp{<[label]>}.  See also @b{implicit button type}.
 
 @item Implicit Button Type
 A specification of how to recognize and activate implicit buttons of a
@@ -6016,16 +6205,18 @@ to documents created and managed by tools other than 
Hyperbole, for
 example, programming documentation.  @b{Ibtype} is a synonym for
 implicit button type.  See also @b{system encapsulation}.
 
-@c @cindex InfoDock
-@c @item InfoDock
-@c InfoDock is an integrated productivity toolset for software engineers
-@c and knowledge workers.  It is presently built atop XEmacs and is no
-@c longer maintained.  An older version from 1999 may be found at
-@c infodock.sf.net.  InfoDock has all the power of emacs, but with an
-@c easier to use and more comprehensive menu-based user interface.  Most
-@c objections people raise to using emacs have already been addressed in
-@c InfoDock.  InfoDock was meant for people who wanted a complete,
-@c pre-customized environment in one package.
+@cindex InfoDock
+@item InfoDock
+InfoDock was an integrated productivity toolset for software engineers
+and knowledge workers built atop XEmacs; it is no longer maintained or
+updated.  An older version from 1999 may be found at
+infodock.sf.net.
+
+InfoDock has much of the power of GNU Emacs, but with an
+easier to use and more comprehensive menu-based user interface.  Most
+objections people raise to using emacs have already been addressed in
+InfoDock.  InfoDock was meant for people who wanted a complete,
+pre-customized environment in one package.
 
 @item Instance Number
 A colon prefaced number appended to the label of a newly created button
@@ -6038,6 +6229,14 @@ See also @url{https://tkf.github.io/emacs-jedi/latest/}.
 
 Jedi is a Emacs package for Python completion, definition and documentation 
lookup.
 
+@item Key Sequence
+A single sequence of keys that can invoke an Emacs command.
+
+@item Key Series
+A series of one or more Emacs key sequences delimited by braces that
+Hyperbole processes when activated as an implicit button, as if the
+keys were typed in by the user.
+
 @item Koutline
 A hierarchically ordered grouping of cells which may be stored as a file
 and viewed and edited as an outline.
@@ -6240,12 +6439,11 @@ Once you have Emacs set up at your site, GNU Hyperbole 
may be
 installed by using the Emacs Package Manager.  If you are not familiar
 with it, @pxref{Packages,,,emacs,the GNU Emacs Manual}.
 
-If you have Hyperbole 5.10 or higher installed and simply want to
-upgrade it, invoke the Emacs Package Manager with @bkbd{M-x
-list-packages @key{RET}}, then use the @bkbd{U} key followed by
-the @bkbd{x} key to upgrade all out-of-date packages, Hyperbole among
-them.  Then skip the text below and move on to the next
-section, @pxref{Invocation}.
+If you have Hyperbole installed and simply want to upgrade it, invoke
+the Emacs Package Manager with @bkbd{M-x list-packages @key{RET}},
+then use the @bkbd{U} key followed by the @bkbd{x} key to upgrade all
+out-of-date packages, Hyperbole among them.  Then skip the text below
+and move on to the next section, @pxref{Invocation}.
 
 Otherwise, to download and install the Hyperbole package, you should add
 several lines to your personal Emacs initialization file, @file{~/.emacs}.
@@ -6417,25 +6615,78 @@ be of interest to users.
 @cindex referent display
 @cindex link display
 @cindex display where
+@cindex display outside Emacs
 @cindex where to display
-Hyperbole lets you control where link referents are displayed and even
-what Emacs function or external program is used to display them.
-There are three categories of referents, each with its own display
-setting:
+@cindex image display
+@cindex internal display
+@cindex external display
+Hyperbole lets you control where link referents are displayed.  It also
+permits setting a specific Emacs function or external program
+to display them.  There are four categories of referents, each with
+its own display setting, listed in decreasing order of priority.  All
+of these variables are defined within @file{hpath.el}.
+
 @example
 Referent Category             Variable Setting
 ========================================================================
-Internal Standard Display     hpath:display-where
+Internal Image Display        hpath:native-image-suffixes
 Internal Custom Display       hpath:internal-display-alist
 External Display              hpath:external-display-alist
+Internal Standard Display     hpath:display-where
 
 @end example
 
+@noindent
+Continue reading the next sections for information on how referents
+are displayed internally and externally.
+
+@node Internal Viewers, External Viewers, Referent Display, Customization
+@subsection  Internal Viewers
+@vindex hpath:internal-display-alist
+@cindex file display function
+@cindex display function
+@cindex internal viewer
+@cindex link, display function
+
+@cindex internal image display
+@vindex hpath:native-image-suffixes
+@cindex internal custom display
+@vindex hpath:internal-display-alist
+@cindex internal standard display
+@vindex hpath:display-where
+When given a filename to display, Hyperbole first checks if its suffix
+is matched by @code{hpath:native-image-suffixes}.  If so and if the
+function @code{image-mode} is defined, it uses that mode together with
+the value of @code{hpath:display-where} to display the image within an
+Emacs buffer.
+
+If no match is found, the @code{hpath:internal-display-alist} variable
+is checked for a filename match.  Its value is an association list
+whose elements are (<file-name-regular-expression>
+. <function-of-one-arg>) pairs.  Any path whose name matches
+a <file-name-regular-expression> will be displayed by calling the
+associated <function-of-one-arg> with the filename as the argument.
+The first regular expression that matches each filename is the one
+used.  This can be used to format raw data files for convenient
+display.
+
+By default, this setting handles the following types of files:
+@table @emph
+@item Audio Files
+Major audio format files are played with the @code{play-sound-file} command.
+@item Info Manuals
+Files with a @file{.info} suffix (may also be compressed) are displayed in the 
Info browser.
+@item RDB Files
+Files with an @file{.rdb} suffix are displayed as relational databases using 
the RDB package
+available with InfoDock.
+@end table
+
 @cindex menu, Cust/Referents
 @kindex C-h h c r
-Regular file links are displayed in an Emacs window specified by the
-@code{hpath:display-where} setting which may be changed with the Cust/Referents
-@bkbd{C-h h c r} menu.
+Links to standard files, those which don't match any special referent
+category described earlier, are displayed in an Emacs window specified
+by the @code{hpath:display-where} setting.  It may be changed with the
+Cust/Referents @bkbd{C-h h c r} menu.
 
 @noindent
 Available options are:
@@ -6453,7 +6704,7 @@ Display in a new single window frame
 Display in another, possibly new window of the selected frame (this is
 the default)
 @item @bullet{} Single-Win
-Display in  a window of the selected frame and delete its other windows
+Display in a window of the selected frame and delete its other windows
 @end table
 
 @page
@@ -6466,43 +6717,7 @@ Alternatively, you can use the Hyperbole menubar menu as 
shown here:
 @end float
 @sp 1
 
-@noindent
-Continue reading the next sections for information on custom Internal
-and External Viewers for link referencts.
-
-@node Internal Viewers, External Viewers, Referent Display, Customization
-@subsection  Internal Viewers
-@vindex hpath:internal-display-alist
-@cindex file display function
-@cindex display function
-@cindex internal viewer
-@cindex link, display function
-When given a file name, Hyperbole will by default display the file for
-editing within an Emacs buffer.  The @code{hpath:internal-display-alist}
-variable can be used to specify file name patterns, such as matching
-suffixes, which will invoke a special Emacs Lisp function to display
-any matching files within Emacs.  This can be used to format raw data
-files for convenient display.
-
-For those who want to change this variable, @code{hpath:internal-display-alist}
-is defined in @file{hpath.el}.  Its value is an association list whose
-elements are (<file-name-regular-expression> . <function-of-one-arg>)
-pairs.  Any path whose name matches a <file-name-regular-expression>
-will be displayed by calling the associated <function-of-one-arg> with
-the file name as the argument.
-
-By default, this variable handles the following types of files:
-@table @emph
-@item Audio Files
-Major audio format files are played with the @code{play-sound-file} command.
-@item Info Manuals
-Files with a @file{.info} suffix (may also be compressed) are displayed in the 
Info browser.
-@item RDB Files
-Files with an @file{.rdb} suffix are displayed as relational databases using 
the RDB package
-available with InfoDock.
-@end table
-
-@xref{External Viewers}, for instructions on associating file names with
+@xref{External Viewers}, for instructions on associating filenames with
 external, window-system specific viewers.
 
 @node External Viewers, Link Variable Substitution, Internal Viewers, 
Customization
@@ -6515,10 +6730,13 @@ external, window-system specific viewers.
 @cindex external program
 @cindex external viewer
 @cindex link, viewer program
-If you will be using Hyperbole under a window system,
-the @code{hpath:get-external-display-alist} function
-in @file{hpath.el} supports hyperlinks that open files using external, 
non-Emacs
-tools, e.g.@: a pdf reader or a vector graphic viewer.
+
+@cindex external display
+@vindex hpath:external-display-alist
+If you use Hyperbole under a window system,
+the @code{hpath:get-external-display-alist} function in @file{hpath.el}
+supports hyperlinks that open files using external, non-Emacs tools, e.g.@:
+a pdf reader or a vector graphics viewer.
 
 The value returned by @code{hpath:get-external-display-alist} is determined
 based on the window system supported by the current frame and the version
@@ -6528,8 +6746,8 @@ path whose name matches a <file-name-regular-expression> 
will be
 displayed using the corresponding viewer-program or the first
 viewer-program found on the system from a list of programs.  If a
 <viewer-program> entry contains a @samp{%s} string, the filename to
-display will be substituted at that point within the string.
-Otherwise, the filename will be appended to the <viewer-program>
+display is substituted at that point within the string.
+Otherwise, the filename is appended to the <viewer-program>
 entry.  Alternatively, the viewer-program may be a Lisp function that
 takes a single filename argument.
 
@@ -6539,13 +6757,13 @@ for each available window system: 
@code{hpath:external-display-alist-macos},
 @code{hpath:external-display-alist-x}.  Examine and modify these
 values to suit your needs.
 
-@cindex MIME
-@cindex mailcap
-@cindex external viewer
-On systems that have a MIME mailcap file (see
-@file{www.wikiwand.com/en/Mailcap}), this is used as a fallback
-set of external viewer associations when none are found
-within @code{hpath:get-external-display-alist}.
+@c @cindex MIME
+@c @cindex mailcap
+@c @cindex external viewer
+@c On systems that have a MIME mailcap file (see
+@c @file{www.wikiwand.com/en/Mailcap}), this is used as a fallback
+@c set of external viewer associations when none are found
+@c within @code{hpath:get-external-display-alist}.
 
 @node Link Variable Substitution, Web Search Engines, External Viewers, 
Customization
 @subsection  Link Variable Substitution
@@ -6561,16 +6779,15 @@ compared against the values in @code{hpath:variables}.  
The first
 match found, if any, is selected and its associated variable name is
 substituted into the link pathname, in place of its literal value.
 When a link button is activated, potentially at a different site,
-Hyperbole replaces each variable within the link pathname with the
-first matching value from this list to recreate the literal pathname.
+Hyperbole replaces each variable in the link pathname with the first
+matching value from this list to recreate the literal pathname.
 Environment variables are also replaced whenever link paths are
 resolved.
 
 This permits sharing of links over wide areas, where the variable values
 differ between link creator and link activator.  The entire process
 is wholly transparent to the user; it is explained here simply to help
-you in deciding whether or not to modify the value of
-@code{hpath:variables}.
+you in deciding whether or not to modify the value of @code{hpath:variables}.
 
 @node Web Search Engines, Using URLs with Find-File, Link Variable 
Substitution, Customization
 @subsection Web Search Engines
@@ -6642,7 +6859,7 @@ Hyperbole: @code{(hpath:find-file-urls-mode 1)}.
 @cindex URLs, abbreviated
 @cindex Tramp
 Both full URLs and abbreviated ones, like @file{www.gnu.org}, are
-recognized.  File name completion does not work with URLs; you
+recognized.  filename completion does not work with URLs; you
 have to type or paste in the entire URL.  This feature will work only
 if you have the builtin Tramp Emacs Lisp package; if you don't have
 Tramp, an error message will be displayed when you try to enable
@@ -6673,9 +6890,11 @@ through invisible/hidden text, making the text 
temporarily visible
 until point moves past that hidden part.  When a search match is
 selected, the surrounding text remains visible.
 
-This command toggles that setting (turns it off if a prefix
-argument less than or equal to 0 is given) and makes searches look at
-only visible text.
+You can temporarily disable searching of hidden text by typing @bkbd{M-s i}
+while in an incremental search.  This key sequence toggles that
+setting and makes searches look at only visible text (or the reverse
+when invoked again).  The setting lasts only through the current
+interactive search.
 
 @node Button Colors,  , Invisible Text Searches, Customization
 @subsection  Configuring Button Colors
@@ -7197,7 +7416,7 @@ Called from a program, takes three args: START, END and 
COLUMN.
 @item kimport:insert-file  @bkbd{C-x i}
 Insert each paragraph in IMPORT-FROM as a separate cell in the current view.
 Insert as sibling cells following the current cell.  IMPORT-FROM may be a
-buffer name or file name (file name completion is provided).
+buffer name or filename (filename completion is provided).
 
 @findex kimport:insert-register
 @item kimport:insert-register  @bkbd{C-x r i}
@@ -7815,6 +8034,7 @@ If dragged from an Emacs window to outside of Emacs:
 @section   Smart Keyboard Keys
 
 @menu
+* Smart Key - Company Mode::
 * Smart Key - Treemacs::
 * Smart Key - Emacs Pushbuttons::
 * Smart Key - Argument Completion::
@@ -7830,6 +8050,7 @@ If dragged from an Emacs window to outside of Emacs:
 * Smart Key - RDB Mode::
 * Smart Key - Help Buffers::
 * Smart Key - Pages Directory Mode::
+* Smart Key - Python Source Code::
 * Smart Key - Identifier Menu Mode ::
 * Smart Key - C Source Code::
 * Smart Key - C++ Source Code::
@@ -7837,7 +8058,6 @@ If dragged from an Emacs window to outside of Emacs:
 * Smart Key - Lisp Source Code::
 * Smart Key - Java Source Code::
 * Smart Key - JavaScript Source Code::
-* Smart Key - Python Source Code::
 * Smart Key - Objective-C Source Code::
 * Smart Key - Fortran Source Code::
 * Smart Key - Occurrence Matches::
@@ -7858,7 +8078,26 @@ If dragged from an Emacs window to outside of Emacs:
 * Smart Key - Default Context::
 @end menu
 
-@node Smart Key - Treemacs, Smart Key - Emacs Pushbuttons, Smart Keyboard 
Keys, Smart Keyboard Keys
+
+@node Smart Key - Company Mode, Smart Key - Treemacs, Smart Keyboard Keys, 
Smart Keyboard Keys
+@subsection Smart Key - Company Mode
+
+@cindex company-mode
+@cindex completion
+Company mode is an extensive in-buffer completion framework, often used to 
complete programming identifiers.
+
+@format
+@group
+When company-mode is active:
+  ACTION KEY
+     Displays selected item's definition.
+  ASSIST KEY
+     Displays the documentation, if any, for the selected item.
+@end group
+@end format
+
+
+@node Smart Key - Treemacs, Smart Key - Emacs Pushbuttons, Smart Key - Company 
Mode, Smart Keyboard Keys
 @subsection Smart Key - Treemacs
 
 @cindex Treemacs
@@ -7879,10 +8118,10 @@ When in a Treemacs file browser buffer:
          collapse the entry;
      (2) elsewhere within an entry line, the item is displayed for editing,
          normally in another window;
-     (3) at the end of an entry line: invoke @code{action-key-eol-function},
-         typically to scroll up proportionally, if an Action Key press; invoke
-         @code{assist-key-eol-function}, typically to scroll down 
proportionally,
-         if an Asisst Key press;
+     (3) at the end of an entry line: if an Action Key press, invokes
+         @code{action-key-eol-function}, typically to scroll up proportionally;
+         if an Assist Key press, invokes @code{assist-key-eol-function}, 
typically
+         to scroll down proportionally;
      (4) on the first line of the buffer (other than the end of line),
          dired is run on the current directory of this Treemacs;
      (5) at the end of the first or last line of the buffer,
@@ -8218,7 +8457,7 @@ When pressed at the end of a Help buffer:
 @end group
 @end format
 
-@node Smart Key - Pages Directory Mode, Smart Key - Identifier Menu Mode , 
Smart Key - Help Buffers, Smart Keyboard Keys
+@node Smart Key - Pages Directory Mode, Smart Key - Python Source Code, Smart 
Key - Help Buffers, Smart Keyboard Keys
 @subsection Smart Key - Pages Directory Mode
 
 @format
@@ -8234,7 +8473,8 @@ When pressed on a pages-directory-mode entry line:
 @end group
 @end format
 
-@node Smart Key - Python Source Code, Smart Key - Objective-C Source Code, 
Smart Key - JavaScript Source Code, Smart Keyboard Keys
+@page
+@node Smart Key - Python Source Code, Smart Key - Identifier Menu Mode , Smart 
Key - Pages Directory Mode, Smart Keyboard Keys
 @subsection Smart Key - Python Source Code
 @format
 @group
@@ -8263,16 +8503,16 @@ When pressed within a Python source code file (without 
the OO-Browser):
 @end group
 @end format
 
-@page
-@node Smart Key - Identifier Menu Mode , Smart Key - C Source Code, Smart Key 
- Pages Directory Mode, Smart Keyboard Keys
+@node Smart Key - Identifier Menu Mode , Smart Key - C Source Code, Smart Key 
- Python Source Code, Smart Keyboard Keys
 @subsection Smart Key - Identifier Menu Mode 
 
 @format
 @group
-This works only for identifiers defined within the same source file in which 
they are referenced.
-It requires either Emacs' imenu or XEmacs' func-menu library and it requires 
that an index of
-identifiers has been built for the current buffer.  Other handlers handle 
identifier references
-and definitions across multiple files.
+This works only for identifiers defined within the same source file in
+which they are referenced.  It requires either Emacs' imenu library
+and it requires that an index of identifiers has been built for the
+current buffer.  Other handlers handle identifier references and
+definitions across multiple files.
 
 @noindent
 When pressed on an identifier name after an identifier index has been 
generated:
@@ -8284,6 +8524,7 @@ When pressed on an identifier name after an identifier 
index has been generated:
 @end group
 @end format
 
+@page
 @node Smart Key - C Source Code, Smart Key - C++ Source Code, Smart Key - 
Identifier Menu Mode , Smart Keyboard Keys
 @subsection Smart Key - C Source Code
 
@@ -8312,7 +8553,6 @@ When pressed within a C source code file:
 @end group
 @end format
 
-@page
 @node Smart Key - C++ Source Code, Smart Key - Assembly Source Code, Smart Key 
- C Source Code, Smart Keyboard Keys
 @subsection Smart Key - C++ Source Code
 
@@ -8342,6 +8582,7 @@ buffer:
 @end group
 @end format
 
+@page
 @format
 @group
 When pressed within a C++ source code file (without the OO-Browser):
@@ -8364,7 +8605,6 @@ When pressed within a C++ source code file (without the 
OO-Browser):
 @end group
 @end format
 
-@page
 @node Smart Key - Assembly Source Code, Smart Key - Lisp Source Code, Smart 
Key - C++ Source Code, Smart Keyboard Keys
 @subsection Smart Key - Assembly Source Code
 
@@ -8391,8 +8631,12 @@ When pressed within an assembly source code file:
 
 @format
 @group
+@cindex change-log-mode
+@cindex lisp identifier
+@cindex elisp identifier
 When pressed on a Lisp symbol within any of these types of buffers
-(Lisp code, debugger, compilation, or help):
+(Lisp code, debugger, compilation, or help) or in change-log-mode
+on an Emacs Lisp bound identifier:
   ACTION KEY
      Jumps to the definition of any selected Lisp construct.  If on an
      Emacs Lisp require, load, or autoload clause and the (find-library)
@@ -8445,7 +8689,7 @@ When pressed within a Java source code file (without the 
OO-Browser):
 @end group
 @end format
 
-@node Smart Key - JavaScript Source Code, Smart Key - Python Source Code, 
Smart Key - Java Source Code, Smart Keyboard Keys
+@node Smart Key - JavaScript Source Code, Smart Key - Objective-C Source Code, 
Smart Key - Java Source Code, Smart Keyboard Keys
 @subsection Smart Key - JavaScript Source Code
 
 @format
@@ -8462,7 +8706,7 @@ When pressed within a JavaScript source code file:
 @end format
 
 
-@node Smart Key - Objective-C Source Code, Smart Key - Fortran Source Code, 
Smart Key - Python Source Code, Smart Keyboard Keys
+@node Smart Key - Objective-C Source Code, Smart Key - Fortran Source Code, 
Smart Key - JavaScript Source Code, Smart Keyboard Keys
 @subsection Smart Key - Objective-C Source Code
 
 @vindex objc-cpp-include-path
@@ -9250,10 +9494,8 @@ to direct further development effort towards known needs;
 and to acknowledge known weaknesses in the current system.
 @end itemize
 
-If you would like to see some of this work done, consider funding
-its development.  Without any serious interest from users, progress
-on these fronts will be slow.  Here are some new features we have
-in mind, however.
+Without any serious interest from users, progress on these fronts will
+be slow.  Here are some new features we have in mind, however.
 
 @table @asis
 
diff --git a/man/im/C-hh.png b/man/im/C-hh.png
index c6e5bb3..10dde2e 100644
Binary files a/man/im/C-hh.png and b/man/im/C-hh.png differ
diff --git a/man/im/wgrid4x3.png b/man/im/wgrid4x3.png
new file mode 100644
index 0000000..b3cef2e
Binary files /dev/null and b/man/im/wgrid4x3.png differ
diff --git a/man/version.texi b/man/version.texi
index 381bfab..25d4cc6 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED December 12, 2017
-@set UPDATED-MONTH Dec 2017
-@set EDITION 7.0.2a
-@set VERSION 7.0.2a
+@set UPDATED August 11, 2019
+@set UPDATED-MONTH August 2019
+@set EDITION 7.0.3b
+@set VERSION 7.0.3b
diff --git a/set.el b/set.el
index abe4b3b..1ab32f5 100644
--- a/set.el
+++ b/set.el
@@ -1,4 +1,4 @@
-;;; set.el ---  General mathematical operators for unordered sets
+;;; set.el --- General mathematical operators for unordered sets
 ;;
 ;; Author:       Bob Weiner
 ;;
diff --git a/smart-clib-sym b/smart-clib-sym
old mode 100755
new mode 100644
index 3b46765..f1b6403
--- a/smart-clib-sym
+++ b/smart-clib-sym
@@ -23,10 +23,6 @@
 #   Either 1 if symbol is found or 0 if not.
 
 # Code:
-#
-# Perl script used to tell whether one file is newer than another.
-#
-set fn = "file-newer"
 
 # Create this file and place in the file the full path for each C, C++ or
 # Objective-C library that you want scanned for symbol names.  One filename
@@ -40,16 +36,10 @@ set clib_list = "~/.CLIBS-LIST"
 #
 set clib_symbols = "~/.clibs-symbols"
 
-# Try to locate 'perl' and 'file-newer' script for use.
-
-which perl >& /dev/null
-if ($status) unset fn
-
 set st = 0 rebuild = 0
 if (-e $clib_list) then
    if (! -e $clib_symbols || -z $clib_symbols) set rebuild = 1
-   if (! $rebuild  && $?fn) @ rebuild = `perl $fn $clib_list $clib_symbols`
-   if ($rebuild) then
+   if ($rebuild || (-M $clib_list) > (-M $clib_symbols)) then
       nm -g `cat $clib_list` | grep '^[0-9 ].* _[A-Za-z]' | sed -e 
's/^[^_][^_]*_//g' | sort | uniq > $clib_symbols
    endif
    fgrep -sx $1 $clib_symbols >& /dev/null
@@ -58,3 +48,6 @@ endif
 
 echo $st
 exit $st
+
+
+
diff --git a/topwin.py b/topwin.py
old mode 100755
new mode 100644
index 2892cad..2a3c983
--- a/topwin.py
+++ b/topwin.py
@@ -23,7 +23,7 @@ if len(argv) < 3:
 
 x = int(argv[1]); y = int(argv[2])
 
-# Return the first window only that x,y falls within since the windows are 
listed in z-order (top of stack to bottom)
+# Return the first window that x,y falls within since the windows are listed 
in z-order (top of stack to bottom)
 def filter_and_print_top_window(x, y):
     win_x = win_y = win_width = win_height = 0
 



reply via email to

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