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

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

[elpa] scratch/hyperbole-lexbind 98a5ecb 3/3: Merge from hyperbole/maste


From: Stefan Monnier
Subject: [elpa] scratch/hyperbole-lexbind 98a5ecb 3/3: Merge from hyperbole/master
Date: Tue, 12 Dec 2017 23:35:30 -0500 (EST)

branch: scratch/hyperbole-lexbind
commit 98a5ecb3bf80f2b53523c769459d1a1a49491125
Merge: 78848ae 751121f
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    Merge from hyperbole/master
---
 Changes            | 138 ++++++++++++++++
 DEMO               |  11 +-
 HY-ABOUT           |   2 +-
 HY-COPY            |   2 +-
 HY-WHY.kotl        |   4 +-
 MANIFEST           |   1 -
 Makefile           |   6 +-
 README.md          |   4 +-
 README.md.html     |   2 +-
 hibtypes.el        | 117 ++++++++++---
 hload-path.el      |   3 +-
 hlvar.el           | 132 ---------------
 hmouse-drv.el      | 469 ++++++++++++++++++++++++++++++++++++++++-------------
 hmouse-sh.el       |  15 +-
 hmouse-tag.el      |  28 +++-
 hsettings.el       |  13 +-
 hui-menu.el        |   2 +-
 hui-mini.el        |   4 +-
 hui-mouse.el       |  49 +++++-
 hui-treemacs.el    | 153 ++---------------
 hui-window.el      |  12 +-
 hversion.el        |   2 +-
 hycontrol.el       |  30 +++-
 hypb.el            |  26 ++-
 hyperbole-pkg.el   |   2 +-
 hyperbole.el       |   8 +-
 hyrolo-menu.el     |   4 +-
 hywconfig.el       |   6 +-
 kotl/kmenu.el      |   4 +-
 kotl/kotl-mode.el  |  19 ++-
 man/hyperbole.html | 186 +++++++++++++--------
 man/hyperbole.info | Bin 487960 -> 489710 bytes
 man/hyperbole.pdf  | Bin 1260426 -> 1263857 bytes
 man/hyperbole.texi | 123 ++++++++------
 man/version.texi   |   8 +-
 35 files changed, 978 insertions(+), 607 deletions(-)

diff --git a/Changes b/Changes
index b2908f5..c3e5d81 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,141 @@
+2017-12-12  Bob Weiner  <address@hidden>
+
+* hversion.el: Pushed 7.0.2a test update.
+
+* hmouse-drv.el (hkey-throw): Modified to show a message if the frame of 
release is
+    different than the frame of depress, since this frame is typically hidden 
by
+    the depress frame.
+
+* hmouse-tag.el (smart-lisp-mode-p): Added change-log-mode since such files 
often contain
+    Lisp references.
+
+* hypb.el (hypb:select-window-frame): Added and used in hmouse-item-to-window.
+          (hypb:save-selected-window-and-input-focus): Added and used in 
hkey-throw.
+
+* kotl/kotl-mode.el (kotl-mode): Fixed setq close paren error that skipped 4 
settings of
+    paragraph-start, selective-display, selective-display-ellipses and 
track-eol.
+
+2017-12-10  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Menu Commands, HyRolo Menu): Documented how to invoke 
the Koutliner and
+    HyRolo popup menus in Emacs.
+
+* hyrolo-menu.el (hyrolo-menubar-menu):
+  kotl/kmenu.el (kotl-menubar-menu): For GNU Emacs, use standard binding of 
C-mouse-3 to popup
+    mode-specific menu instead of mouse-3.
+
+2017-12-08  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-ace-window-setup): Autoloaded since might be added to an 
init file
+    before Hyperbole is loaded.
+
+* hycontrol.el (hycontrol-quit-frames-mode, hycontrol-quit-windows-mode): 
Added conditionals
+    to allow for quitting from help buffers with {q} while remaining in 
HyControl, e.g. if
+    display a key binding help window.  Added {Q} binding to unconditionally 
quit from HyControl.
+
+* hmouse-drv.el (hkey-buffer-move): Added directional movement commands that 
call this function.
+    hkey-buffer-move-left, hkey-buffer-move-right, hkey-buffer-move-down and 
hkey-buffer-move-up.
+
+2017-12-07  Bob Weiner  <address@hidden>
+
+* hload-path.el (hyperb:emacs-p): Removed Emacs19 test.
+                (hyperb:kotl-p): Removed since all versions of Emacs in use 
now support the Koutliner.
+
+* hlvar.el - Removed this since colons are now handled by Emacs 26 in local 
variable names.
+
+* 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.
+    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
+       clicks.
+
+2017-12-03  Bob Weiner  <address@hidden>
+
+* hui-treemacs.el: Removed replacements for treemacs functions; as of Treemacs 
1.14, all needed changes are
+    included.
+
+2017-12-01  Bob Weiner  <address@hidden>
+
+* 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
+    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
+    with the mouse twice on two different windows to select the windows using 
hmouse-choose-windows.
+                (hkey-drag, hkey-drag-stay, hkey-drag-to, hkey-replace, 
hkey-swap, hkey-throw): Added and
+    made interactive with ace-window window parameter selection.
+                (hkey-buffer-to): Added to copy a buffer from-window 
to-window, using ace-window
+    to select the windows.
+                (hkey-swap-buffers): Added to swap buffers between from-window 
and to-window, using ace-window
+    to select the windows.
+
+* hui-treemacs.el (smart-treemacs): Added standard Hyperbole end-of-line 
scrolling support.
+
+* hui-mouse.el (smart-company-to-definition, smart-company-help): Added to 
support company completion mode.
+  hmouse-sh.el (hmouse-shifted-setup, hmouse-unshifted-setup): Added Action 
and Assist Key local bindings
+    for company-mode for GNU Emacs.
+
+2017-11-30  Bob Weiner  <address@hidden>
+
+* man/hyperbole.texi (Glossary): Added Jedi item with link to its home page.  
Added link to the OO-Browser
+    home page in its item.
+
+* hmouse-tag.el (smart-python-jedi-to-definition-p): Added and called in 
smart-python to use the Jedi
+    package when its server is running.  It jumps to the proper definition of 
multi-level module
+    references definitions, e.g. a.b.c.  Also fixed error where the default 
action was not jumping to
+    a tag definition at point because it was testing that the identifier 
parameter was non-nil (no
+    identifier is sent in such usage).
+
+* hui-mouse.el (hkey-alist): Moved smart-python prior to Imenu for more 
advanced definition lookups
+
+* hyperbole.el (temp-buffer-show-hook, temp-buffer-show-function): Added 
Hyperbole hkey-help-show
+    function rather than replacing any existing hook values.
+
+2017-11-29  Bob Weiner  <address@hidden>
+
+* hibtypes.el (markdown-internal-link): Rewrote (and added support functions) 
to handle markdown
+    infile links properly.  Previous use of markdown-do was removed because 
that now does things
+    other than following links.
+
+2017-11-28  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-help-show): Added conditionals to support org-mode 
org-goto *Org Help* buffer
+    properly.
+
+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.
+
+* hui-window.el (hmouse-kill-and-yank-region, hmouse-yank-region): Added 
select-frame-set-input-focus
+    in case released in a different frame.
+
+2017-11-26  Bob Weiner  <address@hidden>
+
+* hmouse-drv.el (hkey-throw): Restored input focus to start-win rather than 
just making it
+    the selected window.
+                (hkey-drag-to): Fixed predicate test to call hmouse-at-item-p 
instead of
+    hmouse-drag-item-to-display and set input focus to release-window if 
dragging an item.
+
+* hmouse-drv.el (hkey-ace-window-setup): Added deletion of i and t command 
bindings before
+    adding them to aw-dispatch-alist.
+                (hkey-throw): Fixed split line code typo here.
+  hycontrol.el (hycontrol-frame-offset): Fixed typo.
+
+==============================================================================
+V7.0.3 changes ^^^^:
+==============================================================================
+
 2017-11-23  Bob Weiner  <address@hidden>
 
 * hversion.el: Released 7.0.2.
diff --git a/DEMO b/DEMO
index d39f2ab..a8e650c 100644
--- a/DEMO
+++ b/DEMO
@@ -214,12 +214,13 @@ Hyperbole minibuffer menu item, Screen/WindowsControl 
{C-h h s w}, will do
 the same thing.
 
 Once in HyControl, your minibuffer window at the bottom of the selected frame
+
 will display a summary of keys you may use to adjust your windows until you
-press {q} to quit from HyControl.  If you don't see it, press {?}, to turn on
-this help display.  The key, {t}, will always switch you between controlling
-frames and windows, the minor modes of HyControl, with a modeline indicator
-of either "HyFrm" or HyWin" depending on which type of control is active.
-See "(hyperbole)HyControl" for full usage information.
+press {q} or {Q} to quit from HyControl.  If you don't see it, press {?}, to
+turn on this help display.  The key, {t}, will always switch you between
+controlling frames and windows, the minor modes of HyControl, with a modeline
+indicator of either "HyFrm" or HyWin" depending on which type of control is
+active.  See "(hyperbole)HyControl" for full usage information.
 
 ** Frame Commands
 
diff --git a/HY-ABOUT b/HY-ABOUT
index 108ec33..0bf1893 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.2
+                            Version 7.0.2a
 
 GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is
 an efficient and programmable hypertextual information management
diff --git a/HY-COPY b/HY-COPY
index e74946d..91c7c86 100644
--- a/HY-COPY
+++ b/HY-COPY
@@ -4,7 +4,7 @@
 
 The following copyright applies to the GNU Hyperbole software.
 
-Copyright (C) 1989-2016  Free Software Foundation, Inc.
+Copyright (C) 1989-2017  Free Software Foundation, Inc.
 
 Originally developed with support from Motorola Inc., who donated all
 such work to the Free Software Foundation, Inc. in the 1990s.
diff --git a/HY-WHY.kotl b/HY-WHY.kotl
index 5bbfba2..d363ad5 100644
--- a/HY-WHY.kotl
+++ b/HY-WHY.kotl
@@ -51,7 +51,7 @@
       presses.  These selectable things include: delimited pairs of
       (), @address@hidden, <>, [] and quote marks, source code functions, 
source
       code comments and matching tag pairs in HTML and SGML modes.
-      See "DEMO#Thing Selection".     
+      See "DEMO#Thing Selection".    
 
   10. Use the fantastic, auto-numbered Koutliner with per-item links
       and rapidly changeable views.  See "DEMO#Koutliner".
