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

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

[elpa] scratch/hyperbole-merge-7.0.2b f3d59c4 18/23: Large set of BW cha


From: Stefan Monnier
Subject: [elpa] scratch/hyperbole-merge-7.0.2b f3d59c4 18/23: Large set of BW changes for V7.0.2b pre-release.
Date: Tue, 5 Feb 2019 16:11:21 -0500 (EST)

branch: scratch/hyperbole-merge-7.0.2b
commit f3d59c4da3f96e3528542fb046a07d0ee9e46f57
Author: Bob Weiner <address@hidden>
Commit: Bob Weiner <address@hidden>

    Large set of BW changes for V7.0.2b pre-release.
---
 Changes            |  72 +++++++++--
 DEMO               |  24 ++--
 HY-ABOUT           |   2 +-
 HY-NEWS            | 132 ++++++++++++++++++-
 HY-WHY.kotl        |   4 +-
 Makefile           |   2 +-
 README.md          |   2 +-
 README.md.html     |  16 +--
 hargs.el           |  30 +++--
 hbmap.el           |   2 +-
 hbut.el            |   2 +-
 hibtypes.el        |  50 ++++----
 hmouse-drv.el      |  60 ++++++---
 hmouse-sh.el       |   2 +-
 hmouse-tag.el      |   2 +-
 hpath.el           | 369 +++++++++++++++++++++++++++++++++++------------------
 hsettings.el       |   4 +-
 hsys-org.el        |   4 +-
 hui-mini.el        |  18 +--
 hui.el             |  10 +-
 hversion.el        |  16 ++-
 hyperbole-pkg.el   |   2 +-
 hyperbole.el       |   3 +
 hyrolo.el          |   6 +-
 man/hyperbole.html |  36 ++++--
 man/hyperbole.info | Bin 489710 -> 490392 bytes
 man/hyperbole.pdf  | Bin 1263857 -> 1264179 bytes
 man/hyperbole.texi |  30 +++--
 man/version.texi   |   8 +-
 29 files changed, 636 insertions(+), 272 deletions(-)

diff --git a/Changes b/Changes
index 11b6821..52e541c 100644
--- a/Changes
+++ b/Changes
@@ -1,8 +1,57 @@
+2019-02-03  Bob Weiner  <address@hidden>
+
+* hversion.el: Pushed BW changes for 7.0.2b test update.
+
+2019-02-02  Bob Weiner  <address@hidden>
+
+* hsys-org.el (org-mode): Support derived modes too.
+
+2019-01-31  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Keyboard Drags): Added doc of {M-o r <window-id>},
+    replace selected window's buffer with that of another window.
+
+* man/hyperbole.texi (Keyboard Drags): 
+  DEMO (Displaying File and Buffer Items and Moving Buffers):
+    Added doc of {M-o m <window-id>}, swap selected window's buffer with
+    that of <window-id>'s.
+
+2019-01-30  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-drag-to): Fixed to handle the case where it is
+    called but no drag has taken place, i.e. when invoked from the keyboard
+    via Ace Window.
+
+2019-01-29  Bob Weiner  <address@hidden>
+
+* hargs.el (hargs:buffer-substring): Added and used in hargs:delimited to
+    replace null char in colored grep output lines with a colon, so they are
+    handled properly by the implicit buttons.
+
+2019-01-27  Bob Weiner  <address@hidden>
+
+* hversion.el (hyperb:microsoft-os-p): Renamed to this.
+
+* hpath.el (hpath:cache-mswindows-mount-points):
+    Added and called when Hyperbole is initialized, mainly to allow access to
+    MSWindows network shares which would otherwise not be accessible as links
+    under POSIX systems.
+           (hpath:map-plist): Added to map over property lists.
+    Called in hpath:cache-mswindows-mount-points.
+
+2019-01-26  Bob Weiner  <address@hidden>
+
+* hversion.el (hyperb:wsl-os-p): Added to test for use of Microsoft WSL.
+
+* hpath.el (hpath:delimited-possible-path): Added optional include-positions 
parameter.
+
 2019-01-21  Bob Weiner  <address@hidden>
 
-* hpath.el (hpath:mswindows-mount-prefix, hpath:mswindows-drive-regexp)
-    (hpath:mswindows-to-posix-path, hpath:mswindows-to-posix-separators):
-      Added to handle MSWindows path under POSIX OSes, e.g. Windows Subsystem 
for Linux.
+* hpath.el (hpath:mswindows-mount-prefix, hpath:mswindows-drive-regexp, 
hpath:mswindows-path-regexp,
+    hpath:mswindows-to-posix, hpath:mswindows-to-posix-separators, 
hpath:posix-to-mswindows)
+    hpath:posix-to-mswindows-separators, hpath:posix-path-p,
+    hpath:substitute-posix-or-mswindows-at-point, 
hpath:substitute-posix-or-mswindows):
+      Added to handle MSWindows paths under POSIX OSes, e.g. Windows Subsystem 
for Linux.
     (hpath:find-program): Commented out call to hpath:find-file-mailcap to 
prevent use of
       MIME external viewers on text files.
   hargs.el (hargs:delimited): Added call to hpath:mswindows-to-posix-path.
@@ -16,7 +65,7 @@
 2017-12-20  Bob Weiner  <address@hidden>
 
 * kotl/kexport.el (kexport:html-file-klink)
-                  (kexport:html): 
+                  (kexport:html):
                   (kexport:html-replacement-alist): Added 'k' to precede klink 
HTML HREF
     references since these must start with a letter.
 
@@ -120,16 +169,13 @@
 
 * hypb.el (hypb:rgrep): Added support for ripgrep.
   hibtypes.el (ripgrep-msg): Added implicit button support for ripgrep (rg) 
messages where
-    the associated pathname is output once before all mataching lines.
+    the associated pathname is output once before all matching lines.
     See "https://github.com/BurntSushi/ripgrep";.
 
 2017-12-04  Bob Weiner  <address@hidden>
 
 * hmouse-drv.el (hmouse-alist): Reload the def of this variable if its value 
is null.
-    (hkey-mouse-click-to-replace): Added to allow moving buffers with the 
mouse by clicking
-       on the from and to windows.
-    (hmouse-click-to-drag, hmouse-click-to-drag-to, hmouse-click-to-replace, 
hmouse-click-to-throw,
-     hmouse-choose-windows): Added to perform cross-window drags, replacements 
and throws with 3 mouse
+    (hmouse-choose-windows): Added to perform cross-window drags, replacements 
and throws with 3 mouse
        clicks.
 
 2017-12-03  Bob Weiner  <address@hidden>
@@ -142,7 +188,7 @@
 * hmouse-drv.el (hkey-drag-stay, hkey-replace): Added for use as ace-window 
commands.
                 (hkey-throw): Rewrote so if not on an item, then throws the 
current buffer.
     hkey-replace is the inverse, it grabs the specified buffer and places it 
into the selected
-    window ({p} command key for ace-window).  hkey-drag-stay does a drag but 
leaves point
+    window ({r} command key for ace-window).  hkey-drag-stay does a drag but 
leaves point
     in the originally selected window.
                 (hmouse-click-to-drag, hmouse-click-to-drag-stay, 
hmouse-click-to-drag-to)
                  hmouse-click-to-replace, hmouse-click-to-swap, 
hmouse-click-to-throw): Added to click
@@ -190,7 +236,7 @@
 2017-11-27  Bob Weiner  <address@hidden>
 
 * hmouse-drv.el (hkey-ace-window-setup): Made new ace-window frames (window id 
= z) inherit the size
-    of the prior selected frame; same as HyWindow.
+    of the prior selected frame; same as HyControl.
 
 * hui-window.el (hmouse-kill-and-yank-region, hmouse-yank-region): Added 
select-frame-set-input-focus
     in case released in a different frame.
@@ -378,7 +424,7 @@ V7.0.1 changes ^^^^:
     location.  Also fixed edge cases where want to copy or move thing to the 
beginning or end of the thing region.
                 (hmouse-goto-region-point): Renamed to 
hmouse-goto-region-prev-point, for clarity.
                 (hmouse-kill-and-yank-region, hmouse-kill-region): Used value 
of point saved in hkey-value to determine
-    the region if non-nil. 
+    the region if non-nil.
 
 * hui-select.el (hui-select-delimited-thing, hui-select-thing): Changed to use 
use-region-p.
   hmouse-drv.el (hmouse-use-region-p): Added and used to improve 
hmouse-drag-thing.
@@ -2089,7 +2135,7 @@ V6.0.0 changes ^^^^:
 
 * hmouse-drv.el (hkey-help-hide): Changed to utilize quit-window function if 
*hkey-wconfig* is
     not set and made it interactive and an autoload so can replace quit-window 
in help buffers.
-                (quit-window): Overloaded this function form "window.el" to 
utilize *hkey-wconfig*
+                (quit-window): Overloaded this function from "window.el" to 
utilize *hkey-wconfig*
     when set.
   hui-mini.el (hui:menu-help): This fixed an issue where Hyperbole minibuffer 
menu item help window
     quit did not properly restore prior window configuration.
diff --git a/DEMO b/DEMO
index a8e650c..c8c8315 100644
--- a/DEMO
+++ b/DEMO
@@ -1136,7 +1136,7 @@ If you want a new window where you release (so the 
original destination window's
 buffer stays onscreen), just drag to a window's modeline; that window will be
 split before the buffer is displayed.
 
-*** Displaying File and Buffer Items
+*** Displaying File and Buffer Items and Moving Buffers
 
 You can do the same thing with items in dired, buffer menu and ibuffer menu
 listing buffers rather than buffers themselves.  Drag with the Action Mouse Key
@@ -1153,15 +1153,19 @@ made.  An Assist Key Drag will move the the item list 
buffer to the destination
 (swapping buffers), just as it does with other buffers.  Practice these drags 
as
 they will prove very beneficial across time.
 
-For even faster keyboard-based drag emulation, use the Emacs package 
'ace-window'
-(see "(hyperbole)Keyboard Drags" for setup).  Once this is configured, the
-leftmost character or two of each window's modeline will show the ID to type to
-use that window as the drag destination. Then whenever point is on an item you
-want displayed in another window, use M-o i <window-id> and watch the magic
-happen.  You can also use this to create explicit button links to other window
-buffers when in an editable buffer.  If you want to display multiple items in
-different windows, instead use the M-o t <window-id> key sequence to 
@emph{throw}
-the item to the window.
+For even faster keyboard-based drag emulation, use the Emacs package
+'ace-window' (see "(hyperbole)Keyboard Drags" for setup).  Once this is
+configured and the suggested M-o key binding is made, the leftmost character or
+two of each window's modeline will show the <window-id> to type to use that
+window as the drag destination. Then whenever point is on an item you want
+displayed in another window, use M-o i <window-id> and watch the magic happen.
+You can also use this to create explicit button links to other window buffers
+when in an editable buffer.  If you want to display multiple items in different
+windows, instead use the M-o t <window-id> key sequence to @emph{throw} each
+item to a different window, while leaving the same selected window.  To replace
+the selected window's buffer with that of another window, use M-o r 
<window-id>.
+To instead swap the selected window's buffer with that of another window,
+use M-o m <window-id>.  Try these commands out and they will speed your work.
 
 *** Cloning Windows
 
