Skip to content
69 changes: 68 additions & 1 deletion ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,28 @@
2026-02-27 Mats Lidell <matsl@gnu.org>

* test/hywiki-yki-tests.el (hywiki-test--insert-with-point): Remove. Reuse
similar function from hywiki-tests.el instead.
(hywiki-test--get-buffer-text-with-point-and-highlight): Change to a
more lifelike test that behaves the same in batch as interactively to
solve the issue with the failing test for now. Use
hywiki-tests--insert-by-char and remove not needed hywiki-mode calls.

2026-02-26 Bob Weiner <rsw@gnu.org>

* hywiki.el (hywiki-word-strip-suffix): Fix to strip any leading or trailing #
and whitespace chars.
(hywiki-format-grep-to-reference): Don't add double quotes so when used
with completions, don't fail because the double quote is not included in
the matched prefix.
(hywiki-insert-link): Add double-quotes if link contains a space.
(hywiki-completion-exit-function): Add.
(hywiki-word-add-completion-at-point): Add call to above function in
completion exit hooks that support normal completion, company and corfu.
(hywiki-maybe-at-wikiword-beginning): Change when non-nil return value to
be the preceding char or if at bol, then 0.
(hywiki-word-add-completion-at-point, hywiki-completion-at-point):
Add support for Corfu with :exit-function.

2026-02-25 Mats Lidell <matsl@gnu.org>

* .github/workflows/docs.yml: New workflow
Expand All @@ -6,8 +31,50 @@
(doc-clean): Use make foreach for removing doc build artifacts. (Avoid
bash brace expansion.) Remove README.md.html and README.toc.md.

2026-02-25 Bob Weiner <rsw@gnu.org>

* hbut.el (hbut:modify-syntax): Treat # as a symbol constituent to support
'company-mode' completion in for 'hbut:syntax-table' and
'help-mode-syntax-table'.

2026-02-22 Bob Weiner <rsw@gnu.org>

* README.md: Add "The Emacs Hyperbole" great article by Mike Hostetler.

* hywiki.el (hywiki-format-reference): Rename to 'hywiki-format-grep-to-reference';
remove autoload.
(hywiki-format-reference-to-grep): Add.
(hywiki-completion-at-point): Rewrite and simplify.
(hywiki-word-highlight-in-buffers): Add call to
'hywiki-word-add-completion-at-point' to ensure has completion hook independent
of whether the buffer's major mode changes.
(hywiki-word-remove-completion-at-point): Add and call in
'hywiki-word-dehighlight-in-buffers'.
(hywiki-display-referent): Interactively, call 'hywiki-word-read'
rather than 'hwyiki-page-read-reference'.
(hywiki-read-page-reference): Rename to 'hywiki-page-read-reference'
and return a HyWiki completion alist of pages when completing to pages only.
(hywiki-format-reference-to-consult-grep): Add.

2026-02-21 Bob Weiner <rsw@gnu.org>

* hywiki.el (hywiki-consult-page-and-line): Change output from a list to the
unparsed string returned as the selection by 'consult-grep'.
(hywiki-consult-page-and-line): Rename to
'hywiki-consult-page-and-headline)'.
(hywiki-format-reference): Change arg 'page-and-line' to be
an unparsed string returned from the above function.
(hywiki-consult-page-and-headline, hywiki-read-page-reference,
hywiki-word-read, hywiki-word-read-new, hywiki-page-read,
hywiki-page-read-new): Add 'prompt' and 'initial' input arguments.

2026-02-19 Bob Weiner <rsw@gnu.org>

* hywiki.el (hywiki-insert-link): Add optional prefix arg to link to a
an existing wikiword only.
(hywiki-insert-reference): Remove and merge capability into
above function when called with a prefix arg.

* hui.el (hui:link-possible-types): Fix to include link-to-wikiword only if
an existing referent is found.

Expand Down Expand Up @@ -1344,7 +1411,7 @@
hyrolo.el (hyrolo-match-regexp)
hhist.el (*hhist*): Use defvar for const variables that are set later
than at their definition.

2025-08-10 Bob Weiner <rsw@gnu.org>

