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

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

[elpa] externals/hyperbole 55a1f04 06/53: 2017-09-18 Bob Weiner <address


From: Robert Weiner
Subject: [elpa] externals/hyperbole 55a1f04 06/53: 2017-09-18 Bob Weiner <address@hidden>
Date: Wed, 15 Nov 2017 22:46:58 -0500 (EST)

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

    2017-09-18  Bob Weiner  <address@hidden>
    
    * hui-mouse.el (smart-helm): Finalized and added doc. of contexts and 
actions.
    
    * hui-window.el (smart-coords-in-window-p):
                    (hmouse-drag-window-side): Handled null value of coords.
    
    2017-09-17  Bob Weiner  <address@hidden>
    
    * hui-mouse.el (hkey-alist): Changed minibuffer handling to support Helm.
    
    * man/hkey-help.txt: Small updates to Special Mode doc.
    
    * hmouse-key.el (hmouse-add-unshifted-keys): Added to allow user init
        of unshifted Smart Keys.  For GNU Emacs only, this binds
        [mouse-2] to the Action Key and [mouse-3] to the Assist Key.
      man/hyperbole.texi (Smart Key Bindings): Added doc for 
hmouse-add-unshifted-keys.
    
    * hmouse-sh.el (hmouse-get-unshifted-bindings): Uncommented inclusion of
       mouse-3 for times when user manually sets mouse-3 as the Assist Key.
       Otherwise, hmouse-toggle-bindings will never change its value.
                   (hmouse-bind-key, hmouse-bind-shifted-key): Added and used
       these to ensure depress and release bindings are wholly reset before
       rebinding them under GNU Emacs.
    
    2017-09-14  Bob Weiner  <address@hidden>
    
    * hpath.el (hpath:external-open-office-suffixes): Added .odt suffix.
    
    * hui-select.el (hui-select-at-p): Protect against empty buffer error.
    
    2017-09-12  Bob Weiner  <address@hidden>
    
    * hibtypes.el (grep-msg):
                  (pathname): Don't match in helm completion buffers.
    
    * hui-mouse.el (smart-helm-line-has-action): Ignore any actions helm
        imputes to header lines and candidate separator lines in helm
        completion buffers, as they are non-actionable lines.  Also, ignore
        if at the end of the buffer.
                   (hkey-alist): Lowered smart-helm priority so can use Smart
        Key end-of-line functions in such buffers.
    
    * hsys-www.el (eww-link-at-point): Basic stylistic improvements.
    
    2017-09-11  Bob Weiner  <address@hidden>
    
    hyrolo.el: Added basic commentary to the file header.
---
 Changes            |  61 ++++++++-
 hibtypes.el        |  62 +++++----
 hmouse-key.el      |   5 +
 hmouse-sh.el       | 391 +++++++++++++++++++++++++++++++++--------------------
 hpath.el           |   2 +-
 hsys-www.el        |  23 ++--
 hui-mouse.el       | 172 +++++++++++++++--------
 hui-select.el      |  21 +--
 hui-window.el      |   6 +-
 hyrolo.el          |   8 ++
 man/hkey-help.txt  |   5 +-
 man/hyperbole.texi |  14 +-
 12 files changed, 504 insertions(+), 266 deletions(-)

diff --git a/Changes b/Changes
index d84e6c2..44b7f55 100644
--- a/Changes
+++ b/Changes
@@ -1,13 +1,64 @@
+2017-09-18  Bob Weiner  <address@hidden>
+
+* hui-mouse.el (smart-helm): Finalized and added doc. of contexts and actions.
+
+* hui-window.el (smart-coords-in-window-p):
+                (hmouse-drag-window-side): Handled null value of coords.
+
+2017-09-17  Bob Weiner  <address@hidden>
+
+* hui-mouse.el (hkey-alist): Changed minibuffer handling to support Helm.
+
+* man/hkey-help.txt: Small updates to Special Mode doc.
+
+* hmouse-key.el (hmouse-add-unshifted-keys): Added to allow user init
+    of unshifted Smart Keys.  For GNU Emacs only, this binds
+    [mouse-2] to the Action Key and [mouse-3] to the Assist Key.
+  man/hyperbole.texi (Smart Key Bindings): Added doc for 
hmouse-add-unshifted-keys.
+
+* hmouse-sh.el (hmouse-get-unshifted-bindings): Uncommented inclusion of
+   mouse-3 for times when user manually sets mouse-3 as the Assist Key.
+   Otherwise, hmouse-toggle-bindings will never change its value.
+               (hmouse-bind-key, hmouse-bind-shifted-key): Added and used
+   these to ensure depress and release bindings are wholly reset before
+   rebinding them under GNU Emacs.
+
+2017-09-14  Bob Weiner  <address@hidden>
+
+* hpath.el (hpath:external-open-office-suffixes): Added .odt suffix.
+
+* hui-select.el (hui-select-at-p): Protect against empty buffer error.
+
+2017-09-12  Bob Weiner  <address@hidden>
+
+* hibtypes.el (grep-msg):
+              (pathname): Don't match in helm completion buffers.
+
+* hui-mouse.el (smart-helm-line-has-action): Ignore any actions helm
+    imputes to header lines and candidate separator lines in helm
+    completion buffers, as they are non-actionable lines.  Also, ignore
+    if at the end of the buffer.
+               (hkey-alist): Lowered smart-helm priority so can use Smart
+    Key end-of-line functions in such buffers.
+
+* hsys-www.el (eww-link-at-point): Basic stylistic improvements.
+
+2017-09-11  Bob Weiner  <address@hidden>
+
+hyrolo.el: Added basic commentary to the file header.
+
 2017-09-10  Bob Weiner  <address@hidden>
 
 * hui-mouse.el (smart-helm, smart-helm-assist, smart-helm-line-has-action):
   hsettings.el (helm-allow-mouse): Set to t.
     New helm completion activation support.
-    Added to allow mouse direct selection of helm completion items.  The
-    smart-helm function behaves similarly to the {C-j} and {C-z} key bindings
-    that helm mode provides when a helm completion is active but the Smart
-    Keys work in the completions buffer regardless of whether a helm
-    completion is active or not.
+    Added to allow mouse direct selection of helm completion items and to see
+    match item actions prior to invoking them.  The smart-helm function
+    behaves similarly to the {C-j} and {C-z} key bindings that helm mode
+    provides when a helm completion is active. If helm is not active,
+    Hyperbole resumes the prior helm session before triggering the action. 
+    The smart-helm-assist function displays the match item and its associated
+    action.
 
 * hsys-www.el (www-url): Added Action and Assist Key support for browsing
     links in eww (the Emacs web browser) and for activating history links
diff --git a/hibtypes.el b/hibtypes.el
index 33acc24..795bd6a 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -85,10 +85,11 @@ See `hpath:suffixes' variable documentation for suffixes 
that are added to or
 removed from pathname when searching for a valid match.
 See `hpath:find' function documentation for special file display options."
   ;;
