branch: externals/hyperbole
commit b7cc26a2af8c33b2ce55a8304a811cbfdde341ea
Merge: 8d5638ba33 82b146470d
Author: Robert Weiner <[email protected]>
Commit: GitHub <[email protected]>
Merge pull request #830 from rswgnu/rsw
hpath:shorten - Expand & abbrev, don't shorten gbut activated paths;
HY-TALK/HYPERBOLEQA.kotl - Add from EmacsConf2025 talk
---
ChangeLog | 19 ++++++
HY-TALK/.hypb | 5 ++
HY-TALK/HYPERBOLEQA.kotl | 146 +++++++++++++++++++++++++++++++++++++++++++++++
MANIFEST | 1 +
README.md | 2 +
hbut.el | 8 +--
hmouse-tag.el | 12 ++--
hpath.el | 8 ++-
hui-mouse.el | 11 +++-
man/hyperbole.texi | 16 +++---
10 files changed, 210 insertions(+), 18 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ca193db90b..965f6eb0a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2025-12-13 Bob Weiner <[email protected]>
+
+* MANIFEST: Add "HY-TALK/HYPERBOLEQA.kotl" from EmacsConf2025 talk.
+ HY-TALK/HYPERBOLEQA.kotl - Add.
+
2025-12-11 Mats Lidell <[email protected]>
* MANIFEST:
@@ -6,6 +11,20 @@
* hsys-activities.el (hsys-activities): Add action button support for
external package activities.
+2025-12-07 Bob Weiner <[email protected]>
+
+* hpath.el (hpath:shorten): Expand and abbreviate but don't shorten paths if
+ within a global button activation. Otherwise, relative paths may be
computed
+ wrong. Still this problem shown with (gbut:act "td") is not yet resolved.
+
+* hmouse-tag.el (smart-prog-tag):
+ hui-mouse.el (hkey-alist): Change Assist Key behavior when on a programming
+ symbol/tag. If the symbol is a variable holding an in-memory Hyperbole
button,
+ then display a help buffer with the button's attributes. Otherwise, if an
Elisp
+ symbol, then display a help buffer with symbol documentation, if any, to
match
+ the Hyperbole manual documentation. For any other language symbol,
display its
+ definiton, just as the Action Key does.
+
2025-12-06 Bob Weiner <[email protected]>
* hpath.el (hpath:absolute-to): Rewrite to fix when given multiple
'default-dirs'
diff --git a/HY-TALK/.hypb b/HY-TALK/.hypb
index ed8c113b39..1b3c5335ac 100644
--- a/HY-TALK/.hypb
+++ b/HY-TALK/.hypb
@@ -1,4 +1,9 @@
+"HYPERBOLEQA.kotl"
+("HyControl" nil nil link-to-Info-node ("(hyperbole)HyControl") "[email protected]"
"20251207:16:24:20" nil nil)
+("Koutliner" nil nil link-to-Info-node ("(hyperbole)Koutliner") "[email protected]"
"20251207:16:04:04" "rsw" "20251207:16:04:47")
+("Hyperbole_Todos" nil nil kbd-key ("C-x 4 t") "[email protected]"
"20251207:15:33:06" nil nil)
+
"HYPERAMP.org"
("ERT_test" nil nil link-to-file
("../test/hbut-tests.el#hypb:program-create-ebut-in-buffer") "[email protected]"
"20231203:01:48:10" nil nil)
diff --git a/HY-TALK/HYPERBOLEQA.kotl b/HY-TALK/HYPERBOLEQA.kotl
new file mode 100644
index 0000000000..5902a9c0ec
--- /dev/null
+++ b/HY-TALK/HYPERBOLEQA.kotl
@@ -0,0 +1,146 @@
+;; -*- Mode: kotl -*-
+"Kotl-4.0" ;; file-format
+
+ 1. Hyperbole hyperlinks all your information everywhere in Emacs with
minimal effort and markup.
+
+ 1a. To install:
+ (add-to-list 'package-archives '("melpa" .
"https://melpa.org/packages/") t)
+ or
+ (add-to-list 'package-archives '("elpa-devel" .
"https://elpa.gnu.org/devel/"))
+
+ (package-install 'hyperbole)
+ (hyperbole-mode 1)
+
+ Then {M-RET}, the Action Key, will provide context-sensitive actions
everywhere.
+
+ 1b. Implicit Buttons - typed text patterns Hyperbole recognizes as buttons
+
+ 1b1. Any Lisp sexpression with outer parens replaced by angle brackets:
+ <occur "buttons">
+ <buffer-menu-other-window t>
+
+ Works for Lisp variables as well:
+ <hyperb:dir>
+
+ 1b2. Series of keystrokes surrounded by braces:
+ {C-c g 4}
+
+ 1b3. Pathnames with environment or Lisp variables, sections and
relative line numbers.
+ "${hyperb:dir}/README.md#Hyperbole Manual:L8"
+
+ 1b4. Display the discussion on an Emacs bug:
+ bug#24568
+
+ 1b5. Use {C-h A} to see what {M-RET} will do anywhere,
+ including the specific type of button that it will activate.
+
+ 1c. Explicit Buttons - buttons you add to a text, code or message buffers:
+ <(Hyperbole Todos)>
+
+ Can toggle Org todo states and have multiple sets of states, all with
the {M-RET} key.
+
+ 1d. Global Buttons - named buttons in Hyperbole home page available
anywhere by name:
+ {C-h h g a hyperbole-invocation-doc RET}
+
+ 2. HyRolo for fast lookup and insertion of records:
+ <setq hyrolo-file-list '("~/.rolo.otl"
"~/Dropbox/emacs/ramin-org-notes/")>
+ <global-set-key "\C-x4r" 'hyrolo-fgrep>
+
+ Interactive Record Lookup: {C-h h r s} Mandelbrot RET
+ Interactive Record Insertion: {C-h h r y} Mandelbrot RET
+
+ 3. HyWiki for no markup links to sections of documents
+
+ 3a. HyWiki words are automatically highlighted as you type them
+ in HyWiki pages or with <hywiki-mode 1> enabled, everywhere.
+
+ 3b. Link to HyWiki sections with # anchors:
+ EmacsMe#My-Section or "EmacsMe#My Section"
+
+ 4. The <(Koutliner)> produces autonumbered outlines with automatic
+ permanent hyperlink anchors (called idstamps) per cell/node. We are
+ using it here. <[Koutliner Tutorial]> {C-h h k e}
+
+ 5. Highlight, Wipe, Copy and Yank Structured Regions
+
+ 5a. Double-quoted Paths: "Any quoted string." "Recognizes start and end"
+
+ 5b. Matching Delimiters: [This is just text.]
+
+ 5c. Parenthesized Lisp Sexpressions: (+ (- 8 2) 7)
+
+ 6. <(HyControl)> provides fast control of windows and frame adjustments
+
+ 7. Extensive Documentation
+
+ 7a. Videos - "../README.md:L25"
+
+ 7b. Interactive Demos/Tutorials - {C-h h d d} {C-h h k e}
+
+ 7c. Reference Manual - {C-h h d i}
+ https://rswgnu.github.io/hyperbole
+
+ 7d. <[Architectural Reference]> https://deepwiki.com/rswgnu/hyperbole
+
+
+"ben" ;; kvspec:current
+32 ;; id-counter
+alpha ;; label-type
+4 ;; label-min-width
+". " ;; label-separator
+3 ;; level-indent
+
+;; depth-first kcell attributes
+[[0
+ (creator "[email protected]" create-time "20251207:14:28:32" id-counter 32)]
+ [1
+ (creator "[email protected]" create-time "20251207:14:28:32")]
+ [31
+ (creator "[email protected]" create-time "20251207:18:04:23")]
+ [5
+ (creator "[email protected]" create-time "20251207:14:32:31")]
+ [18
+ (creator "[email protected]" create-time "20251207:14:43:02")]
+ [19
+ (creator "[email protected]" create-time "20251207:14:43:54")]
+ [20
+ (creator "[email protected]" create-time "20251207:14:46:58")]
+ [21
+ (creator "[email protected]" create-time "20251207:14:59:06")]
+ [32
+ (creator "[email protected]" create-time "20251207:18:09:17")]
+ [6
+ (creator "[email protected]" create-time "20251207:14:32:35")]
+ [7
+ (creator "[email protected]" create-time "20251207:14:32:46")]
+ [2
+ (creator "[email protected]" create-time "20251207:14:31:22")]
+ [3
+ (creator "[email protected]" create-time "20251207:14:31:52")]
+ [16
+ (creator "[email protected]" create-time "20251207:14:40:26")]
+ [28
+ (creator "[email protected]" create-time "20251207:15:59:42")]
+ [29
+ (creator "[email protected]" create-time "20251207:16:02:57")]
+ [23
+ (creator "[email protected]" create-time "20251207:15:30:12")]
+ [25
+ (creator "[email protected]" create-time "20251207:15:30:59")]
+ [27
+ (creator "[email protected]" create-time "20251207:15:31:30")]
+ [26
+ (creator "[email protected]" create-time "20251207:15:31:04")]
+ [22
+ (creator "[email protected]" create-time "20251207:15:30:04")]
+ [8
+ (creator "[email protected]" create-time "20251207:14:33:09")]
+ [10
+ (creator "[email protected]" create-time "20251207:14:33:30")]
+ [12
+ (creator "[email protected]" create-time "20251207:14:33:42")]
+ [11
+ (creator "[email protected]" create-time "20251207:14:33:33")]
+ [13
+ (creator "[email protected]" create-time "20251207:14:33:53")]
+ nil nil nil nil nil nil nil]
diff --git a/MANIFEST b/MANIFEST
index 4d4173ab34..2c371de1ed 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -27,6 +27,7 @@ man/hyperbole.texi - The GNU Hyperbole Manual (GNU Texinfo
source form)
man/hkey-help.txt - Summarizes Smart Key behaviors in different contexts
HY-TALK/HY-TALK.org - EmacsNYC 2020 Talk: Make Your Text Come Alive slides
HY-TALK/HYPERAMP.org - EmacsConf 2023 Talk: Top 10 Ways Hyperbole Amps Up
Emacs slides
+HY-TALK/HYPERBOLEQA.kotl - EmacsConf 2025 Talk: Questions and answers to help
you fly with Hyperbole
HY-TALK/HYPERORG.org - EmacsConf 2022 Talk: Powerful Productivity with
Hyperbole and Org Mode slides
* --- USER INTERFACE ---
diff --git a/README.md b/README.md
index e946091ae8..50d1024877 100644
--- a/README.md
+++ b/README.md
@@ -236,6 +236,8 @@ window control menu if it was not already bound prior to
Hyperbole's
initialization. A long video demonstrating many of HyControl's
features is available at https://youtu.be/M3-aMh1ccJk.
+## Hyperbole Manual
+
The above are the best interactive ways to learn about Hyperbole.
Hyperbole also includes the Hyperbole Manual, a full reference manual,
not a simple introduction. It is included in the "man/" subdirectory
diff --git a/hbut.el b/hbut.el
index c89799aab9..bb37b4754a 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: 31-Aug-25 at 16:22:09 by Bob Weiner
+;; Last-Mod: 7-Dec-25 at 19:24:08 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -1721,13 +1721,13 @@ Return number of buttons reported on or nil if none."
lbl
(concat ebut:label-start lbl ebut:label-end)))
(terpri)
+ (hattr:report attribs)
+ (terpri)
(let ((doc (actype:doc but (= 1 (length lbl-lst)))))
(when doc
(princ " ")
(princ doc)
- (terpri)))
- (hattr:report attribs)
- (terpri)))
+ (terpri)))))
lbl-lst))
(length lbl-lst))))
diff --git a/hmouse-tag.el b/hmouse-tag.el
index c01b8e0010..927a4bfbe4 100644
--- a/hmouse-tag.el
+++ b/hmouse-tag.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 24-Aug-91
-;; Last-Mod: 5-Oct-25 at 11:21:21 by Bob Weiner
+;; Last-Mod: 7-Dec-25 at 20:25:10 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -983,9 +983,13 @@ Uses `xref' for identifier recognition."
;;;###autoload
(defun smart-prog-tag (&optional identifier next)
- "Jump to definition of optional programming IDENTIFIER or the one at point.
-Optional second arg NEXT means jump to next matching tag."
- (smart-tags-display (or identifier (hsys-xref-identifier-at-point)) next)
+ "Jump to definition of optional IDENTIFIER string or the one at point.
+Optional second arg NEXT is used by the Assist Key. If IDENTIFIER is
+an Elisp symbol, it displays the IDENTIFIER'S documention; otherwise, it jumps
+to next matching tag definition."
+ (if (and next (smart-emacs-lisp-mode-p))
+ (describe-symbol (intern identifier))
+ (smart-tags-display (or identifier (hsys-xref-identifier-at-point)) next))
t)
(defun smart-jedi-find-file (file line column other-window)
diff --git a/hpath.el b/hpath.el
index 169cf9510a..08d2dc275c 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: 6-Dec-25 at 22:57:33 by Bob Weiner
+;; Last-Mod: 7-Dec-25 at 21:12:14 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -2078,6 +2078,8 @@ prior to calling this function."
(defun hpath:shorten (path &optional relative-to)
"Expand and then shorten and return a PATH optionally RELATIVE-TO other path.
+Don't shorten if acting on a global button.
+
Ignore optional RELATIVE-TO if editing a message,
i.e. (hmail:editor-p) => t. If RELATIVE-TO is omitted or nil,
set it to `default-directory'. Replace Emacs Lisp variables and
@@ -2097,7 +2099,9 @@ used. Then abbreviate any remaining path."
(setq relative-to (expand-file-name
(hpath:substitute-value relative-to))
path
- (cond ((string-equal path relative-to)
+ (cond ((hyperb:stack-frame '(gbut:act))
+ path)
+ ((string-equal path relative-to)
"")
((string-equal (file-name-directory path) relative-to)
(file-name-nondirectory path))
diff --git a/hui-mouse.el b/hui-mouse.el
index 4381b09f99..3e4372c9b1 100644
--- a/hui-mouse.el
+++ b/hui-mouse.el
@@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 04-Feb-89
-;; Last-Mod: 9-Sep-25 at 01:30:54 by Bob Weiner
+;; Last-Mod: 7-Dec-25 at 20:15:46 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
@@ -455,6 +455,15 @@ The button's attributes are stored in the symbol,
`hbut:current'.")
((eq major-mode 'pages-directory-mode)
. ((pages-directory-goto) . (pages-directory-goto)))
;;
+ ;; If a variable holding an in-memory Hyperbole button object, e.g.
hbut:current:
+ ;; Action Key - Jump to variable definition
+ ;; Assist Key - Display button attributes of any Hyperbole button symbol
at point
+ ((and (setq hkey-value (smart-prog-at-tag-p))
+ (hbut:is-p (intern-soft hkey-value)))
+ . ((ignore-errors (smart-prog-tag hkey-value)) .
+ (hbut:report (intern-soft hkey-value))))
+ ;;
+ ;; Handle programming language tag definition finding via xref.
;; For most programming languages use xref which supports various
;; Language Servers
((and (setq hkey-value (smart-prog-at-tag-p))
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 35beda1d85..f76d523254 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: 1-Dec-25 at 10:00:11 by Mats Lidell
+@c Last-Mod: 7-Dec-25 at 20:30:10 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 December 1, 2025
+@set UPDATED December 7, 2025
@set UPDATED-MONTH December 2025
@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 December 1, 2025.
+Printed December 7, 2025.
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
-December 1, 2025 @c AUTO-REPLACE-ON-SAVE
+December 7, 2025 @c AUTO-REPLACE-ON-SAVE
Published by the Free Software Foundation, Inc.
@@ -11447,9 +11447,11 @@ identifier:
Emacs Lisp require, load, or autoload clause and the (find-library)
function is defined, jumps to the library source, if possible.
ASSIST KEY
- Jumps to the next tag matching an identifier at point or if
- the identifier is an Emacs Lisp symbol, then this displays the
- documentation for the symbol.
+ Jumps to the next tag matching an identifier at point unless
+ the identifier is an Emacs Lisp symbol, then:
+ 1. if it contains an in-memory Hyperbole button, display the buttons
+ attributes in a help buffer.
+ 2. otherwise, display the identifier's documentation in a help buffer.
@end group
@end format