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

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

[elpa] externals/hyperbole bf73086 31/51: Generalize in-buffer button co


From: Stefan Monnier
Subject: [elpa] externals/hyperbole bf73086 31/51: Generalize in-buffer button completion UI; Hyperbole manual updates
Date: Sun, 12 Jul 2020 18:10:15 -0400 (EDT)

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

    Generalize in-buffer button completion UI; Hyperbole manual updates
---
 Changes            |  27 +++++++++-
 HY-NEWS            |  21 +++++---
 hact.el            |   2 +-
 hbut.el            |  97 ++++++++++++++++++-----------------
 hui-menu.el        |  10 ++--
 hui-mini.el        |   5 +-
 hui.el             | 145 ++++++++++++++++++++++++++++++-----------------------
 man/hyperbole.html | 103 ++++++++++++++++++++-----------------
 man/hyperbole.info | Bin 522646 -> 523270 bytes
 man/hyperbole.pdf  | Bin 1282659 -> 1283663 bytes
 man/hyperbole.texi |  88 +++++++++++++++++---------------
 11 files changed, 287 insertions(+), 211 deletions(-)

diff --git a/Changes b/Changes
index 59ead9b..518b2a6 100644
--- a/Changes
+++ b/Changes
@@ -1,7 +1,30 @@
 2020-02-23  Bob Weiner  <rsw@gnu.org>
 
-* hbut.el (ibut:act): Added to interactively prompt for and activate named 
implicit buttons,
-    <[name]>.
+* hui-menu.el (infodock-hyperbole-menu): Changed 'Activate-Button-at-Point' to 
'Activate-Button-in-Buffer'
+    and made prompt for button if not on one.  This synchronizes it with the 
top-level 'Act' command in
+    the Hyperbole minibuffer menu.
+* man/hyperbole.texi (Menus): Updated to reflect the above change.
+                     (Modeline Clicks and Drags): Added moving frames with 
bottommost modeline drags.
+
+* hui.el: (hui:ebut-act, hui:ibut-act): Changed body to a call of 
hui:hbut-operate.
+          (hui:hbut-operate): Changed to call actype:act to perform operation. 
 Also changed to a private
+    function.
+  hbut.el (hbut:act): Activated only when a valid Hyperbole button symbol is 
given; improved error checking.
+
+* hbut.el:
+  hui.el: Changed doc strings to imperative form.
+
+* hui-menu.el (infodock-hyperbole-menu): Updated Implicit-Button/Activate 
(renamed from Activate-at-Point).
+  hui-mini.el (hui:menus): Updated Ibut/Act.
+  hui.el (hui:ibut-act): Added to better mirror hui:ebut-act and replaced 
Ibut/Act menu items with this.
+
+* hui.el (hui:hbut-act):
+  hbut.el (hbut:act): Added interactive completion of in-buffer ebuts and 
ibuts.
+
+* man/hyperbole.texi (Questions and Answers): Rewrote Org-mode question a bit 
to account for
+    improved integration.
+
+* hbut.el (ibut:act): Added to interactively prompt for and activate labeled 
implicit buttons.
 
 2020-02-22  Bob Weiner  <rsw@gnu.org>
 
diff --git a/HY-NEWS b/HY-NEWS
index 347d8ec..dc4705c 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -7,13 +7,13 @@
 
   BUTTON TYPES
 
-    - In-buffer Labels: Fixed a number of in-buffer text handling issues
-      with the creation of explicit buttons, maximizing reuse of existing
-      text in labels.
+    - In-buffer Labels: Fixed a number of in-buffer text handling issues with
+      the creation of explicit buttons, maximizing reuse of existing text in
+      labels.
 
-    - link-to-file Action Type: Extended to allow file path to include 
-      either :line-num:column-num or just :line-num at the end (translated
-      to character location within the button).
+    - link-to-file Action Type: Extended to allow file path to include either
+      :line-num:column-num or just :line-num at the end (translated to 
character
+      location within the button).
 
   DOCUMENTATION
 
@@ -21,6 +21,15 @@
       that allows linking to Emacs Bookmarks.  See "(hyperbole)Smart Key -
       Bookmark Mode".
 
+  MENUS
+
+    - Activate Any Labeled Buffer Button: Hyperbole's top-level menu 'Act'
+      command either activates any button at point or prompts for the choice of
+      any labeled explicit or implicit button within the buffer to activate.
+      The pulldown menu item, Activate-Button-in-Buffer, behaves the same.
+
+    - Org-mode in Q&A Appendix: Rewrote this section to account for improved
+      integration.
 
 ===========================================================================
 *                                   V7.0.9