-  ;; Ignore paths in Buffer menu and dired modes.
-  (unless (delq nil (mapcar (lambda (substring) (string-match
-                                                substring (format-mode-line 
mode-name)))
-                           '("Buffer Menu" "IBuffer" "Dired")))
+  ;; Ignore paths in Buffer menu, dired and helm modes.
+  (unless (or (eq major-mode 'helm-major-mode)
+             (delq nil (mapcar (lambda (substring) (string-match
+                                                    substring 
(format-mode-line mode-name)))
+                               '("Buffer Menu" "IBuffer" "Dired"))))
     (let ((path (hpath:at-p))
          full-path)
       (if path
@@ -103,7 +104,7 @@ See `hpath:find' function documentation for special file 
display options."
                   (if full-path
                       (hact 'link-to-file full-path)
                     (hact 'error "(pathname): \"%s\" not found in `load-path'"
-                                 path)))
+                          path)))
                  ;; Match only if "(filename)" references a valid Info file
                  ;; and point is within the filename, not on any delimiters
                  ;; so that delimited thing matches trigger later.
@@ -559,34 +560,35 @@ location from which to retrieve RFCs."
 (defib grep-msg ()
   "Jumps to line associated with grep or compilation error msgs.
 Messages are recognized in any buffer."
-  (progn
-    ;; Locate and parse grep messages found in any buffer.
+  ;; Locate and parse grep messages found in any buffer other than a
+  ;; helm completion buffer.
+  (unless (eq major-mode 'helm-major-mode)
     (save-excursion
       (beginning-of-line)
       (if (or
-           ;; UNIX C compiler and Introl 68HC11 C compiler errors
-           (looking-at "\\([^ \t\n\r:]+\\): ?\\([0-9]+\\)[ :]")
-           ;; HP C compiler errors
-           (looking-at
-            "[a-zA-Z0-9]+: \"\\([^\t\n\r\",]+\\)\", line \\([0-9]+\\):")
-           ;; BSO/Tasking 68HC08 C compiler errors
-           (looking-at
-            "[a-zA-Z 0-9]+: \\([^ \t\n\r\",]+\\) line \\([0-9]+\\)[ \t]*:")
-           ;; UNIX Lint errors
-           (looking-at "[^:]+: \\([^ \t\n\r:]+\\): line \\([0-9]+\\):")
-           ;; SparcWorks C compiler errors (ends with :)
-           ;; IBM AIX xlc C compiler errors (ends with .)
-           (looking-at "\"\\([^\"]+\\)\", line \\([0-9]+\\)[:.]")
-           ;; Introl as11 assembler errors
-           (looking-at " \\*+ \\([^ \t\n\r]+\\) - \\([0-9]+\\) ")
-           ;; perl5: ... at file.c line 10
-           (looking-at ".+ at \\([^ \t\n\r]+\\) line +\\([0-9]+\\)")
-           ;; Weblint
-           (looking-at "\\([^ \t\n\r:()]+\\)(\\([0-9]+\\)): ")
-           ;; Microsoft JVC
-           ;; file.java(6,1) : error J0020: Expected 'class' or 'interface'
-           (looking-at
-            "^\\(\\([a-zA-Z]:\\)?[^:\( \t\n\r-]+\\)[:\(][ \t]*\\([0-9]+\\),"))
+          ;; UNIX C compiler and Introl 68HC11 C compiler errors
+          (looking-at "\\([^ \t\n\r:]+\\): ?\\([0-9]+\\)[ :]")
+          ;; HP C compiler errors
+          (looking-at
+           "[a-zA-Z0-9]+: \"\\([^\t\n\r\",]+\\)\", line \\([0-9]+\\):")
+          ;; BSO/Tasking 68HC08 C compiler errors
+          (looking-at
+           "[a-zA-Z 0-9]+: \\([^ \t\n\r\",]+\\) line \\([0-9]+\\)[ \t]*:")
+          ;; UNIX Lint errors
+          (looking-at "[^:]+: \\([^ \t\n\r:]+\\): line \\([0-9]+\\):")
+          ;; SparcWorks C compiler errors (ends with :)
+          ;; IBM AIX xlc C compiler errors (ends with .)
+          (looking-at "\"\\([^\"]+\\)\", line \\([0-9]+\\)[:.]")
+          ;; Introl as11 assembler errors
+          (looking-at " \\*+ \\([^ \t\n\r]+\\) - \\([0-9]+\\) ")
+          ;; perl5: ... at file.c line 10
+          (looking-at ".+ at \\([^ \t\n\r]+\\) line +\\([0-9]+\\)")
+          ;; Weblint
+          (looking-at "\\([^ \t\n\r:()]+\\)(\\([0-9]+\\)): ")
+          ;; Microsoft JVC
+          ;; file.java(6,1) : error J0020: Expected 'class' or 'interface'
+          (looking-at
+           "^\\(\\([a-zA-Z]:\\)?[^:\( \t\n\r-]+\\)[:\(][ \t]*\\([0-9]+\\),"))
          (let* ((file (match-string-no-properties 1))
                 (line-num  (match-string-no-properties 2))
                 (but-label (concat file ":" line-num))
diff --git a/hmouse-key.el b/hmouse-key.el
index f63735b..279bafa 100644
--- a/hmouse-key.el
+++ b/hmouse-key.el
@@ -98,6 +98,11 @@ Assist Key = shift-right mouse key."
               (if hmouse-middle-flag "{Mouse-2} and {Shift Mouse-2} invoke"
                 "{Shift-Mouse-2} invokes"))))
 
+(defun hmouse-add-unshifted-keys ()
+  "GNU Emacs only: binds [mouse-2] to the Action Key and [mouse-3] to the 
Assist Key."
+     (hmouse-install t)
+     (hmouse-bind-key 3 #'assist-key-depress-emacs #'assist-mouse-key-emacs))
+
 (defun hmouse-toggle-bindings ()
   "Toggles between Smart Mouse Key settings and their prior bindings.
 Under InfoDock, the first invocation of this command will make the middle
diff --git a/hmouse-sh.el b/hmouse-sh.el
index ee347ed..a778a3d 100644
--- a/hmouse-sh.el
+++ b/hmouse-sh.el
@@ -25,12 +25,229 @@
 ;;; ************************************************************************
 
 ;; Other mouse event location prefixes to possibly handle:
-;;   header-line
 ;;   vertical-scroll-bar
 ;;   horizontal-scroll-bar
 ;;   right-divider
 ;;   bottom-divider
 
+(defun hmouse-bind-key (mouse-key-number depress-cmd release-cmd)
+  "Ensure MOUSE-KEY-NUMBER (1-5), e.g. 1 for [mouse-1], is globally bound to 
DEPRESS-CMD and RELEASE-CMD (includes depresses and drags).
+Use nil as cmd values to unbind a key."
+  ;; Works under GNU Emacs only.
+  (hmouse-set-key-list
+   depress-cmd
+   (nth (1- mouse-key-number)
+       '(
+         ([down-mouse-1] [header-line down-mouse-1]
+          [left-fringe down-mouse-1]
+          [right-fringe down-mouse-1]
+          [vertical-line down-mouse-1]
+          [mode-line down-mouse-1])
+
+         ([down-mouse-2] [header-line down-mouse-2]
+          [left-fringe down-mouse-2]
+          [right-fringe down-mouse-2]
+          [vertical-line down-mouse-2]
+          [mode-line down-mouse-2])
+
+         ([down-mouse-3] [header-line down-mouse-3]
+          [left-fringe down-mouse-3]
+          [right-fringe down-mouse-3]
+          [vertical-line down-mouse-3]
+          [mode-line down-mouse-3])
+         
+         ([down-mouse-4] [header-line down-mouse-4]
+          [left-fringe down-mouse-4]
+          [right-fringe down-mouse-4]
+          [vertical-line down-mouse-4]
+          [mode-line down-mouse-4])
+
+         ([down-mouse-5] [header-line down-mouse-5]
+          [left-fringe down-mouse-5]
+          [right-fringe down-mouse-5]
+          [vertical-line down-mouse-5]
+          [mode-line down-mouse-5])
+         )))
+          
+  (hmouse-set-key-list
+   release-cmd
+   (nth (1- mouse-key-number)
+       '(
+         ([drag-mouse-1] [mouse-1]
+          [double-mouse-1] [triple-mouse-1]
+          [header-line drag-mouse-1]
+          [header-line mouse-1]
+          [left-fringe drag-mouse-1]
+          [left-fringe mouse-1]
+          [right-fringe drag-mouse-1]
+          [right-fringe mouse-1]
+          [vertical-line drag-mouse-1]
+          [vertical-line mouse-1]
+          [mode-line drag-mouse-1]
+          [mode-line mouse-1])
+
+         ([drag-mouse-2] [mouse-2]
+          [double-mouse-2] [triple-mouse-2]
+          [header-line drag-mouse-2]
+          [header-line mouse-2]
+          [left-fringe drag-mouse-2]
+          [left-fringe mouse-2]
+          [right-fringe drag-mouse-2]
+          [right-fringe mouse-2]
+          [vertical-line drag-mouse-2]
+          [vertical-line mouse-2]
+          [mode-line drag-mouse-2]
+          [mode-line mouse-2])
+
+         ([drag-mouse-3] [mouse-3]
+          [double-mouse-3] [triple-mouse-3]
+          [header-line drag-mouse-3]
+          [header-line mouse-3]
+          [left-fringe drag-mouse-3]
+          [left-fringe mouse-3]
+          [right-fringe drag-mouse-3]
+          [right-fringe mouse-3]
+          [vertical-line drag-mouse-3]
+          [vertical-line mouse-3]
+          [mode-line drag-mouse-3]
+          [mode-line mouse-3])
+
+         ([drag-mouse-4] [mouse-4]
+          [double-mouse-4] [triple-mouse-4]
+          [header-line drag-mouse-4]
+          [header-line mouse-4]
+          [left-fringe drag-mouse-4]
+          [left-fringe mouse-4]
+          [right-fringe drag-mouse-4]
+          [right-fringe mouse-4]
+          [vertical-line drag-mouse-4]
+          [vertical-line mouse-4]
+          [mode-line drag-mouse-4]
+          [mode-line mouse-4])
+
+         ([drag-mouse-5] [mouse-5]
+          [double-mouse-5] [triple-mouse-5]
+          [header-line drag-mouse-5]
+          [header-line mouse-5]
+          [left-fringe drag-mouse-5]
+          [left-fringe mouse-5]
+          [right-fringe drag-mouse-5]
+          [right-fringe mouse-5]
+          [vertical-line drag-mouse-5]
+          [vertical-line mouse-5]
+          [mode-line drag-mouse-5]
+          [mode-line mouse-5])
+         ))))
+
+(defun hmouse-bind-shifted-key (shifted-mouse-key-number depress-cmd 
release-cmd)
+  "Ensure shifted MOUSE-KEY-NUMBER (1-5), e.g. 1 for [Smouse-1], is globally 
bound to DEPRESS-CMD and RELEASE-CMD (includes depresses and drags).
+Use nil as CMD value to unbind the key."
+  ;; Works under GNU Emacs only.
+  (hmouse-set-key-list
+   depress-cmd
+   (nth (1- shifted-mouse-key-number)
+       '(
+         ([S-down-mouse-1] [header-line S-down-mouse-1]
+          [left-fringe S-down-mouse-1]
+          [right-fringe S-down-mouse-1]
+          [vertical-line S-down-mouse-1]
+          [mode-line S-down-mouse-1])
+
+         ([S-down-mouse-2] [header-line S-down-mouse-2]
+          [left-fringe S-down-mouse-2]
+          [right-fringe S-down-mouse-2]
+          [vertical-line S-down-mouse-2]
+          [mode-line S-down-mouse-2])
+
+         ([S-down-mouse-3] [header-line S-down-mouse-3]
+          [left-fringe S-down-mouse-3]
+          [right-fringe S-down-mouse-3]
+          [vertical-line S-down-mouse-3]
+          [mode-line S-down-mouse-3])
+         
+         ([S-down-mouse-4] [header-line S-down-mouse-4]
+          [left-fringe S-down-mouse-4]
+          [right-fringe S-down-mouse-4]
+          [vertical-line S-down-mouse-4]
+          [mode-line S-down-mouse-4])
+
+         ([S-down-mouse-5] [header-line S-down-mouse-5]
+          [left-fringe S-down-mouse-5]
+          [right-fringe S-down-mouse-5]
+          [vertical-line S-down-mouse-5]
+          [mode-line S-down-mouse-5])
+         )))
+         
+  (hmouse-set-key-list
+   release-cmd
+   (nth (1- shifted-mouse-key-number)
+       '(
+         ([S-drag-mouse-1] [S-mouse-1]
+          [S-double-mouse-1] [S-triple-mouse-1]
+          [header-line S-drag-mouse-1]
+          [header-line S-mouse-1]
+          [left-fringe S-drag-mouse-1]
+          [left-fringe S-mouse-1]
+          [right-fringe S-drag-mouse-1]
+          [right-fringe S-mouse-1]
+          [vertical-line S-drag-mouse-1]
+          [vertical-line S-mouse-1]
+          [mode-line S-drag-mouse-1]
+          [mode-line S-mouse-1])
+
+         ([S-drag-mouse-2] [S-mouse-2]
+          [S-double-mouse-2] [S-triple-mouse-2]
+          [header-line S-drag-mouse-2]
+          [header-line S-mouse-2]
+          [left-fringe S-drag-mouse-2]
+          [left-fringe S-mouse-2]
+          [right-fringe S-drag-mouse-2]
+          [right-fringe S-mouse-2]
+          [vertical-line S-drag-mouse-2]
+          [vertical-line S-mouse-2]
+          [mode-line S-drag-mouse-2]
+          [mode-line S-mouse-2])
+
+         ([S-drag-mouse-3] [S-mouse-3]
+          [S-double-mouse-3] [S-triple-mouse-3]
+          [header-line S-drag-mouse-3]
+          [header-line S-mouse-3]
+          [left-fringe S-drag-mouse-3]
+          [left-fringe S-mouse-3]
+          [right-fringe S-drag-mouse-3]
+          [right-fringe S-mouse-3]
+          [vertical-line S-drag-mouse-3]
+          [vertical-line S-mouse-3]
+          [mode-line S-drag-mouse-3]
+          [mode-line S-mouse-3])
+
+         ([S-drag-mouse-4] [S-mouse-4]
+          [S-double-mouse-4] [S-triple-mouse-4]
+          [header-line S-drag-mouse-4]
+          [header-line S-mouse-4]
+          [left-fringe S-drag-mouse-4]
+          [left-fringe S-mouse-4]
+          [right-fringe S-drag-mouse-4]
+          [right-fringe S-mouse-4]
+          [vertical-line S-drag-mouse-4]
+          [vertical-line S-mouse-4]
+          [mode-line S-drag-mouse-4]
+          [mode-line S-mouse-4])
+
+         ([S-drag-mouse-5] [S-mouse-5]
+          [S-double-mouse-5] [S-triple-mouse-5]
+          [header-line S-drag-mouse-5]
+          [header-line S-mouse-5]
+          [left-fringe S-drag-mouse-5]
+          [left-fringe S-mouse-5]
+          [right-fringe S-drag-mouse-5]
+          [right-fringe S-mouse-5]
+          [vertical-line S-drag-mouse-5]
+          [vertical-line S-mouse-5]
+          [mode-line S-drag-mouse-5]
+          [mode-line S-mouse-5])
+         ))))
+          
 (defun hmouse-get-bindings (hmouse-middle-flag)
   "Returns the list of current bindings of mouse keys used by Hyperbole.
 If HMOUSE-MIDDLE-FLAG is non-nil, includes the middle mouse key binding as 
well.
@@ -149,9 +366,9 @@ These may be the bindings prior to initializing Hyperbole 
or the Hyperbole bindi
                    (if (not (eq window-system 'dps))
                        ;; X, OS X or MS Windows
                        '([down-mouse-2] [drag-mouse-2] [mouse-2]
-                         ;; [down-mouse-3] [drag-mouse-3] [mouse-3]
+                         [down-mouse-3] [drag-mouse-3] [mouse-3]
                          [double-mouse-2] [triple-mouse-2]
-                         ;; [double-mouse-3] [triple-mouse-3]
+                         [double-mouse-3] [triple-mouse-3]
                          [header-line down-mouse-2] [header-line drag-mouse-2]
                          [header-line mouse-2]
                          [left-fringe down-mouse-2] [left-fringe drag-mouse-2]
@@ -160,34 +377,34 @@ These may be the bindings prior to initializing Hyperbole 
or the Hyperbole bindi
                          [right-fringe mouse-2]
                          [vertical-line down-mouse-2] [vertical-line 
drag-mouse-2]
                          [vertical-line mouse-2]
-                         ;; [left-fringe down-mouse-3] [left-fringe 
drag-mouse-3]
-                         ;; [left-fringe mouse-3]
-                         ;; [right-fringe down-mouse-3] [right-fringe 
drag-mouse-3]
-                         ;; [right-fringe mouse-3]
-                         ;; [vertical-line down-mouse-3] [vertical-line 
drag-mouse-3]
-                         ;; [vertical-line mouse-3]
+                         [left-fringe down-mouse-3] [left-fringe drag-mouse-3]
+                         [left-fringe mouse-3]
+                         [right-fringe down-mouse-3] [right-fringe 
drag-mouse-3]
+                         [right-fringe mouse-3]
+                         [vertical-line down-mouse-3] [vertical-line 
drag-mouse-3]
+                         [vertical-line mouse-3]
                          [mode-line down-mouse-2] [mode-line drag-mouse-2]
                          [mode-line mouse-2]
-                         ;; [mode-line down-mouse-3] [mode-line drag-mouse-3]
-                         ;; [mode-line mouse-3]
+                         [mode-line down-mouse-3] [mode-line drag-mouse-3]
+                         [mode-line mouse-3]
                          ))))
           ("xemacs" .
            (nconc
             (mapcar (lambda (key)
                       (cons key (global-key-binding key)))
                     '([button2] [button2up]
-                      ;; [button3] [button3up]
+                      [button3] [button3up]
                       ))
-            ;; (if (boundp 'mode-line-map)
-            ;;   (mapcar (function
-            ;;     (lambda (key)
-            ;;       (cons key (lookup-key mode-line-map key))))
-            ;;    '([button3] [button3up])))
+            (if (boundp 'mode-line-map)
+                (mapcar (function
+                         (lambda (key)
+                           (cons key (lookup-key mode-line-map key))))
+                        '([button3] [button3up])))
             ))
           ("xterm" .
            (mapcar (lambda (key) (cons key (lookup-key mouse-map key)))
                    (list x-button-middle x-button-middle-up
-                         ;; x-button-right  x-button-right-up
+                         x-button-right  x-button-right-up
                          )))
           )))))
 
@@ -258,88 +475,13 @@ select the corresponding element around point."
      (hyperb:emacs-p
       (setq hmouse-set-point-command 'hmouse-move-point-emacs)
       (if (eq window-system 'dps)
-         ;; NEXTSTEP offers only 2 shift-mouse buttons which we use
-         ;; as the Smart Keys.
+         ;; NEXTSTEP offers only 2 shift-mouse buttons which we use as the 
Smart Keys.
          (progn
-           (hmouse-set-key-list #'action-key-depress-emacs
-                                '([S-down-mouse-1] [header-line S-down-mouse-1]
-                                  [left-fringe S-down-mouse-1]
-                                  [right-fringe S-down-mouse-1]
-                                  [vertical-line S-down-mouse-1]
-                                  [mode-line S-down-mouse-1]))
-           (hmouse-set-key-list #'action-mouse-key-emacs
-                                '([S-drag-mouse-1] [S-mouse-1]
-                                  [S-double-mouse-1] [S-triple-mouse-1]
-                                  [header-line S-drag-mouse-1]
-                                  [header-line S-mouse-1]
-                                  [left-fringe S-drag-mouse-1]
-                                  [left-fringe S-mouse-1]
-                                  [right-fringe S-drag-mouse-1]
-                                  [right-fringe S-mouse-1]
-                                  [vertical-line S-drag-mouse-1]
-                                  [vertical-line S-mouse-1]
-                                  [mode-line S-drag-mouse-1]
-                                  [mode-line S-mouse-1]))
-
-           (hmouse-set-key-list #'assist-key-depress-emacs
-                                '([S-down-mouse-2] [header-line S-down-mouse-2]
-                                  [left-fringe S-down-mouse-2]
-                                  [right-fringe S-down-mouse-2]
-                                  [vertical-line S-down-mouse-2]
-                                  [mode-line S-down-mouse-2]))
-           (hmouse-set-key-list #'assist-mouse-key-emacs
-                                '([S-drag-mouse-2] [S-mouse-2]
-                                  [S-double-mouse-2] [S-triple-mouse-2]
-                                  [header-line S-drag-mouse-2]
-                                  [header-line S-mouse-2]
-                                  [left-fringe S-drag-mouse-2]
-                                  [left-fringe S-mouse-2]
-                                  [right-fringe S-drag-mouse-2]
-                                  [right-fringe S-mouse-2]
-                                  [vertical-line S-drag-mouse-2]
-                                  [vertical-line S-mouse-2]
-                                  [mode-line S-drag-mouse-2]
-                                  [mode-line S-mouse-2])))
+           (hmouse-bind-shifted-key 1 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
+           (hmouse-bind-shifted-key 2 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs))
        ;; X, OS X or MS Windows
-       (hmouse-set-key-list #'action-key-depress-emacs
-                            '([S-down-mouse-2] [header-line S-down-mouse-2]
-                              [left-fringe S-down-mouse-2]
-                              [right-fringe S-down-mouse-2]
-                              [vertical-line S-down-mouse-2]
-                              [mode-line S-down-mouse-2]))
-       (hmouse-set-key-list #'action-mouse-key-emacs
-                            '([S-drag-mouse-2] [S-mouse-2]
-                              [S-double-mouse-2] [S-triple-mouse-2]
-                              [header-line S-drag-mouse-2]
-                              [header-line S-mouse-2]
-                              [left-fringe S-drag-mouse-2]
-                              [left-fringe S-mouse-2]
-                              [right-fringe S-drag-mouse-2]
-                              [right-fringe S-mouse-2]
-                              [vertical-line S-drag-mouse-2]
-                              [vertical-line S-mouse-2]
-                              [mode-line S-drag-mouse-2]
-                              [mode-line S-mouse-2]))
-
-       (hmouse-set-key-list #'assist-key-depress-emacs
-                            '([S-down-mouse-3] [header-line S-down-mouse-3]
-                              [left-fringe S-down-mouse-3]
-                              [right-fringe S-down-mouse-3]
-                              [vertical-line S-down-mouse-3]
-                              [mode-line S-down-mouse-3]))
-       (hmouse-set-key-list #'assist-mouse-key-emacs
-                            '([S-drag-mouse-3] [S-mouse-3]
-                              [S-double-mouse-3] [S-triple-mouse-3]
-                              [header-line S-drag-mouse-3]
-                              [left-fringe S-drag-mouse-3]
-                              [left-fringe S-mouse-3]
-                              [right-fringe S-drag-mouse-3]
-                              [right-fringe S-mouse-3]
-                              [header-line S-mouse-3]
-                              [vertical-line S-drag-mouse-3]
-                              [vertical-line S-mouse-3]
-                              [mode-line S-drag-mouse-3]
-                              [mode-line S-mouse-3]))))
+       (hmouse-bind-shifted-key 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
+       (hmouse-bind-shifted-key 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs)))
      ;;
      ;; XEmacs
      ((featurep 'xemacs)
@@ -367,25 +509,18 @@ select the corresponding element around point."
       (define-key mouse-map x-button-s-middle-up 'action-mouse-key)
       (define-key mouse-map x-button-s-right 'assist-key-depress)
       (define-key mouse-map x-button-s-right-up 'assist-mouse-key)
-      ;; Use these instead of the above for a true META-BUTTON binding.
-      ;; (define-key mouse-map x-button-m-middle 'assist-key-depress)
-      ;; (define-key mouse-map x-button-m-middle-up 'assist-mouse-key)
       )
      ;;
      ;; NeXT
      ((equal (hyperb:window-system) "next")
       (setq hmouse-set-point-command 'hmouse-move-point-eterm)
-      ;; Use left button to set point.
-      ;; Use shift-left button instead of non-existent middle as Action Key.
+      ;; NEXTSTEP offers only 2 shift-mouse buttons which we use as the Smart 
Keys.
       (mapc
        (lambda (region)
         (global-set-mouse (cons region '(shift left))     'action-key-depress)
         (global-set-mouse (cons region '(shift up left))  'action-mouse-key)
         (global-set-mouse (cons region '(shift right))    'assist-key-depress)
         (global-set-mouse (cons region '(shift up right)) 'assist-mouse-key)
-        ;; Use these instead of the above for a true META-BUTTON binding.
-        ;; (global-set-mouse (cons region '(meta    right))  
'assist-key-depress)
-        ;; (global-set-mouse (cons region '(meta up right))  'assist-mouse-key)
         )
        '(text scrollbar modeline minibuffer))
       ))
@@ -404,45 +539,8 @@ select the corresponding element around point."
     ;;
     (if (not (eq window-system 'dps))
        ;; X, OS X or MS Windows
-       (progn (hmouse-set-key-list #'action-key-depress-emacs
-                                   '([down-mouse-2] [header-line down-mouse-2]
-                                     [left-fringe down-mouse-2]
-                                     [right-fringe down-mouse-2]
-                                     [vertical-line down-mouse-2]
-                                     [mode-line down-mouse-2]))
-              (hmouse-set-key-list #'action-mouse-key-emacs
-                                   '([drag-mouse-2] [mouse-2]
-                                     [double-mouse-2] [triple-mouse-2]
-                                     [header-line drag-mouse-2]
-                                     [header-line mouse-2]
-                                     [left-fringe drag-mouse-2]
-                                     [left-fringe mouse-2]
-                                     [right-fringe drag-mouse-2]
-                                     [right-fringe mouse-2]
-                                     [vertical-line drag-mouse-2]
-                                     [vertical-line mouse-2]
-                                     [mode-line drag-mouse-2]
-                                     [mode-line mouse-2]))
-
-              ;; (hmouse-set-key-list #'assist-key-depress-emacs
-              ;;                    '([down-mouse-3] [header-line down-mouse-3]
-              ;;                      [left-fringe down-mouse-3]
-              ;;                      [right-fringe down-mouse-3]
-              ;;                      [vertical-line down-mouse-3]
-              ;;                      [mode-line down-mouse-3]))
-              ;; (hmouse-set-key-list #'assist-mouse-key-emacs
-              ;;                    '([drag-mouse-3] [mouse-3]
-              ;;                      [double-mouse-3] [triple-mouse-3]
-              ;;                      [header-line drag-mouse-3]
-              ;;                      [header-line mouse-3]
-              ;;                      [left-fringe drag-mouse-3]
-              ;;                      [left-fringe mouse-3]
-              ;;                      [right-fringe drag-mouse-3]
-              ;;                      [right-fringe mouse-3]
-              ;;                      [vertical-line drag-mouse-3]
-              ;;                      [vertical-line mouse-3]
-              ;;                      [mode-line drag-mouse-3]
-              ;;                      [mode-line mouse-3]))
+       (progn (hmouse-bind-key 2 #'action-key-depress-emacs 
#'action-mouse-key-emacs)
+              ;; (hmouse-bind-key 3 #'assist-key-depress-emacs 
#'assist-mouse-key-emacs)
               )))
    ;;
    ;; XEmacs
@@ -474,9 +572,6 @@ select the corresponding element around point."
     (define-key mouse-map x-button-middle-up 'action-mouse-key)
     ;; (define-key mouse-map x-button-right 'assist-key-depress)
     ;; (define-key mouse-map x-button-right-up 'assist-mouse-key)
-    ;; Use these instead of the above for a true META-BUTTON binding.
-    ;; (define-key mouse-map x-button-m-middle 'assist-key-depress)
-    ;; (define-key mouse-map x-button-m-middle-up 'assist-mouse-key)
     )))
 
 (provide 'hmouse-sh)
diff --git a/hpath.el b/hpath.el
index 7e9a270..ee886b9 100644
--- a/hpath.el
+++ b/hpath.el
@@ -43,7 +43,7 @@ Default is `nil' since this can slow down normal file 
finding."
 ;;; FILE VIEWER COMMAND SETTINGS
 ;;; ************************************************************************
 
-(defcustom hpath:external-open-office-suffixes 
"doc[mx]?\\|ods\\|ppsx?\\|ppt[mx]?\\|xls[mx]?"
+(defcustom hpath:external-open-office-suffixes 
"doc[mx]?\\|od[st]\\|ppsx?\\|ppt[mx]?\\|xls[mx]?"
   "*Regexp of Open Office document suffix alternatives to display externally.
 See http://www.openwith.org/programs/openoffice for a full list of
 possible suffixes."
diff --git a/hsys-www.el b/hsys-www.el
index 38e3557..c46b138 100644
--- a/hsys-www.el
+++ b/hsys-www.el
@@ -37,18 +37,23 @@
 
 ;; eww-mode should define these next functions but presently does not,
 ;; so define them here when needed.
-(unless (fboundp 'eww-at-link)
-  (defun eww-at-link ()
-    "Return any eww web page hyperlink url at point or nil if none."
+(unless (fboundp 'eww-link-at-point)
+  (defun shr-link-at-point ()
+    "Return any shr hyperlink url at point or nil if none."
     (get-text-property (point) 'shr-url))
+  (defun eww-link-at-point ()
+    "Return any eww web page hyperlink url at point or nil if none."
+    (shr-link-at-point))
   (defun eww-bookmark-property (property)
-    "Return the value of PROPERTY, a symbol, for the current eww bookmark line 
or nil."
+    "Return value of PROPERTY, a symbol, for current eww bookmark line or nil."
     (if (eq major-mode 'eww-bookmark-mode)
-       (plist-get (get-text-property (line-beginning-position) 'eww-bookmark) 
property)))
+       (plist-get (get-text-property (line-beginning-position) 'eww-bookmark)
+                  property)))
   (defun eww-history-property (property)
-    "Return the value of PROPERTY, a symbol, for the current eww history line 
or nil."
+    "Return value of PROPERTY, a symbol, for current eww history line or nil."
     (if (eq major-mode 'eww-history-mode)
-       (plist-get (get-text-property (line-beginning-position) 'eww-history) 
property))))
+       (plist-get (get-text-property (line-beginning-position) 'eww-history)
+                  property))))
 
 (defib www-url ()
   "Follow any non-ftp url (link) at point.
@@ -60,8 +65,8 @@ Valid values of this variable include 
`browse-url-default-browser' and
         ;; Don't match if at the end of the buffer; end of line is
         ;; handled elsewhere.
         nil)
-       ((and (eq major-mode 'eww-mode) (eww-at-link))
-        (ibut:label-set (eww-at-link))
+       ((and (eq major-mode 'eww-mode) (eww-link-at-point))
+        (ibut:label-set (eww-link-at-point))
         (hact 'eww-follow-link))
        ((eq major-mode 'eww-bookmark-mode)
         (ibut:label-set (concat (eww-bookmark-property :title)
diff --git a/hui-mouse.el b/hui-mouse.el
index 186fb4b..af003d8 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -88,16 +88,13 @@ Its default value is #'smart-scroll-down."
     ((and (fboundp 'button-at) (button-at (point))) .
      ((push-button) . (smart-push-button-help)))
     ;;
-    ;; Direct access selection of helm-major-mode completions
-    ((and (eq major-mode 'helm-major-mode) (smart-helm-line-has-action)) .
-     ((smart-helm) . (smart-helm-assist)))
-    ;;
     ;; If click in the minibuffer and reading an argument,
     ;; accept argument or give completion help.
     ((and (> (minibuffer-depth) 0)
          (eq (selected-window) (minibuffer-window))
-         (not (eq hargs:reading-p 'hmenu))) .
-     ((exit-minibuffer) . (smart-completion-help)))
+         (not (eq hargs:reading-p 'hmenu))
+         (not (smart-helm-alive-p))) .
+         ((funcall (key-binding (kbd "RET"))) . (smart-completion-help)))
     ;;
     ;; If reading a Hyperbole menu item or a Hyperbole completion-based
     ;; argument, allow selection of an item at point.
@@ -109,14 +106,15 @@ Its default value is #'smart-scroll-down."
     ((and (> (minibuffer-depth) 0)
          (eq (selected-window) (minibuffer-window))
          (eq hargs:reading-p 'hmenu)) .
-     ((exit-minibuffer) . (exit-minibuffer)))
+         ((funcall (key-binding (kbd "RET"))) . (funcall (key-binding (kbd 
"RET")))))
     ;;
     ;; The ID-edit package supports rapid killing, copying, yanking and
     ;; display management. It is available only as a part of InfoDock.
     ;; It is not included with Hyperbole.
     ((and (boundp 'id-edit-mode) id-edit-mode
-         (not buffer-read-only)) .
-     ((id-edit-yank) . (id-edit-yank)))
+         (not buffer-read-only)
+         (not (smart-helm-alive-p))) .
+         ((id-edit-yank) . (id-edit-yank)))
     ;;
     ((and (fboundp 'xref--item-at-point) (xref--item-at-point)) .
      ((xref-goto-xref) . (xref-show-location-at-point)))
@@ -158,6 +156,14 @@ Its default value is #'smart-scroll-down."
            (t (scroll-up))) .
            (scroll-down)))
     ;;
+    ;; Direct access selection of helm-major-mode completions
+    ((setq hkey-value (and (or (eq major-mode 'helm-major-mode)
+                              (and (featurep 'helm) (equal helm-action-buffer 
(buffer-name))))
+                          (or (eobp)
+                              (smart-helm-at-header)
+                              (smart-helm-line-has-action)))) .
+     ((smart-helm) . (smart-helm-assist)))
+    ;;
     ;; Support the OO-Browser when available.  It is a separate Emacs
     ;; package not included with Hyperbole.  Within an OO-Browser
     ;; OOBR-FTR buffer, an *Implementors* listing buffer, or an
@@ -246,20 +252,20 @@ Its default value is #'smart-scroll-down."
     ((and (memq major-mode '(js2-mode js-mode js3-mode javascript-mode 
html-mode web-mode))
          buffer-file-name
          (smart-javascript-at-tag-p)) .
-     ((smart-javascript) . (smart-javascript nil 'next-tag)))
+         ((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)))
+         ((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)))
+         ((smart-objc) . (smart-objc nil 'next-tag)))
     ;;
     ((and (memq major-mode '(fortran-mode f90-mode))
          buffer-file-name (smart-fortran-at-tag-p)) .
-     ((smart-fortran) . (smart-fortran nil 'next-tag)))
+         ((smart-fortran) . (smart-fortran nil 'next-tag)))
     ;;
     ((eq major-mode 'occur-mode) .
      ((occur-mode-goto-occurrence) . (occur-mode-goto-occurrence)))
@@ -284,7 +290,7 @@ Its default value is #'smart-scroll-down."
     ((if (boundp 'hmail:reader)
         (or (eq major-mode hmail:reader)
             (eq major-mode hmail:lister))) .
-     ((smart-hmail) . (smart-hmail-assist)))
+            ((smart-hmail) . (smart-hmail-assist)))
     ;;
     ((eq major-mode 'gnus-group-mode)
      (smart-gnus-group) . (smart-gnus-group-assist))
@@ -378,7 +384,7 @@ smart keyboard keys.")
   (save-excursion (end-of-line) (eobp)))
 
 (defun smart-completion-help ()
-  "Offer completion help for current minibuffer argument, if any."
+  "Offers completion help for current minibuffer argument, if any."
   (if (where-is-internal 'minibuffer-completion-help (current-local-map))
       (minibuffer-completion-help)))
 
@@ -397,36 +403,88 @@ smart keyboard keys.")
 ;;; smart-helm functions
 ;;; ************************************************************************
 
+(defun smart-helm-at-header ()
+  "Return t iff Action Mouse Key depress was on the first header line of the 
current buffer."
+  (or (helm-pos-header-line-p)
+      (and (eventp action-key-depress-args)
+          (eq (posn-area (event-start action-key-depress-args))
+              'header-line))))
+
 (defun smart-helm-line-has-action ()
-  "Return the current helm selection item or nil if line lacks an associated 
action.
-Assume Hyperbole has already checked that point is in a helm completion 
buffer."
-  (let* ((helm-buffer (buffer-name))
-        (selection (helm-get-selection)))
-    (and (listp selection) selection)))
+  "Marks and returns the actions for the helm selection item at point, or nil 
if line lacks any action.
+Assumes Hyperbole has already checked that point is in a helm buffer."
+  (if hkey-debug (setq cursor-type t))
+  (let ((helm-buffer (if (equal helm-action-buffer (buffer-name)) helm-buffer 
(buffer-name))))
+    (save-excursion
+      (with-helm-buffer
+       (when (not (or (eobp)
+                      (smart-helm-at-header)
+                      (helm-pos-candidate-separator-p)))
+         (helm-mark-current-line)
+         (helm-get-current-action))))))
+
+(defun smart-helm-alive-p ()
+  ;; Handles case where helm-action-buffer is visible but helm-buffer
+  ;; is not, which (helm-alive-p) doesn't handle.
+  (and (featurep 'helm)
+       helm-alive-p
+       (window-live-p (helm-window))
+       (minibuffer-window-active-p (minibuffer-window))))
+
+(defun smart-helm-resume-helm ()
+  "Resumes helm session for the current buffer if not already active."
+  (unless (smart-helm-alive-p)
+    (unless (equal helm-action-buffer (buffer-name))
+      ;; helm-resume doesn't seem to set this properly.
+      (setq helm-buffer (buffer-name)))
+    (helm-resume helm-buffer)
+    (sit-for 0.2)))
 
 (defun smart-helm()
-  "Selects and executes the helm line at point."
-  (let ((helm-buffer (buffer-name))
-       (helm-alive-p t))
-    (with-helm-window
-      (setq cursor-type t)
-      (helm-mark-current-line)
-      ;; Hyperbole has checked that this line has an action prior
-      ;; to invoking this function.
-      (helm-execute-persistent-action))
+  "Executes helm actions based on Action Key click locations:
+  On a candidate line, performs the candidate's first action and remains in 
the minibuffer;
+  On the first header line, displays a list of actions available for the 
selected candidate;
+  On an action list line, performs the action after exiting the minibuffer;
+  At the end of the buffer, quits from helm and exits the minibuffer."
+  (let ((non-text-area-p (and (eventp action-key-depress-args)
+                             (posn-area (event-start 
action-key-depress-args))))
+       (eob (eobp)))
+    (smart-helm-resume-helm)
     (if (> (minibuffer-depth) 0)
-       (select-window (minibuffer-window)))))
+       (select-window (minibuffer-window)))
+    (when (smart-helm-alive-p)
+      (let* ((key (kbd (cond
+                       (eob "C-g")
+                       ;; If line of the key press is the first /
+                       ;; header line in the window or outside the
+                       ;; buffer area, then use {TAB} command to
+                       ;; switch between match list and action list.
+                       (non-text-area-p "TAB")
+                       ;; RET: Performs action of selection and exits the 
minibuffer.
+                       ;; C-j: Performs action of selection and stays in 
minibuffer.
+                       (hkey-value
+                        (if (helm-action-window) "RET" "C-j"))
+                       (t "RET"))))
+            (binding (key-binding key)))
+       (if hkey-debug
+           (message "(HyDebug): In smart-helm, key to execute is: {%s}; 
binding is: %s"
+                    (key-description key) binding))
+       (call-interactively binding)
+       ))))
 
 (defun smart-helm-assist()
   "Displays the selected item (including its action for the helm line at 
point."
-  (let* ((helm-buffer (buffer-name))
-        (selection (helm-get-selection)))
-    (with-helm-window
-      (setq cursor-type t)
-      (helm-mark-current-line)
+  (smart-helm-resume-helm)
+  ;; Hyperbole has checked that this line has an action prior
+  ;; to invoking this function.
+  (unwind-protect
       (with-help-window "*Helm Help*"
-       (princ "The current helm selection item is:\n")
-       (print selection)))
+       (let ((helm-buffer (if (equal helm-action-buffer (buffer-name)) 
helm-buffer (buffer-name))))
+           (with-helm-buffer
+             (princ "The current helm selection item is:\n\t")
+             (princ (helm-get-selection (helm-buffer-get)))
+             (princ "\nwith an action of:\n\t")
+             (princ (helm-get-current-action)))))
     (if (> (minibuffer-depth) 0)
        (select-window (minibuffer-window)))))
 
@@ -455,9 +513,9 @@ If key is pressed:
   (interactive)
   (cond ((last-line-p) (Buffer-menu-execute))
        ((bolp) (Buffer-menu-mark))
-        ((save-excursion
-            (goto-char (1- (point)))
-            (bolp))
+       ((save-excursion
+          (goto-char (1- (point)))
+          (bolp))
         (Buffer-menu-save))
        ((br-in-browser) (br-buffer-menu-select))
        (t (Buffer-menu-select))))
@@ -481,8 +539,8 @@ If assist-key is pressed:
   (cond ((last-line-p) (progn (list-buffers) (forward-line 3)))
        ((bolp) (Buffer-menu-unmark))
         ((save-excursion
-             (goto-char (1- (point)))
-            (bolp))
+          (goto-char (1- (point)))
+          (bolp))
         (Buffer-menu-unmark))
        (t (Buffer-menu-delete))))
 
@@ -716,7 +774,7 @@ If key is pressed within:
         (if gnus-current-article
             (progn (goto-char (point-min))
                    (re-search-forward
-                     (format "^.[ ]+%d:" gnus-current-article) nil t)
+                    (format "^.[ ]+%d:" gnus-current-article) nil t)
                    (setq this-command 'gnus-summary-next-page)
                    (call-interactively 'gnus-summary-next-page))
           (goto-char (point-min))
@@ -913,20 +971,20 @@ If INDEX-ITEM is both a function and a variable, the 
function
 definition is used by default; in such a case, when optional
 VARIABLE-FLAG is non-nil, the variable definition is used instead."
   (when (stringp index-item)
-      ;; Convert a string to an alist element.
-      (if variable-flag
-         ;; Match to variable definitions only.
-         (setq index-item (assoc index-item
-                                 (cdr (assoc "Variables" 
(imenu--make-index-alist)))))
-       ;; First try to match a function definition and if that fails,
-       ;; then allow variable definitions and other types of matches as well.
-       (let ((alist (imenu--make-index-alist)))
-         (setq index-item (or (assoc index-item alist)
-                              ;; Does nothing unless the dash Emacs Lisp
-                              ;; library is available for the -flatten 
function.
-                              (and (require 'dash nil t)
-                                   (assoc index-item (-flatten alist)))))))
-      (if index-item (cdr index-item))))
+    ;; Convert a string to an alist element.
+    (if variable-flag
+       ;; Match to variable definitions only.
+       (setq index-item (assoc index-item
+                               (cdr (assoc "Variables" 
(imenu--make-index-alist)))))
+      ;; First try to match a function definition and if that fails,
+      ;; then allow variable definitions and other types of matches as well.
+      (let ((alist (imenu--make-index-alist)))
+       (setq index-item (or (assoc index-item alist)
+                            ;; Does nothing unless the dash Emacs Lisp
+                            ;; library is available for the -flatten function.
+                            (and (require 'dash nil t)
+                                 (assoc index-item (-flatten alist)))))))
+    (if index-item (cdr index-item))))
 
 ;;; ************************************************************************
 ;;; smart-info functions
diff --git a/hui-select.el b/hui-select.el
index beb318d..104107c 100644
--- a/hui-select.el
+++ b/hui-select.el
@@ -208,16 +208,17 @@
   "Return non-nil if the character after optional POS (or point) matches a 
syntax entry in `hui-select-syntax-alist'.
 The non-nil value returned is the function to call to select that syntactic 
unit."
   (interactive "d")
-  (or (numberp pos) (setq pos (point)))
-  (setq hui-select-previous 'char)
-  (let* ((syntax (char-syntax (or (char-after pos) (char-before pos))))
-        (pair (assq syntax hui-select-syntax-alist)))
-    (and pair (or hui-select-whitespace (not (eq (cdr pair) 
'thing-whitespace)))
-        ;; Ignore matches that are preceded by '\' as a quote, e.g. ?\'
-        (or (not (char-after pos))
-            (= pos (point-min))
-            (and (char-before pos) (/= ?\\ (char-before pos))))
-        (cdr pair))))
+  (unless (and (bobp) (eobp))
+    (or (numberp pos) (setq pos (point)))
+    (setq hui-select-previous 'char)
+    (let* ((syntax (char-syntax (or (char-after pos) (char-before pos))))
+          (pair (assq syntax hui-select-syntax-alist)))
+      (and pair (or hui-select-whitespace (not (eq (cdr pair) 
'thing-whitespace)))
+          ;; Ignore matches that are preceded by '\' as a quote, e.g. ?\'
+          (or (not (char-after pos))
+              (= pos (point-min))
+              (and (char-before pos) (/= ?\\ (char-before pos))))
+          (cdr pair)))))
 
 ;;;###autoload
 (defun hui-select-goto-matching-delimiter ()
diff --git a/hui-window.el b/hui-window.el
index 8c5dd07..bce76ce 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -307,7 +307,8 @@ If free variable `assist-flag' is non-nil, uses Assist Key."
       (and assist-key-depress-window assist-key-release-window
           (not (eq assist-key-depress-window
                    assist-key-release-window)))
-    (and action-key-depress-window action-key-release-window
+    (and (not (smart-helm-alive-p)) ;; Ignore Action Key drag if helm is 
active.
+        action-key-depress-window action-key-release-window
         (not (eq action-key-depress-window action-key-release-window)))))
 
 (defun hmouse-drag-diagonally ()
@@ -462,7 +463,8 @@ Beeps and prints message if the window cannot be split 
further."
 
 (defun smart-coords-in-window-p (coords window)
   "Tests if COORDS are in WINDOW.  Returns WINDOW if they are, nil otherwise."
-  (cond ((and hyperb:emacs-p (eventp coords))
+  (cond ((null coords) nil)
+       ((and hyperb:emacs-p (eventp coords))
         (eq (posn-window (event-start coords)) window))
        ((if (featurep 'xemacs)
             (if (eventp coords)
diff --git a/hyrolo.el b/hyrolo.el
index acc5057..d213dc9 100644
--- a/hyrolo.el
+++ b/hyrolo.el
@@ -10,6 +10,14 @@
 ;; This file is part of GNU Hyperbole.
 
 ;;; Commentary:
+;;
+;;  This is Hyperbole's advanced rolo system, HyRolo, for convenient
+;;  management of hierarchical, record-oriented information.  Most
+;;  often this is used for contact management but it can quickly be
+;;  adapted to most any record-oriented lookup task, for fast retrieval.
+;;
+;;  See all the autoloaded functions herein for interactive commands.
+;;  See the Info manual entry "(hyperbole)HyRolo" for usage information.
 
 ;;; Code:
 ;;; ************************************************************************
diff --git a/man/hkey-help.txt b/man/hkey-help.txt
index 641879b..cbbb8f1 100644
--- a/man/hkey-help.txt
+++ b/man/hkey-help.txt
@@ -51,11 +51,12 @@ Hyperbole Key Press/Click in Special Modes
   Page Directory Listing        Jumps to page              <- same
   Imenu Programming Identifier  Jumps to in-buffer def     Prompts for 
identifier to jump to
   C,C++,Objective-C,Java Modes  Jumps to id/include def    Jumps to next def
+  Assembly Language Mode        Jumps to id/include def    Jumps to next def
   Java Cross-reference Tag      Jumps to identifier def    Jumps to next def
   JavaScript and Python Modes   Jumps to identifier def    Jumps to next def
-  Assembly Language Mode        Jumps to id/include def    Jumps to next def
-  Any Lisp or Fortran Mode      Jumps to id def            Jumps to next def
+  Any Lisp or Fortran Mode      Jumps to identifier def    Jumps to next def
   Emacs Lisp Compiler Error     Jumps to def with error    <- same
+  Other Compiler Error          Jumps to src error line    <- same
   Grep or Occur Match           Jumps to match source line <- same
   Multi-buffer Occur Match      Jumps to match source line <- same
   Etags `TAGS' file entry       Jumps to source line       Button help
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 4c1caa2..61a5743 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -152,7 +152,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
 Edition 6.0.3
-Printed September 8, 2016.
+Printed September 17, 2017.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -2097,12 +2097,22 @@ operation from any keyboard.
 @kindex middle mouse key
 @vindex hmouse-middle-flag
 From the mouse, the @dfn{Action Key} is bound to your shift-middle
-mouse key (or shift-left on a 2-button mouse) and the @dfn{Assist Key}
+mouse key (or shift-left on a 2-button mouse).  The @dfn{Assist Key}
 is bound to your shift-right mouse key, assuming Hyperbole is run
 under an external window system.  (InfoDock users or those who set the
 variable, @code{hmouse-middle-flag}, to @samp{t} before loading
 Hyperbole, may also use the middle mouse key as the Action Key).
 
address@hidden hmouse-add-unshifted-keys
address@hidden unshifted mouse bindings
address@hidden unshifted mouse keys
address@hidden mouse keys, unshifted
address@hidden smart keys, unshifted
+If you want the middle mouse key as the Action Key and the right mouse
+key as the Assist Key for ease of use,  then within your personal
address@hidden/.emacs} file, add:
+  @code{(add-hook 'hyperbole-init-hook 'hmouse-add-unshifted-keys)}.
+
 @cindex key binding, smart keys
 @cindex smart key commands
 @cindex smart key assignments



reply via email to

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