[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/hyperbole 25349baa65 03/28: Bug fixes and link directly
From: |
ELPA Syncer |
Subject: |
[elpa] externals/hyperbole 25349baa65 03/28: Bug fixes and link directly finalization for next major release |
Date: |
Tue, 21 Nov 2023 12:58:14 -0500 (EST) |
branch: externals/hyperbole
commit 25349baa6538f333926ff559007a616d0e0d190a
Author: bw <rsw@gnu.org>
Commit: bw <rsw@gnu.org>
Bug fixes and link directly finalization for next major release
---
ChangeLog | 78 +++++++++++++++++++++--
DEMO | 8 ++-
HY-ABOUT | 29 +++++----
HY-NEWS | 109 +++++++++++++++++++++++++++----
MANIFEST | 25 ++++----
hargs.el | 8 +--
hbdata.el | 5 ++
hbut.el | 66 ++++++++++---------
hibtypes.el | 20 +++---
hmail.el | 8 +--
hmouse-drv.el | 10 +--
hmouse-key.el | 21 +++---
hpath.el | 170 +++++++++++++++++++++++++++----------------------
hsys-org.el | 22 ++++++-
hui-mini.el | 9 ++-
hui-mouse.el | 2 +-
hui-window.el | 2 +-
hui.el | 21 ++++--
hversion.el | 29 +--------
hypb.el | 3 +-
hyperbole.el | 7 +-
man/hyperbole.texi | 62 ++++++++++++------
man/version.texi | 4 +-
test/hbut-tests.el | 2 +
test/hibtypes-tests.el | 19 +++---
test/hui-tests.el | 12 ++--
26 files changed, 488 insertions(+), 263 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index faf42dda3b..a170720a44 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,72 @@
+2023-10-01 Bob Weiner <rsw@gnu.org>
+
+* man/hyperbole.texi (Keyboard Drags):
+ DEMO (Creation via Ace Window): Doc prefix args to {M-o w} ace-window
+ link button creation.
+
+* hargs.el (hargs:at-p): Fix when on a two part menu item to use the
+ more specific part to link to the correct location, e.g. on Index
+ entries.
+
+* HY-ABOUT:
+ MANIFEST: Format for org-mode display.
+ hypb.el (hypb:display-file-with-logo): Add use of org-mode to supplement
+ view minor mode.
+
+* hui.el (hui:link-possible-types): When reading a dir or file and not
+ on such a string, use the 'default-directory' or 'buffer-file-name'.
+ Previously just returned nil in such circumstances.
+
+* hmail.el (hmail:hbdata-to-p): Add 'widen' call when hbdata is in
+ the button source buffer and no file is attached, so that it is
+ temporarily made visible/searchable.
+
+2023-09-19 Bob Weiner <rsw@gnu.org>
+
+* test/hibtypes-tests.el (ibtypes::pathname-load-path-line-column-test):
+ Fix to handle when a prior hypb.el buffer exists.
+
+* hpath.el (hpath:normalize): Fix arg name to match name in doc.
+ Fix to trigger an error if arg is anything but a readable filename.
+ (hpath:shorten): Add and use in 'ibut:insert-text'.
+
+* hibtypes.el (pathname-line-and-column): Fix label selection to always
+ include whole delimited path. Previously, only a part of the path
+ might flash as a button.
+
+2023-09-18 Bob Weiner <rsw@gnu.org>
+
+* man/hyperbole.texi (Menus):
+ hui-mini.el (hui:menu-choose): When on the initial Hy9> prompt of the
+ top-level menu and press RET:
+ Remove extra call to 'hyperbole-minibuffer-menu'.
+ Change so quits the minibuffer menu and leaves Smart Key update
+ message in the minibuffer.
+
+* hversion.el (hyperb:path-being-loaded): Remove; no longer used.
+
+* hbut.el (ebut:operate): Add error checks similar to 'ibut:operate'.
+
+* hmouse-drv.el (hkey-window-link):
+ man/hyperbole.texi (Keyboard Drags): Add prefix arg doc for {M-o w}
+ where ibuts are created.
+
+* hui.el (hui:ibut-link-directly): This may be invoked via 'hkey-either'
+ which runs the Assist Key when given a single C-u prefix argument.
+ In such a case, don't use the prefix argument as a flag to prompt
+ for the ibutton name as we want to just insert the appropriate ibut
+ without any prompting.
+ (hui:ebut-link-directly): Change "Create button" to "Create ebutton".
+
+* hpath.el (hpath:to-markup-anchor, hpath:to-line): Update to find matches
+ outside narrowed area.
+
+2023-09-17 Bob Weiner <rsw@gnu.org>
+
+* hbut.el (ebut:operate): Fix that ebut metadata was not hidden after an
+ 'hui:ebut-create' call by adding a conditionalized call to
+ 'hmail:msg-narrow'.
+
2023-08-29 Bob Weiner <rsw@gnu.org>
* hbut.el (ibut:operate): Fix to ensure point is within button after
@@ -27,8 +96,8 @@
* hui.el (hui:ibut-link-create): Fix to handle name attributes properly.
-* hargs.el (hargs:iform-read): Reset global 'hargs:defaults' to nil when not to
- prevent errant values in any future calls.
+* hargs.el (hargs:iform-read): Reset global 'hargs:defaults' to nil when not
used
+ to prevent errant values in any future calls.
* test/hsys-org-tests.el (hsys-org:cycle-on-header-cycles-visibility): Fix to
handle any moving over invisible lines properly.
@@ -83,7 +152,8 @@
* hib-kbd.el (hui-mini): Add (require 'hui-mini) and move private vars before
first
usage to remove byte-compiler warnings.
-* hbut.el (ibut:org-at-read-only-p, ibut:operate): Trigger errors when point
is on
+* hsys-org.el (hsys-org-at-read-only-p):
+ hbut.el (ibut:org-at-read-only-p, ibut:operate): Trigger errors when point
is on
read-only text, read-only Org contexts, explicit buttons, or emacs
push-buttons.
* hyperbole.el (hyperbole--enable-mode, hyperbole--disable-mode): Stop setting
@@ -269,7 +339,7 @@
2023-07-22 Bob Weiner <rsw@gnu.org>
* hargs.el (hargs:at-p): Make Action Keyboard Key behave the same as the
Action Mouse
- Key when in the minibuffer, deleting any characters to the right of point
to
+ Key when in the minibuffer, deleting any characters to the right of point.
2023-07-17 Bob Weiner <rsw@gnu.org>
diff --git a/DEMO b/DEMO
index 2d6617d944..8e6d33d41a 100644
--- a/DEMO
+++ b/DEMO
@@ -1,3 +1,6 @@
+
+
+
* GNU Hyperbole Full Demo/Tutorial by Bob Weiner
Send an email or a testimonial if you like Hyperbole to <rsw@gnu.org>.
@@ -1226,8 +1229,9 @@ For the fastest link button creation, use the Emacs
package
'ace-window' (see "(hyperbole)Keyboard Drags" for setup). Once this
is configured, then {M-o w <window id>} may be used to quickly create
an explicit link button in the selected window that links to any other
-window chosen via the Ace Window. Use a prefix argument to create an
-implicit link button instead.
+window chosen via the Ace Window. Use a C-u prefix argument to create
+an unnamed implicit link button instead and a M-1 prefix argument to
+create a named implicit link button.
*** Creation via Menu
diff --git a/HY-ABOUT b/HY-ABOUT
index 5811c10f31..ef9daae648 100644
--- a/HY-ABOUT
+++ b/HY-ABOUT
@@ -1,4 +1,7 @@
- ABOUT GNU HYPERBOLE
+
+
+
+* ABOUT GNU HYPERBOLE
Designed and Written by Bob Weiner
Maintained by Mats Lidell and Bob Weiner
@@ -28,7 +31,7 @@ World-Wide Web URLs, Info manuals, ftp archives, etc.
The Hyperbole wiki page, "https://www.emacswiki.org/emacs/Hyperbole";,
explains the many ways it differs from and is complementary to Org mode.
-Hyperbole consists of five parts:
+* Hyperbole consists of five parts:
1. Buttons and Smart Keys: Hyperbole hyperlink and other kinds of
buttons may be added to documents (explicit buttons) with a
@@ -79,9 +82,11 @@ Hyperbole consists of five parts:
Hyperbole has been engineered for real-world usage and is well
structured).
-A Hyperbole hypertext user works with buttons; he may create, modify, move
-or delete buttons. Each button performs a specific action, such as linking
-to a file or executing a shell command.
+* A Hyperbole hypertext user works with buttons.
+
+He may create, modify, move or delete buttons. Each button performs a
+specific action, such as linking to a file or executing a shell
+command.
There are three categories of Hyperbole buttons:
@@ -111,7 +116,7 @@ large or small chunks as you see fit, organizing each bit
as time allows.
The Hyperbole Koutliner and HyRolo tools organize textual hierarchies and
may also contain links to external information sources.
-Some of Hyperbole's most important features include:
+* Some of Hyperbole's most important features include:
Buttons may link to information or may execute commands, such as
computing a complex value or communicating with external programs;
@@ -134,9 +139,9 @@ Some of Hyperbole's most important features include:
Other hypertext and information retrieval systems may be
encapsulated under a Hyperbole user interface very easily.
-Typical Hyperbole applications include:
+* Typical Hyperbole applications include:
- Personal Information Management
+** Personal Information Management
Overlapping link paths provide a variety of views into an
information space. A single key press activates buttons
regardless of their types, making navigation easy.
@@ -144,7 +149,7 @@ Typical Hyperbole applications include:
A search facility locates buttons in context and permits quick
selection.
- Documentation Browsing
+** Documentation Browsing
Embedding cross-references in a favorite documentation format.
Addition of a point-and-click interface to existing documentation.
@@ -153,18 +158,18 @@ Typical Hyperbole applications include:
of an identifier from its use within code or its reference within
documentation.
- Brainstorming
+** Brainstorming
Capture of ideas and then quick reorganization with the Hyperbole
Koutliner. Link to related ideas, eliminating the need to copy
and paste information into a single place.
- Help/Training Systems
+** Help/Training Systems
Creation of tutorials with embedded buttons that show students how
things work while explaining the concepts, e.g. an introduction
to UNIX commands. This technique can be much more effective than
descriptions alone.
- Archive Managers
+** Archive Managers
Supplementation of programs that manage archives from incoming
information stream, having them add topic-based buttons that
link to the archive holdings. Users can then search and create
diff --git a/HY-NEWS b/HY-NEWS
index ac242dd8dc..b35fd4fa20 100644
--- a/HY-NEWS
+++ b/HY-NEWS
@@ -1,10 +1,30 @@
- What's New in GNU Hyperbole
+
+
+
+* What's New in GNU Hyperbole
by Bob Weiner
===========================================================================
* V8.0.1pre
===========================================================================
+** ACE WINDOW PACKAGE INTEGRATION - fast window and buffer switching
+
+ *** After installing the ace-window package and loading Hyperbole, execute
+ (hkey-ace-window-setup "\M-o") to enable the following capabilities:
+
+ *** Fast Window Links: The hkey-window-link command quickly creates links
+ to other windows:
+
+ {M-o w <window>} - creates an explicit button linked to point in
<window>
+ {C-u M-o w <window>} - creates an unnamed implicit button linked to
point
+ in <window>
+ {M-1 M-o w <window>} - creates a named implicit button linked to point
+ in <window>
+
+ See "(hyperbole)Create Link Button".
+
+
** ACTION TYPES (See "(hyperbole)Action Types").
*** display-boolean, display-value, display-variable: Made all of these
@@ -14,6 +34,9 @@
** DOCUMENTATION
+ *** Action Types: Added newer types and updated existing doc summaries
+ in the Hyperbole manual. See "(hyperbole)Action Types".
+
*** Emacs 2022 Talk Videos:
- Hyperbole and Org Mode: Org slide file is included in
@@ -30,8 +53,10 @@
want a quick read about how Hyperbole concepts all interrelate.
View it with {C-h h d c}.
- *** Action Types: Added newer types and updated existing doc summaries
- in the Hyperbole manual. See "(hyperbole)Action Types".
+ *** Doc Viewing: Updated to display many files from the Doc> menu in Org
+ mode and view minor mode, so can expand and collapse entries to view
+ just the sections of interest. This includes DEMO, FAST-DEMO, HY-ABOUT,
+ HY-NEWS and MANIFEST.
*** New Menu Key Doc: Documented these Hyperbole minibuffer menu keys:
@@ -45,7 +70,7 @@
for easy cross-referencing, Info viewer version and PDF for printing.
Some of the updates include:
- **** Ebut/Link Menu Item: With two windows on screen, link from source
+ **** Link Menu Items: With two windows on screen, link from source
window point to referent window point. Do a similar thing when
more windows are on screen via an Action Mouse Key drag between
windows. See "(hyperbole)Smart Mouse Drags between Windows".
@@ -61,6 +86,18 @@
See "(hyperbole)Smart Key - Org Mode".
+** EXPLICIT BUTTONS (See "(hyperbole)Explicit Buttons").
+
+ *** Ebut/Link Menu Item - Inserts a named ebutton that links to point in
+ another window. See "(hyperbole)menu item, Ebut/Link".
+
+
+** GLOBAL BUTTONS (See "(hyperbole)Global Buttons").
+
+ *** Gbut/Link Menu Item - A single name creates a new global link button
+ to point. See "(hyperbole)menu item, Gbut/Link".
+
+
** HYCONTROL (See "(hyperbole)HyControl").
*** I/J/K/M Key Bindings: In Window Control mode, move directionally
@@ -106,11 +143,13 @@
*** Natively Compiled Functions as Action Types: Now may be used as
Hyperbole button action types. See "(hyperbole)Action Types".
- *** Reduced Warnings: Large number of byte-compiler warnings eliminated when
- building the Hyperbole package. None of these warnings should affect
- use of Hyperbole. Most open Hyperbole issues have also been resolved.
+ *** Reduced Warnings: Almost all byte-compiler and native compiler warnings
+ have been eliminated when building the Hyperbole package. None of the
+ remaining warnings should affect use of Hyperbole. Most open Hyperbole
+ issues have also been resolved.
- *** XEmacs: Removed old XEmacs-compatibility code.
+ *** XEmacs: Removed old XEmacs-compatibility code; everyone should use GNU
+ Emacs nowadays.
** HYROLO (See "(hyperbole)HyRolo").
@@ -202,16 +241,26 @@
buffers (assume files are tab-delimited).
*** Ibut/Create Menu Item: Creates a named/labeled implicit button of any
- type. Separates the name and the implicit button with " - ".
+ type. Separates the name and the implicit button with " - ". See
+ "(hyperbole)menu item, Ibut/Create".
- *** Relative Info Paths: Info files with relative pathnames outside of the
- `Info-directory-list' now resolve properly, e.g. "man/hyperbole.info".
+ *** Ibut/Link Menu Item - Inserts an ibutton that links to point in another
+ window. With a C-u prefix argument, prompts for a name as well. See
+ "(hyperbole)menu item, Ibut/Link".
*** Path Implicit Buttons: Much improved relative path handling, including
expanding into executable paths when pathname is prefixed by ! or &,
and handling info paths outside `Info-directory-list', like
"man/hyperbole.info".
+ *** Read-only Context Errors: Trigger errors when trying to create an
implicit
+ button with point on read-only text, read-only Org contexts, explicit
buttons,
+ or emacs push-buttons.
+
+ *** Relative Info Paths: Info files with relative pathnames outside of the
+ `Info-directory-list' now resolve properly, e.g. "man/hyperbole.info".
+
+
*** Table of Contents Sections: Hyperbole now recognizes TOCs in any text
derived major mode with the text-toc implicit button type. An Action
Key press on a line with a section name displays the section according
@@ -234,11 +283,25 @@
star-based headings whose stars do not start at the beginning of a line,
i.e. are indented. See "(hyperbole)Inserting and Importing".
+ *** Transpose Lines Down: Add 'kotl-mode:transpose-lines-down' command.
+
** MENUS (See "(hyperbole)Menus").
*** Minibuffer Menu Changes:
+ - Instant Link Creation:
+
+ Ebut/Link - Inserts a named ebutton that links to point in another
window.
+ See "(hyperbole)menu item, Ebut/Link".
+
+ Gbut/Link - A single name creates a new global link button to
point.
+ See "(hyperbole)menu item, Gbut/Link".
+
+ Ibut/Link - Inserts an ibutton that links to point in another
window. With
+ a C-u prefix argument, prompts for a name as well.
+ See "(hyperbole)menu item, Ibut/Link".
+
- Reload Menus and Smart Keys: Action Key press on top-level menu
prefix
reloads Hyperbole minibuffer menus and Smart Key handlers to reflect
any recent edits.
@@ -254,6 +317,15 @@
** PROGRAMMING INTERFACE CHANGES (See "(hyperbole)Embedding Hyperbole").
+ *** hui:ebut-link-directly:
+ hui:gbut-link-directly:
+ hui:ibut-link-directly: Instant direct Hyperbole links.
+
+ *** hypb:mail-address-tld-regexp: Renamed from
'hypb-mail-address-tld-regexp'.
+ hypb:mail-address-regexp: Renamed from 'hypb-mail-address-regexp'.
+ hypb:mail-address-mode-list: Renamed from 'mail-address-mode-list'.
+ Make all of these variables have a common prefix.
+
*** (hypb:devdocs-lookup): Install and load devdocs package and then
call its `devdocs-lookup' function.
@@ -381,6 +453,17 @@
*** (smart-push-button): Added and referenced in `hkey-help' to trigger
push-button-specific help output.
+ *** (hpath:to-markup-anchor, hpath:to-line): Updated to find matches
+ outside narrowed area.
+
+ *** (hyperb:path-being-loaded): Removed; no longer used.
+
+ *** (hpath:shorten): Added and used in 'ibut:insert-text'.
+
+ *** (hui:link-possible-types): When reading a dir or file and not
+ on such a string, use the 'default-directory' or 'buffer-file-name'.
+ Previously just returned nil in such circumstances.
+
** ORG MODE INTEGRATION (See "(hyperbole)Smart Key - Org Mode").
@@ -459,7 +542,7 @@
** TEST CASES (See "${hyperb:dir}/test").
- *** Hyperbole Automated Testing: Over 300 automated test cases. Simply run
+ *** Hyperbole Automated Testing: Over 340 automated test cases. Simply run
'make test-all' or 'make test' from the command-line when in the
Hyperbole source directory and you should see all tests pass. If any
fail, you can press the Action Key to see the source of the failure.
@@ -932,7 +1015,7 @@
*** Fast Window Links: The hkey-window-link command bound to {M-o w}
rapidly creates a link button at point in the selected window,
linking to point in the window chosen when prompted.
- See "DEMO#Displaying Items via Drags and Moving Buffers".
+ See "DEMO2#Displaying File and Buffer Items and Moving Buffers".
*** Throw A Region Elsewhere Within the Same Buffer: {M-o t <window-id>}
when used with a selected region can now throw to the source buffer
diff --git a/MANIFEST b/MANIFEST
index 5d0c5adc91..c6784d4cda 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,4 +1,7 @@
---- INTRODUCTION ---
+
+
+
+* --- INTRODUCTION ---
COPYING - GNU General Public License
DEMO - Interactive Demonstration of many GNU Hyperbole
capabilities
DEMO-ROLO.otl - Sample Hyperbole Rolo file for use with DEMO
@@ -19,7 +22,7 @@ hversion.el - GNU Hyperbole version and system
information setup
hyperbole.el - Loads and initializes GNU Hyperbole
ChangeLog - Summary of changes in recent GNU Hyperbole releases
---- DOCUMENTATION ---
+* --- DOCUMENTATION ---
man/dir - GNU Hyperbole Info directory tree entry
man/hyperbole.html - The GNU Hyperbole Manual (web version)
man/hyperbole.info - The GNU Hyperbole Manual (GNU Info version)
@@ -27,7 +30,7 @@ man/hyperbole.pdf - The GNU Hyperbole Manual (printable
version)
man/hyperbole.texi - The GNU Hyperbole Manual (GNU Texinfo source form)
man/hkey-help.txt - Summarizes Smart Key behaviors in different contexts
---- USER INTERFACE ---
+* --- USER INTERFACE ---
hmouse-info.el - Walks through Info networks using one key
hmouse-drv.el - Smart Key/Mouse driver functions
hmouse-key.el - Setup Smart Key mouse bindings
@@ -47,7 +50,7 @@ hui-treemacs.el - GNU Hyperbole Smart Key support for
the Treemacs file man
hui-window.el - Smart Mouse Key window and modeline depress/release
actions
hui.el - GNU Hyperbole button and hyperlink user interface
---- APPLICATION PROGRAMMING INTERFACE ---
+* --- APPLICATION PROGRAMMING INTERFACE ---
hact.el - GNU Hyperbole button action handling
hargs.el - GNU Hyperbole user input functions
hbmap.el - GNU Hyperbole button map maintenance for queries and
lookups
@@ -64,20 +67,20 @@ hyrolo-logic.el - Logic functions for GNU Hyperbole
Rolo files
hywconfig.el - Save ring of window configurations
set.el - General mathematical operators for unordered sets
---- MAIL SYSTEM SUPPORT ---
+* --- MAIL SYSTEM SUPPORT ---
hmh.el - GNU Hyperbole buttons in mail reader: Mh
hrmail.el - GNU Hyperbole buttons in mail reader: Rmail
hsmail.el - GNU Hyperbole buttons in mail composer: mail
hvm.el - GNU Hyperbole buttons in mail reader: Vm
---- HYPERBOLE KOUTLINER ---
+* --- HYPERBOLE KOUTLINER ---
kotl/MANIFEST - Summary of Koutliner files
kotl/EXAMPLE.kotl - Sample Koutline document explaining Koutliner features
---- USENET NEWS SUPPORT ---
+* --- USENET NEWS SUPPORT ---
hgnus.el - GNU Hyperbole buttons in news reader/poster: GNUS
---- HYPERBOLE INTERNALS ---
+* --- HYPERBOLE INTERNALS ---
hactypes.el - Default action types for GNU Hyperbole
hbdata.el - GNU Hyperbole button attribute accessor functions
hibtypes.el - GNU Hyperbole default implicit button types
@@ -95,14 +98,14 @@ smart-clib-sym - Test whether symbol appears within a
set of C libraries
topwin.py - Python script to find the topmost macOS app window at a
screen position
.hypb & _hypb - Button data files used by the GNU Hyperbole DEMO file
---- EXTERNAL SYSTEM ENCAPSULATIONS ---
+* --- EXTERNAL SYSTEM ENCAPSULATIONS ---
hsys-org.el - GNU Hyperbole support functions for Org mode
hsys-org-roam.el - GNU Hyperbole support functions for Org Roam
hsys-www.el - GNU Hyperbole support for Emacs W3 World-Wide Web (WWW)
browsing
hsys-youtube.el - Action buttons to play timestamped segments of Youtube
videos
---- HYPERBOLE TEST CASES ---
+* --- HYPERBOLE TEST CASES ---
test/MANIFEST - Summary of Hyperbole test case files
---- HYPERBOLE INSTALLATION TEST CONFIGURATIONS ---
+* --- HYPERBOLE INSTALLATION TEST CONFIGURATIONS ---
install-test/MANIFEST - Summary of Hyperbole installation test files
diff --git a/hargs.el b/hargs.el
index 2a5cfc4c08..5f50c27936 100644
--- a/hargs.el
+++ b/hargs.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 31-Oct-91 at 23:17:35
-;; Last-Mod: 28-Aug-23 at 17:59:39 by Bob Weiner
+;; Last-Mod: 1-Oct-23 at 18:59:01 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -507,11 +507,7 @@ Handles all of the interactive argument types that
`hargs:iform-read' does."
(when (eq major-mode 'Info-mode)
(let ((file (Info-current-filename-sans-extension))
(node (cond ((Info-note-at-p))
- ((Info-menu-item-at-p)
- (save-excursion
- (beginning-of-line)
- (forward-char 2)
- (Info-extract-menu-node-name nil
(Info-index-node))))
+ ((Info-menu-item-at-p))
(t Info-current-node))))
(cond ((and (stringp node) (string-match "\\`\(" node))
node)
diff --git a/hbdata.el b/hbdata.el
index a661587f11..e36c5ae1fc 100644
--- a/hbdata.el
+++ b/hbdata.el
@@ -408,6 +408,11 @@ Return value of evaluation when a matching entry is found
or nil."
(hmail:hbdata-start))))))))
(setq found (hbdata:to-entry-buf key-src directory create-flag)))
(when found
+ (unless buffer-file-name
+ ;; Point must be left after hbdata separator or the logic
+ ;; below could fail. Buffer should be widened already.
+ (goto-char (point-min))
+ (search-forward hmail:hbdata-sep nil t))
(let ((case-fold-search t)
(qkey (regexp-quote lbl-key))
(end (save-excursion (if (search-forward "\n\^L" nil t)
diff --git a/hbut.el b/hbut.el
index 7267fe2714..935ba08f1c 100644
--- a/hbut.el
+++ b/hbut.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 18-Sep-91 at 02:57:09
-;; Last-Mod: 29-Aug-23 at 01:38:44 by Bob Weiner
+;; Last-Mod: 19-Sep-23 at 07:09:54 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -352,6 +352,29 @@ button is found in the current buffer."
(new-lbl-key (ebut:label-to-key new-label))
(modify new-label)
(new-instance-flag))
+
+ (when (and new-label (or (not (stringp new-label)) (string-empty-p
new-label)))
+ (hypb:error "(ebut:operate): 'new-label' value must be a non-empty
string, not: '%s'"
+ new-label))
+ (when (and (null curr-label) (not (use-region-p)))
+ (hypb:error "(ebut:operate): region must be active when 'curr-label' is
nil"))
+
+ ;; Error when on a read-only part of a buffer's text
+ (when (plist-member (text-properties-at (point)) 'read-only)
+ (hypb:error "(ebut:operate): Point must not be on a read-only Org
element"))
+ ;; Error when on an implicit button
+ (when (or (eq (hattr:get 'hbut:current 'categ) 'implicit)
+ (string-prefix-p "ibtypes::" (symbol-name (hattr:get
'hbut:current 'categ))))
+ (hypb:error "(ebut:operate): Point must not be on an implicit button: %s"
+ (ibut:label-to-key (hattr:get 'hbut:current 'lbl-key))))
+ ;; Error when on an Emacs push-button
+ (when (plist-member (text-properties-at (point)) 'button)
+ (hypb:error "(ebut:operate): Point must not be on an Emacs push-button:
%s"
+ (button-label (button-at (point)))))
+ ;; Error when in read-only contexts of an Org file
+ (when (hsys-org-at-read-only-p)
+ (hypb:error "(ebut:operate): Point must not be in a read-only Org
context"))
+
(unless new-label
(setq new-label curr-label))
(hattr:set 'hbut:current 'lbl-key (ebut:label-to-key new-label))
@@ -391,7 +414,7 @@ button is found in the current buffer."
(if (hyperb:stack-frame
'(hui:ebut-create hui:ebut-edit
hui:ebut-edit-region
hui:ebut-link-create
hui:gbut-create
- hui:gbut-edit
hui:link-create ebut:program
+ hui:gbut-edit
ebut:program
hui:ibut-create hui:ibut-edit
hui:ibut-link-create
ibut:program))
;; Ignore action-key-depress-prev-point
@@ -444,6 +467,10 @@ button is found in the current buffer."
(re-search-backward regexp nil t)))
(goto-char (+ (match-beginning 0) (length ebut:label-start))))))
+ (when (or (not buffer-file-name) (hmail:editor-p) (hmail:reader-p))
+ (widen)
+ (hmail:msg-narrow))
+
;; new-instance-flag might be 't which we don't want to return.
(when (stringp new-instance-flag) new-instance-flag)))
@@ -2282,7 +2309,7 @@ Summary of operations based on inputs (name arg comes
from \\='hbut:current attr
(hypb:error "(ibut:operate): Point must not be on an Emacs push-button:
%s"
(button-label (button-at (point)))))
;; Error when in read-only contexts of an Org file
- (when (ibut:org-at-read-only-p)
+ (when (hsys-org-at-read-only-p)
(hypb:error "(ibut:operate): Point must not be in a read-only Org
context"))
(unless new-name
@@ -2421,25 +2448,6 @@ Summary of operations based on inputs (name arg comes
from \\='hbut:current attr
;; instance-flag might be 't which we don't want to return.
(when (stringp instance-flag) instance-flag)))
-(defun ibut:org-at-read-only-p ()
- "Return non-nil if point is in an Org read-only context."
- (and (derived-mode-p 'org-mode)
- (featurep 'hsys-org)
- (or (hsys-org-src-block-start-at-p)
- (hsys-org-block-start-at-p)
- (let ((contexts (org-context)))
- (and contexts
- (delq nil (mapcar (lambda (ctxt) (assq ctxt contexts))
- '(:checkbox
- :headline-stars
- :item-bullet
- :keyword
- :link
- :priority
- :table-special
- :tags
- :todo-keyword))))))))
-
(defun ibut:insert-text (ibut)
"Space, delimit and insert the text part of IBUT."
(when (hattr:get ibut 'name)
@@ -2493,30 +2501,30 @@ Summary of operations based on inputs (name arg comes
from \\='hbut:current attr
('man (insert arg1))
('actypes::man-show (insert arg1))
('actypes::link-to-file-line (insert (format "\"%s:%d\""
- (hpath:substitute-var arg1)
arg2)))
+ (hpath:shorten arg1) arg2)))
('actypes::link-to-file-line-and-column
(if (eq arg3 0)
- (insert (format "\"%s:%d\"" (hpath:substitute-var arg1) arg2))
- (insert (format "\"%s:%d:%d\"" (hpath:substitute-var arg1) arg2
arg3))))
+ (insert (format "\"%s:%d\"" (hpath:shorten arg1) arg2))
+ (insert (format "\"%s:%d:%d\"" (hpath:shorten arg1) arg2 arg3))))
('actypes::link-to-file (insert
(if (/= (length args) 2)
;; filename only
- (format "\"%s\"" (hpath:substitute-var arg1))
+ (format "\"%s\"" (hpath:shorten arg1))
;; includes buffer pos that we translate to
line:col
(with-current-buffer (find-file-noselect arg1)
(save-excursion
(goto-char arg2)
(if (zerop (current-column))
(format "\"%s:%d\""
- (hpath:substitute-var arg1)
+ (hpath:shorten arg1)
(line-number-at-pos (point) t))
(format "\"%s:%d:%d\""
- (hpath:substitute-var arg1)
+ (hpath:shorten arg1)
(line-number-at-pos (point) t)
(current-column))))))))
('actypes::link-to-string-match
(insert (format "<%s \"%s\" %d \"%s\">" (actype:def-symbol actype) arg1
arg2
- (hpath:substitute-var arg3))))
+ (hpath:shorten arg3))))
('nil (error "(ibut:insert-text): actype must be a Hyperbole actype or
Lisp function symbol, not '%s'" orig-actype))
;; Generic action button type
(_ (insert (format "<%s%s%s>" (actype:def-symbol actype) (if args " " "")
diff --git a/hibtypes.el b/hibtypes.el
index fabf1aeb49..5f04607ff5 100644
--- a/hibtypes.el
+++ b/hibtypes.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 19-Sep-91 at 20:45:31
-;; Last-Mod: 28-Aug-23 at 16:02:32 by Bob Weiner
+;; Last-Mod: 19-Sep-23 at 17:54:43 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -849,15 +849,19 @@ See `hpath:at-p' function documentation for possible
delimiters.
See `hpath:suffixes' variable documentation for suffixes that are added to or
removed from pathname when searching for a valid match.
See `hpath:find' function documentation for special file display options."
- (let ((path-line-and-col (hpath:delimited-possible-path)))
+ (let* ((path-start-and-end (hpath:delimited-possible-path nil t))
+ (path-line-and-col (nth 0 path-start-and-end))
+ (start (nth 1 path-start-and-end)))
(when (and (stringp path-line-and-col)
(string-match hpath:section-line-and-column-regexp
path-line-and-col))
- (let ((file (save-match-data (hpath:expand (match-string-no-properties 1
path-line-and-col))))
- (line-num (string-to-number (match-string-no-properties 3
path-line-and-col)))
- (col-num (when (match-end 4)
- (string-to-number (match-string-no-properties 5
path-line-and-col)))))
- (when (save-match-data (setq file (hpath:is-p file)))
- (ibut:label-set file (match-beginning 1) (match-end 1))
+ (let* ((line-num (string-to-number (match-string-no-properties 3
path-line-and-col)))
+ (col-num (when (match-end 4)
+ (string-to-number (match-string-no-properties 5
path-line-and-col))))
+ (label (match-string-no-properties 1 path-line-and-col))
+ ;; Next variable must come last as it can overwrite the match-data
+ (file (hpath:expand label)))
+ (when (setq file (hpath:is-p file))
+ (ibut:label-set label start (+ start (length label)))
(if col-num
(hact 'link-to-file-line-and-column file line-num col-num)
(hact 'link-to-file-line file line-num)))))))
diff --git a/hmail.el b/hmail.el
index 38f4fe87b1..b1779d22e0 100644
--- a/hmail.el
+++ b/hmail.el
@@ -94,11 +94,11 @@ Return t if button data is found, else nil."
(hmail:msg-narrow)
t)
((or (hmail:lister-p) (hnews:lister-p)) t)
- ((memq major-mode (list hmail:composer hnews:reader
- hnews:composer))
+ ((or (not buffer-file-name)
+ (memq major-mode (list hmail:composer hnews:reader
+ hnews:composer)))
(widen)
- t)
- ((not buffer-file-name)))
+ t))
(goto-char (point-max))
(when (search-backward hmail:hbdata-sep nil t)
(forward-line 1)
diff --git a/hmouse-drv.el b/hmouse-drv.el
index 11ead6bc01..7136486264 100644
--- a/hmouse-drv.el
+++ b/hmouse-drv.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 04-Feb-90
-;; Last-Mod: 12-Aug-23 at 13:19:18 by Bob Weiner
+;; Last-Mod: 1-Oct-23 at 20:17:42 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -628,11 +628,13 @@ The selected window does not change."
;;;###autoload
(defun hkey-window-link (release-window)
- "Create an ebut in the selected window, linked to point in RELEASE-WINDOW.
+ "Create a but in the selected window, linked to point in RELEASE-WINDOW.
RELEASE-WINDOW is interactively selected via the `ace-window' command.
The selected window does not change.
-With a prefix argument, create an unnamed implicit button instead."
+With no prefix argument, create an explicit button.
+With a C-u '(4) prefix argument, create an unnamed implicit button.
+With a M-1 prefix argument, create an named implicit button."
(interactive
(list (let ((mode-line-text (concat " Ace - Hyperbole: " (nth 2 (assq ?w
aw-dispatch-alist)))))
(aw-select mode-line-text))))
@@ -795,7 +797,7 @@ buffer to the end window. The selected window does not
change."
(if (fboundp #'aw-select) ;; ace-window selection
(let ((aw-scope 'global))
(aw-select "Select link referent window"))
- (message "Now click on the end window...")
+ (message "Select link referent window with the mouse...")
(let (end-event)
(prog1 (cl-loop do (setq end-event (read-event))
until (and (mouse-event-p end-event)
diff --git a/hmouse-key.el b/hmouse-key.el
index d090b6d9e0..50723226a7 100644
--- a/hmouse-key.el
+++ b/hmouse-key.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 30-May-94 at 00:11:57
-;; Last-Mod: 6-Aug-23 at 12:31:42 by Bob Weiner
+;; Last-Mod: 18-Sep-23 at 08:03:36 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -127,14 +127,17 @@ mouse key the Paste Key instead of the Action Key."
"Reload the contexts and actions associated with the Smart Keys.
Use after any programmatic change is made."
(interactive)
- (load "hui-mini")
- (hkey-initialize)
- (makunbound 'hkey-alist)
- (makunbound 'hmouse-alist)
- (let ((load-prefer-newer t))
- (mapc #'load '("hui-mouse" "hui-window" "hibtypes" "hactypes")))
- (message "Hyperbole Smart Key and Smart Mouse Key actions have been
updated."))
-
+ (let ((load-prefer-newer t)
+ (ftrs '(hui-mouse hui-window hibtypes hactypes)))
+ (load "hui-mini")
+ (hkey-initialize)
+ (makunbound 'hkey-alist)
+ (makunbound 'hmouse-alist)
+ (mapc (lambda (feature)
+ (setq features (delq feature features)))
+ ftrs)
+ (mapc #'require ftrs)
+ (message "Hyperbole Smart Keys and menus have been updated")))
;;; ************************************************************************
;;; Private variables
diff --git a/hpath.el b/hpath.el
index a0e2255f52..f958ef6a74 100644
--- a/hpath.el
+++ b/hpath.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 1-Nov-91 at 00:44:23
-;; Last-Mod: 28-Aug-23 at 16:48:31 by Bob Weiner
+;; Last-Mod: 1-Oct-23 at 12:47:34 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1511,67 +1511,73 @@ but locational suffixes within the file are utilized."
(defun hpath:to-markup-anchor (hash anchor)
"Ignore HASH when ANCHOR is non-null and move point to ANCHOR string if
found.
Move point to beginning of buffer if HASH is non-nil and ANCHOR is null."
- (cond ((and (stringp anchor) (not (equal anchor "")))
- (cond ((memq major-mode hui-select-markup-modes)
- ;; In HTML-like mode where link ids are case-sensitive.
- (let ((opoint (point))
- (case-fold-search))
- (goto-char (point-min))
- (if (re-search-forward (format hpath:html-anchor-id-pattern
(regexp-quote anchor)) nil t)
- (progn (forward-line 0)
- (when (eq (current-buffer) (window-buffer))
- (recenter 0)))
- (goto-char opoint)
- (error "(hpath:to-markup-anchor): %s - Anchor `%s' not
found in the visible buffer portion"
- (buffer-name)
- anchor))))
- (t
- (let* ((opoint (point))
- (prog-mode (derived-mode-p 'prog-mode))
- ;; Markdown or outline link ids are case
- ;; insensitive and - characters are converted to
- ;; spaces at the point of definition unless
- ;; anchor contains both - and space characters,
- ;; then no conversion occurs.
- (case-fold-search (not prog-mode))
- (anchor-name (if (or prog-mode
- (string-match-p "-.* \\| .*-"
anchor))
- anchor
- (subst-char-in-string ?- ?\ anchor)))
- (referent-regexp (format
- (cond ((or (derived-mode-p
'outline-mode) ;; Includes Org mode
- ;; Treat all caps filenames
without suffix like outlines, e.g. README, INSTALL.
- (and buffer-file-name
- (string-match-p
"\\`[A-Z][A-Z0-9]+\\'" buffer-file-name)))
- hpath:outline-section-pattern)
- (prog-mode
- "%s")
- ((or (and buffer-file-name
- (string-match-p
hpath:markdown-suffix-regexp buffer-file-name))
- (memq major-mode
hpath:shell-modes))
- hpath:markdown-section-pattern)
- ((derived-mode-p 'texinfo-mode)
- hpath:texinfo-section-pattern)
- ((derived-mode-p 'text-mode)
- "%s")
- (t
hpath:outline-section-pattern))
- (regexp-quote anchor-name)))
- (referent-leading-spaces-regexp
- (when (and (not (string-empty-p referent-regexp))
- (= (aref referent-regexp 0) ?^))
- (concat "^[ \t]+" (substring referent-regexp 1)))))
- (goto-char (point-min))
- (if (or (re-search-forward referent-regexp nil t)
- (and referent-leading-spaces-regexp
- (re-search-forward
referent-leading-spaces-regexp nil t)))
- (progn (forward-line 0)
- (when (eq (current-buffer) (window-buffer))
- (recenter 0)))
- (goto-char opoint)
- (error "(hpath:to-markup-anchor): %s - Section `%s' not
found in the visible buffer portion"
- (buffer-name)
- anchor-name))))))
- (hash (goto-char (point-min)))))
+ (let ((omin (point-min))
+ (omax (point-max)))
+ (unwind-protect
+ (progn (widen)
+ (cond ((and (stringp anchor) (not (equal anchor "")))
+ (cond ((memq major-mode hui-select-markup-modes)
+ ;; In HTML-like mode where link ids are
case-sensitive.
+ (let ((opoint (point))
+ (case-fold-search))
+ (goto-char (point-min))
+ (if (re-search-forward (format
hpath:html-anchor-id-pattern (regexp-quote anchor)) nil t)
+ (progn (forward-line 0)
+ (when (eq (current-buffer)
(window-buffer))
+ (recenter 0)))
+ (goto-char opoint)
+ (error "(hpath:to-markup-anchor): %s - Anchor
`%s' not found in the visible buffer portion"
+ (buffer-name)
+ anchor))))
+ (t
+ (let* ((opoint (point))
+ (prog-mode (derived-mode-p 'prog-mode))
+ ;; Markdown or outline link ids are case
+ ;; insensitive and - characters are
converted to
+ ;; spaces at the point of definition unless
+ ;; anchor contains both - and space
characters,
+ ;; then no conversion occurs.
+ (case-fold-search (not prog-mode))
+ (anchor-name (if (or prog-mode
+ (string-match-p "-.*
\\| .*-" anchor))
+ anchor
+ (subst-char-in-string ?- ?\
anchor)))
+ (referent-regexp (format
+ (cond ((or
(derived-mode-p 'outline-mode) ;; Includes Org mode
+ ;; Treat all
caps filenames without suffix like outlines, e.g. README, INSTALL.
+ (and
buffer-file-name
+
(string-match-p "\\`[A-Z][A-Z0-9]+\\'" buffer-file-name)))
+
hpath:outline-section-pattern)
+ (prog-mode
+ "%s")
+ ((or (and
buffer-file-name
+
(string-match-p hpath:markdown-suffix-regexp buffer-file-name))
+ (memq
major-mode hpath:shell-modes))
+
hpath:markdown-section-pattern)
+ ((derived-mode-p
'texinfo-mode)
+
hpath:texinfo-section-pattern)
+ ((derived-mode-p
'text-mode)
+ "%s")
+ (t
hpath:outline-section-pattern))
+ (regexp-quote
anchor-name)))
+ (referent-leading-spaces-regexp
+ (when (and (not (string-empty-p
referent-regexp))
+ (= (aref referent-regexp 0) ?^))
+ (concat "^[ \t]+" (substring
referent-regexp 1)))))
+ (goto-char (point-min))
+ (if (or (re-search-forward referent-regexp nil t)
+ (and referent-leading-spaces-regexp
+ (re-search-forward
referent-leading-spaces-regexp nil t)))
+ (progn (forward-line 0)
+ (when (eq (current-buffer)
(window-buffer))
+ (recenter 0)))
+ (goto-char opoint)
+ (error "(hpath:to-markup-anchor): %s - Section
`%s' not found in the visible buffer portion"
+ (buffer-name)
+ anchor-name))))))
+ (hash (goto-char omin))))
+ (when (and (<= omin (point)) (>= omax (point)))
+ (narrow-to-region omin omax)))))
(defun hpath:find-executable (executable-list)
"Return first executable string from EXECUTABLE-LIST found in `exec-path'.
@@ -1599,8 +1605,8 @@ frame. Always return t."
(interactive "FFind file: ")
;; Just delete any special Hyperbole command characters preceding
;; the filename, ignoring them.
- (if (string-match hpath:prefix-regexp filename)
- (setq filename (substring filename (match-end 0))))
+ (when (string-match hpath:prefix-regexp filename)
+ (setq filename (substring filename (match-end 0))))
(hpath:find
(if (integerp line-num)
(concat filename ":" (int-to-string line-num))
@@ -1882,6 +1888,14 @@ prior to calling this function."
(error ""))
var-group)))
+(defun hpath:shorten (path)
+ "Shorten and return a PATH.
+Replace Emacs Lisp variables and environment variables (format of
+${var}) with their values in PATH. The first matching value for
+variables like `${PATH}' is used. Then abbreviate any remaining
+path."
+ (hpath:abbreviate-file-name (hpath:substitute-var path)))
+
(defun hpath:substitute-value (path)
"Substitute values for Emacs Lisp variables and environment variables in
PATH.
Return the resulting PATH.
@@ -2016,12 +2030,16 @@ Return LINKNAME unchanged if it is not a symbolic link
but is a pathname."
(defun hpath:to-line (line-num)
"Move point to the start of an absolute LINE-NUM or the last line."
- (save-restriction
- (widen)
- (goto-char (point-min))
- (if (eq selective-display t)
- (re-search-forward "[\n\r]" nil 'end (1- line-num))
- (forward-line (1- line-num)))))
+ (let ((omin (point-min))
+ (omax (point-max)))
+ (unwind-protect
+ (progn (widen)
+ (goto-char (point-min))
+ (if (eq selective-display t)
+ (re-search-forward "[\n\r]" nil 'end (1- line-num))
+ (forward-line (1- line-num))))
+ (when (and (<= omin (point)) (>= omax (point)))
+ (narrow-to-region omin omax)))))
(defun hpath:trim (path)
"Return PATH with any [\" \t\n\r] characters trimmed from its start and end."
@@ -2033,12 +2051,14 @@ Return LINKNAME unchanged if it is not a symbolic link
but is a pathname."
path)
(defun hpath:normalize (filename)
- "Normalize and return PATH if PATH is a valid, readable path, else signal
error.
+ "Normalize and return an existing, readable FILENAME, else signal an error.
Replace Emacs Lisp variables and environment variables (format of
-${var}) with their values in PATH. The first matching value for
- variables like `${PATH}' is used."
- (hpath:validate (hpath:substitute-value
- (buffer-file-name (hpath:find-noselect filename)))))
+${var}) with their values in FILENAME's path. The first matching
+value for variables like `${PATH}' is used."
+ (let ((buf (hpath:find-noselect filename)))
+ (if buf
+ (hpath:validate (hpath:substitute-value (buffer-file-name buf)))
+ (error "(hpath:normalize): '\"%s\" is not a readable filename"
filename))))
(defun hpath:validate (path)
"Validate PATH is readable and return it in Posix format.
diff --git a/hsys-org.el b/hsys-org.el
index c930adb1b2..af9dcde107 100644
--- a/hsys-org.el
+++ b/hsys-org.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 2-Jul-16 at 14:54:14
-;; Last-Mod: 27-Aug-23 at 14:29:35 by Bob Weiner
+;; Last-Mod: 18-Sep-23 at 06:17:33 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -150,6 +150,26 @@ an error."
(and (boundp 'outshine-mode) outshine-mode)
(and (boundp 'poporg-mode) poporg-mode)))
+;;;###autoload
+(defun hsys-org-at-read-only-p ()
+ "Return non-nil if point is in an Org read-only context."
+ (and (derived-mode-p 'org-mode)
+ (featurep 'hsys-org)
+ (or (hsys-org-src-block-start-at-p)
+ (hsys-org-block-start-at-p)
+ (let ((contexts (org-context)))
+ (and contexts
+ (delq nil (mapcar (lambda (ctxt) (assq ctxt contexts))
+ '(:checkbox
+ :headline-stars
+ :item-bullet
+ :keyword
+ :link
+ :priority
+ :table-special
+ :tags
+ :todo-keyword))))))))
+
(defun hsys-org-cycle ()
"Call `org-cycle' and set as `this-command' to cycle through all states."
(setq this-command 'org-cycle)
diff --git a/hui-mini.el b/hui-mini.el
index 7a351ba6b2..d1f6f5d8d8 100644
--- a/hui-mini.el
+++ b/hui-mini.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 15-Oct-91 at 20:13:17
-;; Last-Mod: 9-Aug-23 at 00:21:49 by Bob Weiner
+;; Last-Mod: 18-Sep-23 at 08:03:51 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -436,10 +436,9 @@ documentation, not the full text."
;; RET pressed on Hyperbole top-level menu prefix, reload
;; Smart Key handlers and minibuffer menus to reflect any updates.
(hmouse-update-smart-keys)
- (hyperbole-minibuffer-menu)
- (sit-for 2)
- (message "Minibuffer menus and Smart Key actions reloaded.")
- '(menu . hyperbole))
+ (set--this-command-keys (concat hui:menu-keys hui:menu-quit))
+ (setq this-command #'hmouse-update-smart-keys)
+ nil)
((memq key (list 1 top-char))
(setq hui:menu-keys (concat hui:menu-keys (char-to-string top-char)))
'(menu . hyperbole))
diff --git a/hui-mouse.el b/hui-mouse.el
index 3d6b22f270..a68c140a5f 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 04-Feb-89
-;; Last-Mod: 28-Aug-23 at 01:58:05 by Bob Weiner
+;; Last-Mod: 19-Sep-23 at 05:47:43 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
diff --git a/hui-window.el b/hui-window.el
index 5ecdc0fd14..63ebae28e2 100644
--- a/hui-window.el
+++ b/hui-window.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 21-Sep-92
-;; Last-Mod: 20-Jun-23 at 23:08:18 by Bob Weiner
+;; Last-Mod: 18-Sep-23 at 20:43:57 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
diff --git a/hui.el b/hui.el
index 6092f9434e..3916a5071e 100644
--- a/hui.el
+++ b/hui.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 19-Sep-91 at 21:42:03
-;; Last-Mod: 29-Aug-23 at 01:11:29 by Bob Weiner
+;; Last-Mod: 1-Oct-23 at 17:03:53 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1168,7 +1168,7 @@ from those instead. See also documentation for
(hui:hbut-label-default
(region-beginning) (region-end))))
"ebut-link-directly"
- "Create button named: ")
+ "Create ebutton named: ")
lbl-key (hbut:label-to-key but-lbl))))
;; num-types is the number of possible link types to choose among
@@ -1216,8 +1216,9 @@ With optional DEPRESS-WINDOW and RELEASE-WINDOW, use the
points
from those instead. See also documentation for
`hui:link-possible-types'.
-With optional NAME-ARG-FLAG (interactively, the prefix argument),
-prompt for a name to precede the implicit button.
+With optional NAME-ARG-FLAG (interactively, the prefix argument set to
+anything other than a single C-u (list 4)), prompt for a name to precede
+the implicit button.
An Assist Mouse Key drag between windows runs this command.
Alternatively, to swap buffers between two windows, Assist Mouse Key
@@ -1265,7 +1266,13 @@ drag from a window to another window's modeline."
name-key (ibut:label-to-key (hattr:get 'hbut:current 'name)))
(setq but-loc (hui:key-src (current-buffer))
but-dir (hui:key-dir (current-buffer))))
- (when (and name-arg-flag (not name-key))
+
+ ;; Ignore single C-u prefix arg here since this may be invoked
+ ;; via 'hkey-either' which runs the Assist Key when given a
+ ;; single C-u prefix argument. In such a case, don't use the
+ ;; prefix argument as a flag to prompt for the ibutton name as
+ ;; we want to just insert the appropriate ibut without any prompting.
+ (when (and name-arg-flag (not (eq name-arg-flag '(4))) (not name-key))
(setq but-name (hui:hbut-label
(cond ((hmouse-prior-active-region)
hkey-region)
@@ -1861,10 +1868,10 @@ Buffer without File link-to-buffer-tmp"
(list (rmail:msg-id-get)
buffer-file-name))))))
(t (cond
((let ((hargs:reading-type
'directory))
- (setq val (hargs:at-p t)))
+ (setq val (hargs:at-p)))
(list 'link-to-directory val))
((let ((hargs:reading-type 'file))
- (setq val (hargs:at-p t)))
+ (setq val (hargs:at-p)))
(list 'link-to-file val (point)))
((derived-mode-p #'kotl-mode)
(list 'link-to-kcell
buffer-file-name (kcell-view:idstamp)))
diff --git a/hversion.el b/hversion.el
index d59e50eda2..0a180cf051 100644
--- a/hversion.el
+++ b/hversion.el
@@ -4,7 +4,7 @@
;; Maintainer: Bob Weiner, Mats Lidell
;;
;; Orig-Date: 1-Jan-94
-;; Last-Mod: 27-Aug-23 at 15:26:39 by Bob Weiner
+;; Last-Mod: 18-Sep-23 at 06:39:39 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -52,33 +52,6 @@ your specific mouse.")
;;; Support functions
;;; ************************************************************************
-(defun hyperb:path-being-loaded ()
- "Return the full pathname used by the innermost `load' or `require' call.
-Removes any matches for `hyperb:automount-prefixes' before returning
-the pathname."
- (let* ((frame (hyperb:stack-frame '(load require)))
- (function (nth 1 frame))
- file nosuffix)
- (cond ((eq function 'load)
- (setq file (nth 2 frame)
- nosuffix (nth 5 frame)))
- ((eq function 'require)
- (setq file (or (nth 3 frame) (symbol-name (nth 2 frame))))))
- (when (stringp file)
- (setq nosuffix (or nosuffix
- (string-match
- "\\.\\(elc?\\|elc?\\.gz\\|elc?\\.Z\\)$"
- file))
- file (substitute-in-file-name file)
- file (locate-file file load-path
- (when (null nosuffix) '(".elc" ".el" ".el.gz"
".el.Z"))
- ;; accept any existing file
- nil)
- file (if (and (stringp file)
- (string-match hyperb:automount-prefixes file))
- (substring file (1- (match-end 0)))
- file)))))
-
;; Called in hyperbole.el.
(defun hyperb:stack-frame (function-list &optional debug-flag)
"Return the nearest Elisp stack frame that called a function from
FUNCTION-LIST.
diff --git a/hypb.el b/hypb.el
index 28d067f673..3eca4fe9d4 100644
--- a/hypb.el
+++ b/hypb.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 6-Oct-91 at 03:42:38
-;; Last-Mod: 27-Aug-23 at 17:15:52 by Bob Weiner
+;; Last-Mod: 1-Oct-23 at 20:17:22 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1029,6 +1029,7 @@ If FILE is not an absolute path, expand it relative to
`hyperb:dir'."
(skip-syntax-forward "-")
(set-window-start (selected-window) 1)
(set-buffer-modified-p nil)
+ (org-mode)
(view-mode)
;; On some versions of Emacs like Emacs28, need a slight delay
;; for file loading before searches will work properly.
diff --git a/hyperbole.el b/hyperbole.el
index 7b49387211..e86a44dd8c 100644
--- a/hyperbole.el
+++ b/hyperbole.el
@@ -7,7 +7,7 @@
;; Author: Bob Weiner
;; Maintainer: Bob Weiner <rsw@gnu.org>, Mats Lidell <matsl@gnu.org>
;; Created: 06-Oct-92 at 11:52:51
-;; Last-Mod: 27-Aug-23 at 13:04:09 by Bob Weiner
+;; Last-Mod: 18-Sep-23 at 06:39:11 by Bob Weiner
;; Released: 03-Dec-22
;; Version: 8.0.1pre
;; Keywords: comm, convenience, files, frames, hypermedia, languages,
mail, matching, mouse, multimedia, outlines, tools, wp
@@ -111,9 +111,8 @@
(setq features (delq 'hload-path features)
features (delq 'hversion features)))
- ;; Defines hyperb:path-being-loaded, hyperb:stack-frame,
- ;; (hyperb:window-system) and hyperb:dir, which are used later in
- ;; this file. Also adds Hyperbole to the load-path if need be.
+ ;; Defines hyperb:stack-frame, hyperb:window-system and hyperb:dir, which
are used
+ ;; later in this file. Also adds Hyperbole to the load-path if need be.
;;
;; This handles the case when the Hyperbole package directory is not yet in
load-path.
(unless (or (require 'hversion nil t)
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 96ee0be2a8..3265bc0f06 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -7,7 +7,7 @@
@c Author: Bob Weiner
@c
@c Orig-Date: 6-Nov-91 at 11:18:03
-@c Last-Mod: 28-Aug-23 at 12:33:01 by Bob Weiner
+@c Last-Mod: 1-Oct-23 at 20:19:05 by Bob Weiner
@c %**start of header (This is for running Texinfo on a region.)
@setfilename hyperbole.info
@@ -156,7 +156,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
<PRE>
Edition 8.0.1pre
-Printed August 28, 2023.
+Printed October 1, 2023.
Published by the Free Software Foundation, Inc.
Author: Bob Weiner
@@ -198,7 +198,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@example
Edition 8.0.1pre
-August 28, 2023
+October 1, 2023
Published by the Free Software Foundation, Inc.
Author: Bob Weiner
@@ -1649,7 +1649,7 @@ the Assist Mouse Key (not the Action Key) from the open
area of one
window's modeline to the text area of another. This works across frames
as well.
-If you have just two windows in an Emacs frame, you can swap their buffers
+If you have precisely two windows in an Emacs frame, you can swap their buffers
from the keyboard. Use this Hyperbole minibuffer menu key sequence
involving the tilde key to swap the buffers and quit from the Hyperbole
minibuffer menu: @bkbd{C-h h s w ~ Q}. Similarly, if you have two single
@@ -1762,21 +1762,15 @@ for @code{ace-window}, then just ensure it is
initialized by calling
@kindex M-o i <window-id>
@kindex M-o m <window-id>
@kindex M-o r <window-id>
-@kindex M-o t <window-id>
-@kindex M-o w <window-id>
@cindex insert item
@cindex drag item
@cindex replace window buffer
@cindex swap window buffers
-@cindex throw item
@cindex buffer replace
@cindex buffers swap
-@cindex create link button
@cindex window link button
-@cindex link button
@cindex item drag
@cindex item insert
-@cindex item throw
After setup, the leftmost character or two of each window's modeline
will show the ID to type to use that window as the drag destination.
Then whenever point is on an item you want displayed in another
@@ -1788,10 +1782,31 @@ item to the window. To @emph{replace} the selected
window's buffer
with that of another window, use @bkbd{M-o r
<id-of-window-displaying-desired-buffer>}. To instead @emph{swap} the
selected window's buffer with that of another window, use @bkbd{M-o m
-<id-of-window-to-swap-with>}. And finally, to quickly create a link
-between the selected window and another window, use @bkbd{M-o w
-<id-of-referent-window>}.
+<id-of-window-to-swap-with>}.
+@kindex M-o w <window-id>
+@cindex create link button
+@cindex link button
+@findex hui:ebut-link-directly
+And finally, to create an explicit link between the selected window
+and another window, use @bkbd{M-o w <id-of-referent-window>}.
+@code{hui:ebut-link-directly} determines the link type by using
+the referent context.
+
+
+@kindex C-u M-o w <window-id>
+@kindex M-1 M-o w <window-id>
+@findex hui:ibut-link-directly
+@bkbd{C-u M-o w <window>} creates a new, @emph{unnamed} implicit
+button in the selected (current) window that links to point in the
+referent <window>. @code{hui:ibut-link-directly} determines the link
+type by using the referent context. @bkbd{M-1 M-o w <window>} creates
+a new, @emph{named} implicit button in the selected (current) window
+that links to point in the referent <window>.
+
+@kindex M-o t <window-id>
+@cindex item throw
+@cindex throw item
@cindex throw region
@cindex region throw
You can also throw the active (highlighted) region of text to another
@@ -1819,12 +1834,17 @@ replace the selected (current) window's buffer with
that of <window>
@item M-o t <window>
throw region, listing item at point, or current buffer to <window>
-@findex hui:ebut-link-directly
@item M-o w <window>
-window link, create a new explicit button in the selected (current)
-window, linking to point in the referent <window>.
-@code{hui:ebut-link-directly} determines the link type by using the
-referent context.
+window link, create a new @emph{explicit button} in the selected
+(current) window, linking to point in the referent <window>.
+
+@item C-u M-o w <window>
+window link, create a new, @emph{unnamed implicit button} in the
+selected (current) window, linking to point in the referent <window>.
+
+@item M-1 M-o w <window>
+window link, create a new, @emph{named implicit button} in the
+selected (current) window, linking to point in the referent <window>.
@end table
@c -------
@@ -2142,7 +2162,7 @@ the button type based on the referent context or will
prompt you to
select from one of a few possible link types.
@cindex implicit link creation
-@cindex menu, Ibut/Link
+@cindex menu item, Ibut/Link
@kindex C-h h i l
If you have exactly two Emacs windows in your current frame or exactly
two windows visible across two Emacs frames, this is even easier.
@@ -3956,8 +3976,8 @@ submenus and then return to the top menu.
You can reload the Hyperbole minibuffer menus and Smart Key handlers
to reflect any recent edits when on the top-level Hyperbole menu by
-pressing the Action Key on the menu name (first item that ends with
-'>').
+pressing @bkbd{@key{RET}} or the Action Key on the menu name (first
+item that ends with '>'). This will also quit from the menu.
You can quit from the minibuffer menus without selecting an item by
using @bkbd{Q}, or by pressing @bkbd{@key{RET}} or @bkbd{M-@key{RET}}
diff --git a/man/version.texi b/man/version.texi
index 8eb5c82c15..bdcbada14c 100644
--- a/man/version.texi
+++ b/man/version.texi
@@ -1,4 +1,4 @@
-@set UPDATED August, 2023
-@set UPDATED-MONTH August 2023
+@set UPDATED October, 2023
+@set UPDATED-MONTH October 2023
@set EDITION 8.0.1pre
@set VERSION 8.0.1pre
diff --git a/test/hbut-tests.el b/test/hbut-tests.el
index f969ec9000..680f276652 100644
--- a/test/hbut-tests.el
+++ b/test/hbut-tests.el
@@ -170,7 +170,9 @@ Needed since hyperbole expands all links to absolute paths
and
(with-temp-buffer
(ebut:program "label" 'link-to-directory "/tmp")
(should (equal (hattr:get (hbut:at-p) 'lbl-key) "label"))
+ (goto-char (point-max))
(ebut:program "label" 'link-to-directory "/tmp")
+ (goto-char (- (point-max) 2))
(should (equal (hattr:get (hbut:at-p) 'lbl-key) "label:2"))))
(ert-deftest hypb:program-create-link-to-file-line-and-column-but-in-file ()
diff --git a/test/hibtypes-tests.el b/test/hibtypes-tests.el
index ea453da2f4..503aa4c9d2 100644
--- a/test/hibtypes-tests.el
+++ b/test/hibtypes-tests.el
@@ -129,15 +129,16 @@
(ert-deftest ibtypes::pathname-load-path-line-column-test ()
"Pathname with line and position specification."
- (unwind-protect
- (with-temp-buffer
- (insert "\"${load-path}/hypb.el:11:5\"")
- (goto-char 2)
- (ibtypes::pathname-line-and-column)
- (should (string= "hypb.el" (buffer-name)))
- (should (= (line-number-at-pos) 11))
- (should (= (current-column) 5)))
- (kill-buffer "hypb.el")))
+ (with-temp-buffer
+ (unwind-protect
+ (progn
+ (insert "\"${load-path}/hypb.el:11:5\"")
+ (goto-char 2)
+ (ibtypes::pathname-line-and-column)
+ (should (string-prefix-p "hypb.el" (buffer-name)))
+ (should (= (line-number-at-pos) 11))
+ (should (= (current-column) 5)))
+ (kill-buffer (buffer-name)))))
(ert-deftest ibtypes::pathname-with-dash-loads-file-test ()
"Pathname with dash loads file."
diff --git a/test/hui-tests.el b/test/hui-tests.el
index ed1fc037b1..93ecdd5024 100644
--- a/test/hui-tests.el
+++ b/test/hui-tests.el
@@ -663,26 +663,26 @@ With point on label suggest that ibut for rename."
"Rename an ebut shall change the name of only button with that label."
(with-temp-buffer
(ebut:program "label" 'link-to-directory "/tmp")
+ (should (equal (hattr:get (hbut:at-p) 'lbl-key) "label"))
(goto-char (point-max))
(ebut:program "label2" 'link-to-directory "/tmp")
- (goto-char (point-min))
- (should (equal (hattr:get (hbut:at-p) 'lbl-key) "label"))
+ (goto-char 3)
(hui:ebut-rename "label" "new")
(should (equal (hattr:get (hbut:at-p) 'lbl-key) "new"))
- (goto-char (- (point-max) 1))
+ (goto-char (- (point-max) 2))
(should (equal (hattr:get (hbut:at-p) 'lbl-key) "label2"))))
(ert-deftest hui--ebut-rename-nonumbered-label ()
"Rename an ebut shall rename the label with no number."
(with-temp-buffer
(ebut:program "label" 'link-to-directory "/tmp")
+ (should (equal (hattr:get (hbut:at-p) 'lbl-key) "label"))
(goto-char (point-max))
(ebut:program "label" 'link-to-directory "/tmp")
- (goto-char (point-min))
- (should (equal (hattr:get (hbut:at-p) 'lbl-key) "label"))
+ (goto-char 3)
(hui:ebut-rename "label" "new")
(should (equal (hattr:get (hbut:at-p) 'lbl-key) "new"))
- (goto-char (- (point-max) 1))
+ (goto-char (- (point-max) 2))
(should (equal (hattr:get (hbut:at-p) 'lbl-key) "label:2"))))
(ert-deftest hui--ebut-rename-numbered-label ()
- [elpa] externals/hyperbole updated (3049d58a75 -> c371a2dae9), ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole 25349baa65 03/28: Bug fixes and link directly finalization for next major release,
ELPA Syncer <=
- [elpa] externals/hyperbole 875cb23492 02/28: Merge branch 'master' into rsw, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole 9930211ec5 04/28: Updates to generated doc files, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole b8123eb5ab 07/28: Temp remove use of org-mode in FAST-DEMO and Hypb file display, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole 8aab9aed4a 06/28: Merge branch 'master' into rsw, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole eb28facc7a 12/28: Merge branch 'master' into rsw, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole 193e1b0e92 14/28: Merge branch 'master' into rsw, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole f00bc2440d 10/28: Merge branch 'master' into rsw, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole b506f049d1 08/28: Merge branch 'master' into rsw, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole 1016c3e36a 15/28: Fix ibut link directly for files and directories and when in dired, ELPA Syncer, 2023/11/21
- [elpa] externals/hyperbole b77d35deeb 18/28: link-directly at eol within dired, link to dired directory, ELPA Syncer, 2023/11/21