@@ -115,7 +115,7 @@ alpha ;; label-type
 
 ;; depth-first kcell attributes
 [[0
-  (creator "address@hidden" create-time "20171122:02:34:20" id-counter 37 file 
"/Users/bk/Dropbox/emacs/hyperbole/HY-WHY.kotl")]
+  (creator "address@hidden" create-time "20171212:19:44:57" id-counter 37 file 
"/Users/bk/Dropbox/emacs/hyperbole/HY-WHY.kotl")]
  [1
   (creator "address@hidden" create-time "20160524:15:04:17" no-fill t)]
  [17
diff --git a/MANIFEST b/MANIFEST
index 05c5dd2..18ed3aa 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -85,7 +85,6 @@ hib-kbd.el          - Implicit button type for key sequences 
delimited with {}
 hib-social.el       - Implicit button type for social media/git hashtag and 
username references
 hinit.el            - Standard initializations for GNU Hyperbole
 hload-path.el       - GNU Hyperbole load-path setup
-hlvar.el            - GNU Hyperbole variables in local variable lists
 hsettings.el        - Hyperbole settings which may require customization
 hvar.el             - Variable manipulation routines for GNU Hyperbole
 hyperbole-banner.png- Graphic of GNU Hyperbole for display with About Hyperbole
diff --git a/Makefile b/Makefile
index 20a0d30..f42df35 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.2
+HYPB_VERSION = 7.0.2a
 
 # Emacs executable used to byte-compile .el files into .elc's.
 # Possibilities include: emacs, infodock, xemacs, etc.
@@ -146,7 +146,7 @@ EL_SRC = hui-em-but.el hui-xe-but.el
 EL_COMPILE = hact.el hactypes.el hargs.el hbdata.el hbmap.el hbut.el \
             hgnus.el hhist.el hib-debbugs.el hib-doc-id.el hib-kbd.el \
             hib-social.el hibtypes.el \
-            hinit.el hload-path.el hlvar.el hmail.el hmh.el hmoccur.el 
hmouse-info.el \
+            hinit.el hload-path.el hmail.el hmh.el hmoccur.el hmouse-info.el \
             hmouse-drv.el hmouse-key.el hmouse-mod.el hmouse-sh.el 
hmouse-tag.el \
             hpath.el hrmail.el hsettings.el hsmail.el hsys-org.el hsys-www.el 
htz.el \
             hycontrol.el hui-jmenu.el hui-menu.el hui-mini.el hui-mouse.el 
hui-select.el \
@@ -161,7 +161,7 @@ EL_KOTL = kotl/kexport.el kotl/kfile.el kotl/kfill.el 
kotl/kimport.el kotl/klabe
 ELC_COMPILE =  hactypes.elc hibtypes.elc hib-debbugs.elc hib-doc-id.elc 
hib-kbd.elc \
             hib-social.elc hact.elc \
             hargs.elc hbdata.elc hbmap.elc hbut.elc hgnus.elc hhist.elc \
-            hinit.elc hload-path.elc hlvar.elc hmail.elc hmh.elc hmoccur.elc 
hmouse-info.elc \
+            hinit.elc hload-path.elc hmail.elc hmh.elc hmoccur.elc 
hmouse-info.elc \
             hmouse-drv.elc hmouse-key.elc hmouse-mod.elc hmouse-sh.elc 
hmouse-tag.elc \
             hpath.elc hrmail.elc hsettings.elc hsmail.elc hsys-org.elc 
hsys-www.elc htz.elc \
             hycontrol.elc hui-jmenu.elc hui-menu.elc hui-mini.elc 
hui-mouse.elc hui-select.elc \
diff --git a/README.md b/README.md
index e8ff739..21373a9 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
-# GNU Hyperbole 7.0.2 - The Everyday Hypertextual Information Manager
+# GNU Hyperbole 7.0.2a - The Everyday Hypertextual Information Manager
 
 <!-- START doctoc generated TOC -->
 **Table of Contents**
 
 - [Summary](#summary)
 - [Mailing Lists](#mailing-lists)
-- [Ftp and Git Repository Downloads](#ftp-and-git)
+- [Ftp and Git Repository Downloads](#ftp-and-git-repository-downloads)
 - [Installation](#installation)
 - [Invocation](#invocation)
 - [Hyperbole Components](#hyperbole-components)
diff --git a/README.md.html b/README.md.html
index 43867b3..69f0f2b 100644
--- a/README.md.html
+++ b/README.md.html
@@ -1,5 +1,5 @@
 <h1>
-<a 
id="user-content-gnu-hyperbole-702---the-everyday-hypertextual-information-manager"
 class="anchor" 
href="#gnu-hyperbole-702---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-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>
 
 <p><strong>Table of Contents</strong></p>
 <ul>
diff --git a/hibtypes.el b/hibtypes.el
index 631a814..4e5b07f 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -302,6 +302,45 @@ must have an attached file."
 ;;; Displays in-file Markdown link referents.
 ;;; ========================================================================
 
+(defun markdown-follow-link-p ()
+    "Jumps between reference links and definitions; between footnote markers 
and footnote text.
+Returns t if jumps and nil otherwise."
+    (cond
+     ;; Footnote definition
+     ((markdown-footnote-text-positions)
+      (markdown-footnote-return)
+      t)
+     ;; Footnote marker
+     ((markdown-footnote-marker-positions)
+      (markdown-footnote-goto-text)
+      t)
+     ;; Reference link
+     ((thing-at-point-looking-at markdown-regex-link-reference)
+      (markdown-reference-goto-definition)
+      t)
+     ;; Reference definition
+     ((thing-at-point-looking-at markdown-regex-reference-definition)
+      (markdown-reference-goto-link (match-string-no-properties 2))
+      t)))
+
+(defun markdown-follow-inline-link-p (opoint)
+  "Test to see if on an inline link, jump to its referent if it is absolute 
(not relative within the file), otherwise return to OPOINT."
+  (skip-chars-forward "^\]\[()")
+  (if (looking-at "\][\[()]")
+      (progn (if (looking-at "\(")
+                (skip-chars-backward "^\]\[()")
+              (skip-chars-forward "\]\[\("))
+            ;; Leave point on the link even if not activated
+            ;; here, so that code elsewhere activates it.
+            (if (and (markdown-link-p)
+                     (not (or (hpath:www-at-p) (hpath:at-p))))
+                ;; In-file referents will be handled later by the
+                ;; pathname implicit type, not here.
+                (progn (hpath:display-buffer (current-buffer))
+                       (hact 'markdown-follow-link-at-point))))
+    (goto-char opoint)
+    nil))
+
 (defib markdown-internal-link ()
   "Displays any in-file Markdown link referent.  Pathnames and urls are 
handled elsewhere."
   (when (and (eq major-mode 'markdown-mode)
@@ -310,26 +349,17 @@ must have an attached file."
          npoint)
       (cond ((markdown-link-p) 
             (condition-case ()
-                ;; Follows a reference link to its referent.
-                (progn (markdown-do)
-                       (when (/= opoint (point))
-                         (setq npoint (point))
-                         (goto-char opoint)
-                         (hact 'link-to-file buffer-file-name npoint)))
+                ;; Follows a reference link or footnote to its referent.
+                (if (markdown-follow-link-p)
+                    (when (/= opoint (point))
+                      (setq npoint (point))
+                      (goto-char opoint)
+                      (hact 'link-to-file buffer-file-name npoint))
+                  ;; Follows an infile link.
+                  (markdown-follow-inline-link-p opoint))
               ;; May be on the name of an inline link, so move to the
               ;; link itself and follow that.
-              (error 
-               (skip-chars-forward "^\]\[()")
-               (if (looking-at "\][\[\(]")
-                   (progn (skip-chars-forward "\]\[\(")
-                          ;; Leave point on the link even if not activated
-                          ;; here, so that code elsewhere activates it.
-                          (if (and (markdown-link-p)
-                                   (not (or (hpath:www-at-p) (hpath:at-p))))
-                              (progn (hpath:display-buffer (current-buffer))
-                                     (hact 'markdown-follow-link-at-point))))
-                 (goto-char opoint)
-                 nil))))
+              (error (markdown-follow-inline-link-p opoint))))
            ((markdown-wiki-link-p)
             (hpath:display-buffer (current-buffer))
             (hact 'markdown-follow-wiki-link-at-point))))))
@@ -606,12 +636,56 @@ Requires the Emacs builtin Tramp library for ftp file 
retrievals."
 
 ;;; ========================================================================
 ;;; Jumps to source line associated with grep or compilation error messages.
+;;; Also supports ripgrep (rg command).
 ;;; With credit to Michael Lipp and Mike Williams for the idea.
 ;;; ========================================================================
 
+(defib ripgrep-msg ()
+  "Jumps to line associated with a ripgrep (rg) line numbered msg.
+Ripgrep outputs each pathname once followed by all matching lines in that 
pathname.
+Messages are recognized in any buffer (other than a helm completion
+buffer)."
+  ;; Locate and parse ripgrep messages found in any buffer other than a
+  ;; helm completion buffer.
+  ;;
+  ;; Sample ripgrep command output:
+  ;;
+  ;; bash-3.2$ rg -nA2 hkey-throw *.el
+  ;; hmouse-drv.el
+  ;; 405:(defun hkey-throw (release-window)
+  ;; 406-  "Throw either a displayable item at point or the current buffer to 
RELEASE-WINDOW.
+  ;; 407-The selected window does not change."
+  ;; --
+  ;; 428:    (hkey-throw to-window)))
+  ;; 429-
+  ;; 430-(defun hmouse-click-to-drag ()
+  ;;
+  ;; Use `rg -n --no-heading' for pathname on each line.
+  (unless (eq major-mode 'helm-major-mode)
+    (save-excursion
+      (beginning-of-line)
+      (when (looking-at "\\([1-9][0-9]*\\)[-:]")
+       ;; Ripgrep matches and context lines (-A<num> option)
+       (let ((line-num (match-string-no-properties 1)))
+         (while (and (= (forward-line -1) 0)
+                     (looking-at "[1-9][0-9]*[-:]\\|--$")))
+         (unless (looking-at "[1-9][0-9]*[-:]\\|--$")
+           (let* ((file (buffer-substring-no-properties (point-at-bol) 
(point-at-eol)))
+                  (but-label (concat file ":" line-num))
+                  (source-loc (if (file-name-absolute-p file) nil
+                                (hbut:key-src t))))
+             (if (stringp source-loc)
+                 (setq file (expand-file-name file (file-name-directory 
source-loc))))
+             (when (file-readable-p file)
+               (setq line-num (string-to-number line-num))
+               (ibut:label-set but-label)
+               (hact 'link-to-file-line file line-num)))))))))
+
 (defib grep-msg ()
-  "Jumps to line associated with grep or compilation error msgs.
-Messages are recognized in any buffer."
+  "Jumps to line associated with line numbered grep or compilation error msgs.
+Messages are recognized in any buffer (other than a helm completion
+buffer) except for grep -A<num> context lines which are matched only
+in grep and shell buffers."
   ;; Locate and parse grep messages found in any buffer other than a
   ;; helm completion buffer.
   (unless (eq major-mode 'helm-major-mode)
@@ -648,8 +722,7 @@ Messages are recognized in any buffer."
                 (source-loc (if (file-name-absolute-p file) nil
                               (hbut:key-src t))))
            (if (stringp source-loc)
-               (setq file (expand-file-name
-                           file (file-name-directory source-loc))))
+               (setq file (expand-file-name file (file-name-directory 
source-loc))))
            (setq line-num (string-to-number line-num))
            (ibut:label-set but-label)
            (hact 'link-to-file-line file line-num))))))
diff --git a/hload-path.el b/hload-path.el
index 1f185ab..77f2214 100644
--- a/hload-path.el
+++ b/hload-path.el
@@ -41,8 +41,7 @@ It must end with a directory separator character.")
 ;;; Koutliner mode and file suffix importation settings
 ;;; ************************************************************************
 
-;; If the Koutliner is supported by this emacs version, perform
-;; initializations.
+;; Perform Koutliner initializations.
 
 (add-to-list 'load-path (expand-file-name "kotl/" hyperb:dir))
 ;; Invoke kotl-mode for files ending in ".kotl".  Also
diff --git a/hlvar.el b/hlvar.el
deleted file mode 100644
index 809519a..0000000
--- a/hlvar.el
+++ /dev/null
@@ -1,132 +0,0 @@
-;;; hlvar.el --- GNU Hyperbole variables in local variable lists
-;;
-;; Author:       Bob Weiner
-;;
-;; Orig-Date:     4-Nov-91 at 00:26:06
-;;
-;; Copyright (C) 1995-2017  Free Software Foundation, Inc.
-;; See the "HY-COPY" file for license information.
-;;
-;; This file is part of GNU Hyperbole.
-;; This file is a slight variant of that found in "files.el" from GNU Emacs.
-;;
-;;; Commentary:
-;;
-;;   Hyperbole uses the colon character extensively in its variable names.
-;;   The standard GNU Emacs syntax for local variable setting does not allow
-;;   the use of this character, even though it is a valid symbol name
-;;   character.  The code here is slightly modified to support local setting of
-;;   variables with colons in their names.
-;;
-;;   Where the standard code allows: var:val
-;    This code requires one use:     var: val  (where var may include colons)
-;;
-;;   So functionality is gained and none is lost, but a slight incompatibility
-;;   in protocol is introduced.
-
-;;; Code:
-;;; ************************************************************************
-;;; Public functions
-;;; ************************************************************************
-
-(defun hack-local-variables (&optional force)
-  ;; FIXME: *Major* compatibility problem!  Have you submitted a feature
-  ;; request via `report-emacs-bug'?  --Stef
-  "Parse, and bind or evaluate as appropriate, any local variables
-for current buffer."
-  (if (fboundp 'hack-local-variables-prop-line)
-      (hack-local-variables-prop-line))
-  ;; Look for "Local variables:" line in last page.
-  (save-excursion
-    (goto-char (point-max))
-    (search-backward "\n\^L" (max (- (point-max) 3000) (point-min)) 'move)
-    (let (local-start)
-      (if (let ((case-fold-search t))
-           (and (search-forward "Local Variables:" nil t)
-                (setq local-start (match-beginning 0))
-                (or (not (inhibit-local-variables-p))
-                    force
-                    (save-window-excursion
-                      (switch-to-buffer (current-buffer))
-                      (save-excursion
-                        (beginning-of-line)
-                        (set-window-start (selected-window) (point)))
-                      (y-or-n-p
-                       (format "Set local variables as specified at end of %s? 
"
-                               (file-name-nondirectory
-                                buffer-file-name)))))))
-         (let ((continue t)
-               prefix prefixlen suffix beg
-               (enable-local-eval
-                (if (boundp 'enable-local-eval) enable-local-eval)))
-           ;; The prefix is what comes before "local variables:" in its line.
-           ;; The suffix is what comes after "local variables:" in its line.
-           (skip-chars-forward " \t")
-           (or (eolp)
-               (setq suffix (buffer-substring (point)
-                                              (progn (end-of-line) (point)))))
-           (goto-char local-start)
-           (or (bolp)
-               (setq prefix
-                     (buffer-substring (point)
-                                       (progn (beginning-of-line) (point)))))
-
-           (if prefix (setq prefixlen (length prefix)
-                            prefix (regexp-quote prefix)))
-           (if suffix (setq suffix (concat (regexp-quote suffix) "$")))
-           (while continue
-             ;; Look at next local variable spec.
-             (if selective-display (re-search-forward "[\n\r]")
-               (forward-line 1))
-             ;; Skip the prefix, if any.
-             (if prefix
-                 (if (looking-at prefix)
-                     (forward-char prefixlen)
-                   (error "Local variables entry is missing the prefix")))
-             ;; Find the variable name; strip whitespace.
-             (skip-chars-forward " \t")
-             (setq beg (point))
-             ;;
-             ;; Bob Weiner - changed here to allow colons in var names.
-             ;;
-             (skip-chars-forward "^ \t\n\r")
-             (skip-chars-backward ":")
-             (or (looking-at "[ \t]*:")
-                 (error "(hack-local-variables): Missing colon in local 
variables entry"))
-             ;;
-             ;; Bob Weiner - end changes.
-             ;;
-             (let* ((str (buffer-substring beg (point)))
-                    (var (read str))
-                    val)
-               ;; Setting variable named "end" means end of list.
-               (if (string-equal (downcase str) "end")
-                   (setq continue nil)
-                 ;; Otherwise read the variable value.
-                 (skip-chars-forward "^:")
-                 (forward-char 1)
-                 (setq val (read (current-buffer)))
-                 (skip-chars-backward "\n\r")
-                 (skip-chars-forward " \t")
-                 (or (if suffix (looking-at suffix) (eolp))
-                     (error "Local variables entry is terminated incorrectly"))
-                 ;; Set the variable.  "Variables" mode and eval are funny.
-                 (if (fboundp 'hack-one-local-variable)
-                     (hack-one-local-variable var val)
-                   (cond ((eq var 'mode)
-                          (funcall (intern (concat (downcase (symbol-name val))
-                                                   "-mode"))))
-                         ((eq var 'eval)
-                          (if (string-equal (user-login-name) "root")
-                              (message
-                               "Ignoring `eval:' in file's local variables")
-                            (eval val)))
-                         (t (make-local-variable var)
-                            (set var val))))))))))
-    (run-hooks 'hack-local-variables-hook)))
-
-
-
-(provide 'hlvar)
-
-;;; hlvar.el ends here
diff --git a/hmouse-drv.el b/hmouse-drv.el
index 318b62e..792f145 100644
--- a/hmouse-drv.el
+++ b/hmouse-drv.el
@@ -16,10 +16,18 @@
 ;;; Other required Elisp libraries
 ;;; ************************************************************************
 
-(eval-when-compile 
-  (defvar hmouse-alist nil)
-  (require 'hui-window)
-  (makunbound 'hmouse-alist)) ;; for `hmouse-drag-item-to-display'
+;; Keep this here at the top to prevent recursive reloads from
+;; Hyperbole autoload commands.
+(provide 'hmouse-drv)
+
+(if (and (boundp 'hmouse-alist) hmouse-alist)
+    (require 'hui-window)
+  ;; Force re-definition of hmouse-alist.
+  (makunbound 'hmouse-alist)
+  ;; Define hmouse-alist.
+  (load "hui-mouse")
+  ;; Add drag actions to hmouse-alist.
+  (load "hui-window"))
 (require 'hypb)
 
 ;; Quiet byte compiler warnings for these free variables.
@@ -194,7 +202,7 @@ EVENT will be passed to 'hmouse-function'."
   (apply #'assist-mouse-key (hmouse-key-release-args-emacs event)))
 
 (defun action-mouse-key (&rest args)
-  "Set point to the current mouse cursor position and execute `action-key'.
+  "Set point to the current mouse or keyboard cursor position and execute 
`action-key'.
 Any ARGS will be passed to `hmouse-function'."
   (interactive)
   ;; Make this a no-op if some local mouse key binding overrode the global
@@ -218,7 +226,7 @@ Any ARGS will be passed to `hmouse-function'."
            hkey-value nil))))
 
 (defun assist-mouse-key (&rest args)
-  "Set point to the current mouse cursor position and execute `assist-key'.
+  "Set point to the current mouse or keyboard cursor position and execute 
`assist-key'.
 Any ARGS will be passed to `hmouse-function'."
   (interactive)
   ;; Make this a no-op if some local mouse key binding overrode the global
@@ -313,112 +321,344 @@ bound to a valid function."
     (unless (listp arg) (setq arg nil)))
   (if arg (assist-key) (action-key)))
 
+
 ;;; ************************************************************************
-;;; Public support functions
+;;; Hyperbole ace-window selection functions
+;;; https://github.com/abo-abo/ace-window
 ;;; ************************************************************************
 
-(defun hkey-debug ()
-  (message (format "(HyDebug) %sContext: %s; %s: %s; Buf: %s; Mode: %s; 
MinibufDepth: %s"
-                  (cond ((eq pred-value 'hbut:current)
-                         (format "ButType: %s; ButLabel: %s; "
-                                 (hattr:get  'hbut:current 'categ)
-                                 (hypb:format-quote (hbut:label 
'hbut:current))))
-                        ((functionp pred-value)
-                         (format "Selection Func: %s; " pred-value))
-                        (t ""))
-                  pred
-                  (if assist-flag "Assist" "Action")
-                  (hypb:format-quote (format "%s" hkey-action))
-                  (current-buffer) major-mode (minibuffer-depth))))
+;; A call to (hkey-ace-window-setup) or (require 'ace-window) must be
+;; made prior to calling any other function in this section since
+;; Hyperbole does not require ace-window itself.
+
+;;;###autoload
+(defun hkey-ace-window-setup (&optional key)
+  "Bind optional keyboard KEY and setup display of items in windows specified 
by short ids.
+
+The ace-window package, (see 
\"https://elpa.gnu.org/packages/ace-window.html\";),
+assigns short ids to each Emacs window and lets you jump to or
+operate upon a specific window by giving its letter.  Hyperbole
+can insert an operation into ace-window that allows you to
+display items such as dired or buffer menu items in a specific
+window.
+
+To enable this feature, in your Emacs initialization file after
+Hyperbole is initialized, if you already have a key bound for
+ace-window, then call:
+
+ (hkey-ace-window-setup)
+
+otherwise, choose a binding like {M-o} and send it to the same
+function to bind it:
+
+ (hkey-ace-window-setup \"\M-o\")
+
+Then whenever point is on an item you want displayed in another
+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))
+  ;; New ace-window frames (window id = z) inherit the size of the
+  ;; prior selected frame; same as HyWindow.
+  (setq aw-frame-size '(0 . 0)
+       aw-dispatch-alist (delq (assq ?t aw-dispatch-alist)
+                               (delq (assq ?r aw-dispatch-alist)
+                                     (delq (assq ?i aw-dispatch-alist) 
aw-dispatch-alist))))
+  (push '(?i hkey-drag-to "Hyperbole: Drag To") aw-dispatch-alist)
+  ;; 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.
+  "Emulate Smart Mouse Key drag from 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
 Action Key.
 
-Only works when running under a window system, not from a dumb terminal."
+Works only when running under a window system, not from a dumb terminal."
   ;; Cancel any partial drag that may have been recorded.
-  (if current-prefix-arg
-      (setq assist-key-depressed-flag nil)
-    (setq action-key-depressed-flag nil))
-  (hkey-operate current-prefix-arg)
-  (when (window-live-p release-window)
-    (select-window release-window))
-  (hkey-operate current-prefix-arg))
+  (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.
+      (progn (if current-prefix-arg
+                (setq assist-key-depressed-flag nil)
+              (setq action-key-depressed-flag nil))
+            (hkey-operate current-prefix-arg)
+            (when (window-live-p release-window)
+              (hypb:select-window-frame release-window))
+            (hkey-operate current-prefix-arg))
+    (error (when (eq start-window release-window)
+            (hmouse-drag-item-to-display)))))
+
+;;;###autoload
+(defun hkey-drag-stay (release-window)
+  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW, 
interactively chosen via ace-window.
+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
+Action Key.
+
+Works only when running under a window system, not from a dumb terminal."
+  (let ((start-window (selected-window)))
+    (unwind-protect
+       (hkey-drag release-window)
+      ;; Leave start-window selected
+      (when (window-live-p start-window)
+       (hypb:select-window-frame start-window)))))
 
 ;;;###autoload
 (defun hkey-drag-to (release-window)
-  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW.
+  "Emulate Smart Mouse Key drag from 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.
 
 Optional prefix ARG non-nil means emulate Assist Key rather than the
 Action Key.
 
-Only works when running under a window system, not from a dumb terminal."
-  (if (and (hmouse-drag-item-to-display) (window-live-p release-window))
+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
+            ;; Leave release-window selected
             (when (window-live-p release-window)
-              (select-window release-window)))
+              (hypb:select-window-frame release-window)))
     ;; Leave hkey-drag to choose selected window
     (hkey-drag release-window)))
 
 ;;;###autoload
+(defun hkey-replace (release-window)
+  "Grab the buffer from RELEASE-WINDOW, interactively chosen via ace-window, 
and place it into the current window.
+The selected window does not change."
+  (interactive
+   (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?r 
aw-dispatch-alist)))))
+          (aw-select mode-line-text))))
+  (set-window-buffer (selected-window) (window-buffer release-window)))
+
+;;;###autoload
+(defun hkey-swap (to-window)
+  "Swap the buffer from the selected window with that of TO-WINDOW, 
interactively chosen via ace-window.
+Leave TO-WINDOW as the selected window."
+  (interactive
+   (list (let ((mode-line-text (concat " Ace - Hyperbole: " (nth 2 (assq ?m 
aw-dispatch-alist)))))
+          (aw-select mode-line-text))))
+  (hkey-swap-buffers (selected-window) to-window))
+
+;;;###autoload
 (defun hkey-throw (release-window)
-  "Emulate Smart Mouse Key drag from selected window to RELEASE-WINDOW.
-After the drag, the selected window remains the same as it was before
-the drag.
+  "Throw either a displayable item at point or the current buffer to 
RELEASE-WINDOW.
+The selected window does not change."
+  (interactive
+   (list (let ((mode-line-text (concat " Ace - " (nth 2 (assq ?t 
aw-dispatch-alist)))))
+          (aw-select mode-line-text))))
+  (let ((depress-frame (selected-frame)))
+    (if (cadr (assq major-mode hmouse-drag-item-mode-forms))
+       ;; On an item to throw
+       (let ((action-key-depress-window (selected-window))
+             (action-key-release-window release-window)
+             (action-key-depress-args))
+         (hypb:save-selected-window-and-input-focus
+          (hmouse-item-to-window)
+          (unless (eq depress-frame (window-frame release-window))
+            (message "Buffer or item thrown to frame under this one")
+            ;; Show the frame thrown to before it is covered when
+            ;; input-focus is returned to the depress-frame.
+            ;;   (raise-frame (window-frame release-window))
+            ;;   (sit-for 1)
+            )))
+      ;; Throw the current buffer
+      (set-window-buffer release-window (current-buffer))
+      (unless (eq depress-frame (window-frame release-window))
+       (message "Buffer or item thrown to frame under this one")
+       ;; Show the frame thrown to before it is covered when
+       ;; input-focus is returned to the depress-frame.
+       ;;   (raise-frame (window-frame release-window))
+       ;;   (sit-for 1)
+       ;;   (select-frame-set-input-focus depress-frame)
+       ))))
 
-Optional prefix ARG non-nil means emulate Assist Key rather than the
-Action Key.
+;;;###autoload
+(defun hkey-buffer-to (from-window to-window)
+  "Use ace-window to choose a FROM-WINDOW whose buffer will also be displayed 
in the chosen TO-WINDOW.
+The selected window does not change."
+  (interactive
+   (list (aw-select " Ace - Hyperbole: Buffer to Show")
+        (aw-select " Ace - Hyperbole: Show in Window")))
+  (with-selected-window from-window
+    (set-window-buffer to-window (current-buffer))))
 
-Only works when running under a window system, not from a dumb terminal."
-  (let ((start-win (selected-window)))
-    (condition-case nil
-       ;; This may trigger a No Action error if start-win and
-       ;; release-win are the same.
-       (hkey-drag release-window)
-      (error (when (eq start-win release-window)
-              (hmouse-drag-item-to-displ
-               ay))))
-    (when (window-live-p start-win) (select-window start-win))))
+;;;###autoload
+(defun hkey-swap-buffers (from-window to-window)
+  "Use ace-window to choose a FROM-WINDOW whose buffer is swapped with the 
buffer of the chosen TO-WINDOW.
+Leave TO-WINDOW as the selected window."
+  (interactive
+   (list (aw-select " Ace - Hyperbole: Swap from Buffer1...")
+        (aw-select " Ace - Hyperbole: ...to Buffer2")))
+  (let ((from-buf (window-buffer from-window))
+       (to-buf (window-buffer to-window)))
+    (set-window-buffer from-window to-buf)
+    (set-window-buffer to-window from-buf)
+    (hypb:select-window-frame to-window)))
 
-(defun hkey-ace-window-setup (&optional key)
-  "Bind optional keyboard KEY and setup display of items in windows specified 
by short ids.
+;;; ************************************************************************
+;;; Hyperbole mouse click window selection functions
+;;; ************************************************************************
 
-The ace-window package, (see 
\"https://elpa.gnu.org/packages/ace-window.html\";),
-assigns short ids to each Emacs window and lets you jump to or
-operate upon a specific window by giving its letter.  Hyperbole
-can insert an operation into ace-window that allows you to
-display items such as dired or buffer menu items in a specific
-window.
+;;;###autoload
+(defun hmouse-click-to-drag ()
+  "Mouse click on start and end windows for use with `hkey-drag'.
+Emulate Smart Mouse Key drag from start window to end window.
+The drag action determines the final selected window."
+  (interactive)
+  (hmouse-choose-windows #'hkey-drag))
 
-To enable this feature, in your Emacs initialization file after
-Hyperbole is initialized, if you already have a key bound for
-ace-window, then call:
+;;;###autoload
+(defun hmouse-click-to-drag-stay ()
+  "Mouse click on start and end windows for use with `hkey-drag-stay'.
+Emulate Smart Mouse Key drag from start window to end window.
+The selected window does not change."
+  (interactive)
+  (hmouse-choose-windows #'hkey-drag-stay))
 
- (hkey-ace-window-setup)
+;;;###autoload
+(defun hmouse-click-to-drag-to ()
+  "Mouse click on start and end windows for use with `hkey-drag-to'.
+Emulate Smart Mouse Key drag from start window to end window.
+After the drag, the end window is the selected window."
+  (interactive)
+  (hmouse-choose-windows #'hkey-drag-to))
 
-otherwise, choose a binding like {M-o} and send it to the same
-function to bind it:
+;;;###autoload
+(defun hmouse-click-to-replace ()
+  "Mouse click on start and end windows for use with `hkey-replace'.
+Replace the buffer in start window with the buffer in end window.
+The selected window does not change."
+  (interactive)
+  (hmouse-choose-windows #'hkey-replace))
 
- (hkey-ace-window-setup \"\M-o\")
+;; Test this next command
+;; (global-set-key [C-down-mouse-1] nil)
+;; (global-set-key [C-mouse-1] 'hmouse-click-to-swap)
+;;;###autoload
+(defun hmouse-click-to-swap ()
+  "Mouse click on start and end windows for use with `hkey-swap'.
+Swap the buffer in start window with the buffer in end window.
+Leave the end window selected."
+  (interactive)
+  (hmouse-choose-windows #'hkey-swap))
 
-Then whenever point is on an item you want displayed in another
-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))
-  (push '(?i hkey-drag-to "Hyperbole Drag To") aw-dispatch-alist)
-  (push '(?t hkey-throw   "Hyperbole Throw") 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 hmouse-click-to-throw ()
+  "Mouse click on start and end windows for use with `hkey-throw'.
+Throw either a displayable item at start window's point or its current
+buffer to the end window.  The selected window does not change."
+  (interactive)
+  (hmouse-choose-windows #'hkey-throw))
+
+(defun hmouse-choose-windows (func)
+  "Mouse click on start and end windows for FUNC.
+Then with the start window temporarily selected, run FUNC with the
+end window as an argument.
+
+Appropriate FUNCs include: hkey-drag, hkey-drag-to, hkey-replace,
+hkey-swap and hkey-throw."
+  (let* (start-event
+        end-event
+        start-window
+        end-window)
+    (message "Click on the %s start window..." func)
+    (setq start-window
+         (cl-loop do (setq start-event (read-event))
+                  until (and (mouse-event-p start-event)
+                             (not (string-match "\\`down-" (symbol-name (car 
start-event)))))
+                  finally return (posn-window (event-start start-event))))
+    (message "Click on the %s start window...Now on the end window..." func)
+    (setq end-window
+         (cl-loop do (setq end-event (read-event))
+                  until (and (mouse-event-p end-event)
+                             (not (string-match "\\`down-" (symbol-name (car 
end-event)))))
+                  finally return (posn-window (event-start end-event))))
+    (message "Click on the %s start window...Now on the end window...Done" 
func)
+    (with-selected-window start-window
+      (funcall func end-window))))
+
+;;; ************************************************************************
+;;; Hyperbole Directional Buffer Movement Commands
+;;; ************************************************************************
+
+;;;###autoload
+(defun hkey-buffer-move-left ()
+  "Swap the current buffer with the one on its left, if any; otherwise, do 
nothing."
+  (interactive)
+  (hkey-buffer-move 'left))
+
+;;;###autoload
+(defun hkey-buffer-move-right ()
+  "Swap the current buffer with the one on its right, if any; otherwise, do 
nothing."
+  (interactive)
+  (hkey-buffer-move 'right))
+
+;;;###autoload
+(defun hkey-buffer-move-down ()
+  "Swap the current buffer with the one below it, if any; otherwise, do 
nothing."
+  (interactive)
+  (hkey-buffer-move 'down))
+
+;;;###autoload
+(defun hkey-buffer-move-up ()
+  "Swap the current buffer with the one on above it, if any; otherwise, do 
nothing."
+  (interactive)
+  (hkey-buffer-move 'up))
+
+(defun hkey-buffer-move (direction &optional arg)
+  "Move the current buffer to the next window in DIRECTION, a symbol, one of: 
up, down, left or right.
+
+When the window-jump package is available and `wj-jump-frames' is
+non-nil, the buffer may be moved across non-overlapping frames in
+the given direction."
+  (interactive "SDirection to move buffer (up, down, left or right): \nP")
+  ;; Prefer the window-jump package ...
+  (if (require 'window-jump nil t)
+      (let ((w1 (selected-window)))
+       (window-jump
+        (pcase direction
+          ('left wj-vec-left)
+          ('right wj-vec-right)
+          ('down wj-vec-down)
+          ('up wj-vec-up)
+          (_ (error "(hkey-buffer-move): Invalid movement direction, '%s'" 
direction))))
+       (hkey-swap-buffers w1 (selected-window)))
+    ;; ... but if not available, use the Emacs builtin windmove package.
+    (require 'windmove)
+    (windmove-do-window-select direction arg)))
+
+;;; ************************************************************************
+;;; Public support functions
+;;; ************************************************************************
+
+(defun hkey-debug ()
+  (message (format "(HyDebug) %sContext: %s; %s: %s; Buf: %s; Mode: %s; 
MinibufDepth: %s"
+                  (cond ((eq pred-value 'hbut:current)
+                         (format "ButType: %s; ButLabel: %s; "
+                                 (hattr:get  'hbut:current 'categ)
+                                 (hypb:format-quote (hbut:label 
'hbut:current))))
+                        ((functionp pred-value)
+                         (format "Selection Func: %s; " pred-value))
+                        (t ""))
+                  pred
+                  (if assist-flag "Assist" "Action")
+                  (hypb:format-quote (format "%s" hkey-action))
+                  (current-buffer) major-mode (minibuffer-depth))))
 
 (defun hkey-execute (assist-flag)
   "Evaluate Action Key form (or Assist Key form with ASSIST-FLAG non-nil) for 
first non-nil predicate from `hkey-alist'.
@@ -569,41 +809,46 @@ the current window.  By default, it is displayed 
according to the setting of
 `hpath:display-where'."
   (if (bufferp buffer) (setq buffer (buffer-name buffer)))
   (if (null buffer) (setq buffer (buffer-name (current-buffer))))
-  (and (stringp buffer)
-       (string-match "^\\*Help\\|Help\\*$" buffer)
-       (not (memq t (mapcar (lambda (wind)
-                             (string-match
-                              "^\\*Help\\|Help\\*$"
-                              (buffer-name (window-buffer wind))))
-                           (hypb:window-list 'no-mini))))
-       (setq hkey--wconfig (current-window-configuration)))
-  (unwind-protect
-      (let* ((buf (get-buffer-create buffer))
-            ;; Help-mode calls with-temp-buffer which invokes one of these 
hooks
-            ;; which calls hkey-help-show again, so nullify them before
-            ;; displaying the buffer.
-            (temp-buffer-show-hook)
-            (temp-buffer-show-function)
-            (wind (cond (current-window
-                         (switch-to-buffer buf)
-                         (selected-window))
-                        (t (hpath:display-buffer buf)))))
-       (when wind
-         (setq minibuffer-scroll-window wind)
-         ;; Don't use help-mode in buffers already set up with a
-         ;; quit-key to bury the buffer, e.g. minibuffer completions,
-         ;; as this will sometimes disable default left mouse key item
-         ;; selection.
-         (unless (or (where-is-internal 'quit-window (current-local-map))
-                     (where-is-internal 'hkey-help-hide (current-local-map)))
-           (when (string-match "^\\*Help\\|Help\\*$" (buffer-name))
-             (help-mode))
-           (when (derived-mode-p 'help-mode)
-             (local-set-key "q" #'hkey-help-hide)))))
-    ;; If in a *Completions* buffer, re-select the window that
-    ;; generated the completions.
-    (if (buffer-live-p completion-reference-buffer)
-       (select-window (get-buffer-window completion-reference-buffer t)))))
+  (let ((org-help (and (stringp buffer) (string-match "\\`\\*Org Help\\*" 
buffer)))
+       (owind (selected-window)))
+    (and (stringp buffer)
+        (string-match "^\\*Help\\|Help\\*$" buffer)
+        (not (memq t (mapcar (lambda (wind)
+                               (string-match
+                                "^\\*Help\\|Help\\*$"
+                                (buffer-name (window-buffer wind))))
+                             (hypb:window-list 'no-mini))))
+        (setq hkey--wconfig (current-window-configuration)))
+    (unwind-protect
+       (let* ((buf (get-buffer-create buffer))
+              ;; Help-mode calls with-temp-buffer which invokes one of these 
hooks
+              ;; which calls hkey-help-show again, so nullify them before
+              ;; displaying the buffer.
+              (temp-buffer-show-hook)
+              (temp-buffer-show-function)
+              (wind (cond (current-window
+                           (switch-to-buffer buf)
+                           (selected-window))
+                          (t (hpath:display-buffer buf)))))
+         ;; Ignore org-mode's temp help buffers which it handles on its own.
+         (when (and wind (not org-help))
+           (setq minibuffer-scroll-window wind)
+           ;; Don't use help-mode in buffers already set up with a
+           ;; quit-key to bury the buffer, e.g. minibuffer completions,
+           ;; as this will sometimes disable default left mouse key item
+           ;; selection.
+           (unless (or (where-is-internal 'quit-window (current-local-map))
+                       (where-is-internal 'hkey-help-hide (current-local-map)))
+             (when (string-match "^\\*Help\\|Help\\*$" (buffer-name))
+               (help-mode))
+             (when (derived-mode-p 'help-mode)
+               (local-set-key "q" #'hkey-help-hide)))))
+      ;; If in an *Org Help* buffer, reselect the Org buffer.
+      (if org-help (select-window owind))
+      ;; If in a *Completions* buffer, re-select the window that
+      ;; generated the completions.
+      (if (buffer-live-p completion-reference-buffer)
+         (select-window (get-buffer-window completion-reference-buffer t))))))
 
 (defun hkey-mouse-help (assist-flag args)
   "If a Smart Key help flag is set and the other Smart Key is not down, show 
help.
@@ -625,7 +870,7 @@ Return t if help is displayed, nil otherwise."
                     (hmouse-function #'hkey-assist-help assist-flag args)
                     t)))
       (when help-shown
-         ;; Then both Smart Keys have been released. 
+       ;; Then both Smart Keys have been released. 
        (setq action-key-cancelled nil
              assist-key-cancelled nil)
        t))))
@@ -1064,6 +1309,4 @@ not."
     (or rtn (progn (beep) (message "End of buffer")))
     rtn))
 
-(provide 'hmouse-drv)
-
 ;;; hmouse-drv.el ends here
diff --git a/hmouse-sh.el b/hmouse-sh.el
index ac3cfc6..5fac593 100644
--- a/hmouse-sh.el
+++ b/hmouse-sh.el
@@ -468,7 +468,12 @@ point determined by 
`mouse-select-region-move-to-beginning'."
            (hmouse-bind-shifted-key-emacs 2 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
        ;; X, macOS or MS Windows
        (hmouse-bind-shifted-key-emacs 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
-       (hmouse-bind-shifted-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs)))
+       (hmouse-bind-shifted-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs)
+       (with-eval-after-load "company"
+         (define-key company-active-map [S-down-mouse-2] 'ignore)
+         (define-key company-active-map [S-mouse-2] 
'smart-company-to-definition)
+         (define-key company-active-map [S-down-mouse-3] 'ignore)
+         (define-key company-active-map [S-mouse-3] 'smart-company-help))))
      ;;
      ;; XEmacs
      ((featurep 'xemacs)
@@ -522,7 +527,13 @@ With optional MIDDLE-KEY-ONLY-FLAG non-nil, binds only the 
middle mouse key."
        ;; X, macOS or MS Windows
       (hmouse-bind-key-emacs 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
       (unless middle-key-only-flag
-       (hmouse-bind-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))))
+       (hmouse-bind-key-emacs 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
+      `(with-eval-after-load "company"
+        (define-key company-active-map [down-mouse-2] 'ignore)
+        (define-key company-active-map [mouse-2] 'smart-company-to-definition)
+        (unless ,middle-key-only-flag
+          (define-key company-active-map [down-mouse-3] 'ignore)
+          (define-key company-active-map [mouse-3] 'smart-company-help)))))
    ;;
    ;; XEmacs
    ((featurep 'xemacs)
diff --git a/hmouse-tag.el b/hmouse-tag.el
index f818236..f921231 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -664,7 +664,7 @@ Returns nil when point is on the first line of a non-alias 
Lisp definition."
 (defun smart-lisp-mode-p ()
   "Return t if in a mode which uses Lisp symbols."
   (or (smart-emacs-lisp-mode-p)
-      (memq major-mode '(lisp-mode scheme-mode))))
+      (memq major-mode '(lisp-mode scheme-mode change-log-mode))))
 
 ;;;###autoload
 (defun smart-objc (&optional identifier next)
@@ -761,6 +761,24 @@ If key is pressed:
             (buffer-substring-no-properties (match-beginning 2) (match-end 2))
             (match-beginning 2) (match-end 2)))))))
 
+
+(defun smart-python-jedi-to-definition-p ()
+  "If the Jedi Python identifier server is running, test and use it to jump to 
the definition.
+See https://tkf.github.io/emacs-jedi/latest/.";
+  ;; Use functions from jedi-core.el only, not from jedi.el, since
+  ;; company-jedi.el users will have loaded only jedi-core.el.
+  (when (featurep 'jedi-core)
+    (let* ((servers (jedi:-get-servers-in-use))
+          (proc (epc:manager-server-process (car servers))))
+      (and servers (processp proc)
+          (eq 'run (process-status (process-buffer proc)))
+          ;; The goto is performed asynchronously.
+          ;; It reports in the minibuffer when a definition is not found.
+          (progn (jedi:goto-definition t)
+                 ;; For use as a predicate, always return t if the Jedi server
+                 ;; is running  so other lookup techniques are not tried.
+                 t)))))
+
 ;;;###autoload
 (defun smart-python (&optional identifier next)
   "Jumps to the definition of optional Python IDENTIFIER or the one at point.
@@ -769,6 +787,9 @@ Optional second arg NEXT means jump to next matching Python 
tag.
 It assumes that its caller has already checked that the key was pressed in an
 appropriate buffer and has moved the cursor to the selected buffer.
 
+See the documentation for `smart-python-jedi-to-definition-p' for the
+behavior when the Jedi python identifier server is in use.
+
 See the documentation for `smart-python-oo-browser' for the behavior of this
 function when the OO-Browser has been loaded.
 
@@ -776,10 +797,11 @@ Otherwise, on a Python identifier, the identifier 
definition is displayed,
 assuming the identifier is found within an `etags' generated tag file
 in the current directory or any of its ancestor directories."
   (interactive)
-  (cond ((fboundp 'python-to-definition)
+  (cond ((smart-python-jedi-to-definition-p))
+       ((fboundp 'python-to-definition)
         ;; Only fboundp if the OO-Browser has been loaded.
         (smart-python-oo-browser))
-       (identifier
+       (t
         (smart-python-tag identifier next))))
 
 ;;;###autoload
diff --git a/hsettings.el b/hsettings.el
index cd886b4..1935242 100644
--- a/hsettings.el
+++ b/hsettings.el
@@ -216,8 +216,9 @@ obtained search string."
       ((and (featurep 'xemacs) (not noninteractive))
        (require 'hui-xe-but)
        ;;
+       ;; Highlight explicit buttons when files are read in.
        (add-hook 'find-file-hook #'hproperty:but-create t)
-       (defalias 'hui:but-flash #'hproperty:but-flash)
+       (defalias 'hui:but-flash 'hproperty:but-flash)
        ;;
        ;; Substitute for the nil argument below a valid X color name with
        ;; which to highlight buttons if the default highlighting does not
@@ -246,16 +247,6 @@ obtained search string."
 (add-hook 'hibtypes-end-load-hook (lambda () (require 'hib-doc-id)))
 
 ;;; ************************************************************************
-;;; HYPERBOLE LOCAL VARIABLE SUPPORT
-;;; ************************************************************************
-
-;;; Uncomment this if you really need to be able to use Hyperbole variables
-;;; (and others with colons in their names) within file local variable lists.
-;;; See the source file for more details.
-;;;
-;;  (require 'hlvar)
-
-;;; ************************************************************************
 ;;; SITE-SPECIFIC ADDITIONS - Add your Hyperbole configuration additions here.
 ;;; ************************************************************************
 
diff --git a/hui-menu.el b/hui-menu.el
index d0f163e..a725cde 100644
--- a/hui-menu.el
+++ b/hui-menu.el
@@ -417,7 +417,7 @@ REBUILD-FLAG is non-nil, in which case the menu is rebuilt."
                   )
                 '("Koutliner"
                   ["Manual" (id-info "(hyperbole)Koutliner") t]
-                  ["Example"   kotl-mode:example                 t]
+                  ["Example"   kotl-mode:example t]
                   "----"
                   ["Create-File"    kfile:find t]
                   ["View-File"      kfile:view t]
diff --git a/hui-mini.el b/hui-mini.el
index dfa3693..a2f1054 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -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.")
            ))
diff --git a/hui-mouse.el b/hui-mouse.el
index 000bbcc..c46b732 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -95,6 +95,12 @@ Its default value is #'smart-scroll-down."
 
 (defvar hkey-alist
   '(
+    ;; Company completion mode
+    ((and (boundp 'company-active-map)
+         (memq company-active-map (current-minor-mode-maps))) .
+         ((smart-company-to-definition) . (smart-company-help)))
+    ;;
+    ;; Treemacs hierarchical file manager
     ((eq major-mode 'treemacs-mode) . 
      ((smart-treemacs) . (smart-treemacs)))
     ;;
@@ -235,6 +241,13 @@ Its default value is #'smart-scroll-down."
     ((eq major-mode 'pages-directory-mode) .
      ((pages-directory-goto) . (pages-directory-goto)))
     ;;
+    ;; Python files - ensure this comes before Imenu for more advanced
+    ;; definition lookups
+    ((and (or (and (eq major-mode 'python-mode) buffer-file-name)
+             (string-match "^Pydoc:\\|\\*?Python" (buffer-name)))
+         (smart-python-at-tag-p)) .
+         ((smart-python) . (smart-python nil 'next-tag)))
+    ;;
     ;; Imenu listing in GNU Emacs
     ((smart-imenu-item-at-p)
      . ((smart-imenu-display-item-where (car hkey-value) (cdr hkey-value)) .
@@ -275,11 +288,6 @@ Its default value is #'smart-scroll-down."
          (smart-javascript-at-tag-p)) .
          ((smart-javascript) . (smart-javascript nil 'next-tag)))
     ;;
-    ((and (or (and (eq major-mode 'python-mode) buffer-file-name)
-             (string-match "^Pydoc:\\|\\*?Python" (buffer-name)))
-         (smart-python-at-tag-p)) .
-         ((smart-python) . (smart-python nil 'next-tag)))
-    ;;
     ((and (eq major-mode 'objc-mode) buffer-file-name
          (smart-objc-at-tag-p)) .
          ((smart-objc) . (smart-objc nil 'next-tag)))
@@ -384,9 +392,10 @@ evaluated.
 The `hkey-alist' variable is the subset of this alist used by the
 smart keyboard keys.")
 
-;; This must be required after hmouse-alist is defined since this will
-;; recursively require hmouse-drv which requires hui-window when being
-;; compiled and that library requires that hmouse-alist be defined.
+;; This must be required after hmouse-alist is defined in this file
+;; since this will recursively require hmouse-drv which requires
+;; hui-window when being compiled and that library requires that
+;; hmouse-alist be defined.
 (require 'hmouse-key)
 
 ;; This next library adds drag actions to `hmouse-alist'.
@@ -613,6 +622,30 @@ If assist-key is pressed:
         (scroll-calendar-left-three-months 1))
        (t (mark-diary-entries))))
 
+;;; ************************************************************************
+;;; smart-company mode functions
+;;; ************************************************************************
+
+;; These functions are called from hkey-alist when keyboard Smart Keys
+;; are used but for mouse keys, they are bound to local keys in
+;; company-mode's minor mode map.
+
+(defun smart-company-to-definition (event)
+  "Action Key binding for company-mode completions popup to show item 
definition.
+Use left mouse key or RET key to select a completion and exit."
+  (interactive "e")
+  (when (mouse-event-p last-command-event)
+    (company-select-mouse event))
+  (company-show-location))
+
+(defun smart-company-help (event)
+  "Assist Key binding for company-mode completions popup to show item doc."
+  (interactive "e")
+  (when (mouse-event-p last-command-event)
+    (company-select-mouse event))
+  (if (featurep 'company-quickhelp)
+      (company-quickhelp-manual-begin)
+    (company-show-doc-buffer)))
 
 ;;; ************************************************************************
 ;;; smart-dired functions
diff --git a/hui-treemacs.el b/hui-treemacs.el
index a33b7ce..db1aee6 100644
--- a/hui-treemacs.el
+++ b/hui-treemacs.el
@@ -18,6 +18,10 @@
 
 (eval-and-compile (require 'treemacs nil t))
 
+(eval-when (load)
+  (unless (>= (string-to-number treemacs-version) 1.14)
+    (error "(hui-treemacs): Hyperbole requires Treemacs package version 1.14 
or greater")))
+
 ;;; ************************************************************************
 ;;; smart-treemacs functions
 ;;; ************************************************************************
@@ -35,9 +39,13 @@ If key is pressed:
      collapse the entry;
  (2) elsewhere within an entry line, the item is displayed for editing,
      normally in another window;
- (3) on the first line of the buffer (other than the end of line),
+ (3) at the end of an entry line: invoke `action-key-eol-function',
+     typically to scroll up proportionally, if an Action Key press; invoke
+     `assist-key-eol-function', typically to scroll down proportionally,
+     if an Asisst 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;
- (4) at the end of the first or last line of the buffer,
+ (5) at the end of the first or last line of the buffer,
      this Treemacs invocation is quit."
 
   (interactive)
@@ -47,8 +55,10 @@ If key is pressed:
           (hact 'link-to-directory default-directory)))
        ((and (last-line-p) (eolp))
         (treemacs-toggle))
-       (t (let ((over-icon (and (treemacs--current-button)
-                                (= (point) (- (button-start 
(treemacs--current-button)) 2))))
+       ((eolp)
+        (funcall (if assist-flag assist-key-eol-function 
action-key-eol-function)))
+       (t (let ((over-icon (and (treemacs-current-button)
+                                (= (point) (- (button-start 
(treemacs-current-button)) 2))))
                 (result (treemacs-node-buffer-and-position)))
             (if (and (not over-icon) result (or (bufferp result) (listp 
result)))
                 (if (listp result)
@@ -73,16 +83,16 @@ Suitable for use as a value of 
`action-key-modeline-buffer-id-function'."
        (cond
         ;; Clicked on Treemacs buffer id
         ((if action-key-depress-window
-             (treemacs--is-treemacs-window? action-key-depress-window)
+             (treemacs-is-treemacs-window? action-key-depress-window)
            (string-match " Treemacs " (format-mode-line mode-line-format)))
          ;; Quit/hide treemacs.
          (treemacs-toggle))
         ;;
         ;; Treemacs is visible and displaying the same dir as
         ;; the default dir of the clicked on modeline.
-        ((and (treemacs--buffer-exists?)
+        ((and (treemacs-buffer-exists?)
               (string-equal (expand-file-name default-directory)
-                            (with-current-buffer (treemacs--buffer-exists?)
+                            (with-current-buffer (treemacs-buffer-exists?)
                               default-directory)))
          ;; Quit/hide treemacs.
          (treemacs-toggle))
@@ -91,131 +101,4 @@ Suitable for use as a value of 
`action-key-modeline-buffer-id-function'."
         (t (treemacs))))
     (error "(smart-treemacs-modeline): Treemacs package is not installed")))
 
-;;; ************************************************************************
-;;; treemacs function updates
-;;; ************************************************************************
-
-;; Add this in treemacs-tags.el
-(defun treemacs--imenu-tag-noselect (file tag-path)
-  "Return a list of the source buffer for FILE and the position of the tag 
from TAG-PATH."
-  (let ((tag (car tag-path))
-        (path (cdr tag-path)))
-    (condition-case e
-        (progn
-          (find-file-noselect file)
-          (let ((index (treemacs--get-imenu-index file)))
-            (dolist (path-item path)
-              (setq index (cdr (assoc path-item index))))
-            (-let [(buf pos) (treemacs--pos-from-marker
-                              (cdr (--first
-                                    (equal (car it) tag)
-                                    index)))]
-              ;; some imenu implementations, like markdown, will only provide
-              ;; a raw buffer position (an int) to move to
-             (list (or buf (get-file-buffer file)) pos))))
-      (error
-       (treemacs--log "Something went wrong when finding tag '%s': %s"
-                      (propertize tag 'face 'treemacs-tags-face)
-                      e)))))
-
-;; Add this in treemacs-tags.el
-(defun treemacs--tag-noselect (btn)
-  "Return list of tag source buffer and position for BTN for future display."
-  (require 'hmouse-tag) ;; from GNU Hyperbole, adds xref convenience functions 
used herein
-  (-let [(tag-buf tag-pos)
-         (treemacs--with-button-buffer btn
-                                      (-> btn (button-get 'marker) 
(treemacs--pos-from-marker)))]
-    (if tag-buf
-       (list tag-buf tag-pos)
-      (-pcase treemacs-goto-tag-strategy
-        [`refetch-index
-         (let (file tag-path)
-           (with-current-buffer (marker-buffer btn)
-             (setq file (treemacs--nearest-path btn)
-                   tag-path (treemacs--tags-path-of btn)))
-           (treemacs--imenu-tag-noselect file tag-path))]
-        [`call-xref
-        (let ((xref (xref-definition
-                     (treemacs--with-button-buffer btn
-                                                   (treemacs--get-label-of 
btn)))))
-          (when xref
-            (list (xref-item-buffer xref) (xref-item-position xref))))]
-        [`issue-warning
-         (treemacs--log "Tag '%s' is located in a buffer that does not exist."
-                        (propertize (treemacs--with-button-buffer btn 
(treemacs--get-label-of btn)) 'face 'treemacs-tags-face))]
-        [_ (error "[Treemacs] '%s' is an invalid value for 
treemacs-goto-tag-strategy" treemacs-goto-tag-strategy)]))))
-
-;; Replace this macro in treemacs-impl.el
-(cl-defmacro treemacs--execute-button-action
-    (&key save-window ensure-window-split split-function window dir-action 
file-action tag-action no-match-explanation)
-  "Infrastructure macro for setting up actions on different button states.
-Fetches the currently selected button and verifies it's in the correct state
-based on the given state actions.
-If it isn't it will log NO-MATCH-EXPLANATION, if it is it selects WINDOW (or
-`next-window' if none is given) and splits it with SPLIT-FUNCTION if given.
-DIR-ACTION, FILE-ACTION, and TAG-ACTION are inserted into a `pcase' statement
-matching the buttons state.
-If ENSURE-WINDOW-SPLIT is t treemacs will vertically split the window if
-treemacs is the only window to make sure a buffer is opened next to it, not
-under or below it."
-  (let ((valid-states (list)))
-    (when dir-action
-      (push 'dir-node-open valid-states)
-      (push 'dir-node-closed valid-states))
-    (when file-action
-      (push 'file-node-open valid-states)
-      (push 'file-node-closed valid-states))
-    (when tag-action
-      (push 'tag-node valid-states))
-    `(-when-let (btn (treemacs--current-button))
-       (treemacs--without-following
-        (let* ((state (button-get btn 'state))
-               (current-window (selected-window)))
-          (if (not (memq state ',valid-states))
-              (treemacs--log "%s" ,no-match-explanation)
-            (progn
-              ,@(if ensure-window-split
-                    `((when (one-window-p)
-                        (save-selected-window
-                          (split-window nil nil (if (eq 'left 
treemacs-position) 'right 'left))))))
-              (select-window (or ,window (next-window (selected-window) nil 
nil)))
-              ,@(if split-function
-                    `((funcall ,split-function)
-                      (other-window 1)))
-             ;; Return the result of the action
-              (prog1 (pcase state
-                       ,@(when dir-action
-                          `(((or `dir-node-open `dir-node-closed)
-                             ,dir-action)))
-                       ,@(when file-action
-                          `(((or `file-node-open `file-node-closed)
-                             ,file-action)))
-                       ,@(when tag-action
-                          `((`tag-node
-                             ,tag-action)))
-                       (_ (error "No match achieved even though button's state 
%s was part of the set of valid states %s"
-                                state ',valid-states)))
-               (when ,save-window
-                  (select-window current-window))))))))))
-
-;; Reload source form of this library so updated version of
-;; `treemacs--execute-button-action' above is used throughout.
-(load "treemacs-interface.el")
-
-;; Add to treemacs-interface.el.
-;;;###autoload
-(defun treemacs-node-buffer-and-position (&optional arg)
-  "Return source buffer or list of buffer and position for the current node 
for future display.
-Stay in the selected window and ignore any prefix argument ARG."
-  (interactive "P")
-  (let ((treemacs--no-messages t))
-    (treemacs--execute-button-action
-     :file-action (find-file-noselect (treemacs--safe-button-get btn 
'abs-path))
-     :dir-action (find-file-noselect (treemacs--safe-button-get btn 'abs-path))
-     :tag-action (treemacs--tag-noselect btn)
-     :window (selected-window)
-     :save-window t
-     :ensure-window-split nil
-     :no-match-explanation "")))
-
-(provide 'hytreemacs)
+(provide 'hui-treemacs)
diff --git a/hui-window.el b/hui-window.el
index d58e602..c5b64d4 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -418,7 +418,8 @@ Signals an error if either depress or release buffer is 
read-only."
       ;; the kill; also, before the kill, restore the point to where it
       ;; was when the region was set.
       (hmouse-goto-release-point)
-      (let ((release-point (point-marker)))
+      (let ((release-point (point-marker))
+           (release-window (if assist-flag assist-key-release-window 
action-key-release-window)))
        (if buffer-read-only
            ;; In this case, we want an error that will terminate execution so 
that
            ;; hkey-region is not reset to nil.  This allows the user to fix the
@@ -430,7 +431,8 @@ Signals an error if either depress or release buffer is 
read-only."
          ;; Now kill and yank the region into the Smart Key release buffer.
          (kill-region (or hkey-value (point)) (mark))
          ;; Permanently return to release point
-         (select-window (if assist-flag assist-key-release-window 
action-key-release-window))
+         (select-frame-set-input-focus (window-frame release-window))
+         (select-window release-window)
          (goto-char release-point)
          ;; Protect from indentation errors
          (condition-case ()
@@ -453,7 +455,9 @@ Signals an error if the buffer is read-only."
        (error "(hmouse-yank-region): Use {%s} to enable yanking into this 
buffer."
               (hmouse-read-only-toggle-key))
       ;; Permanently return to release point
-      (select-window (if assist-flag assist-key-release-window 
action-key-release-window))
+      (let ((release-window (if assist-flag assist-key-release-window 
action-key-release-window)))
+       (select-frame-set-input-focus (window-frame release-window))
+       (select-window release-window))
       ;; Protect from indentation errors
       (condition-case ()
          (hmouse-insert-region)
@@ -852,7 +856,7 @@ item, this moves the menu buffer itself to the release 
location."
                   ;; Otherwise, move the current menu item to the release 
window.
                   (setq w1-ref (eval (cadr (assq major-mode 
hmouse-drag-item-mode-forms))))
                   (when w1-ref (hmouse-pulse-line) (sit-for 0.05))))
-       (select-window w2)
+       (hypb:select-window-frame w2)
        (when (and new-window action-key-release-window)
          (hmouse-split-window))))
     (unwind-protect
diff --git a/hversion.el b/hversion.el
index 1d42648..ae92998 100644
--- a/hversion.el
+++ b/hversion.el
@@ -23,7 +23,7 @@
 ;;; Public variables
 ;;; ************************************************************************
 
-(defconst hyperb:version "7.0.2" "GNU Hyperbole revision number.")
+(defconst hyperb:version "7.0.2a" "GNU Hyperbole revision number.")
 
 ;;;###autoload
 (defvar hyperb:microcruft-os-p
diff --git a/hycontrol.el b/hycontrol.el
index f4e72dd..d429b57 100644
--- a/hycontrol.el
+++ b/hycontrol.el
@@ -151,7 +151,7 @@ major-mode 'c-mode).")
   :group 'hyperbole-screen)
 
 (defcustom hycontrol-invert-mode-line-flag t
-  "When t (default) and in a HyControl mode, invert mode-line to emphasize the 
special key bindings in effect."
+  "*When t (default) and in a HyControl mode, invert mode-line to emphasize 
the special key bindings in effect."
   :type 'boolean
   :group 'hyperbole-screen)
 
@@ -170,7 +170,7 @@ The unit counter resets to the last digit entered whenever 
this value is exceede
 
 (defcustom hycontrol-frame-offset '(13 . 23)
   "*Increase in pixel offset for new hycontrol frames relative to the selected 
frame.
-It's value is an (x-offset . y-offset) pair in pixels."
+Its value is an (x-offset . y-offset) pair in pixels."
   :type '(cons integer integer)
   :group 'hyperbole-screen)
 
@@ -278,6 +278,7 @@ The final predicate should always be t, for default values, 
typically of zero.")
     ;; Numeric keypad emulation for keyboards that lack one.
     (define-key map "p"     (lambda () (interactive) 
(hycontrol-virtual-numeric-keypad hycontrol-arg)))
     (define-key map "q"     'hycontrol-quit-frames-mode)
+    (define-key map "Q"     'hycontrol-quit-frames-mode)
     (define-key map "r"     'raise-frame)
     (define-key map "s"     (lambda () (interactive) 
(hycontrol-set-frame-height nil (- (frame-height) hycontrol-arg))))
     (define-key map "t"     'hycontrol-enable-windows-mode)
@@ -378,6 +379,7 @@ The final predicate should always be t, for default values, 
typically of zero.")
     ;; Numeric keypad emulation for keyboards that lack one.
     (define-key map "p"     (lambda () (interactive) 
(hycontrol-virtual-numeric-keypad hycontrol-arg)))
     (define-key map "q"     'hycontrol-quit-windows-mode)
+    (define-key map "Q"     'hycontrol-quit-windows-mode)
     (define-key map "s"     (lambda () (interactive) (shrink-window 
hycontrol-arg)))
     (define-key map "t"     'hycontrol-enable-frames-mode)
     (define-key map "u"     'unbury-buffer)
@@ -859,16 +861,28 @@ is set to 1.  If it is > `hycontrol-maximum-units', it is 
set to
   (keyboard-quit))
 
 (defun hycontrol-quit-frames-mode ()
-  "Globally quit HyControl Frames mode, typically on a press of {q}."
+  "Globally quit HyControl Frames mode, typically on a press of {q}.
+If in a help buffer where {q} is bound to quit-window, run that
+instead of quitting HyControl.  Use {Q} to always quit from HyControl."
   (interactive)
-  (hycontrol-disable-modes)
-  (message "Finished controlling frames"))
+  ;; Allow for quitting from help windows displayed when HyControl is active.
+  (if (and (eq last-command-event ?q)
+          (eq (local-key-binding "q") #'quit-window))
+      (call-interactively #'quit-window)
+    (hycontrol-disable-modes)
+    (message "Finished controlling frames")))
 
 (defun hycontrol-quit-windows-mode ()
-  "Globally quit HyControl Windows mode, typically on a press of {q}."
+  "Globally quit HyControl Windows mode, typically on a press of {q}.
+If in a help buffer where {q} is bound to quit-window, run that
+instead of quitting HyControl.  Use {Q} to always quit from HyControl."
   (interactive)
-  (hycontrol-disable-modes)
-  (message "Finished controlling windows"))
+  ;; Allow for quitting from help windows displayed when HyControl is active.
+  (if (and (eq last-command-event ?q)
+          (eq (local-key-binding "q") #'quit-window))
+      (call-interactively #'quit-window)
+    (hycontrol-disable-modes)
+    (message "Finished controlling windows")))
 
 ;;;###autoload
 (define-global-minor-mode hycontrol-frames-mode hycontrol-local-frames-mode
diff --git a/hypb.el b/hypb.el
index a584a3f..8701d85 100644
--- a/hypb.el
+++ b/hypb.el
@@ -27,7 +27,7 @@
 This should end with a space.")
 
 (defcustom hypb:rgrep-command
-  (format "%sgrep -insIHr " (if (executable-find "zgrep") "z" ""))
+  (format "%sgrep -insIHr" (if (executable-find "zgrep") "z" ""))
   "*Grep command string and initial arguments to send to `hypb:rgrep' command.
 It must end with a space."
   :type 'string
@@ -599,12 +599,16 @@ If in an Emacs Lisp mode buffer and no PREFIX-ARG is 
given, limit search to only
         (grep-cmd
          (if (and (not current-prefix-arg) (equal (buffer-name) "*Locate*"))
              (format "%s -e \%c%s\%c %s" hypb:rgrep-command delim pattern 
delim (hypb:locate-pathnames))
-           (format "%s%s -e \%c%s\%c ."
+           (format "%s %s -e \%c%s\%c ."
                    hypb:rgrep-command
                    (if (and (memq major-mode '(emacs-lisp-mode 
lisp-interaction-mode))
                             (not prefix-arg))
-                       "--include=\"*.el\" --include=\"*.el.gz\""
-                     "--exclude=\"*~\" --exclude=\"#*\" --exclude=\"TAGS\"")
+                       (if (string-match "\\`rg " hypb:rgrep-command)
+                           "-g \"*.el\" -g \"*.el.gz\""
+                         "--include=\"*.el\" --include=\"*.el.gz\"")
+                     (if (string-match "\\`rg " hypb:rgrep-command)
+                         "-g \"!*~\" -g \"!#*\" -g \"!TAGS\""
+                       "--exclude=\"*~\" --exclude=\"#*\" --exclude=\"TAGS\""))
                    delim pattern delim))))
     (setq this-command `(grep ,grep-cmd))
     (push this-command command-history)
@@ -615,6 +619,20 @@ If in an Emacs Lisp mode buffer and no PREFIX-ARG is 
given, limit search to only
     (interactive "sSave lines with match for regexp: ")
     (keep-lines regexp nil nil t))
 
+(defmacro hypb:save-selected-window-and-input-focus (&rest body)
+  "Execute BODY, then restore the selected window in each frame and the 
previously selected frame with input focus.
+The value returned is the value of the last form in BODY."
+  `(let ((frame (selected-frame)))
+     (prog1 (save-selected-window ,@body)
+       (select-frame-set-input-focus frame))))
+
+(defun hypb:select-window-frame (window)
+  "Select WINDOW and its frame (set input focus there)."
+  (if (window-live-p window)
+      (progn (select-window window)
+            (select-frame-set-input-focus (window-frame window)))
+    (error "(hypb:select-window-frame): Argument must be a live window, not 
'%s'" window)))
+
 (defun hypb:supercite-p ()
   "Returns non-nil iff the Emacs add-on supercite package is in use."
   (let (hook-val)
diff --git a/hyperbole-pkg.el b/hyperbole-pkg.el
index d31bf5b..c2390d7 100644
--- a/hyperbole-pkg.el
+++ b/hyperbole-pkg.el
@@ -1,5 +1,5 @@
 ;; -*- no-byte-compile: t -*-
-(define-package "hyperbole" "7.0.2" "GNU Hyperbole: The Everyday Hypertextual 
Information Manager"
+(define-package "hyperbole" "7.0.2a" "GNU Hyperbole: The Everyday Hypertextual 
Information Manager"
   '((emacs "24.4"))
   :url "http://www.gnu.org/software/hyperbole";
   :keywords '("comm" "convenience" "files" "frames" "hypermedia" "languages"
diff --git a/hyperbole.el b/hyperbole.el
index 57ba586..73b1b61 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -6,7 +6,7 @@
 ;; Maintainer:       Bob Weiner <address@hidden> and Mats Lidell 
<address@hidden>
 ;; Created:          06-Oct-92 at 11:52:51
 ;; Released:         23-Nov-17
-;; Version:          7.0.2
+;; Version:          7.0.2a
 ;; Keywords:         comm, convenience, files, frames, hypermedia, languages, 
mail, matching, mouse, multimedia, outlines, tools, wp
 ;; Package:          hyperbole
 ;; Package-Requires: ((emacs "24.4"))
@@ -109,7 +109,7 @@
          features (delq 'hversion features)))
 
   ;; Defines hyperb:path-being-loaded, hyperb:stack-frame,
-  ;; (hyperb:window-system), and hyperb:dir, which are used later in
+  ;; (hyperb:window-system) and hyperb:dir, which are used later in
   ;; this file.  Also adds Hyperbole to the load-path if need be.
   ;;
   ;; This handles the case when the Hyperbole package directory is not yet in 
load-path.
@@ -451,8 +451,8 @@ With optional ARG, override them iff ARG is positive."
 ;; help buffer.  (Help buffer names end with "Help*".)  Only one of
 ;; these two settings is used, dependent on emacs version.
 ;;
-(setq temp-buffer-show-hook #'hkey-help-show
-      temp-buffer-show-function temp-buffer-show-hook)
+(add-hook 'temp-buffer-show-hook #'hkey-help-show)
+(setq temp-buffer-show-function #'hkey-help-show)
 
 ;;; ************************************************************************
 ;;; Autoloads
diff --git a/hyrolo-menu.el b/hyrolo-menu.el
index 72b1fac..75e70b0 100644
--- a/hyrolo-menu.el
+++ b/hyrolo-menu.el
@@ -120,8 +120,8 @@
        ((featurep 'xemacs)
         (define-key hyrolo-mode-map 'button3 'hyrolo-popup-menu))
        (t ;; (not (featurep 'xemacs))
-        (define-key hyrolo-mode-map [down-mouse-3] 'hyrolo-popup-menu)
-        (define-key hyrolo-mode-map [mouse-3] nil)))
+        (define-key hyrolo-mode-map [C-down-mouse-3] 'hyrolo-popup-menu)
+        (define-key hyrolo-mode-map [C-mouse-3] nil)))
   (unless (cond ((not (featurep 'xemacs))
                 (global-key-binding [menu-bar Rolo]))
                ((boundp 'current-menubar)
diff --git a/hywconfig.el b/hywconfig.el
index 271ed4b..d11318f 100644
--- a/hywconfig.el
+++ b/hywconfig.el
@@ -4,7 +4,7 @@
 ;;
 ;; Orig-Date:    15-Mar-89
 ;;
-;; Copyright (C) 1989-2016  Free Software Foundation, Inc.
+;; Copyright (C) 1989-2017  Free Software Foundation, Inc.
 ;; See the "../HY-COPY" file for license information.
 ;;
 ;; This file is part of GNU Hyperbole.
@@ -132,10 +132,10 @@ Then deletes this new configuration from the ring."
   (let ((ring (hywconfig-get-ring)))
     (if (ring-empty-p ring)
        (error "(hywconfig-delete-pop): Window configuration save ring is 
empty.")
-      (ring-remove ring 0)
       (if (ring-empty-p ring)
          (message "Window configuration save ring is now empty.")
-       (hywconfig-set-window-configuration (ring-ref ring 0))))))
+       (hywconfig-set-window-configuration (ring-ref ring 0))
+       (ring-remove ring 0)))))
 
 ;;;###autoload
 (defun hywconfig-ring-empty-p ()
diff --git a/kotl/kmenu.el b/kotl/kmenu.el
index 4d3d074..cee1760 100644
--- a/kotl/kmenu.el
+++ b/kotl/kmenu.el
@@ -200,8 +200,8 @@
        ((featurep 'xemacs)
         (define-key kotl-mode-map 'button3 'kotl-popup-menu))
        (t ;; (not (featurep 'xemacs))
-        (define-key kotl-mode-map [down-mouse-3] 'kotl-popup-menu)
-        (define-key kotl-mode-map [mouse-3] nil)))
+        (define-key kotl-mode-map [C-down-mouse-3] 'kotl-popup-menu)
+        (define-key kotl-mode-map [C-mouse-3] nil)))
   (unless (cond ((not (featurep 'xemacs))
                 (global-key-binding [menu-bar Koutline]))
                ((boundp 'current-menubar)
diff --git a/kotl/kotl-mode.el b/kotl/kotl-mode.el
index 16d5118..7e2f70c 100644
--- a/kotl/kotl-mode.el
+++ b/kotl/kotl-mode.el
@@ -267,11 +267,11 @@ It provides the following keys:
             #'kotl-mode:update-buffer nil t)
   (mapc #'make-local-variable
        '(indent-line-function indent-region-function
-         outline-isearch-open-invisible-function
-         line-move-ignore-invisible minor-mode-alist
-         selective-display-ellipses
-         paragraph-separate paragraph-start))
-  ;; Remove indication that buffer is narrowed.
+                            outline-isearch-open-invisible-function
+                            line-move-ignore-invisible minor-mode-alist
+                            selective-display-ellipses
+                            paragraph-separate paragraph-start))
+         ;; Remove indication that buffer is narrowed.
   (setq mode-line-format (copy-sequence mode-line-format)
         ;; FIXME: mode-line-format is a sequence, not a set!
        mode-line-format (set:remove "%n" mode-line-format))
@@ -289,10 +289,11 @@ It provides the following keys:
        paragraph-separate "^[ \t]*$\\|^\^L"
        paragraph-start "^[ \t]*$\\|^\^L"
        selective-display-ellipses t
-       track-eol t
-        ;; This major-mode setting must come after the local variable settings
-        ;; but before the koutline is formatted.
-        major-mode 'kotl-mode
+       track-eol t)
+  ;;
+  ;; This major-mode setting must come after the local variable settings but
+  ;; before the koutline is formatted.
+  (setq major-mode 'kotl-mode
        mode-name "Kotl"
        ;; Used when indenting cells.
         indent-tabs-mode nil)
diff --git a/man/hyperbole.html b/man/hyperbole.html
index 951ce28..bd2b5c6 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -1,7 +1,7 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
 <html>
 <!-- This manual is for GNU Hyperbole
-(Edition 7.0.2, Published November 23, 2017).
+(Edition 7.0.2a, Published December 12, 2017).
 
 Copyright (C) 1989-2017  Free Software Foundation, Inc.
 
@@ -275,14 +275,14 @@ ul.no-bullet {list-style: none}
     <li><a name="toc-Smart-Key-_002d-RDB-Mode-1" 
href="#Smart-Key-_002d-RDB-Mode">E.2.13 Smart Key - RDB Mode</a></li>
     <li><a name="toc-Smart-Key-_002d-Help-Buffers-1" 
href="#Smart-Key-_002d-Help-Buffers">E.2.14 Smart Key - Help Buffers</a></li>
     <li><a name="toc-Smart-Key-_002d-Pages-Directory-Mode-1" 
href="#Smart-Key-_002d-Pages-Directory-Mode">E.2.15 Smart Key - Pages Directory 
Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-Identifier-Menu-Mode-1" 
href="#Smart-Key-_002d-Identifier-Menu-Mode">E.2.16 Smart Key - Identifier Menu 
Mode</a></li>
-    <li><a name="toc-Smart-Key-_002d-C-Source-Code-1" 
href="#Smart-Key-_002d-C-Source-Code">E.2.17 Smart Key - C Source Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-C_002b_002b-Source-Code-1" 
href="#Smart-Key-_002d-C_002b_002b-Source-Code">E.2.18 Smart Key - C++ Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Assembly-Source-Code-1" 
href="#Smart-Key-_002d-Assembly-Source-Code">E.2.19 Smart Key - Assembly Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Lisp-Source-Code-1" 
href="#Smart-Key-_002d-Lisp-Source-Code">E.2.20 Smart Key - Lisp Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Java-Source-Code-1" 
href="#Smart-Key-_002d-Java-Source-Code">E.2.21 Smart Key - Java Source 
Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-JavaScript-Source-Code-1" 
href="#Smart-Key-_002d-JavaScript-Source-Code">E.2.22 Smart Key - JavaScript 
Source Code</a></li>
-    <li><a name="toc-Smart-Key-_002d-Python-Source-Code-1" 
href="#Smart-Key-_002d-Python-Source-Code">E.2.23 Smart Key - Python Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Python-Source-Code-1" 
href="#Smart-Key-_002d-Python-Source-Code">E.2.16 Smart Key - Python Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Identifier-Menu-Mode-1" 
href="#Smart-Key-_002d-Identifier-Menu-Mode">E.2.17 Smart Key - Identifier Menu 
Mode</a></li>
+    <li><a name="toc-Smart-Key-_002d-C-Source-Code-1" 
href="#Smart-Key-_002d-C-Source-Code">E.2.18 Smart Key - C Source Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-C_002b_002b-Source-Code-1" 
href="#Smart-Key-_002d-C_002b_002b-Source-Code">E.2.19 Smart Key - C++ Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Assembly-Source-Code-1" 
href="#Smart-Key-_002d-Assembly-Source-Code">E.2.20 Smart Key - Assembly Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Lisp-Source-Code-1" 
href="#Smart-Key-_002d-Lisp-Source-Code">E.2.21 Smart Key - Lisp Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-Java-Source-Code-1" 
href="#Smart-Key-_002d-Java-Source-Code">E.2.22 Smart Key - Java Source 
Code</a></li>
+    <li><a name="toc-Smart-Key-_002d-JavaScript-Source-Code-1" 
href="#Smart-Key-_002d-JavaScript-Source-Code">E.2.23 Smart Key - JavaScript 
Source Code</a></li>
     <li><a name="toc-Smart-Key-_002d-Objective_002dC-Source-Code-1" 
href="#Smart-Key-_002d-Objective_002dC-Source-Code">E.2.24 Smart Key - 
Objective-C Source Code</a></li>
     <li><a name="toc-Smart-Key-_002d-Fortran-Source-Code-1" 
href="#Smart-Key-_002d-Fortran-Source-Code">E.2.25 Smart Key - Fortran Source 
Code</a></li>
     <li><a name="toc-Smart-Key-_002d-Occurrence-Matches-1" 
href="#Smart-Key-_002d-Occurrence-Matches">E.2.26 Smart Key - Occurrence 
Matches</a></li>
@@ -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.2
-Printed November 23, 2017.
+Edition 7.0.2a
+Printed December 12, 2017.
 
   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.2 or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.2a 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,
@@ -3951,12 +3951,15 @@ with the frames menu instead, use Screen/FramesControl, 
<kbd>{C-h h s
 f}</kbd>.
 </p>
 <a name="index-submodes"></a>
+<a name="index-screen_002c-t"></a>
+<a name="index-screen_002c-q"></a>
+<a name="index-screen_002c-Q"></a>
 <p>Once in HyControl, your minibuffer window at the bottom of the
 selected frame will display a summary of keys you may use to adjust
-your windows until you press <kbd>{q}</kbd> to quit from HyControl.  The
-key, <kbd>{t}</kbd>, will always toggle between controlling frames and
-windows, the <em>submodes</em> of HyControl, with the upper left of the
-minibuffer prompt showing which type of control is active.
+your windows until you press <kbd>{q}</kbd> or <kbd>{Q}</kbd> to quit from
+HyControl.  The key, <kbd>{t}</kbd>, will always toggle between controlling
+frames and windows, the <em>submodes</em> of HyControl, with the upper
+left of the minibuffer prompt showing which type of control is active.
 </p>
 <a name="index-numeric-argument"></a>
 <a name="index-multiplier"></a>
@@ -4367,7 +4370,7 @@ sizes by which to zoom.
 <a name="index-HyControl-switch-modes"></a>
 <a name="index-HyControl-toggle-modes"></a>
 <a name="index-toggle-HyControl-mode"></a>
-<a name="index-screen_002c-t"></a>
+<a name="index-screen_002c-t-1"></a>
 <a name="index-t"></a>
 </dd>
 <dt><kbd>{t}</kbd></dt>
@@ -4377,7 +4380,7 @@ sizes by which to zoom.
 <a name="index-HyControl-exit"></a>
 <a name="index-quit-HyControl"></a>
 <a name="index-exit-HyControl"></a>
-<a name="index-screen_002c-q"></a>
+<a name="index-screen_002c-q-1"></a>
 <a name="index-q-1"></a>
 </dd>
 <dt><kbd>{q}</kbd></dt>
@@ -4511,10 +4514,12 @@ Next: <a href="#Creating-Outlines" accesskey="n" 
rel="next">Creating Outlines</a
 <h3 class="section">6.1 Menu Commands</h3>
 
 <p>The Kotl/ menu entry on the Hyperbole minibuffer menu provides access to
-a number of major outliner commands:
+a number of major Koutliner commands:
 </p>
 <a name="index-outliner-commands"></a>
 <a name="index-Koutliner-commands"></a>
+<a name="index-Koutliner-menu"></a>
+<a name="index-menu_002c-Koutliner"></a>
 <a name="index-kotl_002dmode_003ashow_002dall"></a>
 <a name="index-kvspec_003atoggle_002dblank_002dlines"></a>
 <a name="index-kfile_003afind"></a>
@@ -4526,7 +4531,6 @@ a number of major outliner commands:
 <a name="index-kotl_002dmode_003ashow_002dtree"></a>
 <a name="index-kotl_002dmode_003atop_002dcells"></a>
 <a name="index-kvspec_003aactivate"></a>
-<a name="index-menu_002c-Outline"></a>
 <div class="example">
 <pre class="example">Menu Item    Command                    Description
 ====================================================================
@@ -4546,8 +4550,12 @@ Vspec        kvspec:activate            Set a view 
specification
 ====================================================================
 </pre></div>
 
+<a name="index-C_002dmouse_002d3"></a>
+<a name="index-popup-menu_002c-Koutliner"></a>
+<a name="index-menubar-menu_002c-Koutliner"></a>
 <p>The popup and menubar Koutline menu, as displayed here, offers a more
-complete set of the Koutliner commands.  Experiment with the menu or
+complete set of the Koutliner commands.  <kbd>{C-mouse-3}</kbd> pops up the
+mode-specific menu in Emacs.  Experiment with the menu or
 read the following sections explaining commands.
 </p>
 <div class="float"><a name="image_003aKoutline-Menu"></a>
@@ -5776,14 +5784,24 @@ so.
 
 <img src="im/menu-rolo.png" alt="HyRolo Menu">
 <div class="float-caption"><p><strong>Image 7.1: </strong>HyRolo 
Menu</p></div></div>
-<a name="index-rolo-menu"></a>
+<a name="index-Rolo-menu"></a>
 <a name="index-HyRolo-menu"></a>
+<a name="index-menu_002c-HyRolo"></a>
+<a name="index-menu_002c-Rolo-1"></a>
+<a name="index-C_002dmouse_002d3-1"></a>
+<a name="index-popup-menu_002c-HyRolo"></a>
+<a name="index-popup-menu_002c-Rolo"></a>
+<a name="index-menubar-menu_002c-HyRolo"></a>
+<a name="index-menubar-menu_002c-Rolo"></a>
 <p>The Rolo/ menu entry on the Hyperbole minibuffer menu provides the same
-set of commands as the menubar menu, with more concise labels.
-The Rolo/ menu offers the following commands:
+set of commands as the menubar and popup menus, with more concise labels.
+<kbd>{C-mouse-3}</kbd> pops up the mode-specific menu in Emacs.  Experiment 
with
+the menu or read the following sections explaining commands.
+</p>
+<p>The minibuffer Rolo/ menu offers the following commands:
 </p>
-<a name="index-rolo-commands"></a>
-<a name="index-hyrolo-commands"></a>
+<a name="index-Rolo-commands"></a>
+<a name="index-HyRolo-commands"></a>
 <a name="index-hyrolo_002dadd"></a>
 <a name="index-hyrolo_002ddisplay_002dmatches"></a>
 <a name="index-hyrolo_002dedit"></a>
@@ -7256,6 +7274,12 @@ the current buffer.  This number makes the label unique 
and so allows
 any number of buttons with the same base label within a single buffer.
 </p>
 </dd>
+<dt><b>Jedi</b></dt>
+<dd><p>See also <a 
href="https://tkf.github.io/emacs-jedi/latest/";>https://tkf.github.io/emacs-jedi/latest/</a>.
+</p>
+<p>Jedi is a Emacs package for Python completion, definition and documentation 
lookup.
+</p>
+</dd>
 <dt><b>Koutline</b></dt>
 <dd><p>A hierarchically ordered grouping of cells which may be stored as a file
 and viewed and edited as an outline.
@@ -7311,7 +7335,9 @@ menus end with a forward slash, 
&lsquo;<samp>/</samp>&rsquo;.
 </p>
 </dd>
 <dt><b>The OO-Browser</b></dt>
-<dd><p>The GNU OO-Browser is a multi-windowed, interactive object-oriented 
class
+<dd><p>See also <a 
href="https://www.gnu.org/software/oo-browser";>https://www.gnu.org/software/oo-browser</a>.
+</p>
+<p>The GNU OO-Browser is a multi-windowed, interactive object-oriented class
 browser similar in use to the well-known Smalltalk browsers.  It runs
 inside Emacs.  It is unique in a number of respects foremost of which is
 that it works well with most major object-oriented languages in use today.
@@ -9421,9 +9447,13 @@ See <a 
href="#Displaying-File-and-Buffer-Items">Displaying File and Buffer Items
          collapse the entry;
      (2) elsewhere within an entry line, the item is displayed for editing,
          normally in another window;
-     (3) on the first line of the buffer (other than the end of line),
+     (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;
+     (4) on the first line of the buffer (other than the end of line),
          dired is run on the current directory of this Treemacs;
-     (4) at the end of the first or last line of the buffer,
+     (5) at the end of the first or last line of the buffer,
          this Treemacs invocation is quit.
 </pre></div>
 
@@ -9805,13 +9835,44 @@ When pressed on a pages-directory-mode entry line:
 </pre></div>
 
 <hr>
+<a name="Smart-Key-_002d-Python-Source-Code"></a>
+<div class="header">
+<p>
+Next: <a href="#Smart-Key-_002d-Objective_002dC-Source-Code" accesskey="n" 
rel="next">Smart Key - Objective-C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-JavaScript-Source-Code" accesskey="p" rel="prev">Smart 
Key - JavaScript Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
+</div>
+<a name="Smart-Key-_002d-Python-Source-Code-1"></a>
+<h4 class="subsection">E.2.16 Smart Key - Python Source Code</h4>
+<div class="format">
+<pre class="format">When the Jedi identifier server or the OO-Browser has been 
loaded and the press is
+within a Python buffer:
+  ACTION KEY or ASSIST KEY
+     Jumps to the definition of the selected Python construct:
+     (1) on an &lsquo;import&rsquo; line, the referent is displayed;
+     (2) within a method declaration, its definition is displayed;
+     (3) on a class name, the class definition is shown;
+     (4) on a unique identifier reference, its definition is shown (when
+         possible).
+</pre></div>
+
+<div class="format">
+<pre class="format">When pressed within a Python source code file (without the 
OO-Browser):
+  ACTION KEY
+     Jumps to the definition of the selected Python identifier,
+     assuming the identifier is found within an &quot;etags&quot; generated
+     tags file within the current directory or any of its ancestor
+     directories.
+  ASSIST KEY
+     Jumps to the next tag matching an identifier at point.
+</pre></div>
+
+<hr>
 <a name="Smart-Key-_002d-Identifier-Menu-Mode"></a>
 <div class="header">
 <p>
 Next: <a href="#Smart-Key-_002d-C-Source-Code" accesskey="n" rel="next">Smart 
Key - C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Pages-Directory-Mode" accesskey="p" rel="prev">Smart Key 
- Pages Directory Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Identifier-Menu-Mode-1"></a>
-<h4 class="subsection">E.2.16 Smart Key - Identifier Menu Mode</h4>
+<h4 class="subsection">E.2.17 Smart Key - Identifier Menu Mode</h4>
 
 <div class="format">
 <pre class="format">This works only for identifiers defined within the same 
source file in which they are referenced.
@@ -9834,7 +9895,7 @@ When pressed on an identifier name after an identifier 
index has been generated:
 Next: <a href="#Smart-Key-_002d-C_002b_002b-Source-Code" accesskey="n" 
rel="next">Smart Key - C++ Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Identifier-Menu-Mode" accesskey="p" rel="prev">Smart Key 
- Identifier Menu Mode</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-C-Source-Code-1"></a>
-<h4 class="subsection">E.2.17 Smart Key - C Source Code</h4>
+<h4 class="subsection">E.2.18 Smart Key - C Source Code</h4>
 
 <a name="index-smart_002dc_002dcpp_002dinclude_002dpath"></a>
 <a name="index-smart_002dc_002dinclude_002dpath"></a>
@@ -9866,7 +9927,7 @@ Next: <a href="#Smart-Key-_002d-C_002b_002b-Source-Code" 
accesskey="n" rel="next
 Next: <a href="#Smart-Key-_002d-Assembly-Source-Code" accesskey="n" 
rel="next">Smart Key - Assembly Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-C-Source-Code" accesskey="p" rel="prev">Smart Key - C 
Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-C_002b_002b-Source-Code-1"></a>
-<h4 class="subsection">E.2.18 Smart Key - C++ Source Code</h4>
+<h4 class="subsection">E.2.19 Smart Key - C++ Source Code</h4>
 
 <a name="index-c_002b_002b_002dcpp_002dinclude_002dpath"></a>
 <a name="index-c_002b_002b_002dinclude_002dpath"></a>
@@ -9919,7 +9980,7 @@ buffer:
 Next: <a href="#Smart-Key-_002d-Lisp-Source-Code" accesskey="n" 
rel="next">Smart Key - Lisp Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-C_002b_002b-Source-Code" accesskey="p" rel="prev">Smart 
Key - C++ Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Assembly-Source-Code-1"></a>
-<h4 class="subsection">E.2.19 Smart Key - Assembly Source Code</h4>
+<h4 class="subsection">E.2.20 Smart Key - Assembly Source Code</h4>
 
 <a name="index-smart_002dasm_002dinclude_002dpath"></a>
 <div class="format">
@@ -9944,7 +10005,7 @@ Next: <a href="#Smart-Key-_002d-Lisp-Source-Code" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-Java-Source-Code" accesskey="n" 
rel="next">Smart Key - Java Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Assembly-Source-Code" accesskey="p" rel="prev">Smart Key 
- Assembly Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Lisp-Source-Code-1"></a>
-<h4 class="subsection">E.2.20 Smart Key - Lisp Source Code</h4>
+<h4 class="subsection">E.2.21 Smart Key - Lisp Source Code</h4>
 
 <div class="format">
 <pre class="format">When pressed on a Lisp symbol within any of these types of 
buffers
@@ -9966,7 +10027,7 @@ Next: <a href="#Smart-Key-_002d-Java-Source-Code" 
accesskey="n" rel="next">Smart
 Next: <a href="#Smart-Key-_002d-JavaScript-Source-Code" accesskey="n" 
rel="next">Smart Key - JavaScript Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Lisp-Source-Code" accesskey="p" rel="prev">Smart Key - 
Lisp Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-Java-Source-Code-1"></a>
-<h4 class="subsection">E.2.21 Smart Key - Java Source Code</h4>
+<h4 class="subsection">E.2.22 Smart Key - Java Source Code</h4>
 
 <a name="index-smart_002djava_002dpackage_002dpath"></a>
 <div class="format">
@@ -10009,7 +10070,7 @@ buffer:
 Next: <a href="#Smart-Key-_002d-Python-Source-Code" accesskey="n" 
rel="next">Smart Key - Python Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-Java-Source-Code" accesskey="p" rel="prev">Smart Key - 
Java Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" accesskey="u" 
rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" title="Table 
of contents" rel="contents">Contents</a>][<a href="#Key-Index" title="Index" 
rel="index">Index</a>]</p>
 </div>
 <a name="Smart-Key-_002d-JavaScript-Source-Code-1"></a>
-<h4 class="subsection">E.2.22 Smart Key - JavaScript Source Code</h4>
+<h4 class="subsection">E.2.23 Smart Key - JavaScript Source Code</h4>
 
 <div class="format">
 <pre class="format">When pressed within a JavaScript source code file:
@@ -10024,37 +10085,6 @@ Next: <a href="#Smart-Key-_002d-Python-Source-Code" 
accesskey="n" rel="next">Sma
 
 
 <hr>
-<a name="Smart-Key-_002d-Python-Source-Code"></a>
-<div class="header">
-<p>
-Next: <a href="#Smart-Key-_002d-Objective_002dC-Source-Code" accesskey="n" 
rel="next">Smart Key - Objective-C Source Code</a>, Previous: <a 
href="#Smart-Key-_002d-JavaScript-Source-Code" accesskey="p" rel="prev">Smart 
Key - JavaScript Source Code</a>, Up: <a href="#Smart-Keyboard-Keys" 
accesskey="u" rel="up">Smart Keyboard Keys</a> &nbsp; [<a href="#SEC_Contents" 
title="Table of contents" rel="contents">Contents</a>][<a href="#Key-Index" 
title="Index" rel="index">Index</a>]</p>
-</div>
-<a name="Smart-Key-_002d-Python-Source-Code-1"></a>
-<h4 class="subsection">E.2.23 Smart Key - Python Source Code</h4>
-<div class="format">
-<pre class="format">When the OO-Browser has been loaded and the press is 
within a Python
-buffer:
-  ACTION KEY or ASSIST KEY
-     Jumps to the definition of the selected Python construct:
-     (1) on an &lsquo;import&rsquo; line, the referent is displayed;
-     (2) within a method declaration, its definition is displayed;
-     (3) on a class name, the class definition is shown;
-     (4) on a unique identifier reference, its definition is shown (when
-         possible).
-</pre></div>
-
-<div class="format">
-<pre class="format">When pressed within a Python source code file (without the 
OO-Browser):
-  ACTION KEY
-     Jumps to the definition of the selected Python identifier,
-     assuming the identifier is found within an &quot;etags&quot; generated
-     tags file within the current directory or any of its ancestor
-     directories.
-  ASSIST KEY
-     Jumps to the next tag matching an identifier at point.
-</pre></div>
-
-<hr>
 <a name="Smart-Key-_002d-Objective_002dC-Source-Code"></a>
 <div class="header">
 <p>
@@ -11323,6 +11353,8 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-C_002dh-t"><code>C-h 
t</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Hyperbole-Overview">Hyperbole Overview</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-C_002dM_002dh"><code>C-M-h</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Hiding-and-Showing">Hiding and Showing</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-C_002dM_002dx"><code>C-M-x</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Creating-Types">Creating Types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-C_002dmouse_002d3"><code>C-mouse-3</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Menu-Commands">Menu Commands</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-C_002dmouse_002d3-1"><code>C-mouse-3</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-C_002dt"><code>C-t</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-C_002du-C_002dc-c"><code>C-u C-c 
c</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-C_002du-C_002dc-C_002dc"><code>C-u C-c 
C-c</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
@@ -11508,10 +11540,13 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-screen_002c-O"><code>screen, 
O</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-p"><code>screen, 
p</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-q"><code>screen, 
q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-screen_002c-Q"><code>screen, 
Q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-screen_002c-q-1"><code>screen, 
q</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-r"><code>screen, 
r</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-right"><code>screen, 
right</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-s"><code>screen, 
s</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-t"><code>screen, 
t</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-screen_002c-t-1"><code>screen, 
t</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-u"><code>screen, 
u</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-up"><code>screen, 
up</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-screen_002c-w"><code>screen, 
w</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -12703,7 +12738,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-hypertext-1">hypertext</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-hypertext-2">hypertext</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-HyRolo">HyRolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo">HyRolo</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-hyrolo-commands">hyrolo 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-HyRolo-commands">HyRolo 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-hyrolo-matches">hyrolo 
matches</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-HyRolo-Match-Buffers">Smart Key - HyRolo Match 
Buffers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-HyRolo-menu">HyRolo 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-hyrolo-menu">hyrolo 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Keys">HyRolo 
Keys</a></td></tr>
@@ -12806,6 +12841,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-koutline-link">koutline 
link</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-koutline-mode">koutline 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Inserting-and-Importing">Inserting and Importing</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-Koutliner-commands">Koutliner 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Menu-Commands">Menu 
Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Koutliner-menu">Koutliner 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Menu-Commands">Menu 
Commands</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Koutliner_002c-toggle-tab-behavior">Koutliner, toggle tab 
behavior</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Relocating-and-Copying">Relocating and Copying</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Concept-Index_cp_letter-L">L</a></th><td></td><td></td></tr>
@@ -12919,17 +12955,19 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Gbut-1">menu, 
Gbut</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Global_002dButton">menu, 
Global-Button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Global-Buttons">Global Buttons</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Global_002dButton-1">menu, 
Global-Button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menu_002c-HyRolo">menu, 
HyRolo</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Ibut">menu, 
Ibut</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Implicit_002dButton">menu, 
Implicit-Button</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-KeyBindings">menu, 
KeyBindings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Kotl">menu, 
Kotl</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Koutline">menu, 
Koutline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menu_002c-Koutliner">menu, 
Koutliner</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menu-Commands">Menu Commands</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Mail_002dLists">menu, 
Mail-Lists</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Msg">menu, 
Msg</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-menu_002c-Outline">menu, 
Outline</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Menu-Commands">Menu 
Commands</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Outline_002fExample">menu, 
Outline/Example</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Koutliner">Koutliner</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Outliner">menu, 
Outliner</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Rolo">menu, 
Rolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menu_002c-Rolo-1">menu, 
Rolo</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Screen">menu, 
Screen</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Toggle_002dRolo_002dDates">menu, 
Toggle-Rolo-Dates</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu_002c-top_002dlevel">menu, 
top-level</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
@@ -12940,6 +12978,9 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-menu_002c-Web-2">menu, 
Web</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-menu_002c-WinConfig">menu, 
WinConfig</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu_002c-Window_002dConfigurations">menu, 
Window-Configurations</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-menubar-menu_002c-HyRolo">menubar menu, 
HyRolo</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-menubar-menu_002c-Koutliner">menubar menu, 
Koutliner</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menu-Commands">Menu Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-menubar-menu_002c-Rolo">menubar 
menu, Rolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Menu">HyRolo Menu</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menubar_002c-Hyperbole-menu">menubar, 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-Messages-buffer">Messages 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-MH_002de">MH-e</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-Mail">Buttons in Mail</a></td></tr>
@@ -13049,6 +13090,9 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-permanent-identifier-1">permanent 
identifier</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Idstamps">Idstamps</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-pipe-character">pipe 
character</a>:</td><td>&nbsp;</td><td valign="top"><a href="#View-Specs">View 
Specs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-popup-menu">popup 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-popup-menu_002c-HyRolo">popup 
menu, HyRolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Menu">HyRolo Menu</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-popup-menu_002c-Koutliner">popup 
menu, Koutliner</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menu-Commands">Menu Commands</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-popup-menu_002c-Rolo">popup 
menu, Rolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Menu">HyRolo Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-posting-buttons">posting 
buttons</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-Mail">Buttons in Mail</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-posting-news">posting 
news</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-News">Buttons in News</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-precedence_002c-buttons">precedence, 
buttons</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Type-Precedence">Button Type Precedence</a></td></tr>
@@ -13088,11 +13132,11 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-Rmail">Rmail</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Buttons-in-Mail">Buttons in Mail</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Rolo">Rolo</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo">HyRolo</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-address">rolo 
address</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Buttons">Implicit Buttons</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-rolo-commands">rolo 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Rolo-commands">Rolo 
commands</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-entry">rolo 
entry</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Concepts">HyRolo Concepts</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-file">rolo 
file</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Concepts">HyRolo 
Concepts</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-keys">rolo 
keys</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Keys">HyRolo 
Keys</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-rolo-menu">rolo 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-Rolo-menu">Rolo 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Menu">HyRolo 
Menu</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo-searching">rolo 
searching</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Searching">HyRolo Searching</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo_002c-buttons-in">rolo, 
buttons in</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo">HyRolo</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo_002c-datestamps">rolo, 
datestamps</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index 8d541d6..24fd99a 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index a4ca5b6..314f65f 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 86dc5da..c699a03 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -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.2
-Printed November 23, 2017.
+Edition 7.0.2a
+Printed December 12, 2017.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -176,7 +176,7 @@ Printed November 23, 2017.
 
 @center The Everyday Hypertextual Information Manager
 
address@hidden Edition 7.0.2, November 23, 2017.
address@hidden Edition 7.0.2a, December 12, 2017.
 
 @sp 2
 @noindent
@@ -462,7 +462,7 @@ Smart Keyboard Keys
 @chapter Introduction
 
 This edition of the GNU Hyperbole Manual is for use with any version
-7.0.2 or greater of GNU Hyperbole.  Hyperbole runs atop GNU Emacs 24.3
+7.0.2a 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,
@@ -3229,12 +3229,15 @@ with the frames menu instead, use Screen/FramesControl, 
@bkbd{C-h h s
 f}.
 
 @cindex submodes
address@hidden screen, t
address@hidden screen, q
address@hidden screen, Q
 Once in HyControl, your minibuffer window at the bottom of the
 selected frame will display a summary of keys you may use to adjust
-your windows until you press @bkbd{q} to quit from HyControl.  The
-key, @bkbd{t}, will always toggle between controlling frames and
-windows, the @dfn{submodes} of HyControl, with the upper left of the
-minibuffer prompt showing which type of control is active.
+your windows until you press @bkbd{q} or @bkbd{Q} to quit from
+HyControl.  The key, @bkbd{t}, will always toggle between controlling
+frames and windows, the @dfn{submodes} of HyControl, with the upper
+left of the minibuffer prompt showing which type of control is active.
 
 @cindex numeric argument
 @cindex multiplier
@@ -3680,10 +3683,12 @@ commands available in the Koutliner.
 @section   Menu Commands
 
 The Kotl/ menu entry on the Hyperbole minibuffer menu provides access to
-a number of major outliner commands:
+a number of major Koutliner commands:
 
 @cindex outliner commands
 @cindex Koutliner commands
address@hidden Koutliner menu
address@hidden menu, Koutliner
 @findex kotl-mode:show-all
 @findex kvspec:toggle-blank-lines
 @findex kfile:find
@@ -3695,7 +3700,6 @@ a number of major outliner commands:
 @findex kotl-mode:show-tree
 @findex kotl-mode:top-cells
 @findex kvspec:activate
address@hidden menu, Outline
 @example
 Menu Item    Command                    Description
 ====================================================================
@@ -3716,8 +3720,12 @@ Vspec        kvspec:activate            Set a view 
specification
 @end example
 
 @page
address@hidden C-mouse-3
address@hidden popup menu, Koutliner
address@hidden menubar menu, Koutliner
 The popup and menubar Koutline menu, as displayed here, offers a more
-complete set of the Koutliner commands.  Experiment with the menu or
+complete set of the Koutliner commands.  @bkbd{C-mouse-3} pops up the
+mode-specific menu in Emacs.  Experiment with the menu or
 read the following sections explaining commands.
 
 @float Image,image:Koutline Menu
@@ -4750,14 +4758,24 @@ so.
 @end float
 @page
 
address@hidden rolo menu
address@hidden Rolo menu
 @cindex HyRolo menu
address@hidden menu, HyRolo
address@hidden menu, Rolo
address@hidden C-mouse-3
address@hidden popup menu, HyRolo
address@hidden popup menu, Rolo
address@hidden menubar menu, HyRolo
address@hidden menubar menu, Rolo
 The Rolo/ menu entry on the Hyperbole minibuffer menu provides the same
-set of commands as the menubar menu, with more concise labels.
-The Rolo/ menu offers the following commands:
+set of commands as the menubar and popup menus, with more concise labels.
address@hidden pops up the mode-specific menu in Emacs.  Experiment with
+the menu or read the following sections explaining commands.
+
+The minibuffer Rolo/ menu offers the following commands:
 
address@hidden rolo commands
address@hidden hyrolo commands
address@hidden Rolo commands
address@hidden HyRolo commands
 @findex hyrolo-add
 @findex hyrolo-display-matches
 @findex hyrolo-edit
@@ -6015,6 +6033,11 @@ when the button's label duplicates the label of an 
existing button in
 the current buffer.  This number makes the label unique and so allows
 any number of buttons with the same base label within a single buffer.
 
address@hidden Jedi
+See also @url{https://tkf.github.io/emacs-jedi/latest/}.
+
+Jedi is a Emacs package for Python completion, definition and documentation 
lookup.
+
 @item Koutline
 A hierarchically ordered grouping of cells which may be stored as a file
 and viewed and edited as an outline.
@@ -6060,6 +6083,8 @@ See @b{Augment}.
 See @b{Link} or @b{Cell}.
 
 @item The OO-Browser
+See also @url{https://www.gnu.org/software/oo-browser}.
+
 The GNU OO-Browser is a multi-windowed, interactive object-oriented class
 browser similar in use to the well-known Smalltalk browsers.  It runs
 inside Emacs.  It is unique in a number of respects foremost of which is
@@ -7854,9 +7879,13 @@ When in a Treemacs file browser buffer:
          collapse the entry;
      (2) elsewhere within an entry line, the item is displayed for editing,
          normally in another window;
-     (3) on the first line of the buffer (other than the end of line),
+     (3) at the end of an entry line: invoke @code{action-key-eol-function},
+         typically to scroll up proportionally, if an Action Key press; invoke
+         @code{assist-key-eol-function}, typically to scroll down 
proportionally,
+         if an Asisst Key press;
+     (4) on the first line of the buffer (other than the end of line),
          dired is run on the current directory of this Treemacs;
-     (4) at the end of the first or last line of the buffer,
+     (5) at the end of the first or last line of the buffer,
          this Treemacs invocation is quit.
 @end group
 @end format
@@ -8205,6 +8234,35 @@ When pressed on a pages-directory-mode entry line:
 @end group
 @end format
 
address@hidden Smart Key - Python Source Code, Smart Key - Objective-C Source 
Code, Smart Key - JavaScript Source Code, Smart Keyboard Keys
address@hidden Smart Key - Python Source Code
address@hidden
address@hidden
+When the Jedi identifier server or the OO-Browser has been loaded and the 
press is
+within a Python buffer:
+  ACTION KEY or ASSIST KEY
+     Jumps to the definition of the selected Python construct:
+     (1) on an `import' line, the referent is displayed;
+     (2) within a method declaration, its definition is displayed;
+     (3) on a class name, the class definition is shown;
+     (4) on a unique identifier reference, its definition is shown (when
+         possible).
address@hidden group
address@hidden format
+
address@hidden
address@hidden
+When pressed within a Python source code file (without the OO-Browser):
+  ACTION KEY
+     Jumps to the definition of the selected Python identifier,
+     assuming the identifier is found within an "etags" generated
+     tags file within the current directory or any of its ancestor
+     directories.
+  ASSIST KEY
+     Jumps to the next tag matching an identifier at point.
address@hidden group
address@hidden format
+
 @page
 @node Smart Key - Identifier Menu Mode , Smart Key - C Source Code, Smart Key 
- Pages Directory Mode, Smart Keyboard Keys
 @subsection Smart Key - Identifier Menu Mode 
@@ -8404,35 +8462,6 @@ When pressed within a JavaScript source code file:
 @end format
 
 
address@hidden Smart Key - Python Source Code, Smart Key - Objective-C Source 
Code, Smart Key - JavaScript Source Code, Smart Keyboard Keys
address@hidden Smart Key - Python Source Code
address@hidden
address@hidden
-When the OO-Browser has been loaded and the press is within a Python
-buffer:
-  ACTION KEY or ASSIST KEY
-     Jumps to the definition of the selected Python construct:
-     (1) on an `import' line, the referent is displayed;
-     (2) within a method declaration, its definition is displayed;
-     (3) on a class name, the class definition is shown;
-     (4) on a unique identifier reference, its definition is shown (when
-         possible).
address@hidden group
address@hidden format
-
address@hidden
address@hidden
-When pressed within a Python source code file (without the OO-Browser):
-  ACTION KEY
-     Jumps to the definition of the selected Python identifier,
-     assuming the identifier is found within an "etags" generated
-     tags file within the current directory or any of its ancestor
-     directories.
-  ASSIST KEY
-     Jumps to the next tag matching an identifier at point.
address@hidden group
address@hidden format
-
 @node Smart Key - Objective-C Source Code, Smart Key - Fortran Source Code, 
Smart Key - Python Source Code, Smart Keyboard Keys
 @subsection Smart Key - Objective-C Source Code
 
diff --git a/man/version.texi b/man/version.texi
index 6b3f9c3..381bfab 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
address@hidden UPDATED November 23, 2017
address@hidden UPDATED-MONTH Nov 2017
address@hidden EDITION 7.0.2
address@hidden VERSION 7.0.2
address@hidden UPDATED December 12, 2017
address@hidden UPDATED-MONTH Dec 2017
address@hidden EDITION 7.0.2a
address@hidden VERSION 7.0.2a



reply via email to

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