branch: externals/hyperbole
commit 36e441a9ffd2c7d492a19ad4a916b7e2d0809b6f
Author: bw <[email protected]>
Commit: bw <[email protected]>
hywiki.el - Add insertion of HyWikiWord#section reference links
README.md - Add article link section.
---
ChangeLog | 32 ++++++++++
README.md | 24 ++++++++
hasht.el | 22 ++++---
hbut.el | 7 ++-
hibtypes.el | 14 +++--
hsys-consult.el | 4 +-
hui-mini.el | 6 +-
hui.el | 8 ++-
hywiki.el | 173 ++++++++++++++++++++++++++++++++++++++++-------------
man/hyperbole.texi | 9 +--
10 files changed, 231 insertions(+), 68 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 6204b6405f..dea4faf878 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,35 @@
+2026-02-18 Bob Weiner <[email protected]>
+
+* hui.el (require 'hywiki):
+ (hui:link-possible-types): Add 'link-to-wikiword' clause.
+* hbut.el (ibut:insert-text): Add 'actypes::link-to-wikiword' clause.
+* man/hyperbole.texi (By Dragging): Add HyWikiWord Reference to referent
+ context table.
+
+* hywiki.el (hywiki-consult-file-and-line): Add.
+ (hywiki-format-reference): Add and use with above function.
+ (hywiki-insert-reference): Add.
+ (hywiki-word-is-p): Use 'string-match-p' instead of 'string-match'.
+ (link-to-wikiword): Add this actype.
+ (hywiki-insert-link): Update to search for section links to insert
+ when 'consult' is available.
+ (require 'hui): Change to an 'eval-when-compile' so does not
+ trigger recursive requirements during normal loading.
+ hui-mini.el (hui:menu-hywiki): Unify with "hui-menu.el". Replace use of
+ 'hywiki-add-path-link' with 'hywiki-insert-link'.
+
+2026-02-17 Bob Weiner <[email protected]>
+
+* hasht.el (hash-make): Fix to trigger an error if key is not given as a
string.
+
+2026-02-16 Bob Weiner <[email protected]>
+
+* hibtypes.el (markdown-follow-inline-link-p): Fix to handle URL arguments sent
+ when point is on the link title and not an included URL (so check if on
+ a URL fails).
+
+* README.md: Add Hyperbole Articles section.
+
2026-02-15 Bob Weiner <[email protected]>
* hywiki.el (hywiki-word-highlight-in-current-buffer): Fix bug that added
diff --git a/README.md b/README.md
index 50d1024877..2124a69922 100644
--- a/README.md
+++ b/README.md
@@ -55,6 +55,30 @@ otherwise, skip to the next section.
- [Linking personal info with implicit
buttons](https://youtu.be/TQ_fG7b1iHI)
+## Articles
+
+ - [HyWiki: My Favorite Part of
Hyperbole](https://kirankp.com/blog/gnu-hyperbole/)
+
+ - [Hyperbole VisionQuest Part
1](https://github.com/termitereform/JunkPile/blob/master/HyperboleNotes.org)
+
+ - [Hyperbole VisionQuest Part
2](https://github.com/termitereform/JunkPile/blob/master/HyperboleNotes2.org)
+
+ - [A Taste of
Hyperbole](https://www.reddit.com/r/emacs/comments/1kty4mb/a_taste_of_hyperbole_automatically_linking_to_org/)
+
+ - [My Understanding of GNU
Hyperbole](https://www.reddit.com/r/emacs/comments/nirwpk/my_understanding_of_gnu_hyperbole/)
+
+ - [What does GNU Hyperbole
do?](https://tilde.town/~ramin_hal9001/articles/intro-to-hyperbole.html)
+
+ - [John Wiegley - The Philosophy Behind
Hyperbole](https://mail.gnu.org/archive/html/hyperbole-users/2019-01/msg00037.html)
+
+ - [Daily ways GNU Hyperbole helps me stay in flow and reduces cognitive
load](https://www.reddit.com/r/emacs/comments/jk3cn0/daily_ways_gnu_hyperbole_helps_me_stay_in_flow/)
+
+ - [Doing a Research Project and using GNU Hyperbole's Integrated
Features](https://www.reddit.com/r/emacs/comments/1g2184d/doing_a_research_project_and_using_gnu_hyperboles/)
+
+ - [AI-generated Hyperbole Architectural
Documentation](https://deepwiki.com/rswgnu/hyperbole)
+
+ - [Hypermedia and
Hyperbole](https://www.mgmarlow.com/words/2023-10-26-hyperbole/)
+
## Summary
`GNU Hyperbole` (pronounced Ga-new Hi-per-bo-lee), or just `Hyperbole`, is
diff --git a/hasht.el b/hasht.el
index b20b0a05a2..4ad4af7109 100644
--- a/hasht.el
+++ b/hasht.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 16-Mar-90 at 03:38:48
-;; Last-Mod: 30-Dec-25 at 14:42:14 by Mats Lidell
+;; Last-Mod: 17-Feb-26 at 22:42:00 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -159,16 +159,20 @@ merge all the values for a given <key> instead."
key value sym)
(if reverse
(mapc (lambda (cns)
- (when (consp cns)
- (setq key (car cns) value (cdr cns)))
- (when (setq sym (intern key))
- (puthash sym value hash-table)))
+ (if (consp cns)
+ (setq key (car cns) value (cdr cns))
+ (setq key nil value nil))
+ (if (and (stringp key) (setq sym (intern key)))
+ (puthash sym value hash-table)
+ (error "(hash-make): 'key' must be a string, not
%S" key)))
initializer)
(mapc (lambda (cns)
- (when (consp cns)
- (setq key (cdr cns) value (car cns)))
- (when (setq sym (intern key))
- (puthash sym value hash-table)))
+ (if (consp cns)
+ (setq key (cdr cns) value (car cns))
+ (setq key nil value nil))
+ (if (and (stringp key) (setq sym (intern key)))
+ (puthash sym value hash-table)
+ (error "(hash-make): 'key' must be a string, not %S"
key)))
initializer))
hash-table))))
diff --git a/hbut.el b/hbut.el
index 96c53c23fc..850fe36b08 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: 30-Dec-25 at 23:55:08 by Mats Lidell
+;; Last-Mod: 18-Feb-26 at 23:49:33 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -2722,6 +2722,11 @@ Summary of operations based on inputs (name arg from
\\='hbut:current attrs):
(insert "<" arg1 ">"))))
('actypes::link-to-org-id (insert (format "\"id:%s\"" arg1)))
('actypes::link-to-rfc (insert (format "rfc%d" arg1)))
+ ('actypes::link-to-wikiword (insert (if (and (stringp arg1)
+ (string-match-p "\\s-"
arg1))
+ ;; Double-quote when has a space
+ (format "\"%s\"" arg1)
+ arg1)))
('man (insert arg1))
('actypes::man-show (insert arg1))
('actypes::link-to-file-line (insert (format "\"%s:%d\""
diff --git a/hibtypes.el b/hibtypes.el
index 3c465fa4b5..61aa356a16 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: 2-Feb-26 at 18:22:19 by Bob Weiner
+;; Last-Mod: 16-Feb-26 at 18:46:40 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -527,15 +527,17 @@ Return t if jump and nil otherwise."
"If on an inline link, jump to its referent if it is absolute and return
non-nil.
Absolute means not relative within the file. Otherwise, if an
internal link, move back to OPOINT and return nil."
- ;; Caller already checked not on a URL (handled elsewhere).
(let ((path (markdown-link-url)))
(goto-char opoint)
(when (markdown-link-p)
(ibut:label-set (match-string-no-properties 0) (match-beginning 0)
(match-end 0))
- (if path
- (hact 'link-to-file path)
- (hpath:display-buffer (current-buffer))
- (hact 'markdown-follow-link-at-point)))))
+ (cond ((hpath:url-p path)
+ (hact 'www-url path))
+ (path
+ (hact 'link-to-file path))
+ (t
+ (hpath:display-buffer (current-buffer))
+ (hact 'markdown-follow-link-at-point))))))
(defib markdown-internal-link ()
"Display any in-file Markdown link referent at point.
diff --git a/hsys-consult.el b/hsys-consult.el
index 45340ccc9c..13d11296d6 100644
--- a/hsys-consult.el
+++ b/hsys-consult.el
@@ -2,7 +2,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 4-Jul-24 at 09:57:18
-;; Last-Mod: 30-Dec-25 at 14:42:23 by Mats Lidell
+;; Last-Mod: 19-Feb-26 at 00:52:16 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -43,8 +43,10 @@
(declare-function hsys-org-directory-at-tags-p "hsys-org")
(declare-function hsys-org-at-tags-p "hsys-org")
+(declare-function consult--async-command "ext:consult")
(declare-function consult--grep "ext:consult")
(declare-function consult--grep-make-builder "ext:consult")
+(declare-function consult--lookup-member "ext:consult")
(declare-function consult--read "ext:consult")
(declare-function consult--ripgrep-make-builder "ext:consult")
(declare-function consult-grep "ext:consult")
diff --git a/hui-mini.el b/hui-mini.el
index 182aaf4fb7..139cb8a723 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: 1-Jan-26 at 18:18:17 by Mats Lidell
+;; Last-Mod: 19-Feb-26 at 00:16:53 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1068,8 +1068,8 @@ support underlined faces as well."
"Report on a HyWikiWord's attributes or HyWikiWords in general.")
'("Info" (id-info "(hyperbole)HyWiki")
"Display Hyperbole manual section on HyWiki.")
- '("Link" hywiki-add-path-link
- "Prompt for and add a HyWikiWord that links to a path and possible
position.")
+ '("Link" hywiki-insert-link
+ "Prompt for and insert at point a HyWikiWord#section reference.")
'("ModeSet/" (menu . cust-hywiki-mode)
"Set hywiki-mode state to determine where HyWikiWord references are
recognized.")
'("Org-M-RET/" (menu . cust-org)
diff --git a/hui.el b/hui.el
index 9d90f070c4..f818c7edb3 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: 31-Dec-25 at 16:02:19 by Mats Lidell
+;; Last-Mod: 19-Feb-26 at 00:29:40 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -27,6 +27,7 @@
(require 'hmail)
(require 'hbut)
(eval-when-compile (require 'hactypes))
+(eval-when-compile (require 'hywiki)) ;; Because 'hyperbole' requires this too
;;; ************************************************************************
;;; Public declarations
@@ -2010,6 +2011,7 @@ possible types.
Referent Context Possible Link Type Returned
----------------------------------------------------
+HyWikiWord Reference link-to-wikiword
Org Roam or Org Id link-to-org-id
Global Button link-to-gbut
Explicit Button link-to-ebut
@@ -2034,7 +2036,9 @@ Buffer without File link-to-buffer-tmp"
hbut-sym
lbl-key)
(prog1 (delq nil
- (list (cond ((and (featurep 'org-id)
+ (list (cond ((let ((ref (hywiki-referent-exists-p)))
+ (list 'link-to-wikiword ref)))
+ ((and (featurep 'org-id)
(cond ((save-excursion
(beginning-of-line)
(when (looking-at "[
\t]*:\\(CUSTOM_\\)?ID:[ \t]+\\([^ \t\r\n\f]+\\)")
diff --git a/hywiki.el b/hywiki.el
index 62df799748..2b7bacaa90 100644
--- a/hywiki.el
+++ b/hywiki.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 21-Apr-24 at 22:41:13
-;; Last-Mod: 15-Feb-26 at 20:39:33 by Bob Weiner
+;; Last-Mod: 19-Feb-26 at 00:57:14 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -38,7 +38,7 @@
;; - non-special text buffers, when `hywiki-mode' is enabled;
;; - comments and strings in programming buffers, when
;; `hywiki-mode' is enabled.
-;;
+;;
;; As HyWikiWords are typed, highlighting occurs after a trailing
;; whitespace or punctuation character is added, or when it is
;; surrounded by a matching pair of characters such as curly braces
@@ -105,7 +105,7 @@
;; properties with Org's publishing framework, so when in a HyWiki
;; page, you can use the standard {C-c C-e P p} current project publish
;; command.
-;;
+;;
;; There are a few publishing settings you can customize prior to
;; loading Hyperbole's HyWiki code.
;;
@@ -144,7 +144,7 @@
(require 'hpath)
(require 'hproperty)
(require 'hsys-consult)
-(require 'hui) ;; For `hui:actype'
+(eval-when-compile (require 'hui)) ;; For `hui:actype'
(require 'hui-mini) ;; For `hui:menu-act'
(require 'hypb) ;; Requires `seq'
(require 'outline) ;; For `outline-mode-syntax-table'
@@ -223,7 +223,7 @@ See `current-time' function for the mod time format.")
(defvar hywiki--pages-directory nil)
(defvar hywiki--referent-alist nil
"HyWiki alist generated from `hywiki--referent-hasht' for storage in cache.
-Each element is of the form: (wikiword . (referent-type . referent-value)).")
+Each element is of the form: (\"wikiword\" . (referent-type .
referent-value)).")
(defvar hywiki--referent-hasht nil
"HyWiki hash table for fast WikiWord referent lookup.")
@@ -1484,8 +1484,7 @@ exists."
prompt-flag)))
(defun hywiki-completion-at-point ()
- "Complete HyWiki references.
-Ensures that selecting a completion replaces only the text after the '#'."
+ "Complete HyWiki references, either the HyWikiWord or the #section."
(let ((ref-start-end (and (hywiki-active-in-current-buffer-p)
(not (hywiki-non-hook-context-p))
(hywiki-word-at t t))))
@@ -1498,7 +1497,7 @@ Ensures that selecting a completion replaces only the
text after the '#'."
;; Extract the WikiWord before the '#'
(word (hywiki-word-from-reference ref)))
(save-excursion
- ;; 1. Look for the '#' delimiter on the current line
+ ;; CASE 1. Look for the '#' delimiter on the current line
(if (re-search-backward "#" start t)
(let ((hash-pos (point))
(page (expand-file-name (concat word ".org")
hywiki-directory)))
@@ -1648,6 +1647,43 @@ nil, else return \\='(page . \"<page-file-path>\")."
(and (or at-tag-flag (hsys-org-at-tags-p))
(or (hywiki-in-page-p) (string-prefix-p "*HyWiki Tags*"
(buffer-name)))))
+(defun hywiki-consult-file-and-line ()
+ "Return a list of the file and line selected by consult or nil.
+Use `hywiki-insert-reference' with the result of this function to insert a
+double-quoted HyWikiWord reference at point."
+ (interactive)
+ (let* ((dir (expand-file-name hywiki-directory))
+ (manual-builder
+ (lambda (input)
+ (let* (;; Define the regex inside the builder so it's always in
scope
+ (headline-pattern (concat "^\\* .*" input))
+ ;; Ensure all arguments are evaluated as strings
+ (args (list "rg"
+ "--null"
+ "--line-buffered"
+ "--color=never"
+ "--with-filename"
+ "--line-number"
+ "--smart-case"
+ "-g" "*.org"
+ "-e" headline-pattern
+ dir)))
+ (cons args dir))))
+ (selected (consult--read
+ (consult--async-command manual-builder)
+ :prompt "HyWiki Headline: "
+ :require-match t
+ :lookup #'consult--lookup-member
+ :category 'consult-grep)))
+
+ (when (stringp selected)
+ (if (string-match "\\`\\([^\0]+\\)\0\\([0-9]+\\):\\(.*\\)" selected)
+ (let ((file (match-string 1 selected))
+ (line (match-string 3 selected)))
+ (list file line))
+ (message "(hwiki-consult-file-and-line): Parse error on: %s" selected)
+ nil))))
+
;;;###autoload
(defun hywiki-consult-grep (&optional regexp max-matches path-list prompt)
"Interactively search with a consult package grep command.
@@ -2045,8 +2081,51 @@ This includes the delimiters: (), {}, <>, [] and \"\"
(double quotes)."
(defun hywiki-insert-link ()
"Insert at point a link to a HyWiki page."
(interactive "*")
- (insert (hywiki-word-read "Link to HyWiki page: "))
- (hywiki-maybe-highlight-reference))
+ (let ((ref (if (featurep 'consult)
+ (hywiki-format-reference (hywiki-consult-file-and-line))
+ ;; Without consult, can only complete to a WikiWord
+ ;; without a section
+ (hywiki-word-read "Link to HyWiki page: "))))
+ (when ref
+ (insert ref)
+ (skip-chars-backward "\"")
+ (goto-char (1- (point)))
+ (hywiki-maybe-highlight-reference))))
+
+;;;###autoload
+(defun hywiki-format-reference (page-and-line)
+ "Return a HyWikiWord#section reference, PAGE-AND-LINE, from `consult-grep'.
+Add double quotes if the section contains any whitespace after trimming.
+
+Return t if PAGE-AND-LINE is a valid list, else nil. If the page name
+therein is invalid, trigger an error."
+ (when (and page-and-line (listp page-and-line))
+ (cl-destructuring-bind (page line)
+ page-and-line
+ (setq page (file-name-base page))
+ (when (not (string-match-p hywiki-word-regexp page))
+ (error "(hywiki-format-reference): Invalid HyWiki page name - \"%s\""
+ page))
+ ;; Drop '* ' prefix
+ (setq line (string-trim line "[ \t\n\r]*\\**[ \t\n\r]+"))
+ (format (if (string-match-p "\\s-" line)
+ "\"%s#%s\""
+ "%s#%s")
+ page
+ line))))
+
+(defun hywiki-insert-reference (page-and-line)
+ "Insert a HyWikiWord#section reference, PAGE-AND-LINE, from `consult-grep'.
+Add double quotes if the section contains any whitespace after trimming.
+
+Return t if PAGE-AND-LINE is a valid list, else nil. If the page name
+therein is invalid, trigger an error."
+ (let ((ref (hywiki-format-reference page-and-line)))
+ (when ref
+ (insert ref)
+ (skip-chars-backward "\"")
+ (goto-char (1- (point)))
+ t)))
(defun hywiki-maybe-dehighlight-balanced-pairs ()
"Before or after a balanced delimiter, dehighlight HyWikiWords within.
@@ -3232,36 +3311,37 @@ Customize this directory with:
;; spaces replaced with dashes, made unique when necessary.
(org-publish-project "hywiki" all-pages-flag))
-(defun hywiki-referent-exists-p (&optional word start end)
- "Return the HyWikiWord at point or optional HyWiki WORD, if has a referent.
+(defun hywiki-referent-exists-p (&optional ref start end)
+ "Return the HyWiki reference at point or optional REF, if has a referent.
If no such referent exists, return nil.
-The HyWikiWord may be of the form:
+The HyWikiWord reference may be of the form:
1. HyWikiWord#section with an optional #section.
- 2. If WORD is the symbol, :range, and there is a HyWikiWord at point
- with an existing referent, return the tuple of values: \='(<word>
- <word-start> <word-end>) instead of the word; otherwise, return the
- tuple \='(nil nil nil).
-
-When using the word at point, a call to `hywiki-active-in-current-buffer-p'
-at point must return non-nil or this function will return nil."
- (let ((save-input-word word))
- (when (stringp word)
- (setq word (hywiki-strip-org-link word)))
- (if (or (stringp word)
- (setq word (hywiki-word-get-range)))
- (unless (hywiki-get-referent (if (stringp word) word (nth 0 word)))
- (setq word nil))
- (setq word nil))
- (when (and (listp word) (= (length word) 3))
- (setq start (nth 1 word)
- end (nth 2 word)
- ;; `word' must be set last so list version can be referenced
+ 2. If REF is the symbol, :range, and there is a HyWikiWord at point
+ with an existing referent, return the tuple of values: \='(<ref>
+ <ref-start> <ref-end>) instead of the reference alone; otherwise,
+ return the tuple \='(nil nil nil).
+
+When using the reference at point, a call to
+`hywiki-active-in-current-buffer-p' at point must return non-nil or this
+function will return nil."
+ (let ((save-input-word ref))
+ (when (stringp ref)
+ (setq ref (hywiki-strip-org-link ref)))
+ (if (or (stringp ref)
+ (setq ref (hywiki-word-get-range)))
+ (unless (hywiki-get-referent (if (stringp ref) ref (nth 0 ref)))
+ (setq ref nil))
+ (setq ref nil))
+ (when (and (listp ref) (= (length ref) 3))
+ (setq start (nth 1 ref)
+ end (nth 2 ref)
+ ;; `ref' must be set last so list version can be referenced
;; first above
- word (nth 0 word)))
+ ref (nth 0 ref)))
(if (eq save-input-word :range)
- (list word start end)
- word)))
+ (list ref start end)
+ ref)))
(defun hywiki-section-to-headline-reference ()
"Replace file#section dashes with spaces to match to an Org headline.
@@ -3735,17 +3815,16 @@ Return nil if WORD is a prefixed, typed hy:HyWikiWord,
since
these are handled by the Org mode link handler."
(and (stringp word) (not (string-empty-p word))
(let (case-fold-search)
- (and (or (string-match hywiki-word-with-optional-suffix-exact-regexp
word)
+ (and (or (string-match-p hywiki-word-with-optional-suffix-exact-regexp
word)
;; For now this next version allows spaces and tabs in
;; the suffix part
(eq 0 (string-match
hywiki-word-with-optional-suffix-exact-regexp
word)))
- (save-match-data
- ;; If has a #section, ensure there are no invalid chars
- (if (string-match "#" word)
- (string-match "#[^][#()<>{}\"\n\r\f]+\\'" word)
- t))))))
+ ;; If has a #section, ensure there are no invalid chars
+ (if (string-match-p "#" word)
+ (string-match-p "#[^][#()<>{}\"\n\r\f]+\\'" word)
+ t)))))
(defun hywiki-word-read (&optional prompt)
"Prompt with completion for and return an existing HyWikiWord.
@@ -3798,7 +3877,7 @@ occurs with one of these hooks, the problematic hook is
removed."
(hywiki-word-highlight-buffers
(set:difference (hywiki-get-buffers hywiki-from-mode)
(hywiki-get-buffers hywiki-to-mode))))
- (t
+ (t
(error "(hywiki-word-set-auto-highlighting): Inputs must be nil,
:pages or :all, not '%s' and '%s'"
hywiki-from-mode hywiki-to-mode))))
@@ -3884,6 +3963,16 @@ completion or no completion xandidates are returned."
(when (called-interactively-p 'interactive)
(message "HyWikiWord auto-highlighting disabled")))
+(defact link-to-wikiword (reference)
+ "Display the HyWikiword referent matching WikiWord#section REFERENCE."
+ (interactive (list
+ (if (featurep 'consult)
+ (hywiki-format-reference (hywiki-consult-file-and-line))
+ ;; Without consult, can only complete to a WikiWord
+ ;; without a section
+ (hywiki-word-read "Link to HyWiki page: "))))
+ (hywiki-find-referent reference))
+
;;; ************************************************************************
;;; Private functions
;;; ************************************************************************
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 6d6305428a..ef83bcf884 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: 7-Feb-26 at 10:10:33 by Bob Weiner
+@c Last-Mod: 18-Feb-26 at 23:43:55 by Bob Weiner
@c %**start of header (This is for running Texinfo on a region.)
@setfilename hyperbole.info
@@ -30,7 +30,7 @@
@set txicodequoteundirected
@set txicodequotebacktick
-@set UPDATED February 7, 2026
+@set UPDATED February 18, 2026
@set UPDATED-MONTH February 2026
@set EDITION 9.0.2pre
@set VERSION 9.0.2pre
@@ -171,7 +171,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
<PRE>
Edition 9.0.2pre
-Printed February 7, 2026.
+Printed February 18, 2026.
Published by the Free Software Foundation, Inc.
Author: Bob Weiner
@@ -213,7 +213,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
@example
Edition 9.0.2pre
-February 7, 2026 @c AUTO-REPLACE-ON-SAVE
+February 18, 2026 @c AUTO-REPLACE-ON-SAVE
Published by the Free Software Foundation, Inc.
@@ -3887,6 +3887,7 @@ upon the referent context in which the Action Key is
released.
@example
Referent Context Link Type
----------------------------------------------------
+HyWikiWord Reference link-to-wikiword
Org Roam or Org Id link-to-org-id
Global Button link-to-gbut
Explicit Button link-to-ebut