branch: externals/hyperbole commit 81a0619202fa48f88aa471b897965d69362114ef Author: bw <r...@gnu.org> Commit: bw <r...@gnu.org>
Add TagFind to HyWiki and HyRolo menus and more updates Support "file.info#ref" pathnames for Info references/links. Make "hyperbole.html#Smart Keys" display local Hyperbole manual html section in a web browser. hsys-org.el (hsys-org-enable-smart-keys): Change 'buttons option to :buttons so don't have to quote and works in assq/rassq lookups. hui-mini.el (hui:menus): In HyWiki> menu, change Toggle to ModeToggle so can add TagFind item. hyperbole.el: Require Emacs 27.2 minimum. --- ChangeLog | 38 ++++++++++ HY-ABOUT | 2 +- HY-TALK/HYPERORG.org | 4 +- Makefile | 2 +- README.md | 114 +++++++++++++++--------------- README.md.html | 125 ++++++++++++++++----------------- README.toc.md | 134 ++++++++++++++++-------------------- hactypes.el | 16 +++-- hbut.el | 11 +-- hibtypes.el | 179 ++++++++++++++++++++++++++++-------------------- hpath.el | 15 +++- hui-menu.el | 33 ++++----- hui-mini.el | 44 +++++++++--- hui-mouse.el | 6 +- hyperbole.el | 8 +-- hyrolo-menu.el | 5 +- man/hyperbole.html | 68 +++++++++++++----- man/hyperbole.info | Bin 652687 -> 653988 bytes man/hyperbole.texi | 47 +++++++++---- test/demo-tests.el | 2 +- test/kcell-tests.el | 4 +- test/smart-org-tests.el | 8 +-- 22 files changed, 508 insertions(+), 357 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8c5a236c28..e8572ff1d8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,41 @@ +2024-08-24 Bob Weiner <r...@gnu.org> + +* hpath.el (hpath:to-Info-ref): Add. + (hpath:is-p, hpath:at-p): + hactypes.el (link-to-Info-node): + hibtypes.el (Info-node): Add support for Info refs in a regular + pathname format, e.g. "hyperbole.info#Smart Keys". + hibtypes.el (pathname): Exclude Info paths without parens handled + by Info-node, e.g. "emacs.info#Windows". + +2024-08-23 Bob Weiner <r...@gnu.org> + +* hibtypes.el (hyp-html-manual): Add new ibtype to display Hyperbole HTML + manual sections using syntax: "hyperbole.html#section". + +* hbut.el (ibut:label-p): Handle when lbl is nil. + +* hyperbole.el: Require Emacs 27.2 minimum. + +2024-08-19 Bob Weiner <r...@gnu.org> + +* README.md: Add HyWiki description. + +* man/hyperbole.texi (HyRolo Searching, HyRolo Menu): Add TagFind menu item. + +* hyrolo-menu.el: Add "Tag-Find". + hui-menu.el (infodock-hyperbole-menu): + hui-mini.el (hui:menus): In HyWiki> menu, change Toggle to ModeToggle so + can add TagFind item. + (hui:menu-read-from-minibuffer): Add to allow customization + of minibuffer read arguments such as 'initial-content' that minibuffer + menus generate. + (hui:menu-rolo): Add TagFind. + man/hyperbole.texi (HyWiki Menu): Add TagFind menu item doc. + +* hsys-org.el (hsys-org-enable-smart-keys): Change 'buttons option to :buttons + so don't have to quote and works in assq/rassq lookups. + 2024-08-18 Bob Weiner <r...@gnu.org> * hywiki.el (hywiki-maybe-at-wikiword-beginning): Fix to handle word diff --git a/HY-ABOUT b/HY-ABOUT index 4e6d130421..da0954216c 100644 --- a/HY-ABOUT +++ b/HY-ABOUT @@ -11,7 +11,7 @@ GNU Hyperbole (pronounced Ga-new Hi-per-bo-lee), or just Hyperbole, is an efficient and programmable hypertextual information management system implemented as a GNU Emacs package. It works well on GNU Emacs -27.1 or above. (See also: "HY-WHY.kotl" for Hyperbole uses). +27.2 or above. (See also: "HY-WHY.kotl" for Hyperbole uses). Hyperbole includes easy-to-use, powerful hypertextual buttons without the need to learn a markup language; a hierarchical, record-based diff --git a/HY-TALK/HYPERORG.org b/HY-TALK/HYPERORG.org index 592133ea1e..a49f594928 100644 --- a/HY-TALK/HYPERORG.org +++ b/HY-TALK/HYPERORG.org @@ -283,11 +283,11 @@ Variable name values can also be displayed. This <<variable>> sets the Org mode contexts where Hyperbole's Action/Assist keys are active. By default, these 'Smart Keys' work only on hyperbuttons (Hyperbole's and Org's) when the variable -is set to 'buttons. +is set to :buttons. <hsys-org-enable-smart-keys> - <setq hsys-org-enable-smart-keys 'buttons> + <setq hsys-org-enable-smart-keys :buttons> Set this to 't to enable the Smart Keys in all Org contexts (nil to disable): diff --git a/Makefile b/Makefile index e05f7cf8ee..1246a05bb6 100644 --- a/Makefile +++ b/Makefile @@ -79,7 +79,7 @@ # # To interactively run a docker version of Emacs with Hyperbole: # make docker-run - default to running master -# make docker-run version=27.1 - run Emacs V27.1 +# make docker-run version=27.2 - run Emacs V27.2 # # To build and test a dockerized version of Emacs with Hyperbole: # make docker - defaults: version=master targets='clean bin test' diff --git a/README.md b/README.md index f7358550b6..9fb84e7230 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ keyboard and mouse-based control of information display within multiple windows. It also provides point-and-click access to World-Wide Web URLs, Info manuals, ftp archives, etc. -Hyperbole works well on GNU Emacs 27.1 or above. It is designed and written +Hyperbole works well on GNU Emacs 27.2 or above. It is designed and written by Bob Weiner. It is maintained by him and Mats Lidell. Its main distribution site is: <https://www.gnu.org/software/hyperbole/>. If any term in here is new or unfamiliar to you, you can look it up in the @@ -148,38 +148,6 @@ Unlock the power of GNU Hyperbole to make your information work for you. One system. One language. One manual. One solution. Learn Hyperbole and start moving further, faster. -## Mailing Lists - - - **hyperbole-us...@gnu.org** - User list for GNU Hyperbole - - [info and subscription](http://lists.gnu.org/mailman/listinfo/hyperbole-users) - [web archive](http://lists.gnu.org/pipermail/hyperbole-users/) - - - **bug-hyperb...@gnu.org** - List for bug reporting - - [info and subscription](http://lists.gnu.org/mailman/listinfo/bug-hyperbole) - [web archive](http://lists.gnu.org/archive/html/bug-hyperbole/) - -## Ftp and Git Repository Downloads - -To inspect the Hyperbole source code online rather than installing it for -use (which will also give you the source code), open a web page to: - - - https://git.savannah.gnu.org/cgit/hyperbole.git/tree/ - -Alternatively, you may download a tar.gz source archive from either: - - - ftp://ftp.gnu.org/gnu/hyperbole/ - - - http://ftpmirror.gnu.org/hyperbole/ - -which will find the closest mirror of the GNU ftp site and show it to you. - -If you want to follow along with Hyperbole development and maintain a -copy/clone of the current version-controlled git tree, use a -[command listed here](https://savannah.gnu.org/git/?group=hyperbole) -to clone the Hyperbole project tree. - ## Installation Once you have Emacs set up at your site, GNU Hyperbole may be @@ -272,9 +240,41 @@ wherever the Hyperbole package directory is on your system; often this is: "~/.emacs.d/elpa/hyperbole-${hyperb:version}/". +## Mailing Lists + + - **hyperbole-us...@gnu.org** - User list for GNU Hyperbole + + [info and subscription](http://lists.gnu.org/mailman/listinfo/hyperbole-users) + [web archive](http://lists.gnu.org/pipermail/hyperbole-users/) + + - **bug-hyperb...@gnu.org** - List for bug reporting + + [info and subscription](http://lists.gnu.org/mailman/listinfo/bug-hyperbole) + [web archive](http://lists.gnu.org/archive/html/bug-hyperbole/) + +## Ftp and Git Repository Downloads + +To inspect the Hyperbole source code online rather than installing it for +use (which will also give you the source code), open a web page to: + + - https://git.savannah.gnu.org/cgit/hyperbole.git/tree/ + +Alternatively, you may download a tar.gz source archive from either: + + - ftp://ftp.gnu.org/gnu/hyperbole/ + + - http://ftpmirror.gnu.org/hyperbole/ + +which will find the closest mirror of the GNU ftp site and show it to you. + +If you want to follow along with Hyperbole development and maintain a +copy/clone of the current version-controlled git tree, use a +[command listed here](https://savannah.gnu.org/git/?group=hyperbole) +to clone the Hyperbole project tree. + ## Hyperbole Components -Hyperbole consists of five parts: +Hyperbole consists of six parts: 1. **Buttons and Smart Keys**: A set of hyperbutton types which supply core hypertext and other behaviors. Buttons may be added to @@ -306,23 +306,33 @@ Hyperbole consists of five parts: complex operations without having to use a different key for each operation. Just press a Smart Key and the right thing happens; - 2. **Contact and Text Finder**: an interactive textual information - management interface, including fast, flexible file and text - finding commands. A powerful, hierarchical contact manager, - HyRolo, which anyone can use is also included. It is easy to - learn to use since it introduces only a few new mechanisms and - has a menu interface, which may be operated from the keyboard or - the mouse. + 2. **Auto-Wiki Note Taker**: HyWiki is a simple note taking system + that uses Org mode and automatically highlights and turns each + WikiWord into a hyperlink to its Wiki page or section without any + markup. + + 3. **Autonumbered Legal Outliner**: The Koutliner is an advanced + outliner with multi-level autonumbering and permanent ids + attached to each outline node for use as hypertext link + anchors, per node properties and flexible view specifications + that can be embedded within links or used interactively; + + 4. **Contact and Text Finder**: HyRolo is a powerful, hierarchical + contact manager and fast text record search interface with + expand/collapse capabilities over search results for quick + views. HyRolo is easy to learn to use since it introduces only + a few new mechanisms and has a menu interface, which may be + operated from the keyboard or the mouse.  - 3. **Screen Control**: Hyperbole includes HyControl, the fastest, - easiest-to-use window and frame control available for GNU - Emacs. With just a few keystrokes, you can shift from - increasing a window's height by 5 lines to moving a frame by - 220 pixels or immediately moving it to a screen corner. Text - in each window or frame may be enlarged or shrunk (zoomed) for - easy viewing, plus many other features; + 5. **Screen Control**: HyControl is the fastest, easiest-to-use + window and frame control available for GNU Emacs. With just a + few keystrokes, you can shift from increasing a window's height + by 5 lines to moving a frame by 220 pixels or immediately + moving it to a screen corner. Text in each window or frame may + be enlarged or shrunk (zoomed) for easy viewing, plus many + other features; The broader vision for HyControl is to support persistent window and frame configurations as link targets. Then a user @@ -331,13 +341,7 @@ Hyperbole consists of five parts: implement this feature but it helps explain the connection of HyControl to the rest of Hyperbole; - 4. **The Koutliner**: an advanced outliner with multi-level - autonumbering and permanent ids attached to each outline node for - use as hypertext link anchors, per node properties and flexible - view specifications that can be embedded within links or used - interactively; - - 5. **Programming Library**: a set of programming library classes for + 6. **Programming Library**: a set of programming library classes for system developers who want to integrate Hyperbole with another user interface or as a back-end to a distinct system. (All of Hyperbole is written in Emacs Lisp for ease of modification. diff --git a/README.md.html b/README.md.html index 822381a10e..09c86cc806 100644 --- a/README.md.html +++ b/README.md.html @@ -12,11 +12,11 @@ Hyperbole 9.0.2pre - The Everyday Hypertextual Information Manager</a> <ul> <li><a href="#videos">Videos</a></li> <li><a href="#summary">Summary</a></li> +<li><a href="#installation">Installation</a></li> +<li><a href="#invocation">Invocation</a></li> <li><a href="#mailing-lists">Mailing Lists</a></li> <li><a href="#ftp-and-git-repository-downloads">Ftp and Git Repository Downloads</a></li> -<li><a href="#installation">Installation</a></li> -<li><a href="#invocation">Invocation</a></li> <li><a href="#hyperbole-components">Hyperbole Components</a></li> <li><a href="#hyperbole-buttons">Hyperbole Buttons</a></li> <li><a href="#important-features">Important Features</a></li> @@ -158,46 +158,6 @@ installation</a> through the GNU Emacs package manager.</p> <p>Unlock the power of GNU Hyperbole to make your information work for you. One system. One language. One manual. One solution. Learn Hyperbole and start moving further, faster.</p> -<h2 id="mailing-lists">Mailing Lists</h2> -<ul> -<li><p><strong><a -href="mailto:hyperbole-us...@gnu.org">hyperbole-us...@gnu.org</a></strong> -- User list for GNU Hyperbole</p> -<p><a href="http://lists.gnu.org/mailman/listinfo/hyperbole-users">info -and subscription</a> <a -href="http://lists.gnu.org/pipermail/hyperbole-users/">web -archive</a></p></li> -<li><p><strong><a -href="mailto:bug-hyperb...@gnu.org">bug-hyperb...@gnu.org</a></strong> - -List for bug reporting</p> -<p><a href="http://lists.gnu.org/mailman/listinfo/bug-hyperbole">info -and subscription</a> <a -href="http://lists.gnu.org/archive/html/bug-hyperbole/">web -archive</a></p></li> -</ul> -<h2 id="ftp-and-git-repository-downloads">Ftp and Git Repository -Downloads</h2> -<p>To inspect the Hyperbole source code online rather than installing it -for use (which will also give you the source code), open a web page -to:</p> -<ul> -<li><a -href="https://git.savannah.gnu.org/cgit/hyperbole.git/tree/">https://git.savannah.gnu.org/cgit/hyperbole.git/tree/</a></li> -</ul> -<p>Alternatively, you may download a tar.gz source archive from -either:</p> -<ul> -<li><p><a -href="ftp://ftp.gnu.org/gnu/hyperbole/">ftp://ftp.gnu.org/gnu/hyperbole/</a></p></li> -<li><p><a -href="http://ftpmirror.gnu.org/hyperbole/">http://ftpmirror.gnu.org/hyperbole/</a></p></li> -</ul> -<p>which will find the closest mirror of the GNU ftp site and show it to -you.</p> -<p>If you want to follow along with Hyperbole development and maintain a -copy/clone of the current version-controlled git tree, use a <a -href="https://savannah.gnu.org/git/?group=hyperbole">command listed -here</a> to clone the Hyperbole project tree.</p> <h2 id="installation">Installation</h2> <p>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 @@ -276,8 +236,48 @@ manual. For web browsing, point your browser at "${hyperb:dir}/man/hyperbole.html", wherever the Hyperbole package directory is on your system; often this is: "~/.emacs.d/elpa/hyperbole-${hyperb:version}/".</p> +<h2 id="mailing-lists">Mailing Lists</h2> +<ul> +<li><p><strong><a +href="mailto:hyperbole-us...@gnu.org">hyperbole-us...@gnu.org</a></strong> +- User list for GNU Hyperbole</p> +<p><a href="http://lists.gnu.org/mailman/listinfo/hyperbole-users">info +and subscription</a> <a +href="http://lists.gnu.org/pipermail/hyperbole-users/">web +archive</a></p></li> +<li><p><strong><a +href="mailto:bug-hyperb...@gnu.org">bug-hyperb...@gnu.org</a></strong> - +List for bug reporting</p> +<p><a href="http://lists.gnu.org/mailman/listinfo/bug-hyperbole">info +and subscription</a> <a +href="http://lists.gnu.org/archive/html/bug-hyperbole/">web +archive</a></p></li> +</ul> +<h2 id="ftp-and-git-repository-downloads">Ftp and Git Repository +Downloads</h2> +<p>To inspect the Hyperbole source code online rather than installing it +for use (which will also give you the source code), open a web page +to:</p> +<ul> +<li><a +href="https://git.savannah.gnu.org/cgit/hyperbole.git/tree/">https://git.savannah.gnu.org/cgit/hyperbole.git/tree/</a></li> +</ul> +<p>Alternatively, you may download a tar.gz source archive from +either:</p> +<ul> +<li><p><a +href="ftp://ftp.gnu.org/gnu/hyperbole/">ftp://ftp.gnu.org/gnu/hyperbole/</a></p></li> +<li><p><a +href="http://ftpmirror.gnu.org/hyperbole/">http://ftpmirror.gnu.org/hyperbole/</a></p></li> +</ul> +<p>which will find the closest mirror of the GNU ftp site and show it to +you.</p> +<p>If you want to follow along with Hyperbole development and maintain a +copy/clone of the current version-controlled git tree, use a <a +href="https://savannah.gnu.org/git/?group=hyperbole">command listed +here</a> to clone the Hyperbole project tree.</p> <h2 id="hyperbole-components">Hyperbole Components</h2> -<p>Hyperbole consists of five parts:</p> +<p>Hyperbole consists of six parts:</p> <ol type="1"> <li><p><strong>Buttons and Smart Keys</strong>: A set of hyperbutton types which supply core hypertext and other behaviors. Buttons may be @@ -303,30 +303,33 @@ Hyperbole buttons. In many popular Emacs modes, they allow you to perform common, sometimes complex operations without having to use a different key for each operation. Just press a Smart Key and the right thing happens;</p></li> -<li><p><strong>Contact and Text Finder</strong>: an interactive textual -information management interface, including fast, flexible file and text -finding commands. A powerful, hierarchical contact manager, HyRolo, -which anyone can use is also included. It is easy to learn to use since -it introduces only a few new mechanisms and has a menu interface, which -may be operated from the keyboard or the mouse.</p> +<li><p><strong>Auto-Wiki Note Taker</strong>: HyWiki is a simple note +taking system that uses Org mode and automatically highlights and turns +each WikiWord into a hyperlink to its Wiki page or section without any +markup.</p></li> +<li><p><strong>Autonumbered Legal Outliner</strong>: The Koutliner is an +advanced outliner with multi-level autonumbering and permanent ids +attached to each outline node for use as hypertext link anchors, per +node properties and flexible view specifications that can be embedded +within links or used interactively;</p></li> +<li><p><strong>Contact and Text Finder</strong>: HyRolo is a powerful, +hierarchical contact manager and fast text record search interface with +expand/collapse capabilities over search results for quick views. HyRolo +is easy to learn to use since it introduces only a few new mechanisms +and has a menu interface, which may be operated from the keyboard or the +mouse.</p> <p><img src="man/im/menu-rolo.png" alt="HyRolo Menubar Menu" /></p></li> -<li><p><strong>Screen Control</strong>: Hyperbole includes HyControl, -the fastest, easiest-to-use window and frame control available for GNU -Emacs. With just a few keystrokes, you can shift from increasing a -window's height by 5 lines to moving a frame by 220 pixels or -immediately moving it to a screen corner. Text in each window or frame -may be enlarged or shrunk (zoomed) for easy viewing, plus many other -features;</p> +<li><p><strong>Screen Control</strong>: HyControl is the fastest, +easiest-to-use window and frame control available for GNU Emacs. With +just a few keystrokes, you can shift from increasing a window's height +by 5 lines to moving a frame by 220 pixels or immediately moving it to a +screen corner. Text in each window or frame may be enlarged or shrunk +(zoomed) for easy viewing, plus many other features;</p> <p>The broader vision for HyControl is to support persistent window and frame configurations as link targets. Then a user will be able to create the views of information he wants and store them as links for rapid display. Work remains to implement this feature but it helps explain the connection of HyControl to the rest of Hyperbole;</p></li> -<li><p><strong>The Koutliner</strong>: an advanced outliner with -multi-level autonumbering and permanent ids attached to each outline -node for use as hypertext link anchors, per node properties and flexible -view specifications that can be embedded within links or used -interactively;</p></li> <li><p><strong>Programming Library</strong>: a set of programming library classes for system developers who want to integrate Hyperbole with another user interface or as a back-end to a distinct system. (All diff --git a/README.toc.md b/README.toc.md index 2cd5312122..9fb84e7230 100644 --- a/README.toc.md +++ b/README.toc.md @@ -4,25 +4,7 @@ send us a thank you or a testimonial describing your usage if you like Hyperbole (mailto:r...@gnu.org)]. - - -- [GNU Hyperbole 9.0.2pre - The Everyday Hypertextual Information Manager](#gnu-hyperbole-902pre---the-everyday-hypertextual-information-manager) - - [Videos](#videos) - - [Summary](#summary) - - [Mailing Lists](#mailing-lists) - - [Ftp and Git Repository Downloads](#ftp-and-git-repository-downloads) - - [Installation](#installation) - - [Invocation](#invocation) - - [Hyperbole Components](#hyperbole-components) - - [Hyperbole Buttons](#hyperbole-buttons) - - [Important Features](#important-features) - - [Hyperbole Uses](#hyperbole-uses) - - [Files](#files) - - [Programmer Quick Reference](#programmer-quick-reference) - - [User Quotes](#user-quotes) - - [Why was Hyperbole developed?](#why-was-hyperbole-developed) - - +[TOC]  @@ -153,7 +135,7 @@ keyboard and mouse-based control of information display within multiple windows. It also provides point-and-click access to World-Wide Web URLs, Info manuals, ftp archives, etc. -Hyperbole works well on GNU Emacs 27.1 or above. It is designed and written +Hyperbole works well on GNU Emacs 27.2 or above. It is designed and written by Bob Weiner. It is maintained by him and Mats Lidell. Its main distribution site is: <https://www.gnu.org/software/hyperbole/>. If any term in here is new or unfamiliar to you, you can look it up in the @@ -166,38 +148,6 @@ Unlock the power of GNU Hyperbole to make your information work for you. One system. One language. One manual. One solution. Learn Hyperbole and start moving further, faster. -## Mailing Lists - - - **hyperbole-us...@gnu.org** - User list for GNU Hyperbole - - [info and subscription](http://lists.gnu.org/mailman/listinfo/hyperbole-users) - [web archive](http://lists.gnu.org/pipermail/hyperbole-users/) - - - **bug-hyperb...@gnu.org** - List for bug reporting - - [info and subscription](http://lists.gnu.org/mailman/listinfo/bug-hyperbole) - [web archive](http://lists.gnu.org/archive/html/bug-hyperbole/) - -## Ftp and Git Repository Downloads - -To inspect the Hyperbole source code online rather than installing it for -use (which will also give you the source code), open a web page to: - - - https://git.savannah.gnu.org/cgit/hyperbole.git/tree/ - -Alternatively, you may download a tar.gz source archive from either: - - - ftp://ftp.gnu.org/gnu/hyperbole/ - - - http://ftpmirror.gnu.org/hyperbole/ - -which will find the closest mirror of the GNU ftp site and show it to you. - -If you want to follow along with Hyperbole development and maintain a -copy/clone of the current version-controlled git tree, use a -[command listed here](https://savannah.gnu.org/git/?group=hyperbole) -to clone the Hyperbole project tree. - ## Installation Once you have Emacs set up at your site, GNU Hyperbole may be @@ -290,9 +240,41 @@ wherever the Hyperbole package directory is on your system; often this is: "~/.emacs.d/elpa/hyperbole-${hyperb:version}/". +## Mailing Lists + + - **hyperbole-us...@gnu.org** - User list for GNU Hyperbole + + [info and subscription](http://lists.gnu.org/mailman/listinfo/hyperbole-users) + [web archive](http://lists.gnu.org/pipermail/hyperbole-users/) + + - **bug-hyperb...@gnu.org** - List for bug reporting + + [info and subscription](http://lists.gnu.org/mailman/listinfo/bug-hyperbole) + [web archive](http://lists.gnu.org/archive/html/bug-hyperbole/) + +## Ftp and Git Repository Downloads + +To inspect the Hyperbole source code online rather than installing it for +use (which will also give you the source code), open a web page to: + + - https://git.savannah.gnu.org/cgit/hyperbole.git/tree/ + +Alternatively, you may download a tar.gz source archive from either: + + - ftp://ftp.gnu.org/gnu/hyperbole/ + + - http://ftpmirror.gnu.org/hyperbole/ + +which will find the closest mirror of the GNU ftp site and show it to you. + +If you want to follow along with Hyperbole development and maintain a +copy/clone of the current version-controlled git tree, use a +[command listed here](https://savannah.gnu.org/git/?group=hyperbole) +to clone the Hyperbole project tree. + ## Hyperbole Components -Hyperbole consists of five parts: +Hyperbole consists of six parts: 1. **Buttons and Smart Keys**: A set of hyperbutton types which supply core hypertext and other behaviors. Buttons may be added to @@ -324,23 +306,33 @@ Hyperbole consists of five parts: complex operations without having to use a different key for each operation. Just press a Smart Key and the right thing happens; - 2. **Contact and Text Finder**: an interactive textual information - management interface, including fast, flexible file and text - finding commands. A powerful, hierarchical contact manager, - HyRolo, which anyone can use is also included. It is easy to - learn to use since it introduces only a few new mechanisms and - has a menu interface, which may be operated from the keyboard or - the mouse. + 2. **Auto-Wiki Note Taker**: HyWiki is a simple note taking system + that uses Org mode and automatically highlights and turns each + WikiWord into a hyperlink to its Wiki page or section without any + markup. + + 3. **Autonumbered Legal Outliner**: The Koutliner is an advanced + outliner with multi-level autonumbering and permanent ids + attached to each outline node for use as hypertext link + anchors, per node properties and flexible view specifications + that can be embedded within links or used interactively; + + 4. **Contact and Text Finder**: HyRolo is a powerful, hierarchical + contact manager and fast text record search interface with + expand/collapse capabilities over search results for quick + views. HyRolo is easy to learn to use since it introduces only + a few new mechanisms and has a menu interface, which may be + operated from the keyboard or the mouse.  - 3. **Screen Control**: Hyperbole includes HyControl, the fastest, - easiest-to-use window and frame control available for GNU - Emacs. With just a few keystrokes, you can shift from - increasing a window's height by 5 lines to moving a frame by - 220 pixels or immediately moving it to a screen corner. Text - in each window or frame may be enlarged or shrunk (zoomed) for - easy viewing, plus many other features; + 5. **Screen Control**: HyControl is the fastest, easiest-to-use + window and frame control available for GNU Emacs. With just a + few keystrokes, you can shift from increasing a window's height + by 5 lines to moving a frame by 220 pixels or immediately + moving it to a screen corner. Text in each window or frame may + be enlarged or shrunk (zoomed) for easy viewing, plus many + other features; The broader vision for HyControl is to support persistent window and frame configurations as link targets. Then a user @@ -349,13 +341,7 @@ Hyperbole consists of five parts: implement this feature but it helps explain the connection of HyControl to the rest of Hyperbole; - 4. **The Koutliner**: an advanced outliner with multi-level - autonumbering and permanent ids attached to each outline node for - use as hypertext link anchors, per node properties and flexible - view specifications that can be embedded within links or used - interactively; - - 5. **Programming Library**: a set of programming library classes for + 6. **Programming Library**: a set of programming library classes for system developers who want to integrate Hyperbole with another user interface or as a back-end to a distinct system. (All of Hyperbole is written in Emacs Lisp for ease of modification. diff --git a/hactypes.el b/hactypes.el index 6627f7b4ec..8f1fc614ae 100644 --- a/hactypes.el +++ b/hactypes.el @@ -499,15 +499,17 @@ suffix." (defact link-to-Info-node (string) "Display an Info node given by STRING. If not found, try to display it as an Info index item. -STRING must be a string of the form \"(filename)name\". During -button creation, completion for both filename and node names is -available. Filename may be given without the .info suffix." +STRING must be a string of the form \"(filename)name\" or +\"filename.info#name\". During button creation, completion for both +filename and node names is available. Filename may be given without +the .info suffix in the format with parentheses." (interactive "+IInfo (file)nodename to link to: ") (require 'info) - (when (stringp string) - ;; Remove any tabs or newlines that might be in string. - (setq string (replace-regexp-in-string "[ \t\n\r\f]+" " " string t t))) - (if (and (stringp string) (string-match "^(\\([^\)]+\\))\\(.*\\)" string)) + (if (and (stringp string) + ;; Remove any tabs or newlines that might be in string. + (setq string (replace-regexp-in-string "[ \t\n\r\f]+" " " string t t) + string (hpath:to-Info-ref string)) + (string-match "\\`(\\([^\)]+\\))\\(.*\\)" string)) (id-info string) (hypb:error "(link-to-Info-node): Invalid Info node: `%s'" string))) diff --git a/hbut.el b/hbut.el index e55d4ab742..7f342f87ff 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: 16-Aug-24 at 00:56:16 by Bob Weiner +;; Last-Mod: 23-Aug-24 at 21:38:08 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -2324,10 +2324,11 @@ lines." (setq lbl (if (listp result) (car result) result)) ;; Ensure match does not contain delimiters, as it may have run ;; past the beginning of another button. - (unless (string-match (concat (regexp-quote start-delim) "\\|" - (regexp-quote end-delim)) - lbl) - result)))) + (when lbl + (unless (string-match (concat (regexp-quote start-delim) "\\|" + (regexp-quote end-delim)) + lbl) + result))))) (defun ibut:label-set (label &optional start end) "Set current implicit button label attributes. diff --git a/hibtypes.el b/hibtypes.el index faeaac5ea9..150c6532d7 100644 --- a/hibtypes.el +++ b/hibtypes.el @@ -76,6 +76,8 @@ (declare-function htype:def-symbol "hact") (declare-function hui:help-ebut-highlight "hui") (declare-function hyperb:stack-frame "hversion") +(declare-function hywiki-page-exists-p "hywiki") + (declare-function set:member "set") (declare-function symset:add "hact") (declare-function symtable:add "hact") @@ -282,78 +284,80 @@ display options." (path (hpath:at-p)) elisp-suffix full-path) - (if path - (cond ((and (not (string-empty-p path)) - (= (aref path 0) ?-) - (or (setq elisp-suffix (string-match "\\`[^\\\\/~]+\\.el[cn]?\\(\\.gz\\)?\\'" path)) - (string-match "\\`[^.\\/\t\n\r\f]+\\'" path)) - (string-match hpath:prefix-regexp path)) - (setq path (substring path (match-end 0)) - full-path (locate-library path elisp-suffix)) - (cond (full-path - (setq path (concat "-" path)) - (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) - (hact 'hpath:find path)) - (elisp-suffix - (hact 'error "(pathname): \"%s\" not found in `load-path'" path)) - ;; Don't match as a pathname ibut; could be a Lisp - ;; symbol or something else starting with a '-'. - (t nil))) - (t (when (string-match "\\`file://" path) - (setq path (substring path (match-end 0)))) - (if (or (> (cl-count ?: orig-path) 2) - (> (cl-count ?\; orig-path) 2)) - ;; PATH-like set of values; select just the one point is on - (apply #'ibut:label-set path (hpath:start-end path)) - ;; Otherwise, use the unchanged orig-path - (apply #'ibut:label-set orig-path (hpath:start-end orig-path))) - (hact 'link-to-file path))) - ;; - ;; Match PATH-related Environment and Lisp variable names and - ;; Emacs Lisp and Info files without any directory component. - (when (setq path orig-path) - (cond ((and (string-match hpath:path-variable-regexp path) - (setq path (match-string-no-properties 1 path)) - (hpath:is-path-variable-p path)) - (setq path (if (or assist-flag (hyperb:stack-frame '(hkey-help))) - path - (hpath:choose-from-path-variable path "Display"))) - (unless (or (null path) (string-blank-p path) - ;; Could be a shell command from a semicolon - ;; separated list; ignore if so. - (and (string-match "\\`\\s-*\\([^; ]+\\)" path) - (executable-find (match-string-no-properties 1 path)))) - (apply #'ibut:label-set path (hpath:start-end path)) - (hact 'link-to-file path))) - ((setq elisp-suffix (string-match "\\`[^\\\\/~]+\\.el[cn]?\\(\\.gz\\)?\\'" path)) - (cond ((string-match hpath:prefix-regexp path) - (apply #'ibut:label-set path (hpath:start-end path)) - (hact 'hpath:find path)) - ((setq full-path - (let ((load-suffixes '(".el"))) - (locate-library path elisp-suffix))) - (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) - (hact 'link-to-file full-path)) - (elisp-suffix - (hact 'error "(pathname): \"%s\" not found in `load-path'" path)) - ;; Don't match as a pathname ibut; could be a Lisp - ;; symbol or something else starting with a '-'. - (t nil))) - ;; Match only if "(filename)" references a valid Info file - ;; and point is within the filename, not on any delimiters - ;; so that delimited thing matches trigger later. - ((and (not (looking-at "[\"()]")) - (string-match "\\`(\\([^ \t\n\r\f]+\\))\\'" path) - (save-match-data (require 'info)) - (Info-find-file (match-string-no-properties 1 path) t)) - (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) - (hact 'link-to-Info-node (format "%sTop" path))) - ((string-match hpath:info-suffix path) - (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) - (hact 'link-to-Info-node (format "(%s)Top" path))) - ;; Otherwise, fall through and allow other implicit - ;; button types to handle this context. - )))))) + ;; If an Info path without parens, don't handle it here, use the `Info-node' ibtype + (unless (and path (string-match-p ".+\\.info\\([.#]\\|\\'\\)" path)) + (if path + (cond ((and (not (string-empty-p path)) + (= (aref path 0) ?-) + (or (setq elisp-suffix (string-match "\\`[^\\\\/~]+\\.el[cn]?\\(\\.gz\\)?\\'" path)) + (string-match "\\`[^.\\/\t\n\r\f]+\\'" path)) + (string-match hpath:prefix-regexp path)) + (setq path (substring path (match-end 0)) + full-path (locate-library path elisp-suffix)) + (cond (full-path + (setq path (concat "-" path)) + (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) + (hact 'hpath:find path)) + (elisp-suffix + (hact 'error "(pathname): \"%s\" not found in `load-path'" path)) + ;; Don't match as a pathname ibut; could be a Lisp + ;; symbol or something else starting with a '-'. + (t nil))) + (t (when (string-match "\\`file://" path) + (setq path (substring path (match-end 0)))) + (if (or (> (cl-count ?: orig-path) 2) + (> (cl-count ?\; orig-path) 2)) + ;; PATH-like set of values; select just the one point is on + (apply #'ibut:label-set path (hpath:start-end path)) + ;; Otherwise, use the unchanged orig-path + (apply #'ibut:label-set orig-path (hpath:start-end orig-path))) + (hact 'link-to-file path))) + ;; + ;; Match PATH-related Environment and Lisp variable names and + ;; Emacs Lisp and Info files without any directory component. + (when (setq path orig-path) + (cond ((and (string-match hpath:path-variable-regexp path) + (setq path (match-string-no-properties 1 path)) + (hpath:is-path-variable-p path)) + (setq path (if (or assist-flag (hyperb:stack-frame '(hkey-help))) + path + (hpath:choose-from-path-variable path "Display"))) + (unless (or (null path) (string-blank-p path) + ;; Could be a shell command from a semicolon + ;; separated list; ignore if so. + (and (string-match "\\`\\s-*\\([^; ]+\\)" path) + (executable-find (match-string-no-properties 1 path)))) + (apply #'ibut:label-set path (hpath:start-end path)) + (hact 'link-to-file path))) + ((setq elisp-suffix (string-match "\\`[^\\\\/~]+\\.el[cn]?\\(\\.gz\\)?\\'" path)) + (cond ((string-match hpath:prefix-regexp path) + (apply #'ibut:label-set path (hpath:start-end path)) + (hact 'hpath:find path)) + ((setq full-path + (let ((load-suffixes '(".el"))) + (locate-library path elisp-suffix))) + (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) + (hact 'link-to-file full-path)) + (elisp-suffix + (hact 'error "(pathname): \"%s\" not found in `load-path'" path)) + ;; Don't match as a pathname ibut; could be a Lisp + ;; symbol or something else starting with a '-'. + (t nil))) + ;; Match only if "(filename)" references a valid Info file + ;; and point is within the filename, not on any delimiters + ;; so that delimited thing matches trigger later. + ((and (not (looking-at "[\"()]")) + (string-match "\\`(\\([^ \t\n\r\f]+\\))\\'" path) + (save-match-data (require 'info)) + (Info-find-file (match-string-no-properties 1 path) t)) + (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) + (hact 'link-to-Info-node (format "%sTop" path))) + ((string-match hpath:info-suffix path) + (apply #'ibut:label-set orig-path (hpath:start-end orig-path)) + (hact 'link-to-Info-node (format "(%s)Top" path))) + ;; Otherwise, fall through and allow other implicit + ;; button types to handle this context. + ))))))) ;;; ======================================================================== ;;; Follows URLs by invoking a web browser. @@ -361,6 +365,27 @@ display options." (load "hsys-www") +;;; ======================================================================== +;;; Uses web browser to display links to Hyperbole HTML manual sections +;;; Links are of the form "hyperbole.html#Smart Keys" +;;; ======================================================================== + +(defib hyp-html-manual () + "When on a \"hyperbole.html\" manual path, display it in a web browser. +For example, display \"hyperbole.html#Smart Keys\" using the local +html version of the Hyperbole manual." + (let* ((path-start-end (hargs:delimited "\"" "\"" nil nil t)) + (path (nth 0 path-start-end)) + (start (nth 1 path-start-end)) + (end (nth 2 path-start-end))) + (when (stringp path) + (setq path (string-trim path)) + (when (string-match "\\`hyperbole.html\\(#.*\\)?\\'" path) + (ibut:label-set path start end) + ;; Any spaces in #section must be replaced with dashes to match html ids + (setq path (replace-regexp-in-string "\\s-+" "-" path)) + (hact 'www-url (concat "file://" (expand-file-name path (hpath:expand "${hyperb:dir}/man/")))))))) + ;;; ======================================================================== ;;; Handles internal references within an annotated bibliography, delimiters=[] ;;; ======================================================================== @@ -1408,10 +1433,11 @@ GNUS is a news and mail reader." (defib Info-node () "Make a \"(filename)nodename\" button display the associated Info node. -Also make a \"(filename)itemname\" button display the associated Info index item. -Examples are \"(hyperbole)Implicit Buttons\" and ``(hyperbole)C-c /''. - -Activates only if point is within the first line of the Info-node name." +Also make a \"(filename)itemname\" button display the associated Info +index item. Examples are \"(hyperbole)Implicit Buttons\" and +``(hyperbole)C-c /''. Pathname formats like: +\"hyperbole.info#Implicit Buttons\" are also accepted. Activates only +if point is within the first line of the Info reference." (let* ((node-ref-and-pos (or ;; HTML (hbut:label-p t """ """ t t) ;; Embedded double quotes @@ -1429,6 +1455,7 @@ Activates only if point is within the first line of the Info-node name." (hbut:label-p t "`" "'" t t))) (ref (car node-ref-and-pos)) (node-ref (and (stringp ref) + (setq ref (hpath:to-Info-ref ref)) (or (string-match-p "\\`([^\): \t\n\r\f]+)\\'" ref) (string-match-p "\\`([^\): \t\n\r\f]+)[^ :;\"'`]" ref)) ;; Below handle decoding of Info node names in diff --git a/hpath.el b/hpath.el index a6050b3b42..253143cc53 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: 13-Aug-24 at 22:29:46 by Bob Weiner +;; Last-Mod: 24-Aug-24 at 01:31:41 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -1085,7 +1085,8 @@ Make any existing path within a file buffer absolute before returning." (file-name-absolute-p expanded-path) ;; absolute path (string-match-p hpath:variable-regexp expanded-path) ;; path with var (string-match-p "\\`([^\):]+)" expanded-path)))) ;; Info node - (when (or non-exist (file-exists-p expanded-path)) + (when (or non-exist (file-exists-p expanded-path) + (string-match-p ".+\\.info\\([.#]\\|\\'\\)" expanded-path)) (concat prefix mode-prefix expanded-path suffix))))))) (defun hpath:is-path-variable-p (path-var) @@ -1827,6 +1828,7 @@ form is what is returned for PATH." (or ;; Info or remote path, so don't check for. (string-match-p "[()]" path) + (string-match-p ".+\\.info\\([.#]\\|\\'\\)" path) (hpath:remote-p path) (setq suffix (hpath:exists-p path t)) ;; Don't allow spaces in non-existent pathnames @@ -2162,6 +2164,15 @@ Return LINKNAME unchanged if it is not a symbolic link but is a pathname." (setq referent (expand-file-name referent dirname)))) referent) +(defun hpath:to-Info-ref (path) + "Reformat Info PATH \"file.info#ref\" into \"(file)ref\" format. +Leave any other format unchanged and return the resulting path." + (if (string-match "\\(.+\\)\\.info\\(-[0-9]+\\)?\\(\\.gz\\|\\.Z\\|-z\\)?\\(#\\(.+\\)\\)?\\'" path) + (format "(%s)%s" + (match-string 1 path) + (or (match-string 5 path) "")) + path)) + (defun hpath:to-line (line-num) "Move point to the start of an absolute LINE-NUM or the last line. This ignores any buffer narrowing (aside from Koutlines) when diff --git a/hui-menu.el b/hui-menu.el index 799ee50486..77a3dd2aa9 100644 --- a/hui-menu.el +++ b/hui-menu.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 28-Oct-94 at 10:59:44 -;; Last-Mod: 18-Aug-24 at 15:33:29 by Bob Weiner +;; Last-Mod: 19-Aug-24 at 23:28:31 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -210,18 +210,18 @@ Return t if cutoff, else nil." t)) (defconst hui-menu-org-meta-return-options - '("Org-M-RETURN" + '("Org M-RET Overrides" "----" "----" - ["All-Programmed-Contexts" + ["All-Hyperbole-Contexts" (customize-save-variable 'hsys-org-enable-smart-keys t) :style radio :selected (when (boundp 'hsys-org-enable-smart-keys) (eq hsys-org-enable-smart-keys t))] ["Hyperbole-Buttons-Only" - (customize-save-variable 'hsys-org-enable-smart-keys 'buttons) + (customize-save-variable 'hsys-org-enable-smart-keys :buttons) :style radio :selected (when (boundp 'hsys-org-enable-smart-keys) - (eq hsys-org-enable-smart-keys 'buttons))] - ["Ignored-by-Hyperbole" + (memq hsys-org-enable-smart-keys '(:buttons buttons)))] + ["None" (customize-save-variable 'hsys-org-enable-smart-keys nil) :style radio :selected (when (boundp 'hsys-org-enable-smart-keys) (eq hsys-org-enable-smart-keys nil))]) @@ -448,18 +448,19 @@ REBUILD-FLAG is non-nil, in which case the menu is rebuilt." ["Link" hui:gbut-link-directly t] ["Rename" hui:gbut-rename t]) (list "HyWiki" - ["Manual" (id-info "(hyperbole)HyWiki") t] + ["Manual" (id-info "(hyperbole)HyWiki") t] "----" - ["Activate" hywiki-word-activate t] - ["Create" hywiki-add-page-and-display t] - ["Edit" hywiki-find-page t] - ["Grep-Consult" hywiki-consult-grep t] - ["Help" hkey-help t] - ["Link" hywiki-add-link t] + ["Activate" hywiki-word-activate t] + ["Create" hywiki-add-page-and-display t] + ["Edit" hywiki-find-page t] + ["Grep-Consult" hywiki-consult-grep t] + ["Help" hkey-help t] + ["Link" hywiki-add-link t] hui-menu-org-meta-return-options - ["Publish" hywiki-publish-to-html t] - ["Toggle-HyWiki-Mode" hywiki-mode t] - ["WikiWord-Consult" hywiki-word-consult-grep t]) + ["HyWiki-Mode-Toggle" hywiki-mode t] + ["Publish" hywiki-publish-to-html t] + ["Tag-Find" hywiki-tags-view t] + ["WikiWord-Consult" hywiki-word-consult-grep t]) '("Implicit-Button" ["Manual" (id-info "(hyperbole)Implicit Buttons") t] "----" diff --git a/hui-mini.el b/hui-mini.el index 9b0522626c..280a861f18 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: 18-Aug-24 at 15:33:00 by Bob Weiner +;; Last-Mod: 19-Aug-24 at 23:29:29 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -389,12 +389,31 @@ or if there are none, then its first character." (aref item 0))) (defun hui:menu-item-keys (menu-alist) - "Return ordered list of keys that activate Hypb minibuffer MENU-ALIST items. + "Return ordered list of keys that activate Hypb minibuffer MENU-A[LIST items. For each item, the key is either the first capital letter in item or if there are none, then its first character." (mapcar (lambda (item) (hui:menu-item-key item)) (mapcar 'car (cdr menu-alist)))) +(defun hui:menu-read-from-minibuffer (prompt &optional initial-contents keymap read + hist default-value inherit-input-method) + "Hyperbole minibuffer menu replacement for `read-from-minibuffer'. +Allows custom handling of menu lines before selecting an item." + (when (and (stringp initial-contents) + (string-prefix-p "Org M-RET" initial-contents)) + (let* ((org-m-ret-options (cddr (assq 'cust-org hui:menus))) + (option-lookups (mapcar (lambda (option) + (cons (car (last (nth 1 option))) + (car option))) + org-m-ret-options)) + (current-name (cdr (assq hsys-org-enable-smart-keys option-lookups)))) + (when (and (stringp current-name) (stringp initial-contents)) + (setq initial-contents (string-replace current-name + (concat "==" current-name "==") + initial-contents))))) + (read-from-minibuffer prompt initial-contents keymap read + hist default-value inherit-input-method)) + (defun hui:menu-choose (menu-alist &optional doc-flag help-string-flag) "Prompt user to choose the first capitalized char of any item from MENU-ALIST. Return the Lisp form associated with the selected item, which may be @@ -424,7 +443,7 @@ documentation, not the full text." (hargs:reading-type 'hmenu)) (while (not (memq (setq key (upcase (string-to-char - (read-from-minibuffer + (hui:menu-read-from-minibuffer "" menu-line hui:menu-mode-map nil t)))) keys)) (beep) @@ -749,13 +768,13 @@ command instead. Typically prevents clashes over {\\`C-c' /}." ("WinControl" (hui:bind-key #'hycontrol-enable-windows-mode)) ;; {C-c \} )) '(cust-org . - (("Org M-RETURN>") - ("All-Smart-Org-Contexts" (customize-save-variable 'hsys-org-enable-smart-keys t) + (("Org M-RET Overrides>") + ("All-Hyperbole-Contexts" (customize-save-variable 'hsys-org-enable-smart-keys t) "Smart Keys override Org M-RET in all Org mode Smart Key contexts (see `smart-org').") - ("Hyperbole-Buttons-Only" (customize-save-variable 'hsys-org-enable-smart-keys 'buttons) + ("Hyperbole-Buttons-Only" (customize-save-variable 'hsys-org-enable-smart-keys :buttons) "Smart Keys override Org M-RET only when on a Hyperbole recognized button.") - ("Ignored-by-Hyperbole" (customize-save-variable 'hsys-org-enable-smart-keys nil) - "Org M-RET always overrides the Smart Keys within Org mode."))) + ("None" (customize-save-variable 'hsys-org-enable-smart-keys nil) + "Smart Keys never override Org M-RET operation."))) '(cust-referents . (("Ref Display>") ("Any-Frame" (setq hpath:display-where 'other-frame)) @@ -857,13 +876,15 @@ command instead. Typically prevents clashes over {\\`C-c' /}." "Display Hyperbole manual section on HyWiki.") ("Link" hywiki-add-link "Prompt for and add a link at point to a HyWiki page.") + ("ModeToggle" hywiki-mode + "Toggle whether HyWikiWords are highlighted and active in buffers outside of the HyWiki page directory.") ("Org-M-RET/" (menu . cust-org) "Set how much of Hyperbole Smart Key behavior is enabled in Org mode.") ("Publish" hywiki-publish-to-html "Publish modified pages in the HyWiki to HTML; prefix arg to publish all pages.") - ("Toggle" hywiki-mode - "Toggle whether HyWikiWords are highlighted and active in buffers outside of the HyWiki page directory.") - ("WikiWordConsult" hywiki-word-consult-grep + ("TagFind" hywiki-tags-view + "Find HyWiki Org tags.") + ("WikiWordConsult" hywiki-word-consult-grep "Use `hywiki-consult-grep' to show occurrences of a prompted for HyWikiWord."))) '(ibut . (("IButton>") @@ -990,6 +1011,7 @@ command instead. Typically prevents clashes over {\\`C-c' /}." '("Order" hyrolo-sort "Order rolo entries in a file.") '("RegexFind" hyrolo-grep "Find entries containing a regexp.") '("StringFind" hyrolo-fgrep "Find entries containing a string.") + '("TagFind" hyrolo-tags-view "Find HyRolo Org tags.") '("WordFind" hyrolo-word "Find entries containing words.") '("Yank" hyrolo-yank "Find an entry containing a string and insert it at point."))) "*Hyperbole minibuffer Rolo menu items of the form: diff --git a/hui-mouse.el b/hui-mouse.el index b73e9f6f21..50e15c35cf 100644 --- a/hui-mouse.el +++ b/hui-mouse.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 04-Feb-89 -;; Last-Mod: 18-Aug-24 at 22:03:38 by Bob Weiner +;; Last-Mod: 19-Aug-24 at 22:17:10 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -1813,7 +1813,7 @@ When the Action Key is pressed and `hsys-org-enable-smart-keys' is t: 3. On an Org agenda view item, jump to the item for editing. When the Action Key is pressed and `hsys-org-enable-smart-keys' is -either t or \\='buttons: +either `t' or `:buttons': 4. Within a radio or internal target or a link to it, jump between the target and the first link to it, allowing two-way navigation. @@ -1934,7 +1934,7 @@ handled by the separate implicit button type, `org-link-outside-org-mode'." (t ;; Continue with any further Smart Key non-Org contexts nil))) - ((eq hsys-org-enable-smart-keys 'buttons) + ((memq hsys-org-enable-smart-keys '(:buttons buttons)) (cond ((hsys-org-radio-target-def-at-p) (hact 'org-radio-target-link) t) diff --git a/hyperbole.el b/hyperbole.el index f207f925ab..eed5a3a9d3 100644 --- a/hyperbole.el +++ b/hyperbole.el @@ -6,15 +6,15 @@ ;; Author: Robert Weiner <r...@gnu.org> ;; Authors: Robert Weiner <r...@gnu.org>, Mats Lidell <ma...@gnu.org> -;; Maintainer: Mats Lidell <ma...@gnu.org> +;; Maintainer: Robert Weiner <r...@gnu.org> ;; Maintainers: Robert Weiner <r...@gnu.org>, Mats Lidell <ma...@gnu.org> ;; Created: 06-Oct-92 at 11:52:51 -;; Last-Mod: 2-Jun-24 at 13:22:35 by Bob Weiner +;; Last-Mod: 23-Aug-24 at 22:36:12 by Bob Weiner ;; Released: 10-Mar-24 ;; Version: 9.0.2pre ;; Keywords: comm, convenience, files, frames, hypermedia, languages, mail, matching, mouse, multimedia, outlines, tools, wp ;; Package: hyperbole -;; Package-Requires: ((emacs "27.1")) +;; Package-Requires: ((emacs "27.2")) ;; URL: http://www.gnu.org/software/hyperbole ;; See the "HY-COPY" file for license information. @@ -490,7 +490,7 @@ frame, those functions by default still return the prior frame." (cond ((car-safe (get 'hsys-org-enable-smart-keys 'customized-value))) ((car-safe (get 'hsys-org-enable-smart-keys 'saved-value))) ((hsys-org-meta-return-shared-p) - 'buttons) + :buttons) (t)))) ;; ;; This next function call must be run before any tests involving Org diff --git a/hyrolo-menu.el b/hyrolo-menu.el index 0d988dcd61..437406aa48 100644 --- a/hyrolo-menu.el +++ b/hyrolo-menu.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 28-Oct-94 at 10:59:44 -;; Last-Mod: 10-Dec-23 at 19:07:10 by Bob Weiner +;; Last-Mod: 19-Aug-24 at 23:29:52 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -55,7 +55,8 @@ ["Search-for-Regexp" (id-tool-invoke 'hyrolo-grep) t] ["Search-for-String" (id-tool-invoke 'hyrolo-fgrep) t] ["Search-for-Word" (id-tool-invoke 'hyrolo-word) t] - ["Sort-Entries" (id-tool-invoke 'hyrolo-sort) t]))) + ["Sort-Entries" (id-tool-invoke 'hyrolo-sort) t] + ["Tag-Find" (id-tool-invoke 'hyrolo-tags-view) t]))) (defconst hyrolo-menu-common-body '( diff --git a/man/hyperbole.html b/man/hyperbole.html index 2f89605616..4faf4a9fda 100644 --- a/man/hyperbole.html +++ b/man/hyperbole.html @@ -108,7 +108,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 9.0.2pre -Printed August 17, 2024. +Printed August 19, 2024. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -2243,7 +2243,7 @@ that set or if final done keyword, remove it. </li><li> On an Org agenda view item, jump to the item for editing. <p>When the Action Key is pressed and <code>hsys-org-enable-smart-keys</code> -is either ‘<samp>t</samp>’ or ‘<samp>'buttons</samp>’: +is either ‘<samp>t</samp>’ or ‘<samp>:buttons</samp>’: </p> </li><li> Within a radio or internal target or a link to it, jump between the target and the first link to it, allowing two-way navigation. @@ -2305,6 +2305,8 @@ through views of the whole buffer outline. <span id="index-disable-org_002dmode-support"></span> <span id="index-inhibit-org_002dmode-support"></span> <span id="index-menu-item_002c-Cust_002fOrg_002dM_002dRET"></span> +<span id="index-customize-Org-M_002dRET"></span> +<span id="index-Org-M_002dRET-customize"></span> <span id="index-Org-M_002dRET-override"></span> <span id="index-override-Org-M_002dRET"></span> <span id="index-C_002dh-h-c-o"></span> @@ -2322,7 +2324,7 @@ this setting. <pre class="example">|--------------+-------------------+------------------+----------+------------------| | This Setting | Smart Key Context | Hyperbole Button | Org Link | Fallback Command | |--------------+-------------------+------------------+----------+------------------| -| buttons | Ignore | Activate | Activate | org-meta-return | +| :buttons | Ignore | Activate | Activate | org-meta-return | | nil | Ignore | Ignore | Ignore | org-meta-return | | t | Activate | Activate | Activate | None | |--------------+-------------------+------------------+----------+------------------| @@ -4467,23 +4469,23 @@ HyWikiWords. <span id="index-override-Org-M_002dRET-1"></span> <span id="index-C_002dh-h-h-o-a"></span> <span id="index-C_002dh-h-h-c"></span> -<span id="index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fAll_002dSmart_002dOrg_002dContexts"></span> +<span id="index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fAll_002dHyperbole_002dContexts"></span> <p>The Action Key can create new HyWiki pages when on an undefined HyWikiWord if you change the setting that controls the Org mode <kbd>{M-<span class="key">RET</span>}</kbd> binding. Have Hyperbole override Org’s control of that key in all Action and Assist Key contexts with the -‘<samp>All-Smart-Org-Contexts</samp>’ setting bound to <kbd>{C-h h h o a}</kbd>. +‘<samp>All-Hyperbole-Contexts</samp>’ setting bound to <kbd>{C-h h h o a}</kbd>. </p> <span id="index-activate-HyWiki-link"></span> <span id="index-link_002c-HyWikiWord"></span> <span id="index-C_002dh-h-h-a"></span> <span id="index-C_002dh-h-h-o-i"></span> -<span id="index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fIgnored_002dby_002dHyperbole"></span> +<span id="index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fNone"></span> <p>To jump to a HyWiki page, simply move point onto any highlighted HyWikiWord and press the Action Key <kbd>{M-<span class="key">RET</span>}</kbd>. This also highlights any other instances of HyWikiWords across all visible Emacs windows. If you have set the Org <kbd>{M-<span class="key">RET</span>}</kbd> option to -‘<samp>Ignored-by-Hyperbole</samp>’ with <kbd>{C-h h h o i}</kbd>, then you will have to +‘<samp>None</samp>’ with <kbd>{C-h h h o i}</kbd>, then you will have to use the HyWiki Act menu command <kbd>{C-h h h a}</kbd> instead to jump to HyWiki pages. </p> @@ -4635,7 +4637,7 @@ Previous: <a href="#Publish-HyWiki" accesskey="p" rel="prev">Publish HyWiki</a>, It looks like this: </p> <div class="example"> -<pre class="example">HyWiki> Act Create Edit GrepConsult Help Info Link Org-M-RET/ Publish Toggle WikiWordConsult +<pre class="example">HyWiki> Act Create Edit GrepConsult Help Info Link ModeToggle Org-M-RET/ Publish TagFind WikiWordConsult </pre></div> <p>Below are descriptions of each menu item. @@ -4664,26 +4666,40 @@ It looks like this: </p></dd> <dt><span>Link</span></dt> <dd><p>Prompt for and add a link at point to a HyWiki page. +<span id="index-hywiki_002dmode-2"></span> +<span id="index-HyWiki-mode"></span> +<span id="index-HyWikiWords-outside-hywiki_002ddirectory"></span> +</p></dd> +<dt><span>ModeToggle</span></dt> +<dd><p>Toggle global minor mode <code>hywiki-mode</code> that enables HyWikiWord hyperlinks +in buffers outside of <code>hywiki-directory</code>. <span id="index-C_002dh-h-h-o"></span> <span id="index-HyWiki_002c-C_002dh-h-h-o"></span> <span id="index-C_002dh-h-h-c-1"></span> <span id="index-HyWiki_002c-C_002dh-h-h-c"></span> <span id="index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET"></span> <span id="index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fHyperbole_002dButtons_002dOnly"></span> -<span id="index-customize-Org-M_002dRET"></span> -<span id="index-Org-M_002dRET-customize"></span> +<span id="index-customize-Org-M_002dRET-1"></span> +<span id="index-Org-M_002dRET-customize-1"></span> +<span id="index-override-Org-M_002dRET-3"></span> +<span id="index-Org-M_002dRET-override-2"></span> </p></dd> <dt><span>Org-M-RET/</span></dt> <dd><p>Menu to customize contexts in which Hyperbole Action and Assist Keys override Org’s <kbd>{M-<span class="key">RET</span>}</kbd> command. The default is -when on ‘<samp>Hyperbole-Buttons-Only</samp>’. Use ‘<samp>All-Smart-Org-Contexts</samp>’ to +when on ‘<samp>Hyperbole-Buttons-Only</samp>’. Use ‘<samp>All-Hyperbole-Contexts</samp>’ to make the Action Key create new HyWiki pages when pressed on as-yet undefined HyWikiWords; otherwise, you must use <kbd>{C-h h h c}</kbd> to create a -new HyWiki page instead. Use ‘<samp>Ignored-by-Hyperbole</samp>’ if you want to +new HyWiki page instead. Use ‘<samp>None</samp>’ if you want to use Org’s <kbd>{M-<span class="key">RET</span>}</kbd> command in every context within Org mode. </p></dd> <dt><span>Publish</span></dt> <dd><p>Publish modified pages in the HyWiki to HTML; prefix arg to publish all pages. +<span id="index-HyWiki-tag-search"></span> +<span id="index-search_002c-HyWiki-tag"></span> +</p></dd> +<dt><span>TagFind</span></dt> +<dd><p>Find a matching Org tag across all HyWiki pages. </p></dd> <dt><span>WikiWordConsult</span></dt> <dd><p>Use <code>hywiki-consult-grep</code> to show occurrences of a prompted for HyWikiWord. @@ -6839,6 +6855,7 @@ set of commands as the menubar Rolo menu but with more concise labels. <span id="index-hyrolo_002dsort"></span> <span id="index-hyrolo_002dgrep"></span> <span id="index-hyrolo_002dfgrep"></span> +<span id="index-hyrolo_002dtags_002dview"></span> <span id="index-hyrolo_002dword"></span> <span id="index-hyrolo_002dyank"></span> <p>The minibuffer Rolo/ menu offers the following commands (ConsultFind @@ -6864,6 +6881,7 @@ RegexFind hyrolo-grep Finds all entries containing StringFind hyrolo-fgrep Finds all entries containing a string (or logical expression) +TagFind hyrolo-tags-view Finds HyWiki Org tags WordFind hyrolo-word Finds all entries containing a string of whole words Yank hyrolo-yank Inserts the first matching @@ -6915,6 +6933,7 @@ Next: <a href="#HyRolo-Keys" accesskey="n" rel="next">HyRolo Keys</a>, Previous: <span id="index-menu-item_002c-RegexFind"></span> <span id="index-menu-item_002c-WordFind"></span> <span id="index-menu-item_002c-StringFind"></span> +<span id="index-menu-item_002c-TagFind"></span> <p>See <a href="#HyRolo-Menu">Rolo Menu</a>, for the list of HyRolo search commands. In this section, the menu item names from the minibuffer menu are used to refer to each command. @@ -6926,6 +6945,10 @@ and across the GNU set of tools. See <a data-manual="emacs" href="https://www.g Expressions</a> in <cite>the GNU Emacs Manual</cite>, for full documentation on this format. </p> +<p>The <code>TagFind</code> menu item searches through HyRolo Org files and +finds headlines with any matching tags. An Action Key press on any +matching line displays the line in its source buffer. +</p> <p>The <code>WordFind</code> menu item locates full-word matches so that if you search for ‘<samp>product</samp>’, it won’t match to occurrences of ‘<samp>production</samp>’. It is also handy for more precise name matching. @@ -12963,7 +12986,7 @@ It did not exist when Hyperbole was first developed. <code>hsys-org-enable-smart-keys</code> customization variable to control the Smart Keys and <kbd>{M-<span class="key">RET</span>}</kbd> when in Org-mode with <code>hyperbole-mode</code> active. <code>t</code> enables Smart Key support -everywhere. The symbol, <code>buttons</code>, is the default; it means the +everywhere. The symbol, <code>:buttons</code>, is the default; it means the Smart Keys are active only when point is within a Hyperbole button. A <code>nil</code> value means no Smart Key support; Hyperbole gives Org complete control over <kbd>{M-<span class="key">RET</span>}</kbd> so that it behaves just as it @@ -14301,6 +14324,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-hyrolo_002dmode_002dhook">hyrolo-mode-hook</a>:</td><td> </td><td valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dsave_002dbuffers_002dafter_002duse">hyrolo-save-buffers-after-use</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dsort"><code>hyrolo-sort</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-hyrolo_002dtags_002dview"><code>hyrolo-tags-view</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dword"><code>hyrolo-word</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dyank"><code>hyrolo-yank</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Menu">HyRolo Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hyrolo_002dyank_002dreformat_002dfunction">hyrolo-yank-reformat-function</a>:</td><td> </td><td valign="top"><a href="#Hook-Variables">Hook Variables</a></td></tr> @@ -14319,6 +14343,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-hywiki_002dexclude_002dmajor_002dmodes">hywiki-exclude-major-modes</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hywiki_002dhighlight_002dall_002din_002dprog_002dmodes">hywiki-highlight-all-in-prog-modes</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hywiki_002dmode-1"><code>hywiki-mode</code></a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-hywiki_002dmode-2"><code>hywiki-mode</code></a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hywiki_002dorg_002dget_002dpublish_002dproperty"><code>hywiki-org-get-publish-property</code></a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hywiki_002dorg_002dlink_002dtype_002drequired">hywiki-org-link-type-required</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hywiki_002dorg_002dpublish_002dproject_002dalist">hywiki-org-publish-project-alist</a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> @@ -14932,7 +14957,8 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-customization">customization</a>:</td><td> </td><td valign="top"><a href="#Customization">Customization</a></td></tr> <tr><td></td><td valign="top"><a href="#index-customization-1">customization</a>:</td><td> </td><td valign="top"><a href="#Customization">Customization</a></td></tr> <tr><td></td><td valign="top"><a href="#index-customize">customize</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-customize-Org-M_002dRET">customize Org M-RET</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-customize-Org-M_002dRET">customize Org M-RET</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-customize-Org-M_002dRET-1">customize Org M-RET</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-customize_002c-rolo-additions">customize, rolo additions</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-customize_002c-rolo-datestamps">customize, rolo datestamps</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-customize_002c-rolo-edits">customize, rolo edits</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> @@ -15229,6 +15255,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-HyWiki-exclude-modes">HyWiki exclude modes</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-export-to-HTML">HyWiki export to HTML</a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-menu">HyWiki menu</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-HyWiki-mode">HyWiki mode</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-Org-link-format">HyWiki Org link format</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-Org-publish">HyWiki Org publish</a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-programming-modes">HyWiki programming modes</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> @@ -15236,12 +15263,14 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-HyWiki-publishing-directory">HyWiki publishing directory</a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-publishing-function">HyWiki publishing function</a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWiki-section-link">HyWiki section link</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-HyWiki-tag-search">HyWiki tag search</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-hywiki_002dmode">hywiki-mode</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWikiWord">HyWikiWord</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWikiWord-contexts">HyWikiWord contexts</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWikiWord-create">HyWikiWord create</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWikiWord-highlighting">HyWikiWord highlighting</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyWikiWord_002c-outside-the-wiki">HyWikiWord, outside the wiki</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-HyWikiWords-outside-hywiki_002ddirectory">HyWikiWords outside hywiki-directory</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Concept-Index_cp_letter-I">I</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-ibtype">ibtype</a>:</td><td> </td><td valign="top"><a href="#Programmatic-Implicit-Button-Types">Programmatic Implicit Button Types</a></td></tr> @@ -15484,9 +15513,9 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-menu-item_002c-GrepFile">menu item, GrepFile</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-Hist">menu item, Hist</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET">menu item, HyWiki/Org-M-RET</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fAll_002dSmart_002dOrg_002dContexts">menu item, HyWiki/Org-M-RET/All-Smart-Org-Contexts</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fAll_002dHyperbole_002dContexts">menu item, HyWiki/Org-M-RET/All-Hyperbole-Contexts</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fHyperbole_002dButtons_002dOnly">menu item, HyWiki/Org-M-RET/Hyperbole-Buttons-Only</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fIgnored_002dby_002dHyperbole">menu item, HyWiki/Org-M-RET/Ignored-by-Hyperbole</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-menu-item_002c-HyWiki_002fOrg_002dM_002dRET_002fNone">menu item, HyWiki/Org-M-RET/None</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-Ibut_002fAct">menu item, Ibut/Act</a>:</td><td> </td><td valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-Ibut_002fActivate">menu item, Ibut/Activate</a>:</td><td> </td><td valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-Ibut_002fCreate">menu item, Ibut/Create</a>:</td><td> </td><td valign="top"><a href="#Implicit-Buttons">Implicit Buttons</a></td></tr> @@ -15505,6 +15534,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-menu-item_002c-Rolo_002fToggle_002dRolo_002dDates">menu item, Rolo/Toggle-Rolo-Dates</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-SaveLines">menu item, SaveLines</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-StringFind">menu item, StringFind</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Searching">HyRolo Searching</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-menu-item_002c-TagFind">menu item, TagFind</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Searching">HyRolo Searching</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-Toggle_002dIsearch_002dInvisible">menu item, Toggle-Isearch-Invisible</a>:</td><td> </td><td valign="top"><a href="#Invisible-Text-Searches">Invisible Text Searches</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-WindowsControl">menu item, WindowsControl</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td></td><td valign="top"><a href="#index-menu-item_002c-WordFind">menu item, WordFind</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Searching">HyRolo Searching</a></td></tr> @@ -15638,9 +15668,11 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-Org-link_002c-HyWiki">Org link, HyWiki</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-link_002c-outside-Org">Org link, outside Org</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-link_002c-outside-Org-1">Org link, outside Org</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Org-Mode">Smart Key - Org Mode</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-Org-M_002dRET-customize">Org M-RET customize</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-Org-M_002dRET-customize">Org M-RET customize</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-Org-M_002dRET-customize-1">Org M-RET customize</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-M_002dRET-override">Org M-RET override</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-M_002dRET-override-1">Org M-RET override</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-Org-M_002dRET-override-2">Org M-RET override</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-mode">Org mode</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Concepts">HyRolo Concepts</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-mode-1">Org mode</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Org-Mode">Smart Key - Org Mode</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-publish">Org publish</a>:</td><td> </td><td valign="top"><a href="#Publish-HyWiki">Publish HyWiki</a></td></tr> @@ -15691,6 +15723,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-override-Org-M_002dRET">override Org M-RET</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td></td><td valign="top"><a href="#index-override-Org-M_002dRET-1">override Org M-RET</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> <tr><td></td><td valign="top"><a href="#index-override-Org-M_002dRET-2">override Org M-RET</a>:</td><td> </td><td valign="top"><a href="#HyWikiWords">HyWikiWords</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-override-Org-M_002dRET-3">override Org M-RET</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-overview">overview</a>:</td><td> </td><td valign="top"><a href="#Hiding-and-Showing">Hiding and Showing</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Concept-Index_cp_letter-P">P</th><td></td><td></td></tr> @@ -15811,6 +15844,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function, Variable and Fi <tr><td></td><td valign="top"><a href="#index-search">search</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-search-1">search</a>:</td><td> </td><td valign="top"><a href="#Invisible-Text-Searches">Invisible Text Searches</a></td></tr> <tr><td></td><td valign="top"><a href="#index-search-engines-menu">search engines menu</a>:</td><td> </td><td valign="top"><a href="#Web-Search-Engines">Web Search Engines</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-search_002c-HyWiki-tag">search, HyWiki tag</a>:</td><td> </td><td valign="top"><a href="#HyWiki-Menu">HyWiki Menu</a></td></tr> <tr><td></td><td valign="top"><a href="#index-searching-the-web">searching the web</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-searching-the-web-1">searching the web</a>:</td><td> </td><td valign="top"><a href="#Default-Hyperbole-Bindings">Default Hyperbole Bindings</a></td></tr> <tr><td></td><td valign="top"><a href="#index-searching_002c-rolo">searching, rolo</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Searching">HyRolo Searching</a></td></tr> diff --git a/man/hyperbole.info b/man/hyperbole.info index ac25c12138..4e4a5d30b7 100644 Binary files a/man/hyperbole.info and b/man/hyperbole.info differ diff --git a/man/hyperbole.texi b/man/hyperbole.texi index 25ddbf110a..1cd2b9db86 100644 --- a/man/hyperbole.texi +++ b/man/hyperbole.texi @@ -159,7 +159,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 9.0.2pre -Printed August 17, 2024. +Printed August 19, 2024. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -201,7 +201,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @example Edition 9.0.2pre -August 17, 2024 +August 19, 2024 Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -524,7 +524,7 @@ Smart Keyboard Keys @chapter Introduction This edition of the GNU Hyperbole Manual is for use with any version -9.0.1 or greater of GNU Hyperbole. Hyperbole runs atop GNU Emacs 27.1 +9.0.2pre or greater of GNU Hyperbole. Hyperbole runs atop GNU Emacs 27.2 or higher. It will trigger an error if your Emacs is older. This chapter summarizes the structure of the rest of the manual, @@ -2344,7 +2344,7 @@ On an Org agenda view item, jump to the item for editing. @noindent When the Action Key is pressed and @code{hsys-org-enable-smart-keys} -is either @samp{t} or @samp{'buttons}: +is either @samp{t} or @samp{:buttons}: @item Within a radio or internal target or a link to it, jump between @@ -2422,6 +2422,8 @@ through views of the whole buffer outline. @cindex disable org-mode support @cindex inhibit org-mode support @cindex menu item, Cust/Org-M-RET +@cindex customize Org M-RET +@cindex Org M-RET customize @cindex Org M-RET override @cindex override Org M-RET @kindex C-h h c o @@ -2438,7 +2440,7 @@ The following table summarizes the effect of this option setting. |--------------+-------------------+------------------+----------+------------------| | This Setting | Smart Key Context | Hyperbole Button | Org Link | Fallback Command | |--------------+-------------------+------------------+----------+------------------| -| buttons | Ignore | Activate | Activate | org-meta-return | +| :buttons | Ignore | Activate | Activate | org-meta-return | | nil | Ignore | Ignore | Ignore | org-meta-return | | t | Activate | Activate | Activate | None | |--------------+-------------------+------------------+----------+------------------| @@ -4372,23 +4374,23 @@ HyWikiWords. @cindex override Org M-RET @kindex C-h h h o a @kindex C-h h h c -@cindex menu item, HyWiki/Org-M-RET/All-Smart-Org-Contexts +@cindex menu item, HyWiki/Org-M-RET/All-Hyperbole-Contexts The Action Key can create new HyWiki pages when on an undefined HyWikiWord if you change the setting that controls the Org mode @bkbd{M-@key{RET}} binding. Have Hyperbole override Org's control of that key in all Action and Assist Key contexts with the -@samp{All-Smart-Org-Contexts} setting bound to @bkbd{C-h h h o a}. +@samp{All-Hyperbole-Contexts} setting bound to @bkbd{C-h h h o a}. @cindex activate HyWiki link @cindex link, HyWikiWord @kindex C-h h h a @kindex C-h h h o i -@cindex menu item, HyWiki/Org-M-RET/Ignored-by-Hyperbole +@cindex menu item, HyWiki/Org-M-RET/None To jump to a HyWiki page, simply move point onto any highlighted HyWikiWord and press the Action Key @bkbd{M-@key{RET}}. This also highlights any other instances of HyWikiWords across all visible Emacs windows. If you have set the Org @bkbd{M-@key{RET}} option to -@samp{Ignored-by-Hyperbole} with @bkbd{C-h h h o i}, then you will have to +@samp{None} with @bkbd{C-h h h o i}, then you will have to use the HyWiki Act menu command @bkbd{C-h h h a} instead to jump to HyWiki pages. @@ -4533,7 +4535,7 @@ It looks like this: @smallexample @noindent -HyWiki> Act Create Edit GrepConsult Help Info Link Org-M-RET/ Publish Toggle WikiWordConsult +HyWiki> Act Create Edit GrepConsult Help Info Link ModeToggle Org-M-RET/ Publish TagFind WikiWordConsult @end smallexample @noindent @@ -4557,6 +4559,12 @@ Report on a HyWikiWord's attributes. Display Hyperbole manual section on HyWiki. @item Link Prompt for and add a link at point to a HyWiki page. +@findex hywiki-mode +@cindex HyWiki mode +@cindex HyWikiWords outside hywiki-directory +@item ModeToggle +Toggle global minor mode @code{hywiki-mode} that enables HyWikiWord hyperlinks +in buffers outside of @code{hywiki-directory}. @kindex C-h h h o @kindex HyWiki, C-h h h o @kindex C-h h h c @@ -4565,16 +4573,22 @@ Prompt for and add a link at point to a HyWiki page. @cindex menu item, HyWiki/Org-M-RET/Hyperbole-Buttons-Only @cindex customize Org M-RET @cindex Org M-RET customize +@cindex override Org M-RET +@cindex Org M-RET override @item Org-M-RET/ Menu to customize contexts in which Hyperbole Action and Assist Keys override Org's @bkbd{M-@key{RET}} command. The default is -when on @samp{Hyperbole-Buttons-Only}. Use @samp{All-Smart-Org-Contexts} to +when on @samp{Hyperbole-Buttons-Only}. Use @samp{All-Hyperbole-Contexts} to make the Action Key create new HyWiki pages when pressed on as-yet undefined HyWikiWords; otherwise, you must use @bkbd{C-h h h c} to create a -new HyWiki page instead. Use @samp{Ignored-by-Hyperbole} if you want to +new HyWiki page instead. Use @samp{None} if you want to use Org's @bkbd{M-@key{RET}} command in every context within Org mode. @item Publish Publish modified pages in the HyWiki to HTML; prefix arg to publish all pages. +@cindex HyWiki tag search +@cindex search, HyWiki tag +@item TagFind +Find a matching Org tag across all HyWiki pages. @item WikiWordConsult Use @code{hywiki-consult-grep} to show occurrences of a prompted for HyWikiWord. @end table @@ -6435,6 +6449,7 @@ set of commands as the menubar Rolo menu but with more concise labels. @findex hyrolo-sort @findex hyrolo-grep @findex hyrolo-fgrep +@findex hyrolo-tags-view @findex hyrolo-word @findex hyrolo-yank The minibuffer Rolo/ menu offers the following commands (ConsultFind @@ -6461,6 +6476,7 @@ RegexFind hyrolo-grep Finds all entries containing StringFind hyrolo-fgrep Finds all entries containing a string (or logical expression) +TagFind hyrolo-tags-view Finds HyWiki Org tags WordFind hyrolo-word Finds all entries containing a string of whole words Yank hyrolo-yank Inserts the first matching @@ -6510,6 +6526,7 @@ containing "Staffer" at any level in a hierarchy, like so: @cindex menu item, RegexFind @cindex menu item, WordFind @cindex menu item, StringFind +@cindex menu item, TagFind @xref{HyRolo Menu}, for the list of HyRolo search commands. In this section, the menu item names from the minibuffer menu are used to refer to each command. @@ -6521,6 +6538,10 @@ and across the GNU set of tools. @xref{Regexps,,Syntax of Regular Expressions, emacs, the GNU Emacs Manual}, for full documentation on this format. +The @code{TagFind} menu item searches through HyRolo Org files and +finds headlines with any matching tags. An Action Key press on any +matching line displays the line in its source buffer. + The @code{WordFind} menu item locates full-word matches so that if you search for @samp{product}, it won't match to occurrences of @samp{production}. It is also handy for more precise name matching. @@ -11923,7 +11944,7 @@ Smart Key support for Org-mode is already in Hyperbole. Use the @code{hsys-org-enable-smart-keys} customization variable to control the Smart Keys and @bkbd{M-@key{RET}} when in Org-mode with @code{hyperbole-mode} active. @code{t} enables Smart Key support -everywhere. The symbol, @code{buttons}, is the default; it means the +everywhere. The symbol, @code{:buttons}, is the default; it means the Smart Keys are active only when point is within a Hyperbole button. A @code{nil} value means no Smart Key support; Hyperbole gives Org complete control over @bkbd{M-@key{RET}} so that it behaves just as it diff --git a/test/demo-tests.el b/test/demo-tests.el index eebfe3b6bd..3df7483821 100644 --- a/test/demo-tests.el +++ b/test/demo-tests.el @@ -250,7 +250,7 @@ (should (looking-at "## Why was Hyperbole developed\\?"))) (hy-test-helpers:kill-buffer "README.md"))) -(ert-deftest demo-implicit-button-line-and-column-test () +(ert-deftest demo-implicit-button-line-and-column-rtest () (unwind-protect (with-temp-buffer (insert (format "\"%s%s\"" (expand-file-name "HY-ABOUT" hyperb:dir) ":5:46")) diff --git a/test/kcell-tests.el b/test/kcell-tests.el index d44be6a3d9..5d4ddeba58 100644 --- a/test/kcell-tests.el +++ b/test/kcell-tests.el @@ -7,14 +7,14 @@ ;; e-mail: ma...@gnu.org ;; ;; orig-date: 16-Feb-22 at 23:28:49 -;; last-mod: 10-Mar-24 at 12:43:58 by Bob Weiner +;; last-mod: 23-Aug-24 at 13:27:11 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; ;; Copyright (C) 2021-2024 Free Software Foundation, Inc. ;; Licensed under the GNU General Public License, version 3. ;; -;; This file is not part of Emacs. It requires Emacs 27.1 or above. +;; This file is not part of Emacs. It requires Emacs 27.2 or above. ;; This file is part of Hyperbole. ;; ;;; Commentary: diff --git a/test/smart-org-tests.el b/test/smart-org-tests.el index 9c11f77f3d..3e9fe4c469 100644 --- a/test/smart-org-tests.el +++ b/test/smart-org-tests.el @@ -3,7 +3,7 @@ ;; Author: Mats Lidell <ma...@gnu.org> ;; ;; Orig-Date: 23-Apr-21 at 22:21:00 -;; Last-Mod: 22-May-22 at 15:04:44 by Bob Weiner +;; Last-Mod: 19-Aug-24 at 22:00:29 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -70,7 +70,7 @@ (ert-deftest smart-org-mode-with-smart-keys-buttons-on-hypb-button-activates () "With smart keys as buttons on hypb button activates the button." (with-temp-buffer - (let ((hsys-org-enable-smart-keys 'buttons)) + (let ((hsys-org-enable-smart-keys :buttons)) (org-mode) (insert "/tmp") (goto-char 2) @@ -93,7 +93,7 @@ (ert-deftest smart-org-mode-with-smart-keys-buttons-on-delimited-thing-calls-org-meta-return () "With smart keys as buttons on delimited falls back to `org-meta-return'." (with-temp-buffer - (let ((hsys-org-enable-smart-keys 'buttons)) + (let ((hsys-org-enable-smart-keys :buttons)) (org-mode) (insert "(hy per bo le)\n") (goto-char 14) @@ -105,7 +105,7 @@ (ert-deftest smart-org-mode-with-smart-keys-buttons-on-org-link-activates () "With smart keys as buttons on `org-mode' link activates link." (with-temp-buffer - (let ((hsys-org-enable-smart-keys 'buttons)) + (let ((hsys-org-enable-smart-keys :buttons)) (org-mode) (insert "[[/tmp][desc]]") (goto-char 9)