* test/hywiki-tests.el (hywiki-tests--with-face-test): Make default value be
Expand Down
60 changes: 31 additions & 29 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ otherwise, skip to the next section.
- [Quick Introduction](https://youtu.be/K1MNUctggwI)

- [Top 10 ways Hyperbole amps up Emacs](https://emacsconf.org/2023/talks/hyperamp/)

- [Introduction to Buttons](https://youtu.be/zoEht66N2PI)

- [Linking Personal Info with Implicit Buttons](https://emacsconf.org/2022/talks/buttons/)
Expand All @@ -44,19 +44,21 @@ otherwise, skip to the next section.
- [HyRolo, fast contact/hierarchical record viewer](https://youtu.be/xdJGFdgKPFY)

- [Using Koutline for stream of thought journaling](https://emacsconf.org/2023/talks/koutline/)

- [Build a Zettelkasten with HyRolo](https://emacsconf.org/2022/talks/rolodex/)

- [HyControl, fast Emacs frame and window manager](https://youtu.be/M3-aMh1ccJk)

- [Writing test cases for GNU Hyperbole](https://emacsconf.org/2023/talks/test/)

- [Find/Web Search](https://youtu.be/8lMlJed0-OM)

- [Linking personal info with implicit buttons](https://youtu.be/TQ_fG7b1iHI)

## Articles

- [The Emacs Hyperbole](https://mike.hostetlerhome.com/emacs-hyperbole)

- [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)
Expand Down Expand Up @@ -191,7 +193,7 @@ start moving further, faster.
Once you have Emacs set up at your site, GNU Hyperbole may be
installed by using the Emacs Package Manager. If you are not
familiar with it, see the Packages section of the GNU Emacs Manual,
[Emacs Packages](https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html).
[Emacs Packages](https://www.gnu.org/software/emacs/manual/html_node/emacs/Packages.html).

If you have Hyperbole 5.10 or higher already installed and simply want to
upgrade it, invoke the Emacs Package Manager with {M-x list-packages RET},
Expand Down Expand Up @@ -267,10 +269,10 @@ Hyperbole also includes the Hyperbole Manual, a full reference manual,
not a simple introduction. It is included in the "man/" subdirectory
of the Hyperbole package directory in four forms:

[hyperbole.info](man/hyperbole.info) - online Info browser version
[hyperbole.html](man/hyperbole.html) - web version
[hyperbole.pdf](man/hyperbole.pdf) - printable version
[hyperbole.texi](man/hyperbole.texi) - source version
[hyperbole.info](man/hyperbole.info) - online Info browser version
[hyperbole.html](man/hyperbole.html) - web version
[hyperbole.pdf](man/hyperbole.pdf) - printable version
[hyperbole.texi](man/hyperbole.texi) - source version

The Hyperbole package installation places the Info version of this manual
where needed and adds an entry for Hyperbole into the Info directory under
Expand Down Expand Up @@ -323,7 +325,7 @@ Hyperbole consists of six parts:
automatically recognized within text that perform actions,
e.g. bug#24568 displays the bug status information for that bug
number.

These actions may be links or arbitrary Lisp expressions. So
for example, you could create your own button type of
Wikipedia searches that jumped to the named Wikipedia page
Expand Down Expand Up @@ -403,7 +405,7 @@ to a file or executing a shell command.
There are three categories of Hyperbole buttons:

1. *Explicit Buttons*
created by Hyperbole, accessible from within a single document;
created by Hyperbole, accessible from within a single document;

2. *Global Buttons*
created by Hyperbole, accessible anywhere within a user's
Expand Down Expand Up @@ -457,15 +459,15 @@ Some of Hyperbole's most important features 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.

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.
Expand All @@ -474,18 +476,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
Expand Down Expand Up @@ -547,19 +549,19 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
well-thought out, poised engineering. It may be from the 90s, but it
feels like a breath of fresh air to me.

-- de_sonnaz on reddit
-- de_sonnaz on reddit


\*\*\* MAN I love Hyperbole!!! Wow! \*\*\*

-- Ken Olstad
-- Ken Olstad
Cheyenne Software, Inc.

-------

I *love* koutlines.

-- Bob Glickstein
-- Bob Glickstein
Z-Code Software Corporation

-------
Expand All @@ -580,7 +582,7 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
but due to the ease of installation and the quality of the documentation,
digging into it is actually fun.

-- Aditya Siram
-- Aditya Siram

-------

Expand Down Expand Up @@ -616,7 +618,7 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
useful set of power tools. If Emacs is your preferred productivity
environment, it's definitely worth getting familiar with it.

-- Chris Nuzum
-- Chris Nuzum
Co-founder, Traction Softwarea, Inc.

-------
Expand All @@ -633,7 +635,7 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
perfect, but adequate), so I can put any aspect of development on
our internal web for others to see.

-- Farzin Guilak
-- Farzin Guilak
Protocol Systems, Inc., Engineer

-------
Expand All @@ -656,7 +658,7 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
4. The Hyperbole Koutliner, which I find a very useful tool. I've
implemented Emacspeak extensions to support it.

-- TV Raman
-- TV Raman
Google Inc.

-------
Expand All @@ -679,7 +681,7 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
that do various little things, and I index saved mail messages by putting
explicit link-to-mail buttons in an outline file.

-- Ken Olstad
-- Ken Olstad
Cheyenne Software, Inc.

-------
Expand Down Expand Up @@ -711,12 +713,12 @@ default context-sensitive Hyperbole key bindings (Smart Keys).

* Organizing and viewing online documentation: using Hyperbole along with
Hyper-man and Info makes it truly easy to look up online documentation.

* Other desktop organization tasks: including links to various mail
folders, saved newsgroup conversation threads, online note-taker,
emacs-command invocations, etc.

-- Dadong Wan
-- Dadong Wan
University of Hawaii

-------
Expand All @@ -729,23 +731,23 @@ default context-sensitive Hyperbole key bindings (Smart Keys).
in it is a very powerful capability. Using ange-ftp mode, one can make
file references "across the world" as easily as normal file references.

-- Mark Eichin
-- Mark Eichin
Cygnus Support
-------

I just wanted to say how much I enjoy using the Hyperbole Koutliner.
It is a great way to quickly construct very readable technical documents
that I can pass around to others. Thanks for the great work.
that I can pass around to others. Thanks for the great work.

-- Jeff Fried
-- Jeff Fried
Informix

-------

The Hyperbole system provides a nice interface to exploring corners of
Unix that I didn't know existed before.

-- Craig Smith
-- Craig Smith


## Why was Hyperbole developed?
Expand Down
5 changes: 4 additions & 1 deletion hbut.el
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 18-Sep-91 at 02:57:09
;; Last-Mod: 18-Feb-26 at 23:49:33 by Bob Weiner
;; Last-Mod: 25-Feb-26 at 22:31:30 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
Expand Down Expand Up @@ -1638,6 +1638,9 @@ to include {} only. For use with implicit button activations."
;; Treat angle brackets and braces as opening and closing delimiters
;; for ease of matching.
(mapc (lambda (syntax-table)
;; Treat # as a symbol constituent to support company-mode completion.
(modify-syntax-entry ?# "_" syntax-table)
;; Treat angle brackets as opening and closing delimiters for ease of matching.
(modify-syntax-entry ?\< "(>" syntax-table)
(modify-syntax-entry ?\> ")<" syntax-table)
;; Treat braces as opening and closing delimiters for ease of matching.
Expand Down
36 changes: 35 additions & 1 deletion hsys-org.el
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
;; Author: Bob Weiner
;;
;; Orig-Date: 2-Jul-16 at 14:54:14
;; Last-Mod: 14-Feb-26 at 23:40:17 by Bob Weiner
;; Last-Mod: 22-Feb-26 at 23:14:50 by Bob Weiner
;;
;; SPDX-License-Identifier: GPL-3.0-or-later
;;
Expand Down Expand Up @@ -314,6 +314,40 @@ Return t if Org is reloaded, else nil."
(add-to-list 'auto-mode-alist '("\\.org\\'" . org-mode))
t)))))

;;; Derived from `org-get-heading' in "org.el"
;;;###autoload
(defun hsys-org-format-heading (heading &optional no-tags no-todo no-priority no-comment)
"Return HEADING, without the leading asterisks.
When NO-TAGS is non-nil, don't include tags.
When NO-TODO is non-nil, don't include TODO keywords.
When NO-PRIORITY is non-nil, don't include priority cookie.
When NO-COMMENT is non-nil, don't include COMMENT string."
(when (stringp heading)
(let ((case-fold-search nil)
(org-complex-heading-regexp
"^\\(\\*+\\)\\(?: +\\(DONE\\|TODO\\)\\)?\\(?: +\\(\\[#.\\]\\)\\)?\\(?: +\\(.*?\\)\\)??\\(?:[ ]+\\(:[[:alnum:]_@#%:]+:\\)\\)?[ ]*$"))
(when (string-match org-complex-heading-regexp heading)
;; When using `org-fold-core--optimise-for-huge-buffers',
;; returned text will be invisible. Clear it up.
(save-match-data
(org-fold-core-remove-optimisation (match-beginning 0) (match-end 0)))
(let ((todo (and (not no-todo) (match-string 2 heading)))
(priority (and (not no-priority) (match-string 3 heading)))
(headline (pcase (match-string 4 heading)
(`nil "")
((and (guard no-comment) h)
(replace-regexp-in-string
(eval-when-compile
(format "\\`%s[ \t]+" org-comment-string))
"" h))
(h h)))
(tags (and (not no-tags) (match-string 5))))
;; Restore cleared optimization.
(org-fold-core-update-optimisation (match-beginning 0) (match-end 0))
(mapconcat #'identity
(delq nil (list todo priority headline tags))
" "))))))

(defun hsys-org-get-libraries-to-reload ()
"Return all org libraries that need to be reloaded to avoid mixed versions."
(interactive)
Expand Down
Loading