diff --git a/HY-ABOUT b/HY-ABOUT
index 0bf1893..72ada9c 100644
--- a/HY-ABOUT
+++ b/HY-ABOUT
@@ -3,7 +3,7 @@
                   Designed and Written by Bob Weiner
                Maintained by Mats Lidell and Bob Weiner
                 https://www.gnu.org/software/hyperbole/
-                            Version 7.0.2a
+                            Version 7.0.2b
 
 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 40fcdca..c1f8fbb 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -2,14 +2,136 @@
                                 by Bob Weiner
 
 ===========================================================================
+*                                   V7.0.3
+===========================================================================
+
+  ACE WINDOW PACKAGE INTEGRATION - fast window and buffer switching
+
+    - Selected Window Buffer Replace: Added the ability to 'replace' the
+      selected window's buffer with the buffer of another window.  Use
+      {M-o r <window-id>}.  To swap the buffers between the same two windows,
+      use {M-o m <window-id>.  See "(hyperbole)Keyboard Drags" for setup and
+      use instructions.
+
+    - New Frame Commands: Any of these M-o commands that involve two windows
+      can use a new frame as the target window by using a <window-id> of 'z'.
+      So, {M-o t z} throws the current buffer to a new frame with a single
+      window displaying that buffer.  The new frame will be the same size as
+      the prior frame to match the behavior of HyControl.
+
+    - Integrated Ace Window commands with Smart Key Drags and added commands
+      for use with the mouse that select Ace Window source and target windows
+      by clicking with the mouse: hmouse-click-to-drag,
+      hmouse-click-to-drag-stay, hmouse-click-to-drag-to,
+      hmouse-click-to-replace, hmouse-click-to-swap, hmouse-click-to-throw.
+
+  SMART (ACTION AND ASSIST) KEYS
+
+    - MSWindows Paths: Hyperbole now recognizes typical MSWindows paths (both
+      local and remote).  They may be used within links and implicit path 
buttons
+      just like POSIX paths, whether running Emacs under a POSIX system or
+      MSWindows.  If under POSIX, a remote MSWindows path must be accessed 
through
+      a mount point to the network share.  Hyperbole caches such mount points 
when
+      it is loaded.  Use {M-x hpath:cache-mswindows-mount-points RET} to 
update them
+      if more mounts are made later.  See also the NEW COMMANDS section herein 
for
+      how to convert a path between POSIX and MSWINDOWS/DOS formats.
+
+    - GitLab and Github Links: Added Gitlab implicit links with equivalent
+      functionality to those of Github.  Added "people" reference support
+      to list people who are part of a formal organization as well as a
+      "staff" alias.  Added "contributors" reference support to list project
+      contributors as well.  Improved Github implicit issue links: gh#gh-34
+      and gh#issue/34 now properly reference an issue in the current project.
+
+    - Ripgrep: Added new ripgrep-msg implicit button type which jumps to
+      the source referenced by ripgrep (rg) output.  Ripgrep by
+      default outputs pathnames only once beforeall matching lines
+      within that path.  Ripgrep may also be used with the Hyperbole
+      `hypb:rgrep' command by setting 'hypb:rgrep-command'.  See
+      "https://github.com/BurntSushi/ripgrep";.
+
+    - Markdown Mode: Smart Keys now support Markdown internal file link
+      references and navigation.
+
+    - Org Mode: When in an *Org Help* buffer, the Smart Keys now defer to
+      org-mode to handle jumps to its own locations for compatibility.
+
+    - Drag-based Kill, Copy and Yank: Added support for dragging across frames.
+
+    - Python Identifiers: If a Jedi server is running and the Action Key is
+      pressed on a Python identifier, Hyperbole will use Jedi to find the
+      definition even within nested module references, e.g. a.b.c.  Also 
improved
+      basic identifier definition finding.
+
+    - Company Mode Completion: Support for the Emacs company-mode completion
+      package.  After a user loads company-mode, the Action Key when pressed on
+      a source code identifier will run 'smart-company-to-definition' and the
+      Assist Key will run 'smart-company-help'.
+
+    - Treemacs Mode: Now supports standard Hyperbole end-of-line proportional
+      scrolling.
+
+    - ChangeLog Mode: Smart Keys now work on Emacs Lisp references in 
changelogs.
+
+  HYCONTROL
+
+    - Help Buffer Quitting: If HyControl is active, normally {q} quits
+      it but now if point is in an Emacs help buffer, {q} will quit
+      from the help buffer instead.  Use {Q} to quit from HyControl
+      unconditionally.
+
+  NEW COMMANDS
+
+    - Buffer Sliding:  Four new commands are available that can be
+      bound to things like control arrow keys: hkey-buffer-move-left,
+      hkey-buffer-move-right, hkey-buffer-move-down and
+      hkey-buffer-move-up.  Each one slides the current buffer one
+      window in the direction specified and all other buffers slide
+      around to match.
+
+    - MSWindows and POSIX Path Toggling: In "hpath.el", added
+      (hpath:substitute-posix-or-mswindows-at-point) and
+      (hpath:substitute-posix-or-mswindows) commands to toggle the
+      format of a path at point or in a string between POSIX and MSWindows
+      styles.
+
+  PROGRAMMING
+
+    - Added hpath:map-plist, equivalent to mapcar but maps over
+      key-value pairs in property lists (where the key and value are
+      individual elements in the list).
+
+    - In "hui-select.el", added functions to return info. on the
+      context-sensitive region that this library selects.
+      (hui-select-get-region) returns the region that would be
+      selected at point and (hui-select-get-region-boundaries)
+      returns a cons of the start and end position of the same region.
+
+    - In "hpath.el (hpath:delimited-possible-path), added optional
+      include-positions parameter which if non-nil, adds start and end
+      positions to returned value.
+
+    - In "hversion.el", added (hyperb:wsl-os-p) flag to test whether
+      Emacs is running under Microsoft Windows Subsystem for Linux (WSL)
+      since the system-type variable does not reflect this.
+
+  DOCUMENTATION
+
+    - Popup Menus: Documented how to invoke the Koutliner and
+      HyRolo popup menus in Emacs.  See "(hyperbole)Menu Commands".
+
+===========================================================================
 *                                   V7.0.2
 ===========================================================================
 
-    - Ace Window: Added the ability to 'throw' an item to a window while
-      leaving the selected window the same.  Use {M-o t <window-id>}.  This
-      works in Dired, Buffer Menu, iBuffer Menu and Treemacs modes and lets
-      you throw multiple items to multiple windows quickly.  See
-      "(hyperbole)Keyboard Drags" for setup and use instructions.
+  ACE WINDOW PACKAGE INTEGRATION
+
+    - Item Throws: Added the ability to 'throw' an item or a buffer to
+      a window while leaving the selected window the same.  Use {M-o t
+      <window-id>}.  This works in Dired, Buffer Menu, iBuffer Menu and
+      Treemacs modes and lets you throw multiple items to multiple windows
+      quickly.  See "(hyperbole)Keyboard Drags" for setup and use
+      instructions.
 
 ===========================================================================
 *                                   V7.0.1
diff --git a/HY-WHY.kotl b/HY-WHY.kotl
index d363ad5..bda6d2e 100644
--- a/HY-WHY.kotl
+++ b/HY-WHY.kotl
@@ -20,7 +20,7 @@
       pressing on their names.  Hyperbole will automatically embed
       certain key variables in link pathnames so that as these links
       are moved from site to site and the variable values change at
-      each site, the links maintained properly.  See "DEMO#Path
+      each site, the links are properly maintained.  See "DEMO#Path
       Suffixes and Variables" and "DEMO#Path Prefixes".
 
    5. Quickly search the web for targeted types of information such as
@@ -115,7 +115,7 @@ alpha ;; label-type
 
 ;; depth-first kcell attributes
 [[0
-  (creator "address@hidden" create-time "20171212:19:44:57" id-counter 37 file 
"/Users/bk/Dropbox/emacs/hyperbole/HY-WHY.kotl")]
+  (creator "address@hidden" create-time "20190203:156:52:59" id-counter 37 
file "/c/Users/bob.weiner/Dropbox/emacs/hyperbole/HY-WHY.kotl")]
  [1
   (creator "address@hidden" create-time "20160524:15:04:17" no-fill t)]
  [17
diff --git a/Makefile b/Makefile
index cfdf7ea..6fd8ad1 100644
--- a/Makefile
+++ b/Makefile
@@ -54,7 +54,7 @@
 
 # This ver setup won't work under any make except GNU make, so set it manually.
 #HYPB_VERSION = "`head -3 hversion.el | tail -1 | sed -e 's/.*|\(.*\)|.*/\1/'`"
-HYPB_VERSION = 7.0.2a
+HYPB_VERSION = 7.0.2b
 
 # Emacs executable used to byte-compile .el files into .elc's.
 # Possibilities include: emacs, infodock, xemacs, etc.
diff --git a/README.md b/README.md
index 21373a9..d82150b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# GNU Hyperbole 7.0.2a - The Everyday Hypertextual Information Manager
+# GNU Hyperbole 7.0.2b - The Everyday Hypertextual Information Manager
 
 <!-- START doctoc generated TOC -->
 **Table of Contents**
diff --git a/README.md.html b/README.md.html
index 69f0f2b..cd24141 100644
--- a/README.md.html
+++ b/README.md.html
@@ -1,11 +1,11 @@
 <h1>
-<a 
id="user-content-gnu-hyperbole-702a---the-everyday-hypertextual-information-manager"
 class="anchor" 
href="#gnu-hyperbole-702a---the-everyday-hypertextual-information-manager" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>GNU Hyperbole 7.0.2 - The Everyday Hypertextual 
Information Manager</h1>
+<a 
id="user-content-gnu-hyperbole-702b---the-everyday-hypertextual-information-manager"
 class="anchor" 
href="#gnu-hyperbole-702b---the-everyday-hypertextual-information-manager" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>GNU Hyperbole 7.0.2b - The Everyday Hypertextual 
Information Manager</h1>
 
 <p><strong>Table of Contents</strong></p>
 <ul>
 <li><a href="#summary">Summary</a></li>
 <li><a href="#mailing-lists">Mailing Lists</a></li>
-<li><a href="#ftp-and-git">Ftp and Git Repository Downloads</a></li>
+<li><a href="#ftp-and-git-repository-downloads">Ftp and Git Repository 
Downloads</a></li>
 <li><a href="#installation">Installation</a></li>
 <li><a href="#invocation">Invocation</a></li>
 <li><a href="#hyperbole-components">Hyperbole Components</a></li>
@@ -18,7 +18,7 @@
 <li><a href="#why-was-hyperbole-developed">Why was Hyperbole 
developed?</a></li>
 </ul>
 
-<p><a href="man/im/hyperbole-cv.png" target="_blank"><img 
src="man/im/hyperbole-cv.png" alt="Hyperbole screenshot of the Koutliner, DEMO 
file and HyRolo" style="max-width:100%;"></a></p>
+<p><a href="man/im/hyperbole-cv.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/hyperbole-cv.png" alt="Hyperbole screenshot of the 
Koutliner, DEMO file and HyRolo" style="max-width:100%;"></a></p>
 <h2>
 <a id="user-content-summary" class="anchor" href="#summary" 
aria-hidden="true"><span aria-hidden="true" class="octicon 
octicon-link"></span></a>Summary</h2>
 <p><code>GNU Hyperbole</code> (pronounced Ga-new Hi-per-bo-lee), or just 
<code>Hyperbole</code>,
@@ -163,7 +163,7 @@ menubar and {C-h h} will display a Hyperbole menu in the 
minibuffer for
 quick keyboard-based selection.</p>
 <p>You can invoke Hyperbole commands in one of three ways:</p>
 <p>use the Hyperbole menu on your menubar;</p>
-<p><a href="man/im/menu-hyperbole.png" target="_blank"><img 
src="man/im/menu-hyperbole.png" alt="Hyperbole Menubar Menu" 
style="max-width:100%;"></a></p>
+<p><a href="man/im/menu-hyperbole.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/menu-hyperbole.png" alt="Hyperbole Menubar Menu" 
style="max-width:100%;"></a></p>
 <p>type {C-h h} or {M-x hyperbole RET} to bring up the Hyperbole main menu
 in the minibuffer window, for fast keyboard or mouse-based selection;
 select an item from this menu by typing the item's first letter; use {q}
@@ -172,10 +172,10 @@ to quit from the menu.</p>
 a pathname to display the associated file or directory.</p>
 <p>Use {C-h h d d} for an interactive demonstration of standard Hyperbole
 button capabilities.</p>
-<p><a href="man/im/demo.png" target="_blank"><img src="man/im/demo.png" 
alt="Hyperbole screenshot of the DEMO" style="max-width:100%;"></a></p>
+<p><a href="man/im/demo.png" target="_blank" rel="noopener noreferrer"><img 
src="man/im/demo.png" alt="Hyperbole screenshot of the DEMO" 
style="max-width:100%;"></a></p>
 <p>{C-h h k e} offers an interactive demonstration of the Koutliner,
 Hyperbole's multi-level autonumbered hypertextual outliner.</p>
-<p><a href="man/im/koutliner.png" target="_blank"><img 
src="man/im/koutliner.png" alt="Hyperbole screenshot of the Koutliner" 
style="max-width:100%;"></a></p>
+<p><a href="man/im/koutliner.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/koutliner.png" alt="Hyperbole screenshot of the 
Koutliner" style="max-width:100%;"></a></p>
 <p>To try out HyControl, Hyperbole's interactive frame and window control
 system, use {C-h h s w} for window control or {C-h h s f} for frame
 control.  {t} switches between window and frame control once in one of
@@ -237,7 +237,7 @@ HyRolo, which anyone can use is also included.  It is easy 
to
 learn to use since it introduces only a few new mechanisms and
 has a menu interface, which may be operated from the keyboard or
 the mouse.</p>
-<p><a href="man/im/menu-rolo.png" target="_blank"><img 
src="man/im/menu-rolo.png" alt="HyRolo Menubar Menu" 
style="max-width:100%;"></a></p>
+<p><a href="man/im/menu-rolo.png" target="_blank" rel="noopener 
noreferrer"><img src="man/im/menu-rolo.png" alt="HyRolo Menubar Menu" 
style="max-width:100%;"></a></p>
 </li>
 <li>
 <p><strong>Screen Control</strong>: Hyperbole includes HyControl, the fastest,
@@ -439,7 +439,7 @@ Keys).</p>
 <hr>
 <p>One of the nicest things about Hyperbole is that it's available
 everywhere. Org-mode is a mode and its features are only available in
-Org files. For instance if you dropped into <code>eshell' or</code>ansi-term' 
and
+Org files. For instance if you dropped into <code>eshell' or </code>ansi-term' 
and
 did `ls', you can move point to any of the directory's contents, do M-RET
 (or Shift-Button2) and jump to that file.  And that's just one example.
 Note that this means that all Hyperbole functionality is available in
diff --git a/hargs.el b/hargs.el
index bb3ac5f..822f967 100644
--- a/hargs.el
+++ b/hargs.el
@@ -90,13 +90,21 @@ interactive form or takes no arguments."
             (action:path-args-rel
              (hargs:iform-read interactive-form modifying))))))
 
