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

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

[elpa] externals/hyperbole 45fff9a 23/51: Many bug fixes and improvement


From: Stefan Monnier
Subject: [elpa] externals/hyperbole 45fff9a 23/51: Many bug fixes and improvements
Date: Sun, 12 Jul 2020 18:10:12 -0400 (EDT)

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

    Many bug fixes and improvements
---
 Changes            |  74 ++++++-
 DEMO               |  84 +++++---
 HY-ABOUT           |   4 +-
 HY-NEWS            |   9 +-
 README.md          |   2 +-
 README.md.html     | 620 -----------------------------------------------------
 hact.el            |   4 +-
 hactypes.el        |   2 +-
 hargs.el           |   6 +-
 hbut.el            | 126 +++++------
 hibtypes.el        |   8 +-
 hmouse-drv.el      |  10 +-
 hmouse-sh.el       |  12 ++
 hmouse-tag.el      |   2 +
 hpath.el           |  95 +++++---
 hsys-org.el        |  54 +++--
 hui-window.el      |  76 ++++---
 hui.el             |   8 +-
 hycontrol.el       |   2 +-
 hyrolo.el          |  21 +-
 man/hyperbole.html |  12 +-
 man/hyperbole.info | Bin 520357 -> 520974 bytes
 man/hyperbole.pdf  | Bin 1280517 -> 1280967 bytes
 man/hyperbole.texi |  11 +-
 24 files changed, 407 insertions(+), 835 deletions(-)

diff --git a/Changes b/Changes
index 6290319..9b1c2ef 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,67 @@
+2020-02-16  Bob Weiner  <rsw@gnu.org>
+
+* hui-window.el (hmouse-alist-add-window-handlers): Added not a modeline 
depress test for clause that
+    handles drags from a window to a modeline, since otherwise will catch 
drags from a modeline that
+    may move a frame.
+                (hmouse-drag-p): Added to test whether absolute depress and 
release positions differ.
+               (hmouse-release-left-edge, hmouse-release-right-edge): Removed 
XEmacs code.
+
+* hmouse-drv.el (action-key-depress, assist-key-depress):
+  hui-window.el (action-key-modeline, assist-key-modeline):
+     Modeline window resizing is now handled in action/assist-key-depress
+     via a call to mouse-drag-mode-line, providing live visual feedback.
+
+2020-02-15  Bob Weiner  <rsw@gnu.org>
+
+* hmouse-sh.el (hmouse-unshifted-setup): Disabled `mouse-1-click-follows-link' 
since it doesn't work
+    with Hyperbole's down and up bindings.
+
+* hui-window.el (hmouse-drag-outside-all-windows): Removed errant backquote 
typo that was causing
+    any Action Mouse Key click to create a new frame.
+
+* hargs.el (hargs:iform-read): Removed XEmacs setting and replaced with 
one-time transient-mark-mode
+    setting to keep region enabled when '_' is included in interactive specs.
+
+* DEMO: Removed {} from partial key series that we don't want new automated 
button tester to activate.
+
+* hycontrol.el (hycontrol-windows-grid-by-major-mode): Changed initial-input 
to default value.
+
+* hmouse-tag.el (smart-lisp-bound-symbol-def): Documented.
+
+* hact.el (htype:create): Added definition-name property used by
+    find-function-search-for-symbol so now Elisp stack frame and other function
+    calls that look like actypes::<action-type> and 
ibtypes::<implicit-button-type> jump to
+    the associated defact and defib definitions.
+
+* hbut.el (ibtype:create): Added definition-name property to a tag lookup on 
ibtypes::grep-msg looks up
+    the name used in the defib call, grep-msg.  This had previously been done 
for actypes.
+
+* hpath.el (hpath:posix-to-mswindows-separators):
+           (hpath:mswindows-to-posix-separators)
+          (hpath:abbreviate-file-name): Added and called from the above 
functions.  Same as
+    `abbreviate-file-name' but disables tramp-mode.  This prevents improper 
processing of hargs
+     with colons in them, e.g. `actypes::link-to-file'."
+
+* hbut.el (ibut:at-p): Fixed that button category/type was not set if KEY-ONLY 
flag was given.
+
+* hmouse-drv.el (hkey-help): Fixed listing of command executed when prefixed 
with a funcall.
+
+* hbut.el (hbut:report): Improved doc string.
+
+* hui.el (hui:ebut-act):
+  hsys-org.el (hsys-org-hbut-activate-p):
+  hbut.el (hbut:act): Simplified most common call and made hbut optional, 
defaulting to 'hbut:current.
+
+2020-02-13  Bob Weiner  <rsw@gnu.org>
+
+* hpath.el (hpath:cache-mswindows-mount-points): If a network share with a 
domain
+    name, also add an entry WITHOUT the  domain name to the mount points table
+    since Windows paths often omit the domain.
+           (hpath:mswindows-to-posix-separators): Rewrote to better handle
+    converting Windows UNC paths to Posix mount points.
+           (hpath:directory-expand-alist): Renamed to 
hpath:posix-mount-point-to-mswindows-alist
+           (hpath:mswindows-path-posix-mount-alist): Removed, unused.
+
 2020-02-12  Bob Weiner  <rsw@gnu.org>
 
 * hyrolo.el (hyrolo-verify): Removed check of (stringp hyrolo-match-regexp) 
since may have
@@ -8,7 +72,9 @@
     Changed: (match-string-no-properties hyrolo-entry-regexp
          To: (match-string-no-properties hyrolo-entry-group-number)
 
-* hsys-org.el (hsys-org-hbut-activate-p): Defined and added to 
org-metareturn-hook so local binding
+* hsys-org.el (inhibit-hsys-org): Added customization to allow disabling all 
Smart Key support when in an
+    Org mode and documented everywhere.
+              (hsys-org-hbut-activate-p): Defined and added to 
org-metareturn-hook so local binding
     of M-RET in org-mode activates Hyperbole buttons (doesn't run full set of 
Action Key actions).
     (org-link): Updated to utilize newer org-link-open-from-string function 
when available.
     (hsys-org-link-at-p): Updated to utilize newer org-link-any-re variable 
when available.
@@ -350,12 +416,6 @@ V7.0.7 test release changes ^^^^:
 * hmouse-tag.el (smart-emacs-lisp-mode-p): Added change-log-mode so
     Elisp symbols there are matched.
 
-* hact.el (actype:create): Added definition-name property used by
-    find-function-search-for-symbol so now Elisp stack frame function
-    calls that look like actypes::<action-type> and
-    ibtypes::<implicit-button-type> jump to the associated defact and
-    defib definitions.
-
 * hmouse-tag.el (smart-lisp-at-definition-p): Don't match to 'def' alone.
 
 2019-09-10  Bob Weiner  <rsw@gnu.org>
diff --git a/DEMO b/DEMO
index f3a72b9..7182fd1 100644
--- a/DEMO
+++ b/DEMO
@@ -1,6 +1,6 @@
 * GNU Hyperbole Demonstration by Bob Weiner
 
-  Say thanks if you like Hyperbole: https://saythanks.io/to/rswgnu
+  Send an email or a testimonial if you like Hyperbole to <rsw@gnu.org>.
 
     Table of Contents
     -----------------
@@ -32,9 +32,9 @@ you know how to use Emacs.  Otherwise, run the Emacs tutorial 
by pressing
 {C-h t} first.
 
 You should be looking at this file within Emacs and Hyperbole should already
-be installed within your copy of Emacs.  To be sure, press {C-h h} and you
+be installed within your copy of Emacs.  To be sure, press 'C-h h' and you
 should see the Hyperbole menu in your minibuffer window at the bottom of
-your current Emacs frame.  Press {q} to quit out of this menu and we can
+your current Emacs frame.  Press 'q' to quit out of this menu and we can
 begin.  If Hyperbole is not installed, see the "INSTALL" file, in the
 same directory as this file, for instructions on installing it.
 
@@ -120,32 +120,35 @@ minibuffer menu you saw at the beginning; one is for use 
from the keyboard
 (the minibuffer menu) and one is for use with the mouse (the menubar menu).
 
 In this demo, we will use the minibuffer menu.  To display the top-level
-Hyperbole menu again use {C-h h} or click the Action Mouse Key within the
+Hyperbole menu again use 'C-h h' or click the Action Mouse Key within the
 blank/inactive minibuffer window.  You will see a single line (possibly
 wrapped around) with submenus that end with a forward slash (/) and non-menu
 items.  Type the first letter of any menu item (upper or lower case does not
 matter) or click on it with the Action Mouse Key to select and activate it.
-You may also move forward an item with {TAB} or {M-f} or backward an item
-with {Shift-TAB} or {M-b} and then use {RET} to select the item.
+You may also move forward an item with 'TAB' or 'M-f' or backward an item
+with 'Shift-TAB' or 'M-b' and then use 'RET' to select the item.  Also, notice
+at the left of this menu is your Hyperbole release version number for easy
+reference.
 
-A press of {q} or {C-g} will quit from the current menu without invoking any
-commands.  A press/click of the Assist Key on a menu item pops up a window
-displaying help for it while keeping the current menu on screen.  {C-t} or
+A press/click of the Assist Key on a menu item pops up a window
+displaying help for it while keeping the current menu on screen.  'C-t' or
 an Action Key press/click on the menu prefix (before the '>' character)
-returns you to the top Hyperbole menu if you are in a submenu.
+returns you to the top Hyperbole menu if you are in a submenu.  A press of
+'q' or 'C-g' will quit from the current menu without invoking any further
+commands.
 
 Let's try a menu item that displays the Hyperbole Glossary of terms.  Use
-{q} in the glossary to return here.  Use {C-h h d g} to display the
-glossary.  {C-h h d RET} would simply exit the menu and {C-h h d C-t} would
-redisplay the top Hyperbole menu.
+{C-h h d g} to display the glossary.  Use {q} in the glossary to return here.
+{C-h h d RET} would simply exit the menu and {C-h h d C-t q} would redisplay
+the top Hyperbole menu and then quit it.
 
 What if we want to do a web search for GNU Hyperbole?  Then we use the
-Find/Web menu, typically bound to {C-c /} or if not, then use {C-h h f w}.
-Then type {g} for Google and enter "GNU Hyperbole", including the quote marks
+Find/Web menu, typically bound to 'C-c /' or if not, then use {C-h h f w
+g "GNU Hyperbole" RET} to search Google, including the quote marks
 so that it is searched for as a phrase.  Your standard web browser will be
 used to return the search results.
 
-You can change which browser is used with {C-h h c w}, the Cust/Web-Search
+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)>.
 
@@ -258,7 +261,7 @@ the argument is used to adjust one dimension of the frame.
 
 ** Windows Grid
 
-The {@} command splits a frame into a grid of up to 9 rows by 9 columns of
+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 series'.  Press the
@@ -272,18 +275,25 @@ 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
-prompted for the major mode and then the size of the grid.
+A zero argument to the @ command is special.  It means you want to display
+buffers with a particular major mode first, e.g. emacs-lisp-mode.  You will
+be prompted for the major mode and then the size of the grid.
 
-To try it, activate: {C-hhsf .0 @}.
+First let's add a few Emacs Lisp files to the bottom of our buffer list.
+Press the Action Key anywhere within the following action button:
 
-If you ever need to experiment with different sized window grids, use {M-x
-hycontrol-window-grid-repeatedly RET}.  It will repeatedly prompt you for a
-grid size and then display it.  When you are done, simply press {RET} to
+   <mapc (lambda (f) (find-file-noselect (expand-file-name f hyperb:dir)))
+         ("hibtypes.el" "hactypes.el" "hsettings.el")>
+
+Now let's display a 2x2 grid of windows preferring Emacs Lisp buffers:
+To try it, activate: {C-hhsf .0 @ emacs-lisp-mode RET 22 RET}.
+
+If you ever need to experiment with different sized window grids, use M-x
+hycontrol-window-grid-repeatedly RET.  It will repeatedly prompt you for a
+grid size and then display it.  When you are done, simply press RET to
 exit.
 
-Outside of HyControl, you can invoke the grid of windows command with {C-c @}
+Outside of HyControl, you can invoke the grid of windows command with C-c @
 in most buffers.
 
 There is lots more to discover in HyControl as you explore.
@@ -352,14 +362,14 @@ textual highlighting, each search match is highlighted 
for quick, visual
 location.
 
 Let's try the HyRolo.  First load the HyRolo demo commands with an Action Key
-press on "-hyrolo-demo.el".  Now {C-x 4 r} will search the DEMO ROLO file.
+press on "-hyrolo-demo.el".  Now C-x 4 r will search the DEMO ROLO file.
 Action Key press 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 series search string or
-else the space will be removed; when just typing the same string
-interactively, don't add the backslash.
+else the space will be removed (or you could type SPC); when just typing the
+same string interactively, don't add the backslash.
 
 A prefix argument used with any of the find commands listed above limits the
 search to a maximum number of matches given by the argument.  For example
@@ -402,7 +412,7 @@ Hyperbole provides a history command that returns you to 
previous button
 locations in the reverse order of the way you traverse them.  It actually
 restores your complete frame and window configuration at the time of the
 button press.  You access it by selecting the Hist command from the top-level
-Hyperbole menu, {C-h h h}.  Remember this because you will want to use that
+Hyperbole menu, C-h h h.  Remember this because you will want to use that
 command to return to this DEMO later.
 
 
@@ -436,11 +446,11 @@ of 'My Emacs Files':
 
 <[My Emacs Files]>: "~/.emacs.d"
 
-You see that the label is delimited by <[ and ]>.  It must be at least 2
+You see that the label is delimited by '<[' and ']>'.  It must be at least 2
 characters in length and can be followed by any number of :, - or = characters,
 including none, and then a whitespace character.  You can activate the button
 either from its label or its pattern text.  With point on an implicit button,
-you can label it by using {C-h h i l}.
+you can label it by using C-h h i l.
 
 Now let's explore some implicit button types.
 
@@ -458,8 +468,9 @@ 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.
+Hyperbole Manual.  Press your Action Key between the braces to see it.
+Another press here: {C-x o m implicit\ buttons RET} should jump to the
+Implicit Buttons section of the manual.
 
 Now when you write notes about particular global key sequences you want to
 remember, just surround them with curly braces and you'll always be able to
@@ -488,9 +499,16 @@ 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).
 
+Sixth, the Action and Assist keys work on Hyperbole explicit and implicit
+buttons.
+
 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).
 
+To disable ALL Hyperbole support within Org major and minor modes, set the
+custom option `inhibit-hsys-org' to t.  Then the Action Key will simply
+invoke the Org mode standard binding of {M-RET}, (org-meta-return).
+
 ** Action Buttons
 
 A new feature of Hyperbole is a universal syntax for creating implicit