diff --git a/hact.el b/hact.el
index 7817e7f..afa5869 100644
--- a/hact.el
+++ b/hact.el
@@ -445,7 +445,7 @@ is returned."
 (defun    actype:eval (actype &rest args)
   "Performs action formed from ACTYPE and rest of ARGS and returns value.
 ACTYPE may be a string containing a Lisp expression from which ACTYPE
-and ARGS are extracted   ACTYPE may be a symbol or symbol name for
+and ARGS are extracted.  ACTYPE may be a symbol or symbol name for
 either an action type or a function.  Runs `action-act-hook' before
 performing ACTION."
   (let ((prefix-arg current-prefix-arg)
diff --git a/hbut.el b/hbut.el
index 054b619..456da93 100644
--- a/hbut.el
+++ b/hbut.el
@@ -34,7 +34,7 @@ Nil disables saving.")
   "Maximum length of a hyper-button label.")
 
 (defun    ebut:act (label)
-  "Activates Hyperbole explicit button with LABEL from the current buffer."
+  "Activate Hyperbole explicit button with LABEL from the current buffer."
   (interactive (list (hargs:read-match "Activate explicit button labeled: "
                                       (ebut:alist)
                                       nil t nil 'ebut)))
@@ -52,7 +52,7 @@ as a completion table."
 
 (defun    ebut:at-p (&optional start-delim end-delim)
   "Return explicit Hyperbole button at point or nil.
-Assumes point is within first line of button label, if at all.
+Assume point is within first line of button label, if at all.
 Optional START-DELIM and END-DELIM are strings that override default
 button delimiters."
   (let ((key (ebut:label-p nil start-delim end-delim)))
@@ -97,10 +97,10 @@ Return entry deleted (a list of attribute values) or nil."
   "Return explicit Hyperbole button symbol given by LBL-KEY and BUFFER.
 KEY-SRC is given when retrieving global buttons and is the full source 
pathname.
 
-Retrieves button data, converts into a button object and returns a symbol
+Retrieve button data, convert into a button object and return a symbol
 which references the button.
 
-All arguments are optional.  When none are given, returns a symbol for
+All arguments are optional.  When none are given, return a symbol for
 the button that point is within or nil.  BUFFER defaults to the current
 buffer."
   (hattr:clear 'hbut:current)
@@ -265,14 +265,14 @@ include delimiters when INCLUDE-DELIMS is non-nil)."
   (hbut:map but-func ebut:start ebut:end regexp-match include-delims))
 
 (defun    ebut:modify (&optional lbl-key but-sym)
-  "Modifies existing Hyperbole button from optional LBL-KEY and BUT-SYM.
+  "Modify existing Hyperbole button from optional LBL-KEY and BUT-SYM.
 Defaults are the key for any button label at point and `hbut:current'.
-If successful, returns button's instance number except when instance
-number is 1, then returns t.  On failure, as when button does not exist,
-returns nil.
+If successful, return button's instance number, except when instance
+number is 1, then return t.  On failure, as when button does not exist,
+return nil.
 
-If successful, leaves point in button data buffer, so caller should use
-`save-excursion'.  Does not save button data buffer."
+If successful, leave point in button data buffer, so caller should use
+`save-excursion'.  Do not save button data buffer."
   (save-excursion
     (let ((lbl-instance (hbdata:write lbl-key but-sym)))
       (run-hooks 'ebut-modify-hook)
@@ -302,7 +302,7 @@ If CURR-LABEL is nil, the text in the active region is used 
as the
 button label, if any, otherwise, an error is signaled.
 
 Return instance string appended to label to form a per-buffer unique
-label; nil if label is already unique.  Signals an error when no such
+label; nil if label is already unique.  Signal an error when no such
 button is found in the current buffer."
   (let* ((lbl-key (ebut:label-to-key curr-label))
         (lbl-regexp (ebut:label-regexp lbl-key))
@@ -392,8 +392,8 @@ button is found in the current buffer."
 
 (defun    ebut:search (string out-buf &optional match-part)
   "Write explicit button lines matching STRING to OUT-BUF.
-Searche across all files into which the user has previously saved explicit 
buttons.
-By default, only matches for whole button labels are found; optional MATCH-PART
+Search across all files into which the user has previously saved explicit 
buttons.
+By default, find matches for whole button labels only; optional MATCH-PART
 enables partial matches."
   (let*  ((buffers (mapcar (lambda (dir)
                             (expand-file-name hattr:filename dir))
@@ -549,7 +549,7 @@ Insert INSTANCE-FLAG after END, before ending delimiter."
   "File that stores globally accessible Hyperbole buttons, accessed by name.")
 
 (defun    gbut:act (label)
-  "Activates Hyperbole global button with LABEL."
+  "Activate Hyperbole global button with LABEL."
   (interactive (list (hargs:read-match "Activate global button labeled: "
                                       (mapcar 'list (gbut:label-list))
                                       nil t nil 'gbut)))
@@ -566,16 +566,16 @@ Insert INSTANCE-FLAG after END, before ending delimiter."
 (defun    gbut:get (&optional lbl-key)
   "Return global Hyperbole button symbol given by optional LBL-KEY if found in 
gbut:file.
 
-Retrieves any button data, converts into a button object and returns a symbol
+Retrieve any button data, convert into a button object and return a symbol
 which references the button.
 
-All arguments are optional.  When none are given, returns a symbol for
+All arguments are optional.  When none are given, return a symbol for
 the button that point is within or nil."
   (or (ebut:get lbl-key nil gbut:file)
       (ibut:get lbl-key nil gbut:file)))
 
 (defun    gbut:help (label)
-  "Displays help for Hyperbole global button with LABEL."
+  "Display help for Hyperbole global button with LABEL."
   (interactive (list (hargs:read-match "Report on global button labeled: "
                                       (mapcar 'list (gbut:label-list))
                                       nil t nil 'hbut)))
@@ -759,12 +759,19 @@ others who use a different value!")
 (defun    hbut:act (&optional hbut)
   "Perform action for optional explicit or implicit Hyperbole button symbol 
HBUT.
 Default is 'hbut:current."
+  (interactive (list (hbut:get (hargs:read-match "Activate labeled Hyperbole 
button: "
+                                                (nconc (ebut:alist) 
(ibut:alist))
+                                                nil t nil 'hbut))))
   (unless hbut
     (setq hbut 'hbut:current))
-  (when hbut
-    (apply hrule:action
-          (hattr:get hbut 'actype)
-          (hattr:get hbut 'args))))
+  (cond ((hbut:is-p hbut)
+        (apply hrule:action
+               (hattr:get hbut 'actype)
+               (hattr:get hbut 'args)))
+       ((and hbut (symbolp hbut))
+        (hypb:error "(hbut:act): Symbol, %s, has invalid Hyperbole button 
attributes:\n  %S" hbut (hattr:list hbut)))
+       (t
+        (hypb:error "(hbut:act): Invalid Hyperbole button: %s" hbut))))
 
 (defun    hbut:action (hbut)
   "Return appropriate action for Hyperbole button symbol HBUT."
@@ -786,8 +793,8 @@ Then use (hbut:act) to activate the button."
 
 (defun    hbut:comment (start end)
   "Comment button label spanning region START to END in current buffer.
-Usees buffer commenting grammar, if any, otherwise doesn't comment.
-Ignores email-related buffers."
+Use buffer commenting grammar, if any, otherwise don't comment.
+Ignore email-related buffers."
   (save-excursion
     (if (and comment-start (not (hmail:mode-is-p))
             (not (memq major-mode '(mail-mode message-mode))))
@@ -881,8 +888,8 @@ nil.  BUFFER defaults to the current buffer."
 
 (defun    hbut:key-src (&optional full)
   "Return key source (usually unqualified) for current Hyperbole button.
-Also sets current buffer to key source.
-With optional FULL when source is a pathname, the full pathname is returned."
+Als sets current buffer to key source.
+With optional FULL when source is a pathname, return the full pathname."
   (let ((src (cond ((hmail:mode-is-p) (current-buffer))
                   ;; If buffer represents the output of a document
                   ;; formatter, e.g. an Info document produced from a
@@ -959,7 +966,7 @@ represent the output of particular document formatters."
         src)))
 
 (defun    hbut:key-to-label (lbl-key)
-  "Unnormalizes LBL-KEY and returns a label string for display."
+  "Unnormalize LBL-KEY and return a label string for display."
   (if lbl-key
       (let* ((pos 0) (len (length lbl-key)) (lbl) c)
        (while (< pos len)
@@ -984,13 +991,13 @@ represent the output of particular document formatters."
 
 (defun    hbut:label-p (&optional as-label start-delim end-delim pos-flag 
two-lines-flag)
   "Return key for the Hyperbole button label that point is within, else nil.
-Assumes point is within the first line of any button label.  All
-following arguments are optional.  If AS-LABEL is non-nil, label
-is returned rather than the key derived from the label.
+Assume point is within the first line of any button label.  All
+following arguments are optional.  If AS-LABEL is non-nil, return
+the label rather than the key derived from the label.
 START-DELIM and END-DELIM are strings that override default
-button delimiters.  With POS-FLAG non-nil, returns list of
+button delimiters.  With POS-FLAG non-nil, return list of
 label-or-key, but-start-position, but-end-position.  Positions
-include delimiters.  With TWO-LINES-FLAG non-nil, constrains
+include delimiters.  With TWO-LINES-FLAG non-nil, constrain
 label search to two lines."
   (or (ebut:label-p as-label start-delim end-delim pos-flag two-lines-flag)
       (ibut:label-p as-label start-delim end-delim pos-flag two-lines-flag)))
@@ -1024,10 +1031,10 @@ label; these default to `ebut:start' and `ebut:end'."
        (setq regexp (concat regexp sep0 (regexp-quote (or end-delim 
ebut:end))))))))
 
 (defun    hbut:label-to-key (label)
-  "Normalizes LABEL for use as a Hyperbole button key and returns key.
-Eliminates any fill prefix in the middle of the label, replaces `_' with
-`__', removes leading and trailing whitespace and replaces each other
-whitespace sequence with `_'."
+  "Normalize LABEL for use as a Hyperbole button key and return key.
+Eliminate any fill prefix in the middle of the label, replace `_' with
+`__', remove leading and trailing whitespace and replace all other
+whitespace sequences with `_'."
   (when label
     (setq label (hbut:fill-prefix-remove label)
          ;; Remove leading and trailing space.
@@ -1038,12 +1045,12 @@ whitespace sequence with `_'."
 
 (defun    hbut:map (but-func &optional start-delim end-delim
                             regexp-match include-delims)
-  "Applies BUT-FUNC to a set of Hyperbole buttons in the visible part of the 
current buffer.
+  "Apply BUT-FUNC to a set of Hyperbole buttons in the visible part of the 
current buffer.
 The set of buttons are those whose labels are delimited by optional 
START-DELIM and
 END-DELIM and that match any optional REGEXP-MATCH.
 
 START-DELIM defaults to ebut:start; END-DELIM defaults to ebut:end.
-If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
+If END-DELIM is a symbol, e.g. t, then treat START-DELIM as a regular
 expression which matches an entire button string.
 
 BUT-FUNC must take precisely three arguments: the button label, the
@@ -1167,7 +1174,7 @@ Return number of buttons reported on or nil if none."
 
 (defun    hbut:source (&optional full)
   "Return Hyperbole source buffer or file given at point.
-If a file, always returns a full path if optional FULL is non-nil."
+If a file, always return a full path if optional FULL is non-nil."
   (goto-char (match-end 0))
   (cond ((looking-at "#<buffer \"?\\([^\n\"]+\\)\"?>")
         (get-buffer (match-string 1)))
@@ -1228,7 +1235,7 @@ source file for the buttons in the menu, if any.")
 
 
 (defun    ibut:act (label)
-  "Activates Hyperbole implicit button with <[LABEL]> from the current buffer."
+  "Activate Hyperbole implicit button with <[LABEL]> from the current buffer."
   (interactive (list (hargs:read-match "Activate implicit button labeled: "
                                       (ibut:alist)
                                       nil t nil 'ibut)))
@@ -1329,7 +1336,7 @@ KEY-SRC is given when retrieving global buttons and is 
the full source pathname.
 
 Return a symbol which references the button.
 
-All arguments are optional.  When none are given, returns a
+All arguments are optional.  When none are given, return a
 symbol for the button or button label that point is within or
 nil.  BUFFER defaults to the current buffer."
   (hattr:clear 'hbut:current)
@@ -1375,15 +1382,15 @@ Map over portion of buffer visible under any current 
restriction.
 BUT-FUNC must take precisely three arguments: the button label, the
 start position of the delimited button label and its end position (positions
 include delimiters when INCLUDE-DELIMS is non-nil).
-If END-DELIM is a symbol, e.g. t, then START-DELIM is taken as a regular
+If END-DELIM is a symbol, e.g. t, then treat START-DELIM as a regular
 expression which matches an entire button string."
   (hbut:map but-func ibut:label-start ibut:label-end))
 
 (defun    ibut:rename (old-lbl new-lbl)
-  "Modifies a label preceding a Hyperbole implicit button in the current 
buffer given by LBL-KEY.
-Signals an error when no such button is found in the current buffer.
+  "Modify a label preceding a Hyperbole implicit button in the current buffer 
given by LBL-KEY.
+Signal an error when no such button is found in the current buffer.
 
-Leaves point at the start of the button label which may be elsewhere
+Leave point at the start of the button label which may be elsewhere
 than the current point; callers should use `save-excursion` to retain
 current."
   ;; !! Need to handle adding instances to labels, similar to ebut:operate.
@@ -1401,7 +1408,7 @@ current."
 This is the normalized key form of an optional label that may
 precede an implicit button.  Use `ibut:at-p' instead to test if
 point is on either the implicit button text itself or the label.
-Assumes point is within the first line of any button label.
+Assume point is within the first line of any button label.
 
 All following arguments are optional.  If AS-LABEL is non-nil,
 label is returned rather than the key derived from the label.
diff --git a/hui-menu.el b/hui-menu.el
index 4e9a80c..bedd344 100644
--- a/hui-menu.el
+++ b/hui-menu.el
@@ -317,13 +317,11 @@ REBUILD-FLAG is non-nil, in which case the menu is 
rebuilt."
                    ;; Delete Hyperbole menu from all menubars.
                    (hui-menu-remove Hyperbole)
                    ;;
-                   ;; Remove Hyperbole button comment from future
-                   ;; outgoing mail.
+                   ;; Remove Hyperbole button comment from future outgoing 
mail.
                    (if (boundp 'smail:comment) (setq smail:comment nil)))
                  t]
                 "----"
-                ["Activate-Button-at-Point" hui:hbut-current-act
-                 (hbut:is-p (hbut:at-p))]
+                ["Activate-Button-in-Buffer" hui:hbut-act t]
                 ["Back-to-Prior-Location" (hhist:remove current-prefix-arg)
                  (and (boundp '*hhist*) *hhist*)]
                 '("Button-File"
@@ -405,8 +403,8 @@ REBUILD-FLAG is non-nil, in which case the menu is rebuilt."
                 '("Implicit-Button"
                   ["Manual"   (id-info "(hyperbole)Implicit Buttons") t]
                   "----"
-                  ["Activate-at-Point"    hui:hbut-current-act t]
-                  ["Delete-Type"         (hui:htype-delete 'ibtypes) t]
+                  ["Activate" hui:ibut-act t]
+                  ["Delete-Type" (hui:htype-delete 'ibtypes) t]
                   ["Help"   hui:hbut-help t]
                   ["Label"  hui:ibut-label-create t]
                   ["Rename" hui:ibut-rename t]
diff --git a/hui-mini.el b/hui-mini.el
index 3a7095d..ee6e978 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -387,7 +387,7 @@ constructs.  If not given, the top level Hyperbole menu is 
used."
         (delq nil
               (list
                '("Act"         hui:hbut-act
-                 "Activates button at point or prompts for explicit button.")
+                 "Activate button at point or prompt for a labeled button in 
buffer.")
                '("Butfile/"    (menu . butfile)
                  "Quick access button files menus.")
                '("Cust/"       (menu . cust)
@@ -575,7 +575,8 @@ constructs.  If not given, the top level Hyperbole menu is 
used."
          ))
        '(ibut .
         (("IButton>")
-         ("Act"    hui:hbut-current-act  "Activates implicit button at point.")
+         ("Act"    hui:ibut-act
+           "Activates implicit button at point or prompts for labeled implicit 
button to activate.")
          ("DeleteIButType"   (hui:htype-delete 'ibtypes)
           "Deletes specified button type.")
          ("Help"   hui:hbut-help   "Reports on button's attributes.")
diff --git a/hui.el b/hui.el
index c466602..e1222d0 100644
--- a/hui.el
+++ b/hui.el
@@ -66,7 +66,7 @@
       (message "{%s} now runs `%s'" new-key-text cmd))))
 
 (defun hui:ebut-act (&optional but)
-  "Executes action for optional explicit button symbol BUT in current buffer.
+  "Activate optional explicit button symbol BUT in current buffer.
 Default is the current button."
   (interactive
    (let ((but (ebut:at-p)) (lst))
@@ -74,17 +74,11 @@ Default is the current button."
       (cond (but)
            ((setq lst (ebut:alist))
             (ebut:get (ebut:label-to-key
-                       (hargs:read-match "Button to execute: " lst nil t
+                       (hargs:read-match "Activate explicit button: " lst nil t
                                          (ebut:label-p 'as-label) 'ebut))))
            (t
             (hypb:error "(ebut-act): No explicit buttons in buffer."))))))
-  (cond ((and (called-interactively-p 'interactive) (null but))
-        (hypb:error "(ebut-act): No current explicit button to activate."))
-       ((not (hbut:is-p but))
-        (hypb:error "(ebut-act): Explicit button is invalid; it has no 
attributes."))
-       (t
-        (hui:but-flash)
-        (hbut:act but))))
+  (hui:hbut-operate #'ebut:act "Activate explicit button: " but))
 
 (defun hui:ebut-create (&optional start end)
   "Create an explicit Hyperbole button starting from label between optional 
START and END.
@@ -115,12 +109,12 @@ label."
       (hui:ebut-message nil))))
 
 (defun hui:ebut-delete (but-key &optional key-src)
-  "Deletes explicit Hyperbole button given by BUT-KEY in optional KEY-SRC.
+  "Delete explicit Hyperbole button given by BUT-KEY in optional KEY-SRC.
 KEY-SRC may be a buffer or a pathname, when nil the current buffer is used.
-Returns t if button is deleted, nil if user chooses not to delete or signals
-an error otherwise.  If called interactively, prompts user whether to delete
-and derives BUT-KEY from the button that point is within.
-Signals an error if point is not within a button."
+Return t if button is deleted, nil if user chooses not to delete or signal
+an error otherwise.  If called interactively, prompt user whether to delete
+and derive BUT-KEY from the button that point is within.
+Signal an error if point is not within a button."
   (interactive (list (if (ebut:at-p)
                         (hattr:get 'hbut:current 'lbl-key)
                       nil)))
@@ -160,8 +154,8 @@ button is created interactively with the region as the 
default label."
          t))))
 
 (defun hui:ebut-modify (lbl-key)
-  "Modifies an explicit Hyperbole button given by LBL-KEY.
-Signals an error when no such button is found in the current buffer."
+  "Modify an explicit Hyperbole button given by LBL-KEY.
+Signal an error when no such button is found in the current buffer."
   (interactive (list (save-excursion
                       (hui:buf-writable-err (current-buffer) "ebut-modify")
                       (or (ebut:label-p)
@@ -202,14 +196,14 @@ Signals an error when no such button is found in the 
current buffer."
        (hui:ebut-message t))))
 
 (defun hui:ebut-rename (curr-label new-label)
-  "Renames explicit Hyperbole button given by CURR-LABEL to NEW-LABEL.
+  "Rename explicit Hyperbole button given by CURR-LABEL to NEW-LABEL.
 If called interactively when point is not within an explicit button:
-   prompts for old and new button label values and performs rename.
+   prompt for old and new button label values and performs rename.
 If called interactively when point is within an explicit button:
-   saves button label and tells user to edit label, then call again.
+   save button label and tell user to edit label, then call again.
    second call changes the button's name from the stored value to the
    edited value.
-Signals an error if any problem occurs."
+Signal an error if any problem occurs."
   (interactive
    (save-excursion
      (let (curr-label new-label)
@@ -262,9 +256,9 @@ Signals an error if any problem occurs."
 
 (defun hui:ebut-search (string &optional match-part)
   "Show lines of files/buffers containing an explicit but match for STRING.
-Returns number of buttons matched and displayed.
-By default, only matches for whole button labels are found, optional MATCH-PART
-enables partial matches.  The match lines are shown in a buffer which serves as
+Return number of buttons matched and displayed.
+By default, find only matches for whole button labels; optional MATCH-PART
+enables partial matches.  Show matched lines in a buffer which serves as
 a menu to find any of the occurrences."
   (interactive (list (read-string "Search for button string: ")
                     (y-or-n-p "Enable partial matches? ")))
@@ -328,9 +322,9 @@ invoke: {C-h h i l}, to label/name it."
       (message "%s created." lbl))))
 
 (defun hui:gbut-modify (lbl-key)
-  "Modifies a global Hyperbole button given by LBL-KEY.
+  "Modify a global Hyperbole button given by LBL-KEY.
 The button may be explicit or a labeled implicit button.
-Signals an error when no such button is found."
+Signal an error when no such button is found."
   (interactive (list (save-excursion
                       (hui:buf-writable-err
                        (find-file-noselect gbut:file) "gbut-modify")
@@ -395,7 +389,10 @@ When in the global button buffer, the default is the 
button at point."
 (defun hui:hbut-act (&optional but)
   "Execute action for optional Hyperbole button symbol BUT in current buffer.
 The default is the current button."
-  (hui:hbut-operate #'hbut:act "execute" but))
+  (interactive (list (hbut:get (hargs:read-match "Activate labeled Hyperbole 
button: "
+                                                (nconc (ebut:alist) 
(ibut:alist))
+                                                nil t nil 'hbut))))
+  (hui:hbut-operate #'hbut:act "Activate Hyperbole button: " but))
 
 (defun hui:hbut-current-act ()
   "Activate Hyperbole button at point or signal an error if there is no such 
button."
@@ -461,7 +458,7 @@ BUT defaults to the button whose label point is within."
 (defun hui:hbut-label-default (start end &optional skip-len-test)
   "Return default label based on START and END region markers or points.
 Optional SKIP-LEN-TEST means don't limit label to `ebut:max-len' length.
-Returns nil if START or END are invalid or if region fails length test.
+Return nil if START or END are invalid or if region fails length test.
 
 Also has side effect of moving point to start of default label, if any."
   (when (markerp start) (setq start (marker-position start)))
@@ -473,25 +470,6 @@ Also has side effect of moving point to start of default 
label, if any."
     (goto-char start)
     (buffer-substring-no-properties start end)))
 
-(defun hui:hbut-operate (operation operation-str &optional but)
-  "Execute OPERATION (a function) described by OPERATION-STR action on a 
Hyperbole button.
-Either the button at point is used or if none, then one is prompted
-for with completion of all labeled buttons within the current buffer."
-  (unless (or but (setq but (hbut:at-p)))
-    (let (lst)
-      (cond ((setq lst (nconc (ebut:alist) (ibut:alist)))
-                (setq but (hbut:get (hbut:label-to-key
-                                             (hargs:read-match (format "Button 
to %s: " operation-str)
-                                                    lst nil t
-                                                                       
(hbut:label-p 'as-label) 'hbut)))))
-               (t (hypb:error "(hbut-operate): No labeled buttons in 
buffer")))))
-  (cond ((and (called-interactively-p 'interactive) (null but))
-            (hypb:error "(hbut-operate): No current button to operate upon"))
-           ((not (hbut:is-p but))
-            (hypb:error "(hbut-operate): Button is invalid; it has no 
attributes"))
-           (t (or but (setq but 'hbut:current))
-              (hui:but-flash) (funcall operation but))))
-
 (defun hui:hbut-rename ()
   "Interactively rename a Hyperbole button from the current buffer.
 The default is the button at point."
@@ -500,10 +478,10 @@ The default is the button at point."
         ((ibut:at-p)
          (call-interactively #'hui:ibut-rename))
         (t
-         (hui:hbut-operate #'hbut:rename "rename"))))
+         (hui:hbut-operate #'hbut:rename "Rename Hyperbole button: "))))
 
 (defun hui:hbut-report (&optional arg)
-  "Pretty prints attributes of current button, using optional prefix ARG.
+  "Pretty print attributes of current button, using optional prefix ARG.
 See 'hbut:report'."
   (interactive "P")
   (if (and arg (symbolp arg))
@@ -515,13 +493,28 @@ See 'hbut:report'."
 
 (defalias 'hui:hbut-summarize 'hui:hbut-report)
 
+(defun hui:ibut-act (&optional but)
+  "Activate optional labeled implicit button symbol BUT in current buffer.
+Default is any implicit button at point."
+  (interactive
+   (let ((but (ibut:at-p)) (lst))
+     (list
+      (cond (but)
+           ((setq lst (ibut:alist))
+            (ibut:get (ibut:label-to-key
+                       (hargs:read-match "Activate labeled implicit button: " 
lst nil t
+                                         (ibut:label-p 'as-label) 'ibut))))
+           (t
+            (hypb:error "(ibut-act): No labeled implicit buttons in 
buffer."))))))
+  (hui:hbut-operate #'ibut:act "Activate labeled implicit button: " but))
+
 (defun hui:ibut-label-create ()
-  "Creates an implicit button label preceding an existing implicit button at 
point, if any.
-Adds the label and delimiters around it plus any necessary label instance 
number.
-Signals an error if point is not on an implicit button or if the button 
already has a label.
+  "Create an implicit button label preceding an existing implicit button at 
point, if any.
+Add the label and delimiters around it plus any necessary label instance 
number.
+Signal an error if point is not on an implicit button or if the button already 
has a label.
 
 If the implicit button type does not specify the starting locations of
-its buttons, the the label is simply inserted at point."
+its buttons, the label is simply inserted at point."
   (interactive)
   (hui:buf-writable-err (current-buffer) "ibut-label-create")
   (let* ((ibut (ibut:at-p))
@@ -549,8 +542,8 @@ its buttons, the the label is simply inserted at point."
          (t (error "(hui:ibut-label-create): To add a label, point must be 
within the text of an implicit button")))))
 
 (defun hui:ibut-rename (lbl-key)
-  "Renames a label preceding a Hyperbole implicit button in the current buffer 
given by LBL-KEY.
-Signals an error when no such button is found in the current buffer."
+  "Rename a label preceding a Hyperbole implicit button in the current buffer 
given by LBL-KEY.
+Signal an error when no such button is found in the current buffer."
   (interactive (list (save-excursion
                       (hui:buf-writable-err (current-buffer) "ibut-rename")
                       (or (ibut:label-p)
@@ -758,10 +751,10 @@ DEFAULT-ACTYPE may be a valid symbol or `symbol-name'."
   (get-buffer buf-name)))
 
 (defun hui:ebut-delete-op (interactive but-key key-src)
-  "INTERACTIVEly or not deletes explicit Hyperbole button given by BUT-KEY in 
KEY-SRC.
-KEY-SRC may be a buffer or a pathname, when nil the current buffer is used.
-Returns t if button is deleted, signals error otherwise.  If called
-with INTERACTIVE non-nil, derives BUT-KEY from the button that point is
+  "INTERACTIVEly or not delete explicit Hyperbole button given by BUT-KEY in 
KEY-SRC.
+KEY-SRC may be a buffer or a pathname; when nil the current buffer is used.
+Return t if button is deleted, signal error otherwise.  If called
+with INTERACTIVE non-nil, derive BUT-KEY from the button that point is
 within."
   (let ((buf (current-buffer)) (ebut))
     (if (if interactive
@@ -855,6 +848,31 @@ All args are optional, the current button and buffer file 
are the defaults."
     (hypb:error "(file-find): \"%s\" does not exist or is not readable"
           file-name)))
 
+(defun hui:hbut-operate (operation operation-str &optional but)
+  "Execute OPERATION (a function) described by OPERATION-STR action on a 
Hyperbole button.
+Either the button at point is used or if none, then one is prompted
+for with completion of all labeled buttons within the current buffer."
+  (unless (or but (setq but (hbut:at-p)))
+    (let (lst)
+      (cond ((setq lst (nconc (ebut:alist) (ibut:alist)))
+                (setq but (hbut:get (hbut:label-to-key
+                                             (hargs:read-match operation-str
+                                                    lst nil t
+                                                                       
(hbut:label-p 'as-label) 'hbut)))))
+               (t (hypb:error "(hbut-operate): No labeled buttons in 
buffer")))))
+  (cond ((and (called-interactively-p 'interactive) (null but))
+            (hypb:error "(hbut-operate): No current button upon which to 
operate."))
+               ((progn (unless but (setq but 'hbut:current))
+                               (hbut:is-p but))
+            (hui:but-flash)
+                (apply hrule:action
+                               operation
+                               (list but)))
+           ((and but (symbolp but))
+                (hypb:error "(hbut-operate): Symbol, %s, has invalid Hyperbole 
button attributes:\n  %S" but (hattr:list but)))
+               (t
+                (hypb:error "(hbut-operate): Invalid Hyperbole button: %s" 
but))))
+
 (defun hui:hbut-term-highlight (start end)
   "For terminals only: Emphasize a button spanning from START to END."
   (save-excursion
@@ -886,7 +904,7 @@ All args are optional, the current button and buffer file 
are the defaults."
        (hproperty:but-create))))
 
 (defun hui:htype-delete (htype-sym)
-  "Deletes HTYPE-SYM from use in current Hyperbole session.
+  "Delete HTYPE-SYM from use in current Hyperbole session.
 HTYPE-SYM must be redefined for use again."
   (and htype-sym (symbolp htype-sym)
        (let ((type
@@ -897,7 +915,7 @@ HTYPE-SYM must be redefined for use again."
         (htype:delete type htype-sym))))
 
 (defun hui:htype-help (htype-sym &optional no-sort)
-  "Displays documentation for types from HTYPE-SYM which match to a regexp.
+  "Display documentation for types from HTYPE-SYM which match to a regexp.
 Optional NO-SORT means display in decreasing priority order (natural order)."
   (and htype-sym (symbolp htype-sym)
        (let* ((tstr (symbol-name htype-sym))
@@ -981,12 +999,13 @@ button's source file name when the button data is stored 
externally."
 
 (defun hui:link-create (modify but-window lbl-key but-loc but-dir 
type-and-args)
   "Create or modify a new Hyperbole explicit link button.
-If MODIFY is non-nil, modifies button at point in BUT-WINDOW,
-otherwise, prompts for button label and creates a button.
+If MODIFY is non-nil, modify button at point in BUT-WINDOW,
+otherwise, prompt for button label and creates a button.
 LBL-KEY is internal form of button label.  BUT-LOC is file or buffer
 in which to create button.  BUT-DIR is directory of BUT-LOC.
 TYPE-AND-ARGS is the action type for the button followed by any
-arguments it requires.  Any text properties are removed from string arguments."
+arguments it requires.  Any text properties are removed from string
+arguments."
   (hattr:set 'hbut:current 'loc but-loc)
   (hattr:set 'hbut:current 'dir but-dir)
   (hattr:set 'hbut:current 'actype (actype:elisp-symbol (car type-and-args)))
diff --git a/man/hyperbole.html b/man/hyperbole.html
index 97ef7e5..8c886cf 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -1863,6 +1863,8 @@ Next: <a href="#Dragging-Buffers" accesskey="n" 
rel="next">Dragging Buffers</a>,
 <span id="index-dragging-frames"></span>
 <span id="index-moving-frames"></span>
 <span id="index-drag_002c-move-frame"></span>
+<span id="index-modeline-drag_002c-move-frame"></span>
+<span id="index-drag_002dwith_002dmode_002dline"></span>
 <p>Drags of either Smart Key from a bottommost modeline can be configured to
 drag Emacs frames to new locations on screen.  To configure all existing
 and future frames for such dragging, use:
@@ -3001,8 +3003,7 @@ for a valid match.  See the function documentation for 
<code>hpath:find</code>
 for special file display options.
 </p>
 <span id="index-ibtypes-org_002dmode"></span>
-<span id="index-org_002dmode"></span>
-<span id="index-Org-mode"></span>
+<span id="index-Org_002dmode"></span>
 <span id="index-radio-target"></span>
 <span id="index-code-block"></span>
 <span id="index-links"></span>
@@ -3015,28 +3016,28 @@ for special file display options.
 <span id="index-inhibit-org_002dmode-support"></span>
 </dd>
 <dt><code>org-mode</code></dt>
-<dd><p>For users of Emacs Org mode, Hyperbole does quite a few things.
+<dd><p>For users of Emacs Org-mode, Hyperbole does quite a few things.
 </p>
-<p>First, the Action Key follows internal links in Org mode files.  When
+<p>First, the Action Key follows internal links in Org-mode files.  When
 pressed on a link referent/target, the link definition is displayed,
 allowing two-way navigation between definitions and targets.
 </p>
-<p>Second, the Action Key follows Org mode external links.  The Assist
-Key displays help when pressed on an Org mode link.
+<p>Second, the Action Key follows Org-mode external links.  The Assist
+Key displays help when pressed on an Org-mode link.
 </p>
 <p>Third, within a radio target definition, the Action Key jumps to the
 first occurrence of an associated radio target.
 </p>
-<p>Fourth, when point is on an outline heading in Org mode, the Action Key
+<p>Fourth, when point is on an outline heading in Org-mode, the Action Key
 cycles the view of the subtree at point and the Assist Key cycles the
 view of all headings in the buffer.
 </p>
 <p>Fifth, with point on the first line of a code block definition, the
-Action Key executes the code block via the Org mode standard binding
+Action Key executes the code block via the Org-mode standard binding
 of <kbd>{C-c C-c}</kbd>, <code>org-ctrl-c-ctrl-c</code>.
 </p>
 <p>In any other context besides the end of a line, the Action Key invokes
-the Org mode standard binding of <kbd>{M-<span class="key">RET</span>}</kbd>, 
<code>org-meta-return</code>.
+the Org-mode standard binding of <kbd>{M-<span class="key">RET</span>}</kbd>, 
<code>org-meta-return</code>.
 </p>
 <p>To disable ALL Hyperbole support within Org major and minor modes, set
 the custom option <code>inhibit-hsys-org</code> to <code>t</code>.  Then in 
Org modes,
@@ -4027,12 +4028,11 @@ are at a menu prompt or any other Hyperbole prompt.
 </p>
 <dl compact="compact">
 <dd><span id="index-menu-item_002c-Act"></span>
-<span id="index-menu-item_002c-Activate_002dButton_002dat_002dPoint"></span>
+<span id="index-menu-item_002c-Activate_002dButton_002din_002dBuffer"></span>
 </dd>
 <dt><strong>Act</strong></dt>
-<dd><p>Activation of any button at point.  If there is no button at
-point, it prompts for the label of an explicit button within the
-current buffer to activate.
+<dd><p>Activate button at point or if there is no button at point, prompt for
+a labeled explicit or implicit button from the current buffer to activate.
 </p>
 <span id="index-menu_002c-Button_002dFile"></span>
 <span id="index-menu_002c-Butfile"></span>
@@ -9381,13 +9381,14 @@ Next: <a href="#Smart-Mouse-Drags-between-Windows" 
accesskey="n" rel="next">Smar
 </div>
 <span id="Modeline-Clicks-and-Drags-1"></span><h4 class="subsection">E.1.4 
Modeline Clicks and Drags</h4>
 
-<span id="index-depress_002c-modeline"></span>
-<span id="index-modeline-depress"></span>
+<span id="index-click_002c-modeline"></span>
+<span id="index-modeline-click"></span>
+<span id="index-modeline-drag"></span>
 <span id="index-action_002dkey_002dmodeline_002dfunction-1"></span>
 <span id="index-assist_002dkey_002dmodeline_002dfunction-1"></span>
 <div class="format">
 <pre class="format">If depressed within a window modeline:
-  ACTION KEY
+  ACTION MOUSE KEY
      (1) clicked on the first blank character of a window&rsquo;s modeline,
          the window&rsquo;s buffer is buried (placed at the bottom of the
          buffer list);
@@ -9404,15 +9405,19 @@ Next: <a href="#Smart-Mouse-Drags-between-Windows" 
accesskey="n" rel="next">Smar
      (5) dragged vertically from a modeline to within a window, the
          modeline is moved to the point of the drag release, thereby
          resizing its window and potentially its vertically neighboring
-         windows.
+         windows;
      (6) dragged other than straight vertically from a modeline to another
          window, duplicate the modeline&rsquo;s window buffer to the window of
-         release.
-     (7) dragged from a modeline to outside of Emacs, create a new frame
-         sized to match the selected window with the same buffer.
+         release;
+     (7) dragged from a bottommost modeline when the frame has a non-nil
+         <code>drag-with-mode-line</code> property, then move the frame until
+         release of the Action Mouse Key;
+     (8) otherwide, dragged from a another modeline to outside of
+         Emacs (MacOS only), create a new frame sized to match the
+         selected window with the same buffer.
 </pre></div>
 <div class="format">
-<pre class="format">  ASSIST KEY
+<pre class="format">  ASSIST MOUSE KEY
      (1) clicked on the first blank character of a window&rsquo;s modeline,
          the bottom buffer in the buffer list is unburied and placed in
          the window;
@@ -9421,21 +9426,25 @@ Next: <a href="#Smart-Mouse-Drags-between-Windows" 
accesskey="n" rel="next">Smar
          displayed and the modeline clicked upon belongs to a window
          displaying the summary, the summary buffer is hidden;
      (3) clicked on the buffer id of a window&rsquo;s modeline, the next
-         buffer in sequence is displayed in the window
+         buffer in sequence is displayed in the window;
      (4) clicked anywhere within the middle of a window&rsquo;s modeline,
          the function given by <code>assist-key-modeline-function</code> is
          called;
      (5) dragged vertically from a modeline to within a window, the
          modeline is moved to the point of the drag release, thereby
          resizing its window and potentially its vertically neighboring
-         windows.
+         windows;
      (6) dragged other than straight vertically from a modeline to another
-         window, swap buffers in the two windows.
-     (7) dragged from a modeline to outside of Emacs, create a new frame
-         sized to match the selected window with the same buffer.  If there
-         is only one window in the source frame or if 
<code>hycontrol-keep-window-flag</code>
-         is non-nil, leave the original window and just clone it into the
-         new frame;otherwise, delete the original window.
+         window, swap buffers in the two windows;
+     (7) dragged from a bottommost modeline when the frame has a non-nil
+         <code>drag-with-mode-line</code> property, then move the frame until
+         release of the Action Mouse Key;
+     (8) dragged from a modeline to outside of Emacs (MacOS only),
+         create a new frame sized to match the selected window with
+         the same buffer.  If there is only one window in the source
+         frame or if <code>hycontrol-keep-window-flag</code> is non-nil,
+         leave the original window and just clone it into the new
+         frame; otherwise, delete the original window.
 </pre></div>
 
 <div class="format">
@@ -10994,25 +11003,24 @@ let it flow through you.
 <p>Ok, joking aside, now that we have your attention, here are some
 serious questions and answers.
 </p>
-</li><li> <span id="index-Org-mode-1"></span>
-Isn&rsquo;t Org mode the same as Hyperbole?
+</li><li> <span id="index-Org_002dmode-1"></span>
+Isn&rsquo;t Org-mode the same as Hyperbole?
 
 <p>No, they offer very different capabilities when you compare them a bit
 more deeply.  In fact, it makes sense to use them together and they
-are highly compatible.  The only overlap we see is that Org mode has a
+are highly compatible.  The only overlap we see is that Org-mode has a
 more limited kind of hyperlinks and offers some BBDB integration as
-Hyperbole does.
-</p>
-<p>Initial Smart Key support for Org mode is already in Hyperbole and
-more will come.  For a list of some differences, see:
+Hyperbole does.  For a list of some differences, see:
 <a 
href="https://www.emacswiki.org/emacs/Hyperbole";>https://www.emacswiki.org/emacs/Hyperbole</a>.
 </p>
+<span id="index-inhibit_002dhsys_002dorg-1"></span>
+<p>Smart Key support for Org-mode is already in Hyperbole with compatibility
+with Org&rsquo;s <kbd>{M-RET}</kbd> binding.  With the flag, 
<code>inhibit-hsys-org</code>
+set to <code>t</code>, Hyperbole gives Org complete control over that key as 
well.
+</p>
 <p>Org-mode offers traditional Emacs outlining, todo list management,
 agenda and diary management, so it is very complementary to Hyperbole.
-It did not exist when Hyperbole was first developed.  Today it is just
-a matter of having time and resources to devote to finding ways to
-integrate the two.  We would like to see this happen.  If you would
-like to see it, offer time or money to help make it happen.
+It did not exist when Hyperbole was first developed.
 </p>
 </li><li> <span id="index-Smart-Key-2"></span>
 <span id="index-mouse-key-bindings"></span>
@@ -11991,6 +11999,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-defib"><code>defib</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Implicit-Button-Type-Creation">Implicit Button Type 
Creation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-dir_002c-_007e_002f_002ehyperb">dir, 
~/.hyperb</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Button-Files">Button Files</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-dired_002djump"><code>dired-jump</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key 
Modeline Clicks</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-drag_002dwith_002dmode_002dline">drag-with-mode-line</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Moving-Frames">Moving Frames</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Function_fn_letter-E">E</th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-ebut_002dcreate_002dhook">ebut-create-hook</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr>
@@ -12236,6 +12245,7 @@ Next: <a href="#Concept-Index" accesskey="n" 
rel="next">Concept Index</a>, Previ
 <tr><td></td><td valign="top"><a 
href="#index-Info_002dglobal_002dnext"><code>Info-global-next</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Info-Manuals">Smart Key - Info 
Manuals</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-Info_002dglobal_002dprev"><code>Info-global-prev</code></a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Smart-Key-_002d-Info-Manuals">Smart Key - Info 
Manuals</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-inhibit_002dhsys_002dorg">inhibit-hsys-org</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Implicit-Button-Types">Implicit Button 
Types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-inhibit_002dhsys_002dorg-1">inhibit-hsys-org</a>:</td><td>&nbsp;</td><td
 valign="top"><a href="#Questions-and-Answers">Questions and 
Answers</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-interactive"><code>interactive</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Action-Type-Creation">Action Type Creation</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th id="Function_fn_letter-K">K</th><td></td><td></td></tr>
@@ -12695,6 +12705,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-click_002c-hyrolo-matches">click, 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-click_002c-ibuffer-menu">click, 
ibuffer menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Buffer-Menus">Smart Key - Buffer Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-click_002c-Info">click, 
Info</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Info-Manuals">Smart Key - Info Manuals</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-click_002c-modeline">click, 
modeline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-click_002c-tar">click, 
tar</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-Tar-File-Mode">Smart Key - Tar File Mode</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-click_002c-world_002dwide-web">click, world-wide 
web</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-_002d-WWW-URLs">Smart Key - WWW URLs</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-clone-window">clone 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Cloning-Windows">Cloning Windows</a></td></tr>
@@ -12756,7 +12767,6 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-demo-file">demo 
file</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Manual-Overview">Manual 
Overview</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-demonstration">demonstration</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-demotion">demotion</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-depress_002c-modeline">depress, 
modeline</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-diagonal-drag">diagonal 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Saving-and-Restoring-Window-Configurations">Saving and Restoring Window 
Configurations</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-diagonal-drag-1">diagonal 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Drags-within-a-Window">Smart Mouse Drags within a 
Window</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-digital-signature">digital 
signature</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Glossary">Glossary</a></td></tr>
@@ -13170,7 +13180,7 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a href="#index-menu-help">menu 
help</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-menu-item-selection">menu item 
selection</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-item_002c-Act">menu item, 
Act</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-item_002c-Activate_002dButton_002dat_002dPoint">menu item, 
Activate-Button-at-Point</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-item_002c-Activate_002dButton_002din_002dBuffer">menu item, 
Activate-Button-in-Buffer</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-item_002c-Back_002dto_002dPrior_002dLocation">menu item, 
Back-to-Prior-Location</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-item_002c-Cust_002fAll_002dOptions">menu item, 
Cust/All-Options</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-menu-item_002c-Cust_002fDebug_002dToggle">menu item, 
Cust/Debug-Toggle</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Key-Debugging">Smart Key Debugging</a></td></tr>
@@ -13254,8 +13264,10 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-minibuffer_002c-buffer-menu">minibuffer, buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-minibuffer_002c-default-actions">minibuffer, default 
actions</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-minibuffer_002c-jump-menu">minibuffer, jump 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Minibuffer-Menu-Activation">Minibuffer Menu Activation</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-modeline-click">modeline 
click</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-modeline-click-and-drag">modeline click and 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-modeline-depress">modeline 
depress</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-modeline-drag">modeline 
drag</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Modeline-Clicks-and-Drags">Modeline Clicks and Drags</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-modeline-drag_002c-move-frame">modeline drag, move 
frame</a>:</td><td>&nbsp;</td><td valign="top"><a href="#Moving-Frames">Moving 
Frames</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-modeline_002c-buffer-id">modeline, buffer 
id</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-modeline_002c-buffer-menu">modeline, buffer 
menu</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-modeline_002c-bury-buffer">modeline, bury 
buffer</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Smart-Mouse-Key-Modeline-Clicks">Smart Mouse Key Modeline 
Clicks</a></td></tr>
@@ -13303,9 +13315,8 @@ Previous: <a href="#Function" accesskey="p" 
rel="prev">Function</a>, Up: <a href
 <tr><td></td><td valign="top"><a 
href="#index-OO_002dBrowser">OO-Browser</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Smart-Key-_002d-The-OO_002dBrowser">Smart Key - The 
OO-Browser</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-option-setting">option 
setting</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Customization">Customization</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-option-settings">option 
settings</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Menus">Menus</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Org-mode">Org 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
-<tr><td></td><td valign="top"><a href="#index-Org-mode-1">Org 
mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Questions-and-Answers">Questions and Answers</a></td></tr>
-<tr><td></td><td valign="top"><a 
href="#index-org_002dmode">org-mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-Org_002dmode">Org-mode</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Implicit-Button-Types">Implicit Button Types</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-Org_002dmode-1">Org-mode</a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#Questions-and-Answers">Questions and 
Answers</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-other-frame">other 
frame</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-other-window">other 
window</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-outline-file-suffix">outline 
file suffix</a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#Creating-Outlines">Creating Outlines</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index b73a040..8dbd971 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index d9bb746..59beb69 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index ae1a517..4565dcc 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -1365,6 +1365,8 @@ modeline show visible feedback as the window is resized.
 @cindex dragging frames
 @cindex moving frames
 @cindex drag, move frame
+@cindex modeline drag, move frame
+@vindex drag-with-mode-line
 Drags of either Smart Key from a bottommost modeline can be configured to
 drag Emacs frames to new locations on screen.  To configure all existing
 and future frames for such dragging, use:
@@ -2430,8 +2432,7 @@ for a valid match.  See the function documentation for 
@code{hpath:find}
 for special file display options.
 
 @findex ibtypes org-mode
-@cindex org-mode
-@cindex Org mode
+@cindex Org-mode
 @cindex radio target
 @cindex code block
 @cindex links
@@ -2443,28 +2444,28 @@ for special file display options.
 @cindex disable org-mode support
 @cindex inhibit org-mode support
 @item org-mode
-For users of Emacs Org mode, Hyperbole does quite a few things.
+For users of Emacs Org-mode, Hyperbole does quite a few things.
 
-First, the Action Key follows internal links in Org mode files.  When
+First, the Action Key follows internal links in Org-mode files.  When
 pressed on a link referent/target, the link definition is displayed,
 allowing two-way navigation between definitions and targets.
 
-Second, the Action Key follows Org mode external links.  The Assist
-Key displays help when pressed on an Org mode link.
+Second, the Action Key follows Org-mode external links.  The Assist
+Key displays help when pressed on an Org-mode link.
 
 Third, within a radio target definition, the Action Key jumps to the
 first occurrence of an associated radio target.
 
-Fourth, when point is on an outline heading in Org mode, the Action Key
+Fourth, when point is on an outline heading in Org-mode, the Action Key
 cycles the view of the subtree at point and the Assist Key cycles the
 view of all headings in the buffer.
 
 Fifth, with point on the first line of a code block definition, the
-Action Key executes the code block via the Org mode standard binding
+Action Key executes the code block via the Org-mode standard binding
 of @bkbd{C-c C-c}, @code{org-ctrl-c-ctrl-c}.
 
 In any other context besides the end of a line, the Action Key invokes
-the Org mode standard binding of @bkbd{M-@key{RET}}, @code{org-meta-return}.
+the Org-mode standard binding of @bkbd{M-@key{RET}}, @code{org-meta-return}.
 
 To disable ALL Hyperbole support within Org major and minor modes, set
 the custom option @code{inhibit-hsys-org} to @code{t}.  Then in Org modes,
@@ -3357,11 +3358,10 @@ The top-level Hyperbole minibuffer menu items serve the 
following purposes:
 
 @table @strong
 @cindex menu item, Act
-@cindex menu item, Activate-Button-at-Point
+@cindex menu item, Activate-Button-in-Buffer
 @item Act
-Activation of any button at point.  If there is no button at
-point, it prompts for the label of an explicit button within the
-current buffer to activate.
+Activate button at point or if there is no button at point, prompt for
+a labeled explicit or implicit button from the current buffer to activate.
 
 @cindex menu, Button-File
 @cindex menu, Butfile
@@ -8011,14 +8011,15 @@ a vertical scroll bar:
 @node Modeline Clicks and Drags, Smart Mouse Drags between Windows, 
Side-by-Side Window Resizing, Smart Mouse Keys
 @subsection Modeline Clicks and Drags
 
-@cindex depress, modeline
-@cindex modeline depress
+@cindex click, modeline
+@cindex modeline click
+@cindex modeline drag
 @vindex action-key-modeline-function
 @vindex assist-key-modeline-function
 @format
 @group
 If depressed within a window modeline:
-  ACTION KEY
+  ACTION MOUSE KEY
      (1) clicked on the first blank character of a window's modeline,
          the window's buffer is buried (placed at the bottom of the
          buffer list);
@@ -8035,17 +8036,21 @@ If depressed within a window modeline:
      (5) dragged vertically from a modeline to within a window, the
          modeline is moved to the point of the drag release, thereby
          resizing its window and potentially its vertically neighboring
-         windows.
+         windows;
      (6) dragged other than straight vertically from a modeline to another
          window, duplicate the modeline's window buffer to the window of
-         release.
-     (7) dragged from a modeline to outside of Emacs, create a new frame
-         sized to match the selected window with the same buffer.
+         release;
+     (7) dragged from a bottommost modeline when the frame has a non-nil
+         @code{drag-with-mode-line} property, then move the frame until
+         release of the Action Mouse Key;
+     (8) otherwide, dragged from a another modeline to outside of
+         Emacs (MacOS only), create a new frame sized to match the
+         selected window with the same buffer.
 @end group
 @end format
 @format
 @group
-  ASSIST KEY
+  ASSIST MOUSE KEY
      (1) clicked on the first blank character of a window's modeline,
          the bottom buffer in the buffer list is unburied and placed in
          the window;
@@ -8054,21 +8059,25 @@ If depressed within a window modeline:
          displayed and the modeline clicked upon belongs to a window
          displaying the summary, the summary buffer is hidden;
      (3) clicked on the buffer id of a window's modeline, the next
-         buffer in sequence is displayed in the window
+         buffer in sequence is displayed in the window;
      (4) clicked anywhere within the middle of a window's modeline,
          the function given by @code{assist-key-modeline-function} is
          called;
      (5) dragged vertically from a modeline to within a window, the
          modeline is moved to the point of the drag release, thereby
          resizing its window and potentially its vertically neighboring
-         windows.
+         windows;
      (6) dragged other than straight vertically from a modeline to another
-         window, swap buffers in the two windows.
-     (7) dragged from a modeline to outside of Emacs, create a new frame
-         sized to match the selected window with the same buffer.  If there
-         is only one window in the source frame or if 
@code{hycontrol-keep-window-flag}
-         is non-nil, leave the original window and just clone it into the
-         new frame;otherwise, delete the original window.
+         window, swap buffers in the two windows;
+     (7) dragged from a bottommost modeline when the frame has a non-nil
+         @code{drag-with-mode-line} property, then move the frame until
+         release of the Action Mouse Key;
+     (8) dragged from a modeline to outside of Emacs (MacOS only),
+         create a new frame sized to match the selected window with
+         the same buffer.  If there is only one window in the source
+         frame or if @code{hycontrol-keep-window-flag} is non-nil,
+         leave the original window and just clone it into the new
+         frame; otherwise, delete the original window.
 @end group
 @end format
 
@@ -9581,25 +9590,24 @@ let it flow through you.
 Ok, joking aside, now that we have your attention, here are some
 serious questions and answers.
 
-@cindex Org mode
-@item Isn't Org mode the same as Hyperbole?
+@cindex Org-mode
+@item Isn't Org-mode the same as Hyperbole?
 
 No, they offer very different capabilities when you compare them a bit
 more deeply.  In fact, it makes sense to use them together and they
-are highly compatible.  The only overlap we see is that Org mode has a
+are highly compatible.  The only overlap we see is that Org-mode has a
 more limited kind of hyperlinks and offers some BBDB integration as
-Hyperbole does.
-
-Initial Smart Key support for Org mode is already in Hyperbole and
-more will come.  For a list of some differences, see:
+Hyperbole does.  For a list of some differences, see:
 @url{https://www.emacswiki.org/emacs/Hyperbole}.
 
+@vindex inhibit-hsys-org
+Smart Key support for Org-mode is already in Hyperbole with compatibility
+with Org's @bkbd{M-RET} binding.  With the flag, @code{inhibit-hsys-org}
+set to @code{t}, Hyperbole gives Org complete control over that key as well.
+
 Org-mode offers traditional Emacs outlining, todo list management,
 agenda and diary management, so it is very complementary to Hyperbole.
-It did not exist when Hyperbole was first developed.  Today it is just
-a matter of having time and resources to devote to finding ways to
-integrate the two.  We would like to see this happen.  If you would
-like to see it, offer time or money to help make it happen.
+It did not exist when Hyperbole was first developed.
 
 @cindex Smart Key
 @cindex mouse key bindings



reply via email to

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