+(defun hargs:buffer-substring (start end)
+  (let ((string (buffer-substring-no-properties start end)))
+    ;; This may trigger on a colored grep-like output line which has
+    ;; an embedded null character with a display text property that
+    ;; displays it as a colon.  Since the display property is stripped
+    ;; here, convert the null character to a colon.
+    (subst-char-in-string ?\^@ ?: string t)))
+
 (defun hargs:delimited (start-delim end-delim
                        &optional start-regexp-flag end-regexp-flag 
list-positions-flag)
   "Returns a normalized, single line, delimited string that point is within, 
or nil.
 START-DELIM and END-DELIM are strings that specify the argument
 delimiters.  With optional START-REGEXP-FLAG non-nil, START-DELIM is
 treated as a regular expression.  END-REGEXP-FLAG is similar.
-With optional LIST-POSITIONS-FLAG, return list of (string-matched start-pos 
end pos)."
+With optional LIST-POSITIONS-FLAG, return list of (string-matched start-pos 
end-pos)."
   (let* ((opoint (point))
         (limit (if start-regexp-flag opoint
                  (+ opoint (1- (length start-delim)))))
@@ -121,17 +129,23 @@ With optional LIST-POSITIONS-FLAG, return list of 
(string-matched start-pos end
        (goto-char opoint)
        (and (funcall end-search-func end-delim limit t)
             (setq end (match-beginning 0))
-            ;; Ignore any preceding backquote, e.g. when a double-quoted
-            ;; string is embedded within a doc string.
+            ;; Ignore any preceding backslash, e.g. when a double-quoted
+            ;; string is embedded within a doc string, except when
+            ;; the string starts with 2 backslashes or an MSWindows
+            ;; disk drive prefix, in which case the backslash is
+            ;; considered part of a pathname.
             (if (and (> end (point-min))
-                     (= (char-before end) ?\\))
+                     (= (char-before end) ?\\)
+                     (not (string-match (concat "\\(\\`[\\][\\]\\)\\|"
+                                                hpath:mswindows-mount-prefix)
+                                        (hargs:buffer-substring start end))))
                 (setq end (1- end))
               t)
             (< start end)
-            (let ((string (buffer-substring-no-properties start end)))
-              (setq string (hypb:replace-match-string "[\n\r]\\s-*" string " " 
t))
-              (unless hyperb:microcruft-os-p
-                (setq string (hpath:mswindows-to-posix-path string)))
+            (let ((string (hargs:buffer-substring start end)))
+              (setq string (hypb:replace-match-string "[\n\r\f]\\s-*" string " 
" t))
+              (unless hyperb:microsoft-os-p
+                (setq string (hpath:mswindows-to-posix string)))
               (if list-positions-flag
                   (list string start end)
                 string)))))))
diff --git a/hbmap.el b/hbmap.el
index 085e888..baf0273 100644
--- a/hbmap.el
+++ b/hbmap.el
@@ -106,7 +106,7 @@ the error.  Optional NO-SAVE disables saving of the map 
after operation."
 ;;; ************************************************************************
 
 (defvar hbmap:dir-user
-  (if (and hyperb:microcruft-os-p
+  (if (and hyperb:microsoft-os-p
           (or (not (fboundp 'getenv))
               (not (getenv "HOME"))))
       "c:/_hyperb/" "~/.hyperb/")
diff --git a/hbut.el b/hbut.el
index 8198af7..e4104f9 100644
--- a/hbut.el
+++ b/hbut.el
@@ -810,7 +810,7 @@ Suitable for use as part of `write-file-functions'."
 (defalias    'hattr:summarize 'hattr:report)
 
 (defvar   hattr:filename
-  (if hyperb:microcruft-os-p "_hypb" ".hypb")
+  (if hyperb:microsoft-os-p "_hypb" ".hypb")
   "Per directory file name in which explicit button attributes are stored.
 If you change its value, you will be unable to use buttons created by
 others who use a different value!")
diff --git a/hibtypes.el b/hibtypes.el
old mode 100755
new mode 100644
index f4dd991..f682c6e
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -1,18 +1,18 @@
 ;;; hibtypes.el --- GNU Hyperbole default implicit button types
 ;;
-;; Author:       Bob Weiner
+;; Author: Bob Weiner
 ;;
-;; Orig-Date:    19-Sep-91 at 20:45:31
+;; Orig-Date: 19-Sep-91 at 20:45:31
 ;;
-;; Copyright (C) 1991-2017  Free Software Foundation, Inc.
-;; See the "HY-COPY" file for license information.
+;; Copyright (C) 1991-2017 Free Software Foundation, Inc.  See
+;; the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
-;;
 ;;; Commentary:
 ;;
-;;   Implicit button types in this file are defined in increasing order
-;;   of priority within this file (last one is highest priority).
+;;   Implicit button types in this file are defined in increasing
+;;   order of priority within this file (last one is highest
+;;   priority).
 
 ;;; Code:
 ;;; ************************************************************************
@@ -60,7 +60,7 @@
 ;;; ************************************************************************
 ;;; Public implicit button types
 ;;; ************************************************************************
-  
+
 (run-hooks 'hibtypes-begin-load-hook)
 
 ;;; ========================================================================
@@ -74,9 +74,10 @@
 ;;; ========================================================================
 
 (defvar mail-address-mode-list
-  '(emacs-lisp-mode lisp-interaction-mode lisp-mode scheme-mode c-mode
-    c++-mode html-mode java-mode js2-mode objc-mode python-mode
-    smalltalk-mode fundamental-mode text-mode indented-text-mode web-mode) 
+  '(emacs-lisp-mode lisp-interaction-mode lisp-mode scheme-mode
+    c-mode c++-mode html-mode java-mode js2-mode objc-mode
+    python-mode smalltalk-mode fundamental-mode text-mode
+    indented-text-mode web-mode)
   "List of major modes in which mail address implicit buttons are active.")
 
 (defun mail-address-at-p ()
@@ -125,20 +126,22 @@ any buffer attached to a file in `hyrolo-file-list', or 
any buffer with
 
 (defib pathname ()
   "Makes a valid pathname display the path entry.
-Also works for delimited and non-delimited remote pathnames, Texinfo @file{}
-entries, and hash-style link references to HTML, Markdown or Emacs outline
-headings.  Emacs Lisp library files (filenames without any directory component
-that end in .el and .elc) are looked up using the `load-path' directory list.
+Also works for delimited and non-delimited remote pathnames,
+Texinfo @file{} entries, and hash-style link references to HTML,
+Markdown or Emacs outline headings.  Emacs Lisp library
+files (filenames without any directory component that end in .el
+and .elc) are looked up using the `load-path' directory list.
 
 See `hpath:at-p' function documentation for possible delimiters.
-See `hpath:suffixes' variable documentation for suffixes that are added to or
-removed from pathname when searching for a valid match.
-See `hpath:find' function documentation for special file display options."
+See `hpath:suffixes' variable documentation for suffixes that are
+added to or removed from pathname when searching for a valid
+match.  See `hpath:find' function documentation for special file
+display options."
   ;;
   ;; Ignore paths in Buffer menu, dired and helm modes.
   (unless (or (eq major-mode 'helm-major-mode)
-             (delq nil (mapcar (lambda (substring) (string-match
-                                                    substring 
(format-mode-line mode-name)))
+             (delq nil (mapcar (lambda (substring)
+                                 (string-match substring (format-mode-line 
mode-name)))
                                '("Buffer Menu" "IBuffer" "Dired"))))
     (let ((path (hpath:at-p))
          full-path)
@@ -174,12 +177,13 @@ See `hpath:find' function documentation for special file 
display options."
                  ))))))
 
 ;;; ========================================================================
-;;; Displays files at specific lines and optional column number locations.
+;;; Displays files at specific lines and optional column number
+;;; locations.
 ;;; ========================================================================
 
 (defconst hibtypes-path-line-and-col-regexp
-  (if (eq system-type 'windows-nt)
-      ;; Allow for 'c:' single letter drive prefixes on Windows
+  (if hyperb:microsoft-os-p
+      ;; Allow for 'c:' single letter drive prefixes on MSWindows
       "\\([^ \t\n\r:][^ \t\n\r]+\\):\\([0-9]+\\)\\(:\\([0-9]+\\)\\)?"
     "\\([^ \t\n\r:]+\\):\\([0-9]+\\)\\(:\\([0-9]+\\)\\)?"))
 
diff --git a/hmouse-drv.el b/hmouse-drv.el
index 55f0800..507594b 100644
--- a/hmouse-drv.el
+++ b/hmouse-drv.el
@@ -215,7 +215,7 @@ Any ARGS will be passed to `hmouse-function'."
             (setq action-key-cancelled nil
                   assist-key-depressed-flag nil))
            (assist-key-depressed-flag
-            (hmouse-function nil nil args))
+            (hmouse-function nil nil args))
            ((hkey-mouse-help nil args))
            (t
             (run-hooks 'action-key-release-hook)
@@ -358,6 +358,9 @@ window, use {M-o i <id-of-window-to-display-item-in>} and 
watch the
 magic happen."
   (require 'ace-window)
   (when key (global-set-key key 'ace-window))
+  (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
+       ;; allows {i} operation to work when only 2 windows exist
+       aw-dispatch-always t)
   ;; New ace-window frames (window id = z) inherit the size of the
   ;; prior selected frame; same as HyWindow.
   (setq aw-frame-size '(0 . 0)
@@ -368,26 +371,28 @@ magic happen."
   ;; Ace-window includes ?m as the swap windows key, so it is not added here.
   (push '(?r hkey-replace "Hyperbole: Replace Here") aw-dispatch-alist)
   (push '(?t hkey-throw   "Hyperbole: Throw To") aw-dispatch-alist)
-  (setq aw-keys '(?a ?s ?d ?f ?g ?h ?j ?k ?l)
-       ;; allows {i} operation to work when only 2 windows exist
-       aw-dispatch-always t)
   (ace-window-display-mode 1))
 
 ;;;###autoload
 (defun hkey-drag (release-window)
-  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
+  "Emulate Smart Mouse Key drag from the selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
 The drag action determines the final selected window.
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
+Optional prefix arg non-nil means emulate Assist Key rather than the
 Action Key.
 
 Works only when running under a window system, not from a dumb terminal."
+  ;; Note: Cannot add start-window as first parameter to this function
+  ;; because it is called like many other functions herein with a
+  ;; single release-window argument by 'hmouse-choose-windows'.
+
   ;; Cancel any partial drag that may have been recorded.
   (interactive (list (aw-select " Ace - Hyperbole: Drag")))
   (condition-case nil
-      ;; This may trigger a No Action error if start-window and
-      ;; release-window are the same; in that case, use the error
-      ;; handler to handle dragging an item.
+      ;; This may trigger a No Action error if starting window
+      ;; (window of depress) and release-window are the same; in that
+      ;; case: use the error handler to emulate dragging an item if on
+      ;; one.
       (progn (if current-prefix-arg
                 (setq assist-key-depressed-flag nil)
               (setq action-key-depressed-flag nil))
@@ -404,7 +409,7 @@ Works only when running under a window system, not from a 
dumb terminal."
 After the drag, the selected window remains the same as it was before
 the drag.
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
+Optional prefix arg non-nil means emulate Assist Key rather than the
 Action Key.
 
 Works only when running under a window system, not from a dumb terminal."
@@ -417,24 +422,39 @@ Works only when running under a window system, not from a 
dumb terminal."
 
 ;;;###autoload
 (defun hkey-drag-to (release-window)
-  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
+  "Emulate Smart Mouse Key drag from a selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
 If an item is dragged to RELEASE-WINDOW, then RELEASE-WINDOW is selected;
-otherwise, the drag action determines the selected window.
+otherwise, the drag action determines the selected window.  If no drag
+has taken place, then the selected window's buffer is displayed in
+RELEASE-WINDOW and that becomes the selected window.
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
+Optional prefix arg non-nil means emulate Assist Key rather than the
 Action Key.
 
 Works only when running under a window system, not from a dumb terminal."
   (interactive
    (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?i 
aw-dispatch-alist)))))
           (aw-select mode-line-text))))
-  (if (and (hmouse-at-item-p) (window-live-p release-window))
-      (progn (hkey-drag release-window)
-            ;; Leave release-window selected
-            (when (window-live-p release-window)
-              (hypb:select-window-frame release-window)))
-    ;; Leave hkey-drag to choose selected window
-    (hkey-drag release-window)))
+  (let ((start-window (if (and (boundp 'start-window) (window-live-p 
start-window))
+                         start-window
+                       (if current-prefix-arg
+                           assist-key-depress-window
+                         action-key-depress-window))))
+    (unless (window-live-p start-window)
+      (setq start-window (selected-window)))
+    (if (and (hmouse-at-item-p) (window-live-p release-window))
+       (progn (hkey-drag release-window)
+              ;; Leave release-window selected
+              (when (window-live-p release-window)
+                (hypb:select-window-frame release-window)))
+      (if (eq start-window release-window)
+         ;; Leave hkey-drag to choose final selected window
+         (hkey-drag release-window)
+       ;; Replace release window's buffer with selected
+       ;; window's buffer.
+       (hkey-buffer-to start-window release-window)
+       (when (window-live-p release-window)
+         (hypb:select-window-frame release-window))))))
 
 ;;;###autoload
 (defun hkey-replace (release-window)
diff --git a/hmouse-sh.el b/hmouse-sh.el
index ac5c609..7923124 100644
--- a/hmouse-sh.el
+++ b/hmouse-sh.el
@@ -574,7 +574,7 @@ With optional MIDDLE-KEY-ONLY-FLAG non-nil, binds only the 
middle mouse key."
     ;;
     ;; In Info-mode, Emacs uses key-translation-map to link mouse-1 to
     ;; do whatever mouse-2 does but because Hyperbole uses both down
-    ;; and up bindings on mouse2, this does work.  So we rebind
+    ;; and up bindings on mouse2, this does not work.  So we rebind
     ;; mouse-1 in Info mode to be an actual Action Mouse Key (which
     ;; makes it follow Info links/cross-references properly, doing a
     ;; superset of what it did before).
diff --git a/hmouse-tag.el b/hmouse-tag.el
index e37f5e3..18e7c64 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -1199,7 +1199,7 @@ Look for packages in `smart-java-package-path'."
                    dir-list (if (setq found (file-exists-p path))
                                 nil
                               (cdr dir-list))))
-           (when (and (not found) subpath hyperb:microcruft-os-p)
+           (when (and (not found) subpath hyperb:microsoft-os-p)
                ;; Try .jav suffix.
              (setq subfile (concat subpath ".jav")
                    dir-list smart-java-package-path)
diff --git a/hpath.el b/hpath.el
old mode 100755
new mode 100644
index 8e13d55..c460e3f
--- a/hpath.el
+++ b/hpath.el
@@ -57,34 +57,48 @@ Default is `nil' since this can slow down normal file 
finding."
 ;; and "https://docs.microsoft.com/en-us/windows/wsl/interop"; for
 ;; Windows path specifications and use under WSL.
 
+(defvar hpath:posix-mount-points-regexp
+  "^\\(Filesystem\\|rootfs\\|none\\) "
+  "Regexp of 'mount' command output lines that are not mount points of 
MSWindows paths.")
+
 (defvar hpath:mswindows-mount-prefix
   (cond ((eq system-type 'cygwin)
         "/cygdrive/")
-       (hyperb:microcruft-os-p
+       (hyperb:microsoft-os-p
         "")
        (t ;; POSIX
        "/mnt/"))
   "Path prefix to add when converting MSWindows drive paths to POSIX-style.
 Must include a trailing directory separator or be nil.")
 
-(defconst hpath:mswindows-drive-regexp "\\`[\\/]?\\([a-zA-Z]\\)[:/]"
-  "Regular expression matching an MSWindows drive letter at the beginning of a 
path string.")
+(defconst hpath:mswindows-drive-regexp (format 
"\\`\\(%s\\)?[\\/]?\\([a-zA-Z]\\)[:\\/]"
+                                              hpath:mswindows-mount-prefix)
+  "Regular expression matching an MSWindows drive letter at the beginning of a 
path string.
+Grouping 2 is the actual letter of the drive.
+If the value of 'hpath:mswindows-mount-prefix' changes, then re-initialize 
this constant.")
 
 (defconst hpath:mswindows-path-regexp "\\`.*\\.*[a-zA-Z0-9_.]"
   "Regular expression matching the start of an MSWindows path that does not 
start with a drive letter but contains directory separators.")
 
-(defun hpath:mswindows-to-posix-path (path)
-  "Convert a recognizable MSWindows PATH to a POSIX-style path or return the 
path unchanged.
+;;;###autoload
+(defun hpath:mswindows-to-posix (path)
+  "Convert a recognizable MSWindows PATH to a Posix-style path or return the 
path unchanged.
 If path begins with an MSWindows drive letter, prefix the converted path with 
the value of 'hpath:mswindows-mount-prefix'."
+  (interactive "sMSWindows path to convert to POSIX: ")
   (when (stringp path)
-    (cond ((string-match hpath:mswindows-drive-regexp path)
-          ;; Convert Windows disk drive paths to POSIX-style with a mount 
prefix.
-          (setq path (concat hpath:mswindows-mount-prefix (downcase 
(match-string 1 path))
-                             (if hyperb:microcruft-os-p ":" "/")
-                             (substring path (match-end 0)))
-                path (hpath:mswindows-to-posix-separators path)))
-         ((string-match hpath:mswindows-path-regexp path)
-          (setq path (hpath:mswindows-to-posix-separators path)))))
+    (setq path (hpath:mswindows-to-posix-separators path))
+    (when (string-match hpath:mswindows-drive-regexp path)
+      (when (string-match hpath:mswindows-drive-regexp path)
+       (let* ((drive-prefix (downcase (match-string 2 path)))
+              (rest-of-path (substring path (match-end 0)))
+              (absolute-p (and (not (string-empty-p rest-of-path))
+                               (= (aref rest-of-path 0) ?/))))
+         ;; Convert MSWindows disk drive paths to POSIX-style with a mount 
prefix.
+         (setq path (concat hpath:mswindows-mount-prefix drive-prefix
+                            (cond (hyperb:microsoft-os-p ":")
+                                  (absolute-p "")
+                                  (t "/"))
+                            rest-of-path))))))
   path)
 
 (defun hpath:mswindows-to-posix-separators (path)
@@ -93,6 +107,101 @@ Path must be a string or an error will be triggered.  See
 'abbreviate-file-name' for how path abbreviation is handled."
   (abbreviate-file-name (replace-regexp-in-string "\\\\" "/" path)))
 
+;;;###autoload
+(defun hpath:posix-to-mswindows (path)
+  "Convert and return a Posix-style PATH to an MSWindows path or return the 
path unchanged.
+If path begins with an optional mount prefix, 'hpath:mswindows-mount-prefix', 
followed by an MSWindows drive letter, remove the mount prefix."
+  (interactive "sPOSIX path to convert to MSWindows: ")
+  (when (stringp path)
+    (setq path (hpath:posix-to-mswindows-separators path))
+    ;; Remove any POSIX mount prefix preceding an MSWindows path.
+    (if (eq 0 (string-match hpath:mswindows-mount-prefix path))
+       (setq path (substring path (match-end 0))))
+    (when (string-match hpath:mswindows-drive-regexp path)
+      (when (string-match hpath:mswindows-drive-regexp path)
+       (let* ((drive-prefix (downcase (match-string 2 path)))
+              (rest-of-path (substring path (match-end 0)))
+              (absolute-p (= (aref path (1- (match-end 0))) ?\\)))
+         ;; Convert formerly Posix-style Windows disk drive paths to 
MSWindows-style.
+         (setq path (concat drive-prefix ":"
+                            (if (or (not absolute-p)
+                                    (string-match "\\`[~/]" rest-of-path))
+                                ""
+                              "\\")
+                            rest-of-path))))))
+  path)
+
+
+(defun hpath:posix-to-mswindows-separators (path)
+  "Replace all forward slashes with backslashes in PATH and abbreviate the 
path if possible.
+Path must be a string or an error will be triggered.  See
+'abbreviate-file-name' for how path abbreviation is handled."
+  (replace-regexp-in-string "/" "\\\\" (abbreviate-file-name path)))
+
+(defun hpath:posix-path-p (path)
+  "Return non-nil if PATH looks like a Posix path."
+  (and (stringp path) (string-match  "/" path)))
+
+;;;###autoload
+(defun hpath:substitute-posix-or-mswindows-at-point ()
+  "If point is within a recognizable Posix or MSWindows path, change the path 
to the other type of path."
+  (interactive "*")
+  (barf-if-buffer-read-only)
+  (let* ((opoint (point))
+        (str-and-positions (hpath:delimited-possible-path t t))
+        (path (car str-and-positions))
+        (start (nth 1 str-and-positions))
+        (end (nth 2 str-and-positions)))
+      (when path
+       (if (hpath:posix-path-p path)
+           (setq path (hpath:posix-to-mswindows path))
+         (setq path (hpath:mswindows-to-posix path)))
+       (delete-region start end)
+       (insert path)
+       (goto-char (min opoint (point-max))))))
+
+;;;###autoload
+(defun hpath:substitute-posix-or-mswindows (path)
+  "Change a recognizable Posix or MSWindows PATH to the other type of path."
+  (when (stringp path)
+    (if (hpath:posix-path-p path)
+       (hpath:posix-to-mswindows path)
+      (hpath:mswindows-to-posix path))))
+
+;;;###autoload
+(defun hpath:map-plist (func plist)
+  "Returns result of applying FUNC of two args, key and value, to key-value 
pairs in PLIST, a property list."
+  (cl-loop for (k v) on plist by #'cddr
+          collect (funcall func k v) into result
+          return result))
+
+;;;###autoload
+(defun hpath:cache-mswindows-mount-points ()
+  "Cache valid MSWindows mount points in 'directory-abbrev-alist' when under a 
non-MSWindows operating system, e.g. WSL.
+Call this function manually if mount points change after Hyperbole is loaded."
+  (interactive)
+  (when (not hyperb:microsoft-os-p)
+    (let (path mount-point)
+      (mapcar (lambda (path-and-mount-point)
+               (setq path (car path-and-mount-point)
+                     mount-point (cdr path-and-mount-point))
+               (add-to-list 'directory-abbrev-alist (cons (format "\\`%s" 
(regexp-quote path))
+                                                          mount-point)))
+             ;; Sort alist of (path-mounted . mount-point) elements from 
shortest
+             ;; to longest path so that the longest path is selected first 
within
+             ;; 'directory-abbrev-alist' (elements are added in reverse order).
+             (sort
+              ;; Convert plist to alist for sorting.
+              (hpath:map-plist (lambda (path mount-point)
+                                (if (string-match "\\`\\([a-zA-Z]\\):\\'" path)
+                                    (setq path (concat "/" (downcase 
(match-string 1 path)))))
+                                (cons path mount-point))
+                              ;; Return a plist of MSWindows path-mounted 
mount-point pairs.
+                              (split-string (shell-command-to-string
+                                             (format "df 2> /dev/null | grep 
-v '%s' | sed -e 's/ .*%%//g'" hpath:posix-mount-points-regexp))))
+              (lambda (cons1 cons2) (<= (length (car cons1)) (length (car 
cons2)))))))))
+
+
 ;;; ************************************************************************
 ;;; FILE VIEWER COMMAND SETTINGS
 ;;; ************************************************************************
@@ -112,7 +221,8 @@ See the function `hpath:get-external-display-alist' for 
detailed format document
   :type 'regexp
   :group 'hyperbole-commands)
 
-(defvar hpath:external-display-alist-mswindows (list (cons (format 
"\\.\\(%s\\)$" hpath:external-open-office-suffixes)
+(defvar hpath:external-display-alist-mswindows (list '("\\.vba$" . 
"/c/Windows/System32/cmd.exe //c start \"${@//&/^&}\"")
+                                                    (cons (format 
"\\.\\(%s\\)$" hpath:external-open-office-suffixes)
                                                           "openoffice.exe"))
     "*An alist of (FILENAME-REGEXP . DISPLAY-PROGRAM-STRING-OR-LIST) elements 
for MS Windows.
 See the function `hpath:get-external-display-alist' for detailed format 
documentation.")
@@ -578,28 +688,37 @@ paths are allowed.  Absolute pathnames must begin with a 
`/' or `~'."
    ((hpath:www-at-p) nil)
    ((hpath:is-p (hpath:delimited-possible-path non-exist) type non-exist))))
 
-(defun hpath:delimited-possible-path (&optional non-exist)
+(defun hpath:delimited-possible-path (&optional non-exist include-positions)
   "Returns delimited possible path or non-delimited remote path at point, if 
any.
 No validity checking is done on the possible path.  Delimiters may be:
 double quotes, open and close single quote, whitespace, or Texinfo file 
references.
+
 With optional NON-EXIST, nonexistent local paths are allowed.  Absolute 
pathnames
-must begin with a `/' or `~'."
-  (or (hargs:delimited "\"" "\"") 
-      ;; Filenames in Info docs or Python files
-      (hargs:delimited "[`'‘]" "[`'’]" t t)
-      ;; Filenames in TexInfo docs
-      (hargs:delimited "@file{" "}")
-      ;; Any existing whitespace delimited filename at point.
-      ;; If match consists of only punctuation, like
-      ;; . or .., don't treat it as a pathname.  Only look for
-      ;; whitespace delimited filenames if non-exist is nil.
-      (unless non-exist
-       (let ((p (hargs:delimited "^\\|\\(\\s \\|[\]\[(){}<>\;&,@]\\)*"
-                                 "\\([\]\[(){}<>\;&,@]\\|:*\\s \\)+\\|$"
-                                 t t))
-             (punc (char-syntax ?.)))
-         (if (delq nil (mapcar (lambda (c) (/= punc (char-syntax c))) p))
-             p)))))
+must begin with a `/' or `~'.
+
+With optional INCLUDE-POSITIONS, returns a triplet list of (path start-pos
+end-pos) or nil."
+  ;; Prevents MSWindows to Posix path substitution
+  (let ((hyperb:microsoft-os-p t))
+    (or (hargs:delimited "\"" "\"" nil nil include-positions)
+       ;; Filenames in Info docs or Python files
+       (hargs:delimited "[`'‘]" "[`'’]" t t include-positions)
+       ;; Filenames in TexInfo docs
+       (hargs:delimited "@file{" "}" nil nil include-positions)
+       ;; Any existing whitespace delimited filename at point.
+       ;; If match consists of only punctuation, like
+       ;; . or .., don't treat it as a pathname.  Only look for
+       ;; whitespace delimited filenames if non-exist is nil.
+       (unless non-exist
+         (let* ((triplet (hargs:delimited "^\\|\\(\\s-\\|[\]\[(){}<>\;&,@]\\)*"
+                                          
"\\([\]\[(){}<>\;&,@]\\|:*\\s-\\)+\\|$"
+                                          t t t))
+                (p (car triplet))
+                (punc (char-syntax ?.)))
+           (if (delq nil (mapcar (lambda (c) (/= punc (char-syntax c))) p))
+               (if include-positions
+                   triplet
+                 p)))))))
 
 ;;;###autoload
 (defun hpath:display-buffer (buffer &optional display-where)
@@ -773,7 +892,7 @@ program)."
        (hash (goto-char (point-min)))))
 
 (defun hpath:find-executable (executable-list)
-  "Return the first executable string from EXECUTABLE-LIST found within 
`exec-path'."
+  "Return the first executable string from EXECUTABLE-LIST found within 
`exec-path' or nil."
   (catch 'found
     (mapc
      (lambda (executable)
@@ -847,7 +966,7 @@ programs, such as a pdf reader.  The cdr of each element 
may be:
 See also `hpath:internal-display-alist' for internal, window-system 
independent display settings."
   (cond ((memq window-system '(dps ns))
         hpath:external-display-alist-macos)
-       (hyperb:microcruft-os-p
+       (hyperb:microsoft-os-p
         hpath:external-display-alist-mswindows)
        (t (cdr (assoc (hyperb:window-system)
                       (list (cons "emacs" hpath:external-display-alist-x) ; 
GNU Emacs under X
@@ -864,93 +983,94 @@ permitted in the middle of existing pathnames, but not at 
the start or end.
 Tabs and newlines are converted to space before the pathname is checked, this
 normalized path form is what is returned for PATH.  With optional NON-EXIST,
 nonexistent local paths are allowed."
-  (let ((rtn-path path)
-       (suffix))
-    (and (stringp path)
-        ;; Path may be a link reference with components other than a
-        ;; pathname.  These components always follow a comma or # symbol, so
-        ;; strip them, if any, before checking path.
-        (if (string-match "\\`[^#][^#,]*\\([ \t\n\r]*[#,]\\)" path)
-            (setq rtn-path (concat (substring path 0 (match-beginning 1))
-                                   "%s" (substring path (match-beginning 1)))
-                  path (substring path 0 (match-beginning 1)))
-          (setq rtn-path (concat rtn-path "%s")))
-        ;; If path is just a local reference that begins with #,
-        ;; prepend the file name to it.
-        (cond ((and buffer-file-name
-                    ;; ignore HTML color strings
-                    (not (string-match 
"\\`#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]\\'" 
path))
-                    ;; match to in-file HTML references
-                    (string-match "\\`#[^\'\"<>#]+\\'" path))
-               (setq rtn-path (concat "file://" buffer-file-name rtn-path)
-                     path buffer-file-name))
-              ((string-match "\\`[^#]+\\(#[^#]*\\)\\'" path)
-               ;; file and # reference
-               (setq path (substring path 0 (match-beginning 1)))
-               (if (memq (aref path 0) '(?/ ?~))
-                   ;; absolute
-                   (setq rtn-path (concat "file://" rtn-path))
-                 (setq path (concat default-directory path)
-                       rtn-path (concat "file://" default-directory 
rtn-path))))
-              (t))
-        (if (string-match hpath:prefix-regexp path)
-            (setq path (substring path (match-end 0)))
-          t)
-        (not (or (string-equal path "")
-                 (string-match "\\`\\s \\|\\s \\'" path)))
-        ;; Convert tabs and newlines to space.
-        (setq path (hbut:key-to-label (hbut:label-to-key path)))
-        (or (not (string-match "[()]" path))
-            (string-match "\\`([^ \t\n\r\)]+)[ *A-Za-z0-9]" path))
-        (if (string-match "\\$\{[^\}]+}" path)
-            (setq path (hpath:substitute-value path))
-          t)
-        (not (string-match "[\t\n\r\"`'|{}\\]" path))
-        (or (not (hpath:www-p path))
-            (string-match "\\`ftp[:.]" path))
-        (let ((remote-path (string-match "@.+:\\|^/.+:\\|..+:/" path)))
-          (if (cond (remote-path
-                     (cond ((eq type 'file)
-                            (not (string-equal "/" (substring path -1))))
-                           ((eq type 'directory)
-                            (string-equal "/" (substring path -1)))
-                           (t)))
-                    ((or (and non-exist
-                              (or
-                               ;; Info or remote path, so don't check for.
-                               (string-match "[()]" path)
-                               (hpath:remote-p path)
-                               (setq suffix (hpath:exists-p path t))
-                               ;; Don't allow spaces in non-existent
-                               ;; pathnames.
-                               (not (string-match " " path))))
-                         (setq suffix (hpath:exists-p path t)))
-                     (cond ((eq type 'file)
-                            (not (file-directory-p path)))
-                           ((eq type 'directory)
-                            (file-directory-p path))
-                           (t))))
-              (progn
-                ;; Might be an encoded URL with % characters, so
-                ;; decode it before calling format below.
-                (when (string-match "%" rtn-path)
-                  (let (decoded-path)
-                    (while (not (equal rtn-path (setq decoded-path 
(hypb:decode-url rtn-path))))
-                      (setq rtn-path decoded-path))))
-                ;; Quote any % except for one %s at the end of the
-                ;; path part of rtn-path (immediately preceding a #
-                ;; or , character or the end of string).
-                (setq rtn-path (hypb:replace-match-string "%" rtn-path "%%")
-                      rtn-path (hypb:replace-match-string 
"%%s\\([#,]\\|\\'\\)" rtn-path "%s\\1"))
-                ;; Return path if non-nil return value.
-                (if (stringp suffix) ;; suffix could = t, which we ignore
-                    (if (string-match (concat (regexp-quote suffix) "%s") 
rtn-path)
-                        ;; remove suffix
-                        (concat (substring rtn-path 0 (match-beginning 0))
-                                (substring rtn-path (match-end 0)))
-                      ;; add suffix
-                      (format rtn-path suffix))
-                  (format rtn-path ""))))))))
+  (when (stringp path)
+    (setq path (hpath:mswindows-to-posix path))
+    (let ((rtn-path path)
+         (suffix))
+      ;; Path may be a link reference with components other than a
+      ;; pathname.  These components always follow a comma or # symbol, so
+      ;; strip them, if any, before checking path.
+      (and (if (string-match "\\`[^#][^#,]*\\([ \t\n\r]*[#,]\\)" path)
+              (setq rtn-path (concat (substring path 0 (match-beginning 1))
+                                     "%s" (substring path (match-beginning 1)))
+                    path (substring path 0 (match-beginning 1)))
+            (setq rtn-path (concat rtn-path "%s")))
+          ;; If path is just a local reference that begins with #,
+          ;; prepend the file name to it.
+          (cond ((and buffer-file-name
+                      ;; ignore HTML color strings
+                      (not (string-match 
"\\`#[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]\\'" 
path))
+                      ;; match to in-file HTML references
+                      (string-match "\\`#[^\'\"<>#]+\\'" path))
+                 (setq rtn-path (concat "file://" buffer-file-name rtn-path)
+                       path buffer-file-name))
+                ((string-match "\\`[^#]+\\(#[^#]*\\)\\'" path)
+                 ;; file and # reference
+                 (setq path (substring path 0 (match-beginning 1)))
+                 (if (memq (aref path 0) '(?/ ?~))
+                     ;; absolute
+                     (setq rtn-path (concat "file://" rtn-path))
+                   (setq path (concat default-directory path)
+                         rtn-path (concat "file://" default-directory 
rtn-path))))
+                (t))
+          (if (string-match hpath:prefix-regexp path)
+              (setq path (substring path (match-end 0)))
+            t)
+          (not (or (string-equal path "")
+                   (string-match "\\`\\s \\|\\s \\'" path)))
+          ;; Convert tabs and newlines to space.
+          (setq path (hbut:key-to-label (hbut:label-to-key path)))
+          (or (not (string-match "[()]" path))
+              (string-match "\\`([^ \t\n\r\)]+)[ *A-Za-z0-9]" path))
+          (if (string-match "\\$\{[^\}]+}" path)
+              (setq path (hpath:substitute-value path))
+            t)
+          (not (string-match "[\t\n\r\"`'|{}\\]" path))
+          (or (not (hpath:www-p path))
+              (string-match "\\`ftp[:.]" path))
+          (let ((remote-path (string-match "@.+:\\|^/.+:\\|..+:/" path)))
+            (if (cond (remote-path
+                       (cond ((eq type 'file)
+                              (not (string-equal "/" (substring path -1))))
+                             ((eq type 'directory)
+                              (string-equal "/" (substring path -1)))
+                             (t)))
+                      ((or (and non-exist
+                                (or
+                                 ;; Info or remote path, so don't check for.
+                                 (string-match "[()]" path)
+                                 (hpath:remote-p path)
+                                 (setq suffix (hpath:exists-p path t))
+                                 ;; Don't allow spaces in non-existent
+                                 ;; pathnames.
+                                 (not (string-match " " path))))
+                           (setq suffix (hpath:exists-p path t)))
+                       (cond ((eq type 'file)
+                              (not (file-directory-p path)))
+                             ((eq type 'directory)
+                              (file-directory-p path))
+                             (t))))
+                (progn
+                  ;; Might be an encoded URL with % characters, so
+                  ;; decode it before calling format below.
+                  (when (string-match "%" rtn-path)
+                    (let (decoded-path)
+                      (while (not (equal rtn-path (setq decoded-path 
(hypb:decode-url rtn-path))))
+                        (setq rtn-path decoded-path))))
+                  ;; Quote any % except for one %s at the end of the
+                  ;; path part of rtn-path (immediately preceding a #
+                  ;; or , character or the end of string).
+                  (setq rtn-path (hypb:replace-match-string "%" rtn-path "%%")
+                        rtn-path (hypb:replace-match-string 
"%%s\\([#,]\\|\\'\\)" rtn-path "%s\\1"))
+                  ;; Return path if non-nil return value.
+                  (if (stringp suffix) ;; suffix could = t, which we ignore
+                      (if (string-match (concat (regexp-quote suffix) "%s") 
rtn-path)
+                          ;; remove suffix
+                          (concat (substring rtn-path 0 (match-beginning 0))
+                                  (substring rtn-path (match-end 0)))
+                        ;; add suffix
+                        (format rtn-path suffix))
+                    (format rtn-path "")))))))))
 
 (defun hpath:push-tag-mark ()
   "Add a tag return marker at point if within a programming language file 
buffer.
@@ -1105,9 +1225,10 @@ validation checks.
 Default-directory should be equal to the current Hyperbole button
 source directory when called, so that PATH is expanded relative
 to it."
-  (cond ((not (stringp path))
-        (error "(hpath:validate): \"%s\" is not a pathname." path))
-       ((or (string-match "[()]" path) (hpath:remote-p path))
+  (unless (stringp path)
+    (error "(hpath:validate): \"%s\" is not a pathname." path))
+  (setq path (hpath:mswindows-to-posix path))
+  (cond ((or (string-match "[()]" path) (hpath:remote-p path))
         ;; info or remote path, so don't validate
         path)
        ((if (not (hpath:www-p path))
diff --git a/hsettings.el b/hsettings.el
index d3c37f5..809dd31 100644
--- a/hsettings.el
+++ b/hsettings.el
@@ -34,7 +34,7 @@
 ;; The following section applies only to MS-DOS and MS-Windows OSs.
 ;; Users of other OSs may simply ignore this section.
 
-;; Some versions of Microcruft OSs don't automatically set the
+;; Some versions of Microsoft OSs don't automatically set the
 ;; timezone so that Hyperbole can read it.  Nor do they include a
 ;; UNIX-style date program.  So follow the commented instructions in
 ;; the code below here.
@@ -43,7 +43,7 @@
 ;; timezone properly and you need not do anything.  If you receive a
 ;; timezone error, simply follow the instructions below to set the
 ;; timezone manually and then reload Hyperbole.
-(if (and hyperb:microcruft-os-p
+(if (and hyperb:microsoft-os-p
         (require 'htz)
         (not (stringp htz:local)))
     (progn
diff --git a/hsys-org.el b/hsys-org.el
index f9604db..1ad9a9e 100644
--- a/hsys-org.el
+++ b/hsys-org.el
@@ -37,7 +37,7 @@
 The variable, `browse-url-browser-function', customizes the url browser that
 is used for urls.  Valid values of this variable include 
`browse-url-default-browser'
 and `browse-url-generic'."
-  (when (eq major-mode 'org-mode)
+  (when (derived-mode-p 'org-mode)
     (cond ((org-link-at-p)
           (hact 'org-link nil))
          ((org-at-heading-p)
@@ -47,7 +47,7 @@ and `browse-url-generic'."
 (defun org-mode:help (&optional _but)
   "If on an Org mode heading, cycles through views of the whole buffer outline.
 If on an Org mode link, displays standard Hyperbole help."
-  (when (eq major-mode 'org-mode)
+  (when (derived-mode-p 'org-mode)
     (cond ((org-link-at-p)
           (hkey-help current-prefix-arg)
           t)
diff --git a/hui-mini.el b/hui-mini.el
index 4483ede..80389cb 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -210,7 +210,7 @@ MENU defaults to 'hyperbole and MENU-LIST to `hui:menus'.  
See `hui:menus'
 definition for the format of the menu list structure."
   (mapcar
    (lambda (entry)
-     (or (consp entry) 
+     (or (consp entry)
         (error "(hui:menu-xemacs): Invalid menu entry: %s" entry))
      (let ((label (car entry))
           (content (car (cdr entry))))
@@ -446,7 +446,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
           "Edits directory-specific button file.")
          ("Info"
           (id-info "(hyperbole)Button Files")
-          "Displays manual section on button files.") 
+          "Displays manual section on button files.")
          ("PersonalFile" (find-file
                            (expand-file-name hbmap:filename hbmap:dir-user))
           "Edits user-specific button file.")
@@ -490,7 +490,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
          ("MarkThing"     (hui:bind-key #'hui-select-thing))                   
;; {C-c RET}
          ("SmartHelp"     (hui:bind-key #'hkey-help))                          
;; {C-h A}
          ("WinControl"    (hui:bind-key #'hycontrol-enable-windows-mode))      
;; {C-c \}
-         )) 
+         ))
        '(cust-referents .
          (("Ref Display>")
          ("Any-Frame" (setq hpath:display-where 'other-frame))
@@ -589,17 +589,17 @@ constructs.  If not given, the top-level Hyperbole menu 
is used."
          ))
        '(gbut .
         (("GButton>")
-         ("Act"    gbut:act        "Activates global button by name.") 
+         ("Act"    gbut:act        "Activates global button by name.")
          ("Create" hui:gbut-create "Adds a global button to gbut:file.")
          ("Edit"   hui:gbut-modify "Modifies global button attributes.")
-         ("Help"   gbut:help       "Reports on a global button by name.") 
+         ("Help"   gbut:help       "Reports on a global button by name.")
          ("Info"   (id-info "(hyperbole)Global Buttons")
           "Displays manual section on global buttons.")
          ("Modify" hui:gbut-modify "Modifies global button attributes.")
          ))
        '(ibut .
         (("IButton>")
-         ("Act"    hui:hbut-current-act  "Activates implicit button at 
point.") 
+         ("Act"    hui:hbut-current-act  "Activates implicit button at point.")
          ("DeleteIButType"   (hui:htype-delete 'ibtypes)
           "Deletes specified button type.")
          ("Help"   hui:hbut-help   "Reports on button's attributes.")
@@ -635,7 +635,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
          ))
        '(otl
         . (("Kotl>")
-           ("All"       kotl-mode:show-all "Expand all collapsed cells.") 
+           ("All"       kotl-mode:show-all "Expand all collapsed cells.")
            ("Blanks"    kvspec:toggle-blank-lines
             "Toggle blank lines between cells on or off.")
            ("Create"    kfile:find   "Create or edit an outline file.")
@@ -659,7 +659,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
                                (kotl-mode:show-tree (kcell-view:label)))
             "Expand tree rooted at point.")
            ("Top"       kotl-mode:top-cells
-            "Hide all but top-level cells.") 
+            "Hide all but top-level cells.")
            ("Vspec"     kvspec:activate
             "Prompt for and activate a view specifiction.")
            ))
@@ -713,7 +713,7 @@ constructs.  If not given, the top-level Hyperbole menu is 
used."
        (hui:menu-web-search)
        ))))
 
-;; Always rebuild the Hyperbole minibuffer menu when this file is loaded. 
+;; Always rebuild the Hyperbole minibuffer menu when this file is loaded.
 (hyperbole-minibuffer-menu)
 
 (provide 'hui-mini)
diff --git a/hui.el b/hui.el
index a0a9228..011e13a 100644
--- a/hui.el
+++ b/hui.el
@@ -220,19 +220,17 @@ Signals an error if any problem occurs."
        (list curr-label new-label))))
 
   (save-excursion
-    (if (called-interactively-p 'interactive)
-       nil
+    (unless (called-interactively-p 'interactive)
       (hui:buf-writable-err (current-buffer) "ebut-rename")
       (if (or (not (stringp curr-label)) (string= curr-label ""))
          (hypb:error "(ebut-rename): 'curr-label' must be a non-empty string: 
%s"
-                curr-label))
+                     curr-label))
       (and (stringp new-label) (string= new-label "")
           (hypb:error "(ebut-rename): 'new-label' must be a non-empty string: 
%s"
-                 new-label)))
+                      new-label)))
     (or (ebut:get (ebut:label-to-key curr-label))
        (hypb:error "(ebut-rename): Can't rename %s since no button data."
-              curr-label))
-    )
+              curr-label)))
   (cond (new-label
         (ebut:operate curr-label new-label)
         (setq hui:ebut-label-prev nil)
diff --git a/hversion.el b/hversion.el
index 363dcc1..b883001 100644
--- a/hversion.el
+++ b/hversion.el
@@ -5,7 +5,7 @@
 ;;
 ;; Orig-Date:     1-Jan-94
 ;;
-;; Copyright (C) 1994-2017  Free Software Foundation, Inc.
+;; Copyright (C) 1994-2019  Free Software Foundation, Inc.
 ;; See the "HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -23,16 +23,22 @@
 ;;; Public variables
 ;;; ************************************************************************
 
-(defconst hyperb:version "7.0.2a" "GNU Hyperbole revision number.")
+(defconst hyperb:version "7.0.2b" "GNU Hyperbole revision number.")
 
 ;;;###autoload
-(defvar hyperb:microcruft-os-p
+(defvar hyperb:microsoft-os-p
   (memq system-type '(ms-windows windows-nt ms-dos win32))
-  "T iff Hyperbole is running under a Microcruft OS.")
+  "T iff Hyperbole is running under a Microsoft OS.")
+
+;;;###autoload
+(defvar hyperb:wsl-os-p
+  (and (memq system-type '(gnu/linux))
+       (executable-find "wsl.exe"))
+  "T iff Hyperbole is running under Microsoft Windows Subsystem for Linux 
(WSL).")
 
 ;;;###autoload
 (defvar hyperb:mouse-buttons
-  (if (or (and hyperb:microcruft-os-p (not (memq window-system '(w32 w64 x))))
+  (if (or (and hyperb:microsoft-os-p (not (memq window-system '(w32 w64 x))))
          (and hyperb:emacs-p (memq window-system '(ns dps))))
       2 3)
   "Number of live buttons available on the mouse.
diff --git a/hyperbole-pkg.el b/hyperbole-pkg.el
index c2390d7..3a94cb7 100644
--- a/hyperbole-pkg.el
+++ b/hyperbole-pkg.el
@@ -1,5 +1,5 @@
 ;; -*- no-byte-compile: t -*-
-(define-package "hyperbole" "7.0.2a" "GNU Hyperbole: The Everyday Hypertextual 
Information Manager"
+(define-package "hyperbole" "7.0.2b" "GNU Hyperbole: The Everyday Hypertextual 
Information Manager"
   '((emacs "24.4"))
   :url "http://www.gnu.org/software/hyperbole";
   :keywords '("comm" "convenience" "files" "frames" "hypermedia" "languages"
diff --git a/hyperbole.el b/hyperbole.el
index 76f5af2..6a13e2f 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -685,6 +685,9 @@ If FLAG is nil then text is shown, while if FLAG is t the 
text is hidden."
   (when (or (file-exists-p "/mnt/c")
            (file-exists-p "/cygdrive"))
     (add-to-list 'directory-abbrev-alist '("\\`\\(/mnt\\|/cygdrive\\)/" . 
"/")))
+  ;; When running under a POSIX system with possible access to MSWindows 
servers,
+  ;; cache valid MSWindows mount points.
+  (hpath:cache-mswindows-mount-points)
   ;;
   ;; Save button attribute file whenever same dir file is saved and
   ;; `ebut:hattr-save' is non-nil.
diff --git a/hyrolo.el b/hyrolo.el
index 1d61a46..d716a33 100644
--- a/hyrolo.el
+++ b/hyrolo.el
@@ -85,10 +85,10 @@ executable must be found as well (for Oauth security)."
         (ms "c:/_rolo.otl")
         (unix "~/.rolo.otl")
         (list (delq nil (if (and (boundp 'bbdb-file) (stringp bbdb-file))
-                            (if hyperb:microcruft-os-p
+                            (if hyperb:microsoft-os-p
                                 (list ms bbdb-file gcontacts)
                               (list  "~/.rolo.otl" bbdb-file gcontacts))
-                          (if hyperb:microcruft-os-p (list ms gcontacts) (list 
unix gcontacts))))))
+                          (if hyperb:microsoft-os-p (list ms gcontacts) (list 
unix gcontacts))))))
     (setq hyrolo-file-list list)
     (when (called-interactively-p 'interactive)
       (message "HyRolo Search List: %S" list))
@@ -606,7 +606,7 @@ XEmacs only."
 
 (defun hyrolo-rename (old-file new-file)
   "Prompt user to rename OLD-FILE to NEW-FILE."
-  (interactive (if hyperb:microcruft-os-p
+  (interactive (if hyperb:microsoft-os-p
                   '("c:/_rolodex.otl" "c:/_rolo.otl")
                 '("~/.rolodex.otl" "~/.rolo.otl")))
   (if (and (equal (car hyrolo-file-list) new-file)
diff --git a/man/hyperbole.html b/man/hyperbole.html
index bd2b5c6..44b27b4 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
 <html>
 <!-- This manual is for GNU Hyperbole
-(Edition 7.0.2a, Published December 12, 2017).
+(Edition 7.0.2b, Published February 2, 2019).
 
-Copyright (C) 1989-2017  Free Software Foundation, Inc.
+Copyright (C) 1989-2019  Free Software Foundation, Inc.
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -328,7 +328,7 @@ Next: <a href="#Introduction" accesskey="n" 
rel="next">Introduction</a>, Previou
 
 <CENTER><H2>The Everyday Hypertextual Information Manager</H2></CENTER>
 
-<P>Copyright &copy; 1989-2017  Free Software Foundation, Inc.</P>
+<P>Copyright &copy; 1989-2019  Free Software Foundation, Inc.</P>
 
 <P>GNU Hyperbole is available for use, modification, and distribution under
 the terms of the GNU General Public License (GPL) Version 3 or later,
@@ -340,8 +340,8 @@ WITHOUT ANY WARRANTY, without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
-Edition 7.0.2a
-Printed December 12, 2017.
+Edition 7.0.2b
+Printed February 2, 2019.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -788,7 +788,7 @@ Next: <a href="#Smart-Keys" accesskey="n" rel="next">Smart 
Keys</a>, Previous: <
 <h2 class="chapter">1 Introduction</h2>
 
 <p>This edition of the GNU Hyperbole Manual is for use with any version
-7.0.2a or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.2b or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
 or higher.  It will trigger an error if your Emacs is older.
 </p>
 <p>This chapter summarizes the structure of the rest of the manual,
@@ -2028,9 +2028,15 @@ a key: <code>(hkey-ace-window-setup)</code>.
 <a name="index-link-creation-from-keyboard"></a>
 <a name="index-keyboard-link-creation"></a>
 <a name="index-M_002do-i-_003cwindow_002did_003e"></a>
+<a name="index-M_002do-r-_003cwindow_002did_003e"></a>
+<a name="index-M_002do-m-_003cwindow_002did_003e"></a>
 <a name="index-M_002do-t-_003cwindow_002did_003e"></a>
 <a name="index-drag-item"></a>
+<a name="index-replace-window-buffer"></a>
+<a name="index-swap-window-buffers"></a>
 <a name="index-throw-item"></a>
+<a name="index-buffer-replace"></a>
+<a name="index-buffers-swap"></a>
 <a name="index-item-drag"></a>
 <a name="index-item-throw"></a>
 <p>After setup, the leftmost character or two of each window&rsquo;s modeline 
will show
@@ -2040,7 +2046,11 @@ is on an item you want displayed in another window, use 
<kbd>{M-o i
 this command to create explicit button links to other window buffers when in 
an editable
 buffer rather than on an item.  If you want to display multiple items in 
different
 windows, instead use the <kbd>{M-o t 
&lt;id-of-window-to-display-item-in&gt;}</kbd> key sequence to
-<em>throw</em> the item to the window.
+<em>throw</em> the item to the window.  To <em>replace</em>
+the selected window&rsquo;s buffer with that of another window, use
+<kbd>{M-o r &lt;id-of-window-displaying-desired-buffer&gt;}</kbd>.  To instead
+<em>swap</em> the selected window&rsquo;s buffer with that of another window,
+use <kbd>{M-o m &lt;id-of-window-to-swap-with&gt;}</kbd>.
 </p>
 
 
@@ -5595,7 +5605,7 @@ that reference the cell.
 <dt><em>create-time</em></dt>
 <dd><p>The time at which the cell was created.  This is stored in a form that
 allows for easy data comparisons but is displayed in a human readable
-format, such as &lsquo;<samp>Jan 28 18:27:59 CST 2017</samp>&rsquo;.
+format, such as &lsquo;<samp>Jan 28 18:27:59 CST 2019</samp>&rsquo;.
 </p></dd>
 </dl>
 
@@ -5727,7 +5737,7 @@ automatically added by HyRolo whenever a new record is 
added.
 ==================================================================
 *   Smith, John       &lt;address@hidden&gt; W708-555-2001  F708-321-1492
         Chief Ether Maintainer, HiHo Industries
-        05/24/2017
+        05/24/2019
 </pre></div>
 
 <p>We call rolo records, <em>entries</em>.  Entries begin with a delimiter
@@ -9450,7 +9460,7 @@ See <a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer Items
      (3) at the end of an entry line: invoke 
<code>action-key-eol-function</code>,
          typically to scroll up proportionally, if an Action Key press; invoke
          <code>assist-key-eol-function</code>, typically to scroll down 
proportionally,
-         if an Asisst Key press;
+         if an Assist Key press;
      (4) on the first line of the buffer (other than the end of line),
          dired is run on the current directory of this Treemacs;
      (5) at the end of the first or last line of the buffer,
@@ -11450,6 +11460,8 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a 
href="#index-M_002do"><code>M-o</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-M_002do-1"><code>M-o</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-M_002do-i-_003cwindow_002did_003e"><code>M-o i 
&lt;window-id&gt;</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-M_002do-m-_003cwindow_002did_003e"><code>M-o m 
&lt;window-id&gt;</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-M_002do-r-_003cwindow_002did_003e"><code>M-o r 
&lt;window-id&gt;</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-M_002do-t-_003cwindow_002did_003e"><code>M-o t 
&lt;window-id&gt;</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-M_002dRET"><code>M-<span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Bindings">Smart Key Bindings</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-M_002dRET-1"><code>M-<span 
class="key">RET</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Key-Bindings">Global Key Bindings</a></td></tr>
@@ -12368,11 +12380,13 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-buffer-menu-1">buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer-menu-2">buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer-menu-item-drag">buffer 
menu item drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer 
Items</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-buffer-replace">buffer 
replace</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-bury">buffer, 
bury</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-copy">buffer, 
copy</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Displaying-Buffers">Displaying Buffers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-swap">buffer, 
swap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Swapping-Buffers">Swapping Buffers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-swap-1">buffer, 
swap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-buffer_002c-unbury">buffer, 
unbury</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-buffers-swap">buffers 
swap</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-bug-tracking">bug 
tracking</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-bury-buffer">bury 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-burying">burying</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -13122,6 +13136,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-remote-pathnames">remote 
pathnames</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Using-URLs-with-Find_002dFile">Using URLs with Find-File</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-remove-lines">remove 
lines</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-removing-Hyperbole-menu">removing Hyperbole 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-replace-window-buffer">replace 
window buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Request-For-Comment">Request For 
Comment</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Request-For-Comment-1">Request 
For Comment</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-resize-frame-percentage">resize 
frame percentage</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -13221,6 +13236,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-subtree_002c-hide">subtree, 
hide</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-subtree_002c-show">subtree, 
show</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-swap-buffers">swap 
buffers</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Swapping-Buffers">Swapping Buffers</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-swap-window-buffers">swap window 
buffers</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Keyboard-Drags">Keyboard Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-swapping">swapping</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-system-encapsulation">system 
encapsulation</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Encapsulating-Systems">Encapsulating Systems</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index 24fd99a..5096944 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index ac66dff..6e58ff5 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 4a6aa37..7c20b66 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -52,7 +52,7 @@
 This manual is for GNU Hyperbole
 (Edition @value{EDITION}, Published @value{UPDATED}).
 
-Copyright @copyright{} 1989-2017  Free Software Foundation, Inc.
+Copyright @copyright{} 1989-2019  Free Software Foundation, Inc.
 
 @quotation
 Permission is granted to copy, distribute and/or modify this document
@@ -139,7 +139,7 @@ Texinfo markup language.
 
 <CENTER><H2>The Everyday Hypertextual Information Manager</H2></CENTER>
 
-<P>Copyright &copy; 1989-2017  Free Software Foundation, Inc.</P>
+<P>Copyright &copy; 1989-2019  Free Software Foundation, Inc.</P>
 
 <P>GNU Hyperbole is available for use, modification, and distribution under
 the terms of the GNU General Public License (GPL) Version 3 or later,
@@ -151,8 +151,8 @@ WITHOUT ANY WARRANTY, without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
-Edition 7.0.2a
-Printed December 12, 2017.
+Edition 7.0.2b
+Printed February 2, 2019.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -176,11 +176,11 @@ Printed December 12, 2017.
 
 @center The Everyday Hypertextual Information Manager
 
address@hidden Edition 7.0.2a, December 12, 2017.
address@hidden Edition 7.0.2b, February 2, 2019.
 
 @sp 2
 @noindent
-Copyright @copyright{} 1989-2017  Free Software Foundation, Inc.
+Copyright @copyright{} 1989-2019  Free Software Foundation, Inc.
 
 GNU Hyperbole is available for use, modification, and distribution
 under the terms of the GNU General Public License (GPL) Version 3 or
@@ -462,7 +462,7 @@ Smart Keyboard Keys
 @chapter Introduction
 
 This edition of the GNU Hyperbole Manual is for use with any version
-7.0.2a or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.2b or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
 or higher.  It will trigger an error if your Emacs is older.
 
 This chapter summarizes the structure of the rest of the manual,
@@ -1468,9 +1468,15 @@ a key: @code{(hkey-ace-window-setup)}.
 @cindex link creation from keyboard
 @cindex keyboard link creation
 @kindex M-o i <window-id>
address@hidden M-o r <window-id>
address@hidden M-o m <window-id>
 @kindex M-o t <window-id>
 @cindex drag item
address@hidden replace window buffer
address@hidden swap window buffers
 @cindex throw item
address@hidden buffer replace
address@hidden buffers swap
 @cindex item drag
 @cindex item throw
 After setup, the leftmost character or two of each window's modeline will show
@@ -1480,7 +1486,11 @@ is on an item you want displayed in another window, use 
@bkbd{M-o i
 this command to create explicit button links to other window buffers when in 
an editable
 buffer rather than on an item.  If you want to display multiple items in 
different
 windows, instead use the @bkbd{M-o t <id-of-window-to-display-item-in>} key 
sequence to
address@hidden the item to the window.
address@hidden the item to the window.  To @emph{replace}
+the selected window's buffer with that of another window, use
address@hidden r <id-of-window-displaying-desired-buffer>}.  To instead
address@hidden the selected window's buffer with that of another window,
+use @bkbd{M-o m <id-of-window-to-swap-with>}.
 
 @c -------
 
@@ -4588,7 +4598,7 @@ The e-mail address of the person who created this cell.
 @item create-time
 The time at which the cell was created.  This is stored in a form that
 allows for easy data comparisons but is displayed in a human readable
-format, such as @samp{Jan 28 18:27:59 CST 2017}.
+format, such as @samp{Jan 28 18:27:59 CST 2019}.
 @end table
 
 @kindex koutliner, C-c C-i
@@ -4699,7 +4709,7 @@ automatically added by HyRolo whenever a new record is 
added.
 ==================================================================
 *   Smith, John       <js@@hiho.com> W708-555-2001  F708-321-1492
         Chief Ether Maintainer, HiHo Industries
-        05/24/2017
+        05/24/2019
 @end group
 @end example
 
diff --git a/man/version.texi b/man/version.texi
index 381bfab..9b3f5b2 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
address@hidden UPDATED December 12, 2017
address@hidden UPDATED-MONTH Dec 2017
address@hidden EDITION 7.0.2a
address@hidden VERSION 7.0.2a
address@hidden UPDATED February 2, 2019
address@hidden UPDATED-MONTH Feb 2019
address@hidden EDITION 7.0.2b
address@hidden VERSION 7.0.2b



reply via email to

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