diff --git a/HY-ABOUT b/HY-ABOUT
index 93e1a22..1693ac6 100644
--- a/HY-ABOUT
+++ b/HY-ABOUT
@@ -5,8 +5,8 @@
                 https://www.gnu.org/software/hyperbole/
                             Version 7.0.8
 
-                   Say thanks if you like Hyperbole:
-                    https://saythanks.io/to/rswgnu
+         Say thanks or send a testimonial if you like Hyperbole:
+                        Email: <rsw@gnu.org>
 
 GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is
 an efficient and programmable hypertextual information management
diff --git a/HY-NEWS b/HY-NEWS
index 1825c3e..161a701 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -38,13 +38,16 @@
     - Double Quoting Key Series: Key series delimited by {} may now be in 
double
       quotes, e.g. "{C-x o}".
 
+    - Much improved conversion of MSWindows UNC paths to existing Posix mount
+      points when running Emacs under Windows Subsystem for Linux.
+
   ORG MODE
 
     - Implicit Button Support: Org-mode's local binding of {M-RET} by default
       now activates Hyperbole implicit buttons when within them.
-In org-mode buffers when not on a Hyperbole
-      button, org link or heading, and the {M-RET} Action Key is pressed,
-      Hyperbole defers to Org's org-meta-return command.
+
+    - inhibit-hsys-org: New customization that when set non-nil disables
+      all Smart Key support in any Org major or minor mode.
 
   PROGRAMMING
 
diff --git a/README.md b/README.md
index 786d684..e5e5b95 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 # GNU Hyperbole 7.0.8 - The Everyday Hypertextual Information Manager
 
-[Say thanks if you like Hyperbole.(https://saythanks.io/to/rswgnu)]
+[Say thanks or send a testimonial if you like Hyperbole.(mailto:rsw@gnu.org)]
 
 <!-- START doctoc generated TOC -->
 **Table of Contents**
diff --git a/README.md.html b/README.md.html
index bddef2b..e69de29 100644
--- a/README.md.html
+++ b/README.md.html
@@ -1,620 +0,0 @@
-<h1>
-<a 
id="user-content-gnu-hyperbole-708---the-everyday-hypertextual-information-manager"
 class="anchor" 
href="#gnu-hyperbole-708---the-everyday-hypertextual-information-manager" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>GNU Hyperbole 7.0.8 - 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-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>
-<li><a href="#hyperbole-buttons">Hyperbole Buttons</a></li>
-<li><a href="#important-features">Important Features</a></li>
-<li><a href="#hyperbole-uses">Hyperbole Uses</a></li>
-<li><a href="#files">Files</a></li>
-<li><a href="#programmer-quick-reference">Programmer Quick Reference</a></li>
-<li><a href="#user-quotes">User Quotes</a></li>
-<li><a href="#why-was-hyperbole-developed">Why was Hyperbole 
developed?</a></li>
-</ul>
-
-<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>,
-is an easy-to-use, yet powerful and programmable hypertextual information
-management system implemented as a GNU Emacs package.  It offers rapid views
-and interlinking of all kinds of textual information, utilizing Emacs for
-editing.  It can dramatically increase your productivity and greatly reduce
-the number of keyboard/mouse keys you'll need to work efficiently.</p>
-<p>Hyperbole lets you:</p>
-<ol>
-<li>
-<p>Quickly create hyperlink buttons either from the keyboard or by dragging
-between a source and destination window with a mouse button depressed.
-Later, activate buttons by pressing/clicking on them or by giving the
-name of the button.</p>
-</li>
-<li>
-<p>Activate many kinds of <code>implicit buttons</code> recognized by context
-within text buffers, e.g. URLs, grep output lines, and git commits.
-A single key or mouse button automatically does the right thing in
-dozens of contexts; just press and go.</p>
-</li>
-<li>
-<p>Build outlines with multi-level numbered outline nodes, e.g. 1.4.8.6,
-that all renumber automatically as any node or tree is moved in the
-outline.  Each node also has a permanent hyperlink anchor that you can
-reference from any other node;</p>
-</li>
-<li>
-<p>Manage all your contacts quickly with hierarchical categories and
-embed hyperlinks within each entry.  Or create an archive of documents
-with hierarchical entries and use the same search mechanism to quickly
-find any matching entry;</p>
-</li>
-<li>
-<p>Use single keys to easily manage your Emacs windows or frames and
-quickly retrieve saved window and frame configurations;</p>
-</li>
-<li>
-<p>Search for things in your current buffers, in a directory tree or
-across major web search engines with the touch of a few keys.</p>
-</li>
-</ol>
-<p>The common thread in all these features is making retrieval,
-management and display of information fast and easy.  That is
-Hyperbole's purpose.  It may be broad but it works amazingly well.  If
-it is textual information, Hyperbole can work with it.  In contrast to
-Org mode, Hyperbole works across all Emacs modes and speeds your work
-by turning all kinds of references into clickable hyperlinks and
-allowing you to create new hyperlinks by dragging between two windows.
-The <a href="https://www.emacswiki.org/emacs/Hyperbole"; 
rel="nofollow">Hyperbole wiki page</a>
-explains the many ways it differs from and is complementary to Org
-mode.</p>
-<p>Hyperbole allows hypertext buttons to be embedded within unstructured
-and structured files, mail messages and news articles.  It offers
-intuitive keyboard and mouse-based control of information display
-within multiple windows.  It also provides point-and-click access to
-World-Wide Web URLs, Info manuals, ftp archives, etc.</p>
-<p>Hyperbole includes easy-to-use, powerful hypertextual button types
-without the need to learn a markup language.  Hyperbole's button types
-are written in Lisp and can be wholly independent of the web, i.e. web
-links are one type of Hyperbole link, not fundamental to its link
-architecture.  However, Hyperbole is a great assistant when editing
-HTML or Javascript or when browsing web pages and links.</p>
-<p>Hyperbole is something to be experienced and interacted with, not
-understood from reading alone.  If you like an Emacs package to do
-only one thing than Hyperbole is not for you, but if you would
-rather learn fewer packages and get more work done faster, then
-Hyperbole is for you.</p>
-<p>Hyperbole works well on GNU Emacs 24.4 or above.  It is designed and
-written by Bob Weiner.  It is maintained by him and Mats Lidell.  Its
-main distribution site is: <a href="https://www.gnu.org/software/hyperbole/"; 
rel="nofollow">https://www.gnu.org/software/hyperbole/</a>.
-If any term in here is new or unfamiliar to you, you can look it up in the
-<a href="man/hyperbole.html#Glossary">Hyperbole Glossary</a>.</p>
-<p>Hyperbole is available for <a href="#installation">download and 
installation</a>
-through the GNU Emacs package manager.</p>
-<h2>
-<a id="user-content-mailing-lists" class="anchor" href="#mailing-lists" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Mailing Lists</h2>
-<ul>
-<li>
-<p><strong><a 
href="mailto:hyperbole-users@gnu.org";>hyperbole-users@gnu.org</a></strong> - 
User list for GNU Hyperbole</p>
-</li>
-<li>
-<p><strong><a 
href="mailto:bug-hyperbole@gnu.org";>bug-hyperbole@gnu.org</a></strong> - List 
for bug reporting</p>
-</li>
-</ul>
-<h2>
-<a id="user-content-ftp-and-git-repository-downloads" class="anchor" 
href="#ftp-and-git-repository-downloads" aria-hidden="true"><span 
aria-hidden="true" class="octicon octicon-link"></span></a>Ftp and Git 
Repository Downloads</h2>
-<p>To inspect the Hyperbole source code online rather than installing it for
-use (which will also give you the source code), open a web page to:</p>
-<ul>
-<li><a href="https://git.savannah.gnu.org/cgit/hyperbole.git/tree/"; 
rel="nofollow">https://git.savannah.gnu.org/cgit/hyperbole.git/tree/</a></li>
-</ul>
-<p>Alternatively, you may download a tar.gz source archive from either:</p>
-<ul>
-<li>
-<p><a href="ftp://ftp.gnu.org/gnu/hyperbole/"; 
rel="nofollow">ftp://ftp.gnu.org/gnu/hyperbole/</a></p>
-</li>
-<li>
-<p><a href="http://ftpmirror.gnu.org/hyperbole/"; 
rel="nofollow">http://ftpmirror.gnu.org/hyperbole/</a></p>
-</li>
-</ul>
-<p>which will find the closest mirror of the GNU ftp site and show it to 
you.</p>
-<p>If you want to follow along with Hyperbole development and maintain a
-copy/clone of the current version-controlled git tree, use a
-<a href="https://savannah.gnu.org/git/?group=hyperbole"; rel="nofollow">command 
listed here</a>
-to clone the Hyperbole project tree.</p>
-<h2>
-<a id="user-content-installation" class="anchor" href="#installation" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Installation</h2>
-<p>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, see the Packages section of the GNU Emacs Manual,
-<a 
href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html"; 
rel="nofollow">Emacs Packages</a>.</p>
-<p>If you have Hyperbole 5.10 or higher already installed and simply want to
-upgrade it, invoke the Emacs Package Manager with {M-x list-packages RET},
-then use the {U} key followed by the {x} key to upgrade all out-of-date
-packages, Hyperbole among them.  Then skip the text below and move on to
-the next section, <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,
-typically "~/.emacs".  For further details, see <a 
href="https://www.gnu.org/software/emacs/manual/html_node/emacs/Init-File.html"; 
rel="nofollow">Emacs Init
-File</a>.</p>
-<p>Below are the lines to add:</p>
-<pre><code>(require 'package)
-(setq package-enable-at-startup nil) ;; Prevent double loading of libraries
-(package-initialize)
-(unless (package-installed-p 'hyperbole)
-  (package-refresh-contents)
-  (package-install 'hyperbole))
-(require 'hyperbole)
-</code></pre>
-<hr>
-<p>Now save the file and then restart Emacs.  Hyperbole will then be
-downloaded and compiled for use with your version of Emacs; give it a
-minute or two.  You may see a bunch of compilation warnings but these
-can be safely ignored.</p>
-<h2>
-<a id="user-content-invocation" class="anchor" href="#invocation" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Invocation</h2>
-<p>Once Hyperbole has been installed for use at your site and loaded into your
-Emacs session, it is ready for use.  You will see a Hyperbole menu on your
-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" 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}
-to quit from the menu.</p>
-<p>use a specific Hyperbole command such as an Action Key click {M-RET} on
-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" 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" 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
-them.  Hyperbole also binds {C-c } for quick access to HyControl's
-window control menu if it was not already bound prior to Hyperbole's
-initialization.  A long video demonstrating many of HyControl's
-features is available at <a href="https://youtu.be/M3-aMh1ccJk"; 
rel="nofollow">https://youtu.be/M3-aMh1ccJk</a>.</p>
-<p>The above are the best interactive ways to learn about Hyperbole.
-Hyperbole also includes the Hyperbole Manual, a full reference manual,
-not a simple introduction.  It is included in the "man/" subdirectory
-of the Hyperbole package directory in four forms:</p>
-<p><a href="man/hyperbole.info">hyperbole.info</a>   - online Info browser 
version<br>
-<a href="man/hyperbole.html">hyperbole.html</a>   - web HTML version<br>
-<a href="man/hyperbole.pdf">hyperbole.pdf</a>     - printable version<br>
-<a href="man/hyperbole.texi">hyperbole.texi</a>   - source form</p>
-<p>The Hyperbole package installation places the Info version of this manual
-where needed and adds an entry for Hyperbole into the Info directory under
-the Emacs category.  {C-h h d i} will let you browse the manual.  For web
-browsing, point your browser at "${hyperb:dir}/man/hyperbole.html",
-wherever the Hyperbole package directory is on your system; often this is:
-"~/.emacs.d/elpa/hyperbole-${hyperb:version}/".</p>
-<h2>
-<a id="user-content-hyperbole-components" class="anchor" 
href="#hyperbole-components" aria-hidden="true"><span aria-hidden="true" 
class="octicon octicon-link"></span></a>Hyperbole Components</h2>
-<p>Hyperbole consists of five parts:</p>
-<ol>
-<li>
-<p><strong>Buttons and Smart Keys</strong>: A set of hyperbutton types which 
supply
-core hypertext and other behaviors.  Buttons may be added to
-documents (explicit buttons) 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.</p>
-<p>These actions may be links or arbitrary Lisp expressions.  So
-for example, you could create your own button type of
-Wikipedia searches that jumped to the named Wikipedia page
-whenever point was within text of the form [wp].
-You define the pattern so {} might do the same
-thing if you preferred.  And this works within any Emacs
-buffer you want it to, regardless of major or minor mode.</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.  Users can make simple changes to button types and
-those familiar with Emacs Lisp can prototype and deliver new
-types quickly with just a few lines of code.</p>
-<p>Hyperbole includes two special `Smart Keys', the Action Key
-and the Assist Key, that perform an extensive array of
-context-sensitive operations across emacs usage, including
-activating and showing help for Hyperbole buttons.  In many
-popular Emacs modes, they allow you to perform common, sometimes
-complex operations without having to use a different key for each
-operation.  Just press a Smart Key and the right thing happens;</p>
-</li>
-<li>
-<p><strong>Contact and Text Finder</strong>: an interactive textual information
-management interface, including fast, flexible file and text
-finding commands.  A powerful, hierarchical contact manager,
-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" 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,
-easiest-to-use window and frame control available for GNU
-Emacs.  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;</p>
-<p>The broader vision for HyControl is to support persistent
-window and frame configurations as link targets.  Then a user
-will be able to create the views of information he wants and
-store them as links for rapid display.  Work remains to
-implement this feature but it helps explain the connection of
-HyControl to the rest of Hyperbole;</p>
-</li>
-<li>
-<p><strong>The Koutliner</strong>: an advanced outliner with multi-level
-autonumbering and permanent ids 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
-interactively;</p>
-</li>
-<li>
-<p><strong>Programming Library</strong>: a set of programming library classes 
for
-system developers who want to integrate Hyperbole with another
-user interface or as a back-end to a distinct system.  (All of
-Hyperbole is written in Emacs Lisp for ease of modification.
-Hyperbole has been engineered for real-world usage and is well
-structured).</p>
-</li>
-</ol>
-<p>We find Hyperbole's parts are more powerful as one package, i.e. the
-sum is greater than the parts, so we don't offer them separately.
-Hyperbole is free software, however, so you may modify it as you see
-fit.</p>
-<h2>
-<a id="user-content-hyperbole-buttons" class="anchor" 
href="#hyperbole-buttons" aria-hidden="true"><span aria-hidden="true" 
class="octicon octicon-link"></span></a>Hyperbole Buttons</h2>
-<p>A Hyperbole hypertext user works with buttons; he may create, modify, move
-or delete buttons.  Each button performs a specific action, such as linking
-to a file or executing a shell command.</p>
-<p>There are three categories of Hyperbole buttons:</p>
-<ol>
-<li>
-<p><em>Explicit Buttons</em>
-created by Hyperbole, accessible from within a single document;</p>
-</li>
-<li>
-<p><em>Global Buttons</em>
-created by Hyperbole, accessible anywhere within a user's
-network of documents;</p>
-</li>
-<li>
-<p><em>Implicit Buttons</em>
-buttons created and managed by other programs or embedded
-within the structure of a document, accessible from within a
-single document.  Hyperbole recognizes implicit buttons by
-contextual patterns given in their type specifications.</p>
-</li>
-</ol>
-<p>Hyperbole buttons may be clicked upon with a mouse to activate them or to
-describe their actions.  Thus, a user can always check how a button will act
-before activating it.  Buttons may also be activated from a keyboard.  (In
-fact, virtually all Hyperbole operations, including menu usage, may be
-performed from any standard terminal interface, so one can use it on distant
-machines that provide limited display access).</p>
-<p>Hyperbole does not enforce any particular hypertext or information
-management model, but instead allows you to organize your information in
-large or small chunks as you see fit, organizing each bit as time allows.
-The Hyperbole Koutliner and HyRolo tools organize textual hierarchies and
-may also contain links to external information sources.</p>
-<h2>
-<a id="user-content-important-features" class="anchor" 
href="#important-features" aria-hidden="true"><span aria-hidden="true" 
class="octicon octicon-link"></span></a>Important Features</h2>
-<p>Some of Hyperbole's most important features include:</p>
-<ul>
-<li>
-<p>Buttons may link to information or may execute commands, such as
-computing a complex value or communicating with external programs;</p>
-</li>
-<li>
-<p>Buttons are quick and easy to create with no programming nor
-markup needed.  One simply drags between a button source location
-and a link destination to create or to modify a link button.  The
-same result can be achieved from the keyboard.</p>
-</li>
-<li>
-<p>Buttons may be embedded within email messages and activated from
-Emacs mail readers; hyperlinks may include variables so that they
-work at different locations where the variable settings differ;</p>
-</li>
-<li>
-<p>Koutlines allow rapid browsing, editing and movement of chunks of
-information organized into trees (hierarchies) and offer links
-that include viewspecs which determine how documents are to be
-displayed, e.g. show just the first two lines of all levels in a
-Koutline;</p>
-</li>
-<li>
-<p>Other hypertext and information retrieval systems may be
-encapsulated under a Hyperbole user interface very easily.</p>
-</li>
-</ul>
-<h2>
-<a id="user-content-hyperbole-uses" class="anchor" href="#hyperbole-uses" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Hyperbole Uses</h2>
-<p>Typical Hyperbole applications include:</p>
-<ul>
-<li>
-<p><em>Personal Information Management</em><br>
-Overlapping link paths provide a variety of views into an
-information space.  A single key press activates buttons
-regardless of their types, making navigation easy.</p>
-<p>A search facility locates buttons in context and permits quick
-selection.</p>
-</li>
-<li>
-<p><em>Documentation Browsing</em><br>
-Embedding cross-references in a favorite documentation format.</p>
-<p>Addition of a point-and-click interface to existing documentation.</p>
-<p>Linkage of code and design documents.  Jumping to the definition
-of an identifier from its use within code or its reference within
-documentation.</p>
-</li>
-<li>
-<p><em>Brainstorming</em><br>
-Capture of ideas and then quick reorganization with the Hyperbole
-Koutliner.  Link to related ideas, eliminating the need to copy
-and paste information into a single place.</p>
-</li>
-<li>
-<p><em>Help/Training Systems</em><br>
-Creation of tutorials with embedded buttons that show students how
-things work while explaining the concepts, e.g. an introduction
-to UNIX commands.  This technique can be much more effective than
-descriptions alone.</p>
-</li>
-<li>
-<p><em>Archive Managers</em><br>
-Supplementation of programs that manage archives from incoming
-information stream, having them add topic-based buttons that
-link to the archive holdings.  Users can then search and create
-their own links to archive entries.</p>
-</li>
-</ul>
-<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-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>
-<p>See <a href="DEMO">DEMO</a> for a demonstration of standard Hyperbole 
button capabilities.
-This is the best way to initially interactively learn about Hyperbole after
-installing it.</p>
-<p>Various forms of the Hyperbole are below the "man/" subdirectory.</p>
-<h2>
-<a id="user-content-programmer-quick-reference" class="anchor" 
href="#programmer-quick-reference" aria-hidden="true"><span aria-hidden="true" 
class="octicon octicon-link"></span></a>Programmer Quick Reference</h2>
-<p><a href="MANIFEST">MANIFEST</a> summarizes most of the files in the 
distribution.</p>
-<p>See <a href="DEMO">DEMO</a> for a demonstration of standard Hyperbole button
-capabilities.  This is the best way to initially interactively learn
-about Hyperbole.  The Hyperbole Manual is a reference manual, not a
-simple introduction.</p>
-<p>Naming conventions:</p>
-<ul>
-<li>
-<p>All Hyperbole-specific code files begin with an 'h', aside from the
-Koutliner files which are in the kotl/ subdirectory and begin with a 'k'.</p>
-</li>
-<li>
-<p>Hyperbole user-interface files begin with 'hui-' or 'hmous'.</p>
-</li>
-<li>
-<p>Files that define implicit button types begin with 'hib'.</p>
-</li>
-<li>
-<p>Encapsulations of foreign systems begin with 'hsys-'.</p>
-</li>
-</ul>
-<p>Most of the standard Emacs user interface for Hyperbole is located in
-<a href="hui.el">hui.el</a>.  Most of the Hyperbole application programming
-interface can be found in <a href="hbut.el">hbut.el</a>.  <a 
href="hbdata.el">hbdata.el</a>
-encapsulates the button attribute storage implemented by Hyperbole.
-<a href="hmail.el">hmail.el</a> provides a basic abstract interface for
-integrating mail readers other than Rmail into Hyperbole.</p>
-<p>See the [Hyperbole Questions and Answers](man/hyperbole.html#Questions
-and Answers) appendix in the Hyperbole manual for information on how
-to alter the default context-sensitive Hyperbole key bindings (Smart
-Keys).</p>
-<h2>
-<a id="user-content-user-quotes" class="anchor" href="#user-quotes" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>User Quotes</h2>
-<p>*** MAN I love Hyperbole!!!  Wow! ***</p>
-<pre><code>                    -- Ken Olstad  
-                       Cheyenne Software, Inc.
-</code></pre>
-<hr>
-<p>I <em>love</em> koutlines.</p>
-<pre><code>                    -- Bob Glickstein  
-                       Z-Code Software Corporation
-</code></pre>
-<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
-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
-Org files as well.  To me, except for the Hyperbole outliner, that means
-complementary not conflicting. It's Hyperbole <em>and</em> org-mode, not
-Hyperbole vs. org-mode.</p>
-<p>Additionally, off the bat, I found it very well documented and for me
-that's a proxy for the quality of a package.  The maintainers are quite
-responsive.  There's plenty more functionality that I haven't uncovered yet
-but due to the ease of installation and the quality of the documentation,
-digging into it is actually fun.</p>
-<pre><code>                    -- Aditya Siram  
-</code></pre>
-<hr>
-<p>For me, Emacs isn't Emacs without Hyperbole.  I have depended on Hyperbole
-daily since 1992, when I first started using it to manage my development
-environment.  It didn't take long before I could summon almost any
-information I needed directly from within my editing environment with an
-implicit button. Since I almost never have to slow down to look for
-things--one context-dependent button usually produces exactly what I need
---I am able to maintain focus on the task I am working on and complete it
-more quickly.  With its gestural interface, seamless integration with other
-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 Softwarea, Inc.
-</code></pre>
-<hr>
-<p>I've found Hyperbole (in conjunction with XEmacs) to be very useful
-for signal processing algorithm development.</p>
-<p>For me, it has almost completely obsoleted the engineering notebook:
-I keep a set of files with ideas, algorithms, and results, linked
-together and to the implementation in C++ files.  Using XEmacs'
-support for embedding graphics, I've written a mode that accepts
-image tags (formatted like HTML), and reads in GIF files to display
-plots.  I have another program that converts the file to HTML (not
-perfect, but adequate), so I can put any aspect of development on
-our internal web for others to see.</p>
-<pre><code>                    -- Farzin Guilak  
-                       Protocol Systems, Inc., Engineer
-</code></pre>
-<hr>
-<p>I am blind and have been using Hyperbole since 1992.  I used to use a PC as
-a talking terminal attached to a UNIX system, but then I developed
-Emacspeak which lets me use Emacs and Hyperbole from standard UNIX
-workstations with an attached voice synthesizer.</p>
-<p>My main uses are:</p>
-<ol>
-<li>
-<p>Global and implicit buttons for jumping to ftp sites.</p>
-</li>
-<li>
-<p>The contact manager with Emacspeak support.</p>
-</li>
-<li>
-<p>Explicit buttons as part of comments made about a structured document.
-Each button jumps to the document section referred to by the comment.
-This is very, very useful.</p>
-</li>
-<li>
-<p>The Hyperbole Koutliner, which I find a very useful tool.  I've
-implemented Emacspeak extensions to support it.</p>
-<pre><code>              -- TV Raman  
-                 Google Inc.
-</code></pre>
-</li>
-</ol>
-<hr>
-<p>I've been a grateful Hyperbole user for a few years now.  Hyperbole's
-flexibility and ease of use is a marvel.</p>
-<p>Mainly, I write easy little implicit button types (and corresponding action
-types) to make my life easier.  For example, I have an implicit button type
-to bury certain buffers when I click at their bottoms, one that recognizes
-a bug report record in various contexts and edits it, one that links pieces
-of test output in a log file to the corresponding test case source code
-(EXTREMELY helpful in interpreting test output), others that support our
-homegrown test framework, one that handles tree dired mode the way I'd
-like, one that completely handles wico menus (I've also overloaded the
-wconfig actions triggered by diagonal mouse drags with wicos actions), and
-a couple that support interaction with BBDB.</p>
-<p>Other than that, I keep a global button file with 30 or so explicit buttons
-that do various little things, and I index saved mail messages by putting
-explicit link-to-mail buttons in an outline file.</p>
-<pre><code>                    -- Ken Olstad  
-                       Cheyenne Software, Inc.
-</code></pre>
-<hr>
-<p>In general, Hyperbole is an embeddable, highly extensible hypertext
-tool.  As such, I find it very useful. As it stands now, Hyperbole is
-particularly helpful for organizing ill-structured or loosely coupled
-information, in part because there are few tools geared for this purpose.
-Hyperbole also possesses a lot of potential in supporting a wider
-spectrum of structuredness, ranging from unstructured to highly
-structured environments, as well as structural changes over time.</p>
-<p>Major Uses:</p>
-<ul>
-<li>
-<p>Menu interface to our own collaborative support environment called
-CoReView: This interface brings together all top-level user commands
-into a single partitioned screen, and allows the end user to interact
-with the system using simple mouse-clicking instead of the meta-x key.</p>
-</li>
-<li>
-<p>Gateway to internet resources: this includes links to major Internet
-archive sites of various types of information. Links are made at both
-directory and file levels.</p>
-</li>
-<li>
-<p>Alternative directory organizer: The hierarchical nature of the Unix
-file system sometimes makes it difficult to find things quickly and
-easily using directory navigational tools such as dired. Hyperbole
-enables me to create various "profile" views of my directory tree, with
-entries in these views referring to files anywhere in the hierarchy.</p>
-</li>
-<li>
-<p>Organizing and viewing online documentation: using Hyperbole along with
-Hyper-man and Info makes it truly easy to look up online documentation.</p>
-</li>
-<li>
-<p>Other desktop organization tasks: including links to various mail
-folders, saved newsgroup conversation threads, online note-taker,
-emacs-command invocations, etc.</p>
-<pre><code>                -- Dadong Wan  
-                   University of Hawaii
-</code></pre>
-</li>
-</ul>
-<hr>
-<p>Hyperbole is the first hyper-link system I've run across that is
-actually part of the environment I use regularly, namely Emacs. The
-complete flexibility of the links is both impressive and expected -- the
-idea of making the link itself programmable is clever, and given that one
-assumes the full power of Emacs.  Being able to send email with buttons
-in it is a very powerful capability.  Using ange-ftp mode, one can make
-file references "across the world" as easily as normal file references.</p>
-<pre><code>                    -- Mark Eichin  
-                       Cygnus Support
-</code></pre>
-<hr>
-<p>I just wanted to say how much I enjoy using the Hyperbole Koutliner.
-It is a great way to quickly construct very readable technical documents
-that I can pass around to others.   Thanks for the great work.</p>
-<pre><code>                    -- Jeff Fried  
-                       Informix
-</code></pre>
-<hr>
-<p>The Hyperbole system provides a nice interface to exploring corners of
-Unix that I didn't know existed before.</p>
-<pre><code>                    -- Craig Smith  
-</code></pre>
-<h2>
-<a id="user-content-why-was-hyperbole-developed" class="anchor" 
href="#why-was-hyperbole-developed" aria-hidden="true"><span aria-hidden="true" 
class="octicon octicon-link"></span></a>Why was Hyperbole developed?</h2>
-<p>Hyperbole was originally designed to aid in research aimed at Personalized
-Information production/retrieval Environments (PIEs).  Hyperbole was a
-PIE Manager that provided services to PIE Tools.  PIEmail, a mail reader was
-the only PIE Tool developed as part of this research but Hyperbole has
-greatly expanded since then and has long been a production quality toolset.</p>
-<p>An examination of many hypertext environments as background research did
-not turn up any that seemed suitable for the research envisioned, mainly
-due to the lack of rich, portable programmer and user environments.  We also
-tired of trying to manage our own distributed information pools with standard
-UNIX tools.  And so Hyperbole was conceived and raved about until it
-got its name.</p>
-<p>Since then Hyperbole has proved indispensible at improving information
-access and organization in daily use over many years.  Why not start
-improving your information handling efficiency today?</p>
-<p>-- The End --</p>
-
diff --git a/hact.el b/hact.el
index dff926d..7817e7f 100644
--- a/hact.el
+++ b/hact.el
@@ -207,7 +207,7 @@ Return the new function symbol derived from TYPE."
         (action (nconc (list 'defun sym params doc) body)))
     `(progn
        ,action
-       (setplist ',sym ,property-list)
+       (setplist ',sym '(definition-name ,type @,property-list))
        (symset:add ',type ',type-category 'symbols)
        (run-hooks 'htype-create-hook)
        ',sym)))
@@ -498,7 +498,7 @@ arguments).  A call to this function is syntactically the 
same as for
 Return symbol created when successful, else nil."
   `(progn
      (symtable:add ',type symtable:actypes)
-     (htype:create ,type actypes ,doc ,params ,default-action 
'(definition-name ,type))))
+     (htype:create ,type actypes ,doc ,params ,default-action nil)))
 
 (defalias 'defact 'actype:create)
 (put      'actype:create 'lisp-indent-function 'defun)
diff --git a/hactypes.el b/hactypes.el
index f992a13..6d18ef5 100644
--- a/hactypes.el
+++ b/hactypes.el
@@ -469,7 +469,7 @@ and its buffer must have a file attached."
        ;; TODO: If default is null below and are creating, rather than 
modifying,
        ;; the link, it would be better to throw an error than create
        ;; an invalid link, but it is difficult to tell which operation
-       ;; is in progress, so ignore this for now.  -- RSW, 01-25-20020
+       ;; is in progress, so ignore this for now.  -- RSW, 01-25-2020
 
        ;; When not on an ibut and moddifying the link, use existing arguments
        (if (and (boundp 'defaults) defaults (listp defaults))
diff --git a/hargs.el b/hargs.el
index cf4917a..fb5307c 100644
--- a/hargs.el
+++ b/hargs.el
@@ -134,7 +134,7 @@ With optional EXCLUDE-REGEXP, any matched string is ignored 
if it this regexp."
        ;; 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
+       ;; -- RSW, 02-05-2019
        (setq start (point)))
       (when start
        (forward-line 2)
@@ -526,7 +526,7 @@ See also documentation for `interactive'."
                  ;;   See `this-command-keys-shift-translated' for an 
explanation.
                  ;;
                  ;;   `_' means keep region in same state (active or inactive)
-                 ;;   after this command.  (XEmacs only.)
+                 ;;   after this command.
                  ;;
                  (while (cond
                          ((eq (aref iform i) ?*))
@@ -536,7 +536,7 @@ See also documentation for `interactive'."
                          ((eq (aref iform i) ?^)
                           (handle-shift-selection))
                          ((eq (aref iform i) ?_)
-                          (setq zmacs-region-stays t)))
+                          (push 'only transient-mark-mode)))
                    (setq i (1+ i) start i))
                  ;;
                  (while (and (< start end)
diff --git a/hbut.el b/hbut.el
index 0a6f208..2de2d61 100644
--- a/hbut.el
+++ b/hbut.el
@@ -735,8 +735,11 @@ others who use a different value!")
 ;;; hbut class - abstract
 ;;; ========================================================================
 
-(defun    hbut:act (hbut)
-  "Perform action for explicit or implicit Hyperbole button symbol HBUT."
+(defun    hbut:act (&optional hbut)
+  "Perform action for optional explicit or implicit Hyperbole button symbol 
HBUT.
+Default is 'hbut:current."
+  (unless hbut
+    (setq hbut 'hbut:current))
   (when hbut
     (apply hrule:action
           (hattr:get hbut 'actype)
@@ -755,7 +758,8 @@ others who use a different value!")
       (when (fboundp atype) atype))))
 
 (defun    hbut:at-p ()
-  "Return symbol for explicit or implicit Hyperbole button at point or nil."
+  "Return symbol for explicit or implicit Hyperbole button at point or nil.
+Then use (hbut:act) to activate the button."
   (or (ebut:at-p) (ibut:at-p)))
 
 
@@ -1073,7 +1077,7 @@ include delimiters when INCLUDE-DELIMS is non-nil)."
          (ibut:to (ibut:key but))
          (call-interactively #'hui:ibut-rename))
         (t
-            (hypb:error "(hbut:rename): Button is invalid; it has no 
attributes"))))
+        (hypb:error "(hbut:rename): Button is invalid; it has no 
attributes"))))
 
 (defun    hbut:report (&optional arg)
   "Pretty print the attributes of a button or buttons.
@@ -1081,8 +1085,8 @@ include delimiters when INCLUDE-DELIMS is non-nil)."
 Takes an optional ARG interpreted as follows:
   a button symbol - report on that button;
   nil             - report on button at point, if any;
-  integer > 0     - report on all explicit buttons in buffer, alphabetize;
-  integer < 1     - report on all explicit buttons in occurrence order.
+  integer > 0     - report on all explicit buttons in buffer, in 
lexicographical order;
+  integer < 1     - report on all explicit buttons in buffer, in occurrence 
order.
 
 Return number of buttons reported on or nil if none."
   (setq arg (cond ((or (integerp arg) (symbolp arg)) arg)
@@ -1106,8 +1110,7 @@ Return number of buttons reported on or nil if none."
         (attribs)
         ;; Ensure these do not invoke with-output-to-temp-buffer a second time.
         (temp-buffer-show-hook)
-        (temp-buffer-show-function)
-        )
+        (temp-buffer-show-function))
     (if lbl-lst
        (progn
          (with-help-window buf-name
@@ -1137,8 +1140,7 @@ Return number of buttons reported on or nil if none."
                      ;;                           (memq 'action attribs)
                      ;;                         (memq 'categ attribs))
                      attribs)
-                    (terpri))
-                ))
+                    (terpri))))
             lbl-lst))
          (length lbl-lst)))))
 
@@ -1216,57 +1218,61 @@ 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
-       (progn
-         (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 (and itype (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)))
+  ;; Since the Smart Keys handle end-of-line separately from whether
+  ;; point is within an implicit button, always report not within one
+  ;; when point is at the end of a line.  -- RSW, 02-16-2020
+  (unless (eolp)
+    (let* ((opoint (point))
+          (label-key-start-end (ibut:label-p nil nil nil t t))
+          (lbl-key (car label-key-start-end)))
+      (unwind-protect
+         (progn
+           (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 (and itype (setq args (funcall itype)))
+                   (setq is-type itype)
+                 (setq types (cdr types))))
+             (when is-type
                (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
-                                 (symtable:actype-p (car args))
-                                 ;; Regular Emacs Lisp function symbol
-                                 (car args)))
-                     (hattr:set 'hbut:current 'args (cdr args))))
-               'hbut:current))))
-      (goto-char opoint))))
+               (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)))
+                 (or (hattr:get 'hbut:current 'args)
+                     (not (listp args))
+                     (progn
+                       (hattr:set 'hbut:current 'actype
+                                  (or
+                                   ;; Hyperbole action type
+                                   (symtable:actype-p (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)
   "Return non-nil if point is on a button of type IBUT-TYPE-SYMBOL.
diff --git a/hibtypes.el b/hibtypes.el
index b5fac86..e5ee633 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -68,6 +68,8 @@
 ;;; Follows Org mode links and radio targets and cycles Org heading views
 ;;; ========================================================================
 
+;; Set the custom option `inhibit-hsys-org' non-nil to disable ALL Hyperbole
+;; support within Org major and minor modes.
 (require 'hsys-org)
 
 ;;; ========================================================================
@@ -504,8 +506,8 @@ the very beginning of the line."
                   (save-excursion
                     (beginning-of-line)
                     ;; Entry line within a TOC
-                    (if (looking-at "[ \t]+\\*+[ \t]+\\(.*[^ \t]\\)[ \t]*$")
-                            (setq section (match-string-no-properties 1))))
+                    (when (looking-at "[ \t]+\\*+[ \t]+\\(.*[^ \t]\\)[ \t]*$")
+                          (setq section (match-string-no-properties 1))))
                   (progn (ibut:label-set section (match-beginning 1) 
(match-end 1))
                              t)
                   (save-excursion (re-search-backward
@@ -621,7 +623,7 @@ Requires the Emacs builtin Tramp library for ftp file 
retrievals."
       (ibut:label-set (hbut:key-to-label lbl-key) start-pos end-pos)
       (hact link-actype but-key key-file))))
 
-(defun  parse-label-and-file (label-and-file)
+(defun parse-label-and-file (label-and-file)
   "Parse a colon-separated string of button label and source file path into a 
list of label and file."
   ;; Can't use split-string here because file path may contain colons;
   ;; we want to split only on the first colon.
diff --git a/hmouse-drv.el b/hmouse-drv.el
index 9c63a04..b12b976 100644
--- a/hmouse-drv.el
+++ b/hmouse-drv.el
@@ -149,6 +149,9 @@ This permits the Smart Keys to behave as paste keys.")
        action-key-release-args nil
        action-key-release-window nil
        action-key-release-prev-point nil)
+  (when (and (not assist-key-depressed-flag)
+            (hmouse-modeline-event-p action-key-depress-args))
+    (mouse-drag-mode-line action-key-depress-args))
   (run-hooks 'action-key-depress-hook))
 
 (defun assist-key-depress (&rest args)
@@ -166,6 +169,9 @@ This permits the Smart Keys to behave as paste keys.")
        assist-key-release-args nil
        assist-key-release-window nil
        assist-key-release-prev-point nil)
+  (when (and (not action-key-depressed-flag)
+            (hmouse-modeline-event-p assist-key-depress-args))
+    (mouse-drag-mode-line assist-key-depress-args))
   (run-hooks 'assist-key-depress-hook))
 
 (defun action-key-depress-emacs (event)
@@ -798,7 +804,9 @@ Return non-nil iff associated help documentation is found."
     (if pred-value
        (setq call (if assist-flag (cdr (cdr hkey-form))
                     (cadr hkey-form))
-             cmd-sym (car call))
+             cmd-sym (if (eq (car call) #'funcall)
+                         (cadr call)
+                       (car call)))
       (setq cmd-sym (if assist-flag assist-key-default-function 
action-key-default-function)
            call cmd-sym))
     (if (and (consp call) (eq (car call) 'call-interactively))
diff --git a/hmouse-sh.el b/hmouse-sh.el
index d230705..7644977 100644
--- a/hmouse-sh.el
+++ b/hmouse-sh.el
@@ -470,6 +470,18 @@ point determined by 
`mouse-select-region-move-to-beginning'."
   "Bind 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, bind only the middle mouse key."
   (interactive)
+  ;; Globally 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 to follow links.
+  ;; Disable use of mouse following on button1 and use button2 only
+  ;; for that.  Use mouse1 only for setting point and drag selecting
+  ;; regions.
+  ;;
+  ;; Don't bind mouse1 to action-key-depress-emacs to allow it to
+  ;; follow links because that will disable the region highlighting
+  ;; that we would rather allow.`
+  (customize-set-variable 'mouse-1-click-follows-link nil)
+  ;;
   ;; 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)
diff --git a/hmouse-tag.el b/hmouse-tag.el
index 86cdc50..b073275 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -1051,6 +1051,8 @@ Returns TAG."
            (tag (smart-tags-find-p tag))))))
 
 (defun smart-lisp-bound-symbol-def (tag-sym)
+  "Return the file where TAG-SYM is defined which may be a .elc file.
+TAG-SYM may be a function, variable or face."
   (save-excursion
     ;; Bound Emacs Lisp function, variable and face definition display.
     (or (condition-case () (find-function-noselect tag-sym) (error nil))
diff --git a/hpath.el b/hpath.el
index 468467a..8a83391 100644
--- a/hpath.el
+++ b/hpath.el
@@ -81,10 +81,7 @@ If the value of 'hpath:mswindows-mount-prefix' changes, then 
re-initialize this
 (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
+(defvar hpath:posix-mount-point-to-mswindows-alist nil
   "Automatically set alist of (posix-mount-point . window-path-prefix) 
elements.
 Used to expand posix mount points to Windows UNC paths during 
posix-to-mswindows conversion.")
 
@@ -110,9 +107,18 @@ If path begins with an MSWindows drive letter, prefix the 
converted path with th
   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."
-  (replace-regexp-in-string "\\\\" "/" (abbreviate-file-name path) nil t))
+  "Replace all backslashes with forward slashes 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."
+    (setq path (replace-regexp-in-string "\\\\" "/" path)
+          ;; Downcase any host and domain for mount-point matching
+          path (if (string-match "\\`//[^/:]+" path)
+                   (concat (downcase (match-string 0 path))
+                           (substring path (match-end 0)))
+                 path)
+          path (hpath:abbreviate-file-name path)
+          path (replace-regexp-in-string (regexp-quote "\\`") "" path)
+          path (replace-regexp-in-string (regexp-quote "\\>") "" path)))
 
 ;;;###autoload
 (defun hpath:posix-to-mswindows (path)
@@ -142,8 +148,8 @@ If path begins with an optional mount prefix, 
'hpath:mswindows-mount-prefix', fo
   "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."
-  (let ((directory-abbrev-alist hpath:directory-expand-alist))
-    (replace-regexp-in-string "/" "\\\\" (abbreviate-file-name path))))
+  (let ((directory-abbrev-alist hpath:posix-mount-point-to-mswindows-alist))
+    (replace-regexp-in-string "/" "\\\\" (hpath:abbreviate-file-name path))))
 
 (defun hpath:posix-path-p (path)
   "Return non-nil if PATH looks like a Posix path."
@@ -181,33 +187,50 @@ Path must be a string or an error will be triggered.  See
 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 thDat 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)
-      (mapc (lambda (path-and-mount-point)
+    (let (mount-points-alist
+          mount-points-to-add)
+      ;; Convert plist to alist for sorting.
+      (hypb:map-plist (lambda (path mount-point)
+                       (when (string-match "\\`\\([a-zA-Z]\\):\\'" path)
+                         (setq path (concat "/" (match-string 1 path))))
+                       ;; Drive letter must be downcased
+                       ;; in order to work when converted back to Posix.
+                       ;; Assume all mounted Windows paths are
+                       ;; lowercase for now.
+                        (setq path (downcase path))
+                        (push (cons (downcase path) mount-point)
+                              mount-points-to-add)
+                        ;; If a network share with a domain
+                        ;; name, also add an entry WITHOUT the
+                        ;; domain name to the mount points
+                        ;; table since Windows paths often omit
+                        ;; the domain.
+                        (when (string-match 
"\\`\\([\\/][\\/][^.\\/]+\\)\\([^\\/]+\\)" path)
+                          (push (cons (concat (match-string 1 path)
+                                              (substring path (match-end 0)))
+                                      mount-point)
+                                mount-points-to-add)))
+                     ;; 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))))
+      ;; 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).
+      (setq mount-points-to-add
+            (sort mount-points-to-add
+                  (lambda (cons1 cons2) (<= (length (car cons1)) (length (car 
cons2))))))
+      (let (path
+            mount-point)
+        (mapc (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)
+                ;; Don't abbreviate /mnt or /cygdrive to /, skip this entry.
+                (unless (equal mount-point "/")
+                 (add-to-list 'directory-abbrev-alist (cons (format "\\`%s\\>" 
(regexp-quote path))
+                                                            mount-point))))
+             mount-points-to-add))
       ;; Save the reverse of each mount-points-to-add so
       ;; can expand paths when going from posix-to-mswindows.
-      (setq hpath:directory-expand-alist
+      (setq hpath:posix-mount-point-to-mswindows-alist
            (mapcar (lambda (elt) (cons (concat "\\`" (cdr elt) "\\>")
                                         (car elt))) mount-points-to-add))
       mount-points-to-add)))
@@ -536,6 +559,12 @@ These are used to indicate how to display or execute the 
pathname.
 ;;; Public functions
 ;;; ************************************************************************
 
+(defun hpath:abbreviate-file-name (path)
+  "Same as `abbreviate-file-name' but disables tramp-mode.
+This prevents improper processing of hargs with colons in them, e.g. 
`actypes::link-to-file'."
+  (let (tramp-mode)
+    (abbreviate-file-name path)))
+
 (defun hpath:absolute-to (path &optional default-dirs)
   "Return PATH as an absolute path relative to one directory from optional 
DEFAULT-DIRS or `default-directory'.
 Return PATH unchanged when it is not a valid path or when DEFAULT-DIRS
@@ -1270,7 +1299,7 @@ in-buffer path will not match."
                       ;; invalid local path but this may be called when
                       ;; testing for implicit button matches where no error
                       ;; should occur, so catch the error and ignore variable
-                      ;; expansion in such a case.  -- RSW, 8/26/2019
+                      ;; expansion in such a case.  -- RSW, 08-26-2019
                       (condition-case nil
                           (hpath:substitute-dir var-name rest-of-path)
                         (error rest-of-path)))
diff --git a/hsys-org.el b/hsys-org.el
index 9ddbb9e..9cebfc1 100644
--- a/hsys-org.el
+++ b/hsys-org.el
@@ -29,6 +29,12 @@
 (require 'hbut)
 (require 'org)
 
+(defcustom inhibit-hsys-org nil
+  "*Non-nil means disable Action Key support in Org major and minor modes."
+  :type 'boolean
+  :initialize #'custom-initialize-default
+  :group 'hyperbole-buttons)
+
 (defvar hsys-org-mode-function #'hsys-org-mode-p
   "*Boolean function of no arguments that determines whether hsys-org actions 
are triggered or not.")
 
@@ -36,7 +42,7 @@
 (add-hook 'org-metareturn-hook #'hsys-org-hbut-activate-p)
 
 (defun hsys-org-mode-p ()
-  "Return non-nil if point is not on a Hyperbole button but is within an Org 
major or minor-mode buffer."
+  "Return non-nil if point is within an Org major or minor-mode buffer."
   (or (derived-mode-p 'org-mode)
       (and (boundp 'outshine-mode) outshine-mode)
       (and (boundp 'poporg-mode) poporg-mode)))
@@ -54,9 +60,9 @@
   (org-global-cycle nil))
 
 (defun hsys-org-hbut-activate-p ()
-  "Activate any Hyperbole button at point and return t, else return nil."
-  (when (and (funcall hsys-org-mode-function) (hbut:at-p))
-    (hbut:act 'hbut:current)
+  "When within an Org major or minor-mode buffer and `inhibit-hsys-org' is nil 
(the default), activate any Hyperbole button at point and return t, else return 
nil."
+  (when (and (not inhibit-hsys-org) (funcall hsys-org-mode-function) 
(hbut:at-p))
+    (hbut:act)
     t))
 
 ;;; ************************************************************************
@@ -64,7 +70,7 @@
 ;;; ************************************************************************
 
 (defib org-mode ()
-  "Follows Org mode references, cycles outline visibility and executes code 
blocks.
+  "Follow 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
@@ -83,26 +89,32 @@ 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)."
+Org mode standard binding of {M-RET}, (org-meta-return).
+
+To disable ALL Hyperbole support within Org major and minor modes, set the
+custom option `inhibit-hsys-org' to t.  Then in Org modes, this will
+simply invoke `org-meta-return'."
   (when (and (funcall hsys-org-mode-function)
             ;; Prevent infinite recursion when called via org-metareturn-hook
             ;; from org-meta-return invocation.
             (not (hyperb:stack-frame '(org-meta-return))))
-    (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))))))
+    (if inhibit-hsys-org
+       (hact 'org-meta-return)
+      (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.
diff --git a/hui-window.el b/hui-window.el
index 8e1d4aa..5df0981 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -197,8 +197,9 @@ drag release window.")
             ;;   ((and (hmouse-modeline-depress) (hmouse-drag-between-frames)) 
.
             ;;    ((hmouse-clone-window-to-frame) . 
(hmouse-move-window-to-frame)))
             ;;
-            ;; Drag with release on a Modeline
-            ((and (hmouse-modeline-release) (not (hmouse-modeline-click))) .
+            ;; Drag from within a window (not a Modeline) with release on a 
Modeline
+            ((and (not (hmouse-modeline-depress)) (hmouse-modeline-release)
+                  (not (hmouse-modeline-click))) .
              ((or (hmouse-drag-item-to-display t) (hmouse-buffer-to-window t)) 
.
               (hmouse-swap-buffers)))
             ;; Non-vertical Modeline drag between windows
@@ -893,18 +894,20 @@ If the Action Key is:
  (5) dragged vertically from modeline to within a window,
      the modeline is moved to point of key release, thereby resizing
      its window and potentially its vertical neighbors."
+  ;; Modeline window resizing is now handled in action-key-depress
+  ;; via a call to mouse-drag-mode-line, providing live visual
+  ;; feedback.
   (let ((w (smart-window-of-coords action-key-depress-args)))
     (if w (select-window w))
-    (cond ((hmouse-modeline-click)
-          (cond ((hmouse-emacs-at-modeline-buffer-id-p)
-                 (funcall action-key-modeline-buffer-id-function))
-                ((hmouse-release-left-edge) (bury-buffer))
-                ((hmouse-release-right-edge)
-                 (if (eq major-mode 'Info-mode)
-                     (Info-exit)
-                   (info)))
-                (t (funcall action-key-modeline-function))))
-         (t (hmouse-modeline-resize-window)))))
+    (when (hmouse-modeline-click)
+      (cond ((hmouse-emacs-at-modeline-buffer-id-p)
+            (funcall action-key-modeline-buffer-id-function))
+           ((hmouse-release-left-edge) (bury-buffer))
+           ((hmouse-release-right-edge)
+            (if (eq major-mode 'Info-mode)
+                (Info-exit)
+              (info)))
+           (t (funcall action-key-modeline-function))))))
 
 (defun assist-key-modeline ()
   "Handles Assist Key depresses on a window mode line.
@@ -922,10 +925,13 @@ If the Assist Key is:
  (5) dragged vertically from modeline to within a window,
      the modeline is moved to point of key release, thereby resizing
      its window and potentially its vertical neighbors."
+  ;; Modeline window resizing is now handled in assist-key-depress
+  ;; via a call to mouse-drag-mode-line, providing live visual
+  ;; feedback.
   (let ((buffers)
        (w (smart-window-of-coords assist-key-depress-args)))
-    (if w (select-window w))
-    (cond ((hmouse-modeline-click)
+    (when w (select-window w))
+    (when (hmouse-modeline-click)
           (cond ((hmouse-emacs-at-modeline-buffer-id-p)
                  (next-buffer))
                 ((hmouse-release-left-edge)
@@ -937,12 +943,30 @@ If the Assist Key is:
                  (if (string-match "Hyperbole Smart Keys" (buffer-name))
                      (hkey-help-hide)
                    (hkey-summarize 'current-window)))
-                (t (funcall assist-key-modeline-function))))
-         (t (hmouse-modeline-resize-window)))))
+                (t (funcall assist-key-modeline-function))))))
+
+(defun hmouse-drag-p ()
+  "Return non-nil if last Smart Key depress and release locations differ.
+Even if the mouse pointer stays within the same position within a
+window, its frame may have been moved by a bottommost modeline drag."
+  (not (and (eq (if assist-flag
+                   assist-key-depress-window
+                 action-key-depress-window)
+               (if assist-flag
+                   assist-key-release-window
+                 action-key-release-window))
+           (equal (if assist-flag
+                      assist-key-depress-position
+                    action-key-depress-position)
+                  (if assist-flag
+                      assist-key-release-position
+                    action-key-release-position)))))
 
 (defun hmouse-modeline-click ()
   "Return non-nil if last Smart Key depress and release were at a single point 
(less than drag tolerance apart) in a modeline."
-  (and (hmouse-modeline-release) (hmouse-modeline-depress)
+  (and (not (hmouse-drag-p))
+       (hmouse-modeline-depress)
+       (hmouse-modeline-release)
        (not (or (hmouse-drag-horizontally) (hmouse-drag-vertically) 
(hmouse-drag-diagonally)))))
 
 (defun hmouse-emacs-modeline-event-p (event)
@@ -1100,13 +1124,8 @@ mode-line regardless of the setting of 
`hmouse-edge-sensitivity'."
   (let ((args (if assist-flag assist-key-release-args
                 action-key-release-args))
        window-left last-release-x)
-    (if (fboundp 'window-lowest-p) ;; XEmacs >= 19.12
-       (setq last-release-x (and args (eq (event-window args)
-                                          (selected-window))
-                                 (hmouse-x-coord args))
-             window-left 0)
-      (setq window-left (car (window-edges))
-           last-release-x (and args (hmouse-x-coord args))))
+    (setq window-left (car (window-edges))
+         last-release-x (and args (hmouse-x-coord args)))
     (and last-release-x (< (- last-release-x window-left)
                           hmouse-edge-sensitivity)
         (>= (- last-release-x window-left) 0))))
@@ -1118,13 +1137,8 @@ release must be."
   (let ((args (if assist-flag assist-key-release-args
                 action-key-release-args))
        window-right last-release-x)
-    (if (fboundp 'window-lowest-p) ;; XEmacs >= 19.12
-       (setq last-release-x (and args (eq (event-window args)
-                                          (selected-window))
-                                 (hmouse-x-coord args))
-             window-right (window-width))
-      (setq window-right (nth 2 (window-edges))
-           last-release-x (and args (hmouse-x-coord args))))
+    (setq window-right (nth 2 (window-edges))
+         last-release-x (and args (hmouse-x-coord args)))
     (and last-release-x (>= (+ last-release-x hmouse-edge-sensitivity)
                            window-right)
         (>= (- window-right last-release-x) 0))))
diff --git a/hui.el b/hui.el
index 3756750..1db1426 100644
--- a/hui.el
+++ b/hui.el
@@ -76,13 +76,15 @@ Default is the current button."
             (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."))))))
+           (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))))
+       (t
+        (hui:but-flash)
+        (hbut:act but))))
 
 (defun hui:ebut-create (&optional start end)
   "Create an explicit Hyperbole button starting from label between optional 
START and END.
diff --git a/hycontrol.el b/hycontrol.el
index 523f82b..0a75ab1 100644
--- a/hycontrol.el
+++ b/hycontrol.el
@@ -1459,7 +1459,7 @@ See documentation of `hycontrol-windows-grid' for further 
details."
                (mode-strings (mapcar 'symbol-name (apply #'set:create (mapcar 
(lambda (buf) (buffer-local-value 'major-mode buf))
                                                                               
(hycontrol-windows-grid-buffer-list))))))
           (intern-soft (completing-read "(HyControl Grid Windows): Major mode 
of buffers to display: "
-                                        mode-strings nil t (symbol-name 
major-mode))))))
+                                        mode-strings nil t nil nil 
(symbol-name major-mode))))))
   (let ((hycontrol-display-buffer-predicate-list `((eq major-mode ',mode))))
     (hycontrol-make-windows-grid arg)))
 
diff --git a/hyrolo.el b/hyrolo.el
index e592379..a3d1af0 100644
--- a/hyrolo.el
+++ b/hyrolo.el
@@ -109,15 +109,22 @@ A hyrolo-file consists of:
 (defcustom hyrolo-highlight-face nil
   "*Face used to highlight rolo search matches."
   :type 'face
+  :initialize #'custom-initialize-default
   :group 'hyperbole-rolo)
+
+(defun hyrolo-initialize-highlight-face ()
+  "Define the face stored in `hyrolo-highlight-face'."
+  (unless (and (boundp 'hyrolo-highlight-face) hyrolo-highlight-face)
+    (setq hyrolo-highlight-face
+         (when (fboundp 'defface)
+           (defface hyrolo-highlight-face nil
+             "*Face used to highlight rolo search matches."
+             :group 'hyperbole-rolo)))
+    (when (fboundp 'hproperty:set-item-highlight)
+      (hproperty:set-item-highlight))))
+
 (unless hyrolo-highlight-face
-  (setq hyrolo-highlight-face
-       (when (fboundp 'defface)
-         (defface hyrolo-highlight-face nil
-           "*Face used to highlight rolo search matches."
-           :group 'hyperbole-rolo)))
-  (when (fboundp 'hproperty:set-item-highlight)
-    (hproperty:set-item-highlight)))
+  (hyrolo-initialize-highlight-face))
 
 (defcustom hyrolo-kill-buffers-after-use nil
   "*Non-nil means kill rolo file buffers after searching them for entries.
diff --git a/man/hyperbole.html b/man/hyperbole.html
index 4dc6014..85124b3 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -322,7 +322,7 @@ Next: <a href="#Introduction" accesskey="n" 
rel="next">Introduction</a>, Previou
 
 <CENTER><H2>The Everyday Hypertextual Information Manager</H2></CENTER>
 
-<CENTER><H3><A HREF="https://saythanks.io/to/rswgnu";>Say thanks if you like 
Hyperbole.</A></H3></CENTER>
+<CENTER><H3><A HREF="mailto:rsw@gnu.org";>Say thanks or send a testimonial if 
you like Hyperbole.</A></H3></CENTER>
 
 
 <P>Copyright &copy; 1989-2019  Free Software Foundation, Inc.</P>
@@ -2973,6 +2973,9 @@ for special file display options.
 <span id="index-M_002dRET-1"></span>
 <span id="index-org_002dctrl_002dc_002dctrl_002dc"></span>
 <span id="index-org_002dmeta_002dreturn"></span>
+<span id="index-inhibit_002dhsys_002dorg"></span>
+<span id="index-disable-org_002dmode-support"></span>
+<span id="index-inhibit-org_002dmode-support"></span>
 </dd>
 <dt><code>org-mode</code></dt>
 <dd><p>For users of Emacs Org mode, Hyperbole does quite a few things.
@@ -2997,6 +3000,10 @@ 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-<span class="key">RET</span>}</kbd>, 
<code>org-meta-return</code>.
+</p>
+<p>To disable ALL Hyperbole support within Org major and minor modes, set
+the custom option <code>inhibit-hsys-org</code> to <code>t</code>.  Then in 
Org modes,
+the Action Key will simply invoke <code>org-meta-return</code>.
 </p></dd>
 </dl>
 
@@ -12175,6 +12182,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <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>
 <tr><td></td><td valign="top"><a 
href="#index-Info_002dglobal_002dnext"><code>Info-global-next</code></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_002dglobal_002dprev"><code>Info-global-prev</code></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-inhibit_002dhsys_002dorg">inhibit-hsys-org</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-interactive"><code>interactive</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Action-Type-Creation">Action Type Creation</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Function_fn_letter-K">K</th><td></td><td></td></tr>
@@ -12710,6 +12718,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-disable-Hyperbole">disable 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-disable-Hyperbole-1">disable 
Hyperbole</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <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-disable-org_002dmode-support">disable org-mode 
support</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-display">display</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <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>
@@ -12958,6 +12967,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <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-Button-Types">Implicit Button Types</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-inhibit-org_002dmode-support">inhibit org-mode 
support</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-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-insert-item">insert 
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-inserting-tabs">inserting 
tabs</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index c3aee12..56dbee9 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index e415b2e..4dec459 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 758dbfe..148e515 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -139,7 +139,7 @@ Texinfo markup language.
 
 <CENTER><H2>The Everyday Hypertextual Information Manager</H2></CENTER>
 
-<CENTER><H3><A HREF="https://saythanks.io/to/rswgnu";>Say thanks if you like 
Hyperbole.</A></H3></CENTER>
+<CENTER><H3><A HREF="mailto:rsw@@gnu.org";>Say thanks or send a testimonial if 
you like Hyperbole.</A></H3></CENTER>
 
 
 <P>Copyright &copy; 1989-2019  Free Software Foundation, Inc.</P>
@@ -179,7 +179,7 @@ Printed January 19, 2020.
 
 @center The Everyday Hypertextual Information Manager
 
-@center Say thanks: https://saythanks.io/to/rswgnu
+@center Send any thanks in email to: <rsw@@gnu.org>.
 
 @sp 2
 @noindent
@@ -2413,6 +2413,9 @@ for special file display options.
 @kindex M-@key{RET}
 @findex org-ctrl-c-ctrl-c
 @findex org-meta-return
+@vindex inhibit-hsys-org
+@cindex disable org-mode support
+@cindex inhibit org-mode support
 @item org-mode
 For users of Emacs Org mode, Hyperbole does quite a few things.
 
@@ -2436,6 +2439,10 @@ of @bkbd{C-c C-c}, @code{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 @bkbd{M-@key{RET}}, @code{org-meta-return}.
+
+To disable ALL Hyperbole support within Org major and minor modes, set
+the custom option @code{inhibit-hsys-org} to @code{t}.  Then in Org modes,
+the Action Key will simply invoke @code{org-meta-return}.
 @end table
 
 @node Action Buttons,  , Implicit Button Types, Implicit Buttons



reply via email to

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