branch: externals/hyperbole
commit bd5f59b2e0632c1a7e9815e9f111cf9c20272f54
Author: bw <r...@gnu.org>
Commit: bw <r...@gnu.org>

    hyrolo-mode-map - add [ and ] keys to move to prev and next @loc>
    
    In same keymap, fix , and . movement keys.
    For all supported HyRolo major modes, include file headers in both
    hyrolo-hdr-regexp and outline-regexp.
---
 ChangeLog          |  29 ++++++++++
 hbut.el            |  15 +++--
 hmoccur.el         |   9 ++-
 hyrolo.el          | 166 ++++++++++++++++++++++++++++++++++++-----------------
 kotl/kotl-mode.el  |   9 +--
 man/hyperbole.html |  16 +++++-
 man/hyperbole.info | Bin 617671 -> 618111 bytes
 man/hyperbole.pdf  | Bin 1371766 -> 1372120 bytes
 man/hyperbole.texi |  12 +++-
 9 files changed, 183 insertions(+), 73 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 447190c6eb..14128fd64b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,28 @@
+2023-12-25  Bob Weiner  <r...@gnu.org>
+
+* hyrolo.el (hyrolo-hdr-move-after-p): Modify to handle when point is not at
+    the start of but is on a hdr separator or loc line.
+    (hyrolo-to-entry-beginning): Fix to move past any file hdr.
+
+* man/hyperbole.texi (HyRolo Keys): Document [ and ] keys to move to prev and
+    next buffer/file @loc> line.
+
+* hyrolo.el (hyrolo-to-entry-end): Don't move back one char if on end of line.
+
+* hbut.el (hbut:source-prefix):
+  hmoccur.el (moccur-source-prefix): Clarify doc.
+
+* hyrolo.el (hyrolo-markdown-suffix-regexp): Add and use in 
`hyrolo-file-suffix-regexp'
+    to capture all Markdown suffixes.
+            (hyrolo-any-file-type-problem-p): Use above regexp here.  Separate 
out
+    invalid files due to invalid suffixes from files with invalid major modes 
due
+    to not being in 'auto-mode-alist'.
+            (outline-mode-hook): Add to configure outline-mode for use with 
HyRolo.
+           (hyrolo-org-mode): Update to set all local hyrolo variables.
+
+* kotl/kotl-mode.el (kotl-mode): Set 'outline-regexp' to match 
'hyrolo-entry-regexp'
+    to account for file headers in 'hyrolo-mode' (multi-format major-mode).
+
 2023-12-24  Bob Weiner  <r...@gnu.org>
 
 * hyrolo.el (hyrolo-any-file-type-problem-p): Add to handle file suffixes
@@ -6,6 +31,10 @@
             (hyrolo-let-file-list, hyrolo-set-file-list): Call above function.
     This fixes failures with Markdown files improperly put into 
fundamental-mode
     which means their headings are not recognized properly.
+            (hyrolo-to-previous-loc, hyrolo-to-next-loc): Add and
+    bind to [ and ] keys in 'hyrolo-mode-map'.
+    (hyrolo-hdr-prefix-regexp): Add so do not repeat expression multiple places
+       and add this to `outline-regexp' in all major-modes supported by HyRolo.
 
 * hload-path.el (auto-mode-alist): Setup to invoke 'outline-mode' on ".otl"
     suffixed files.
diff --git a/hbut.el b/hbut.el
index f956da94a3..73a6717736 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:     21-Dec-23 at 13:12:49 by Bob Weiner
+;; Last-Mod:     25-Dec-23 at 01:59:28 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -95,17 +95,16 @@ others who use a different value!")
 (defvar   ibut:label-separator " - "
   "Default separator string inserted between implicit button name and its text.
 
-This separates it from the implicit button text.  See also
-`ibut:label-separator-regexp' for all valid characters that may be
-manually inserted to separate an implicit button label from its
-text.")
+See also `ibut:label-separator-regexp' for all valid characters that may be
+inserted manually to separate an implicit button label from its text.")
 
 (defconst hbut:source-prefix moccur-source-prefix
-  "String found at start of a buffer containing only a hyper-button menu.
+  "String prefix for lines indicating the source of the matches.
+
 It should not contain any characters needing regular expression quoting.
 
-This expression should be followed immediately by a file-name indicating the
-source file for the buttons in the menu, if any.")
+This expression should be followed immediately by a buffer or file name
+indicating the source of any of its Hyperbole buttons.")
 
 ;;; ************************************************************************
 ;;; Public definitions
diff --git a/hmoccur.el b/hmoccur.el
index dd91e692d2..9f952ff858 100644
--- a/hmoccur.el
+++ b/hmoccur.el
@@ -3,7 +3,7 @@
 ;; Author:       Markus Freericks <m...@cs.tu-berlin.de> / Bob Weiner
 ;;
 ;; Orig-Date:     1-Aug-91
-;; Last-Mod:      3-Oct-23 at 23:28:17 by Mats Lidell
+;; Last-Mod:     25-Dec-23 at 01:58:55 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -59,7 +59,12 @@
 ;;; ************************************************************************
 
 (defconst moccur-source-prefix "@loc> "
-  "Prefix for lines indicating source of matches.")
+  "String prefix for lines indicating the source of the matches.
+
+It should not contain any characters needing regular expression quoting.
+
+This expression should be followed immediately by a buffer or file name
+indicating the source of any of its Hyperbole buttons.")
 
 ;;; ************************************************************************
 ;;; Public functions
diff --git a/hyrolo.el b/hyrolo.el
index 8a19b7337a..dc5f03626b 100644
--- a/hyrolo.el
+++ b/hyrolo.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:     7-Jun-89 at 22:08:29
-;; Last-Mod:     24-Dec-23 at 02:38:06 by Bob Weiner
+;; Last-Mod:     25-Dec-23 at 03:05:40 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -108,6 +108,7 @@
 (defvar hyrolo-entry-trailing-space-group-number)
 (defvar hyrolo-hdr-format)
 (defvar hyrolo-hdr-regexp)
+(defvar hyrolo-hdr-prefix-regexp)
 (defvar hyrolo-match-regexp)
 (defvar hyrolo-mode-map)
 (defvar hyrolo-mode-prefix-map)
@@ -179,10 +180,15 @@ See `hyrolo-entry-regexp'")
 (defvar hyrolo-entry-trailing-space-group-number 2
   "Group number within `hyrolo-entry-regexp' containing trailing space.")
 
-(defvar hyrolo-entry-regexp
+(defvar hyrolo-hdr-prefix-regexp
   (concat hyrolo-hdr-regexp
          "\\|^" (if (boundp 'hbut:source-prefix) hbut:source-prefix "@loc> ")
-         "\\|^\\(\\*+\\)\\([ \t]+\\)")
+         "\\|")
+  "Regular expression to prefix to `hyrolo-entry-regexp' and `outline-regexp'.
+It must not contain any parenthesized match groupings.")
+
+(defvar hyrolo-entry-regexp
+  (concat hyrolo-hdr-prefix-regexp "^\\(\\*+\\)\\([ \t]+\\)")
   "Regular expression to match the beginning of a HyRolo entry.
 This pattern must match the beginning of a line.
 `hyrolo-entry-group-number' must capture the entry's level in the
@@ -193,16 +199,25 @@ level.")
 ;; Support hyrolo searches in markdown files
 (add-hook 'markdown-mode-hook
          (lambda ()
-           (setq-local hyrolo-entry-regexp
-                       (concat hyrolo-hdr-regexp
-                               "\\|^" (if (boundp 'hbut:source-prefix) 
hbut:source-prefix "@loc> ")
-                               "\\|^\\(#+\\)\\([       ]+\\)")
+           (setq-local hyrolo-entry-regexp (concat hyrolo-hdr-prefix-regexp 
"^\\(#+\\)\\([ \t\n\r]+\\)")
                        hyrolo-entry-group-number 1
                        ;; `hyrolo-add' handles removing # prefix from
                        ;; trailing-space grouping below
                        hyrolo-entry-trailing-space-group-number 2
+                       outline-regexp (concat hyrolo-hdr-prefix-regexp 
markdown-regex-header)
                        outline-level #'hyrolo-markdown-outline-level)))
 
+;; Support hyrolo searches in Emacs outline files
+(add-hook 'outline-mode-hook
+         (lambda ()
+           (setq-local hyrolo-entry-regexp (concat hyrolo-hdr-prefix-regexp 
"^\\([*\^L]+\\)\\([ \t\n\r]+\\)")
+                       hyrolo-entry-group-number 1
+                       ;; `hyrolo-add' handles removing # prefix from
+                       ;; trailing-space grouping below
+                       hyrolo-entry-trailing-space-group-number 2
+                       outline-regexp hyrolo-entry-regexp
+                       outline-level #'hyrolo-outline-level)))
+
 (defcustom hyrolo-date-format "%m/%d/%Y"
   "Format of date string used in HyRolo automatic date stamps.
 An empty string disables adding or updating HyRolo dates.
@@ -228,7 +243,11 @@ It must contain a %s indicating where to put the entry 
name and a second
 (defvar hyrolo-entry-name-regexp "[-_a-zA-Z0-9@.]+\\( ?, ?[-_a-zA-Z0-9@.]+\\)?"
   "*Regexp matching a hyrolo entry name after matching to 
`hyrolo-entry-regexp'.")
 
-(defcustom hyrolo-file-suffix-regexp "\\.\\(kotl\\|md\\|org\\|otl\\)$"
+(defconst hyrolo-markdown-suffix-regexp 
"md\\|markdown\\|mkd\\|mdown\\|mkdn\\|mdwn"
+  "Regexp matching Markdown file suffixes.")
+
+(defcustom hyrolo-file-suffix-regexp (concat "\\.\\(kotl?\\|org\\|otl\\|"
+                                            hyrolo-markdown-suffix-regexp 
"\\)$")
   "File suffix regexp used to select files to search with HyRolo."
   :type 'string
   :group 'hyperbole-hyrolo)
@@ -664,7 +683,7 @@ select it."
                ;; change adds one to the default `outline-level' function,
                ;; so `hyrolo-outline-level' overrides that as well
                ;; to get the correct calculation.  -- rsw, 2023-11-17
-               (setq-local outline-regexp "[*\^L]+[ \t\n\r]"
+               (setq-local outline-regexp "\\([*\^L]+\\)\\([ \t\n\r]\\)"
                            outline-level #'hyrolo-outline-level))
              (setq buffer-read-only nil))))))))
 
@@ -1586,7 +1605,7 @@ Stop at the first and last subheadings of a superior 
heading."
   (hyrolo-move-forward #'outline-forward-same-level arg))
 
 (defun hyrolo-hdr-to-last-line-p ()
-  "If point is at the start of a hdr line, move to the start of its last line.
+  "If point is on a file hdr separator/loc line, move to start of its last 
line.
 Return t in such cases.  Otherwise, don't move and return nil.
 
 The header includes lines matching both `hyrolo-hdr-regexp' and
@@ -1596,15 +1615,17 @@ The header includes lines matching both 
`hyrolo-hdr-regexp' and
     t))
 
 (defun hyrolo-hdr-move-after-p ()
-  "If point is at the start of a hdr line, move past the hdr and return t.
+  "If point is on a file hdr separator/loc line, move past the hdr and return 
t.
 Otherwise, don't move and return nil."
   (let ((opoint (point))
        (hdr-delim-count 0)
        (loc-count 0))
-    (while (or (when (looking-at hyrolo-hdr-regexp)
-                (cl-incf hdr-delim-count))
-              (when (looking-at hbut:source-prefix)
-                (cl-incf loc-count)))
+    (while (save-excursion
+            (beginning-of-line)
+            (or (when (looking-at hyrolo-hdr-regexp)
+                  (cl-incf hdr-delim-count))
+                (when (looking-at hbut:source-prefix)
+                  (cl-incf loc-count))))
       (forward-line 1))
     (when (and (/= (point) opoint) (< hdr-delim-count 2) (zerop loc-count))
       (if (looking-at hyrolo-hdr-regexp)
@@ -1837,7 +1858,7 @@ Calls the functions given by `hyrolo-mode-hook'.
                ;; the end of the match.  Note this change adds one
                ;; level to the level count, so `hyrolo-outline-level'
                ;; decrements it by one.  -- rsw, 2023-11-17
-               outline-regexp "[*\^L]+[ \t\n\r]"
+               outline-regexp "\\([*\^L]+\\)\\([ \t\n\r]\\)"
                outline-level #'hyrolo-outline-level
                ;; Can't cycle because {TAB} moves to next match
                outline-minor-mode-cycle nil
@@ -2138,7 +2159,9 @@ beginning of the highest ancestor level.  Return final 
point."
      (outline-back-to-heading)
      (when include-sub-entries
        (unless (<= (hyrolo-outline-level) 1)
-        (outline-up-heading 80))))
+        (outline-up-heading 80)))
+     (when (hyrolo-hdr-move-after-p)
+       (hyrolo-next-visible-heading 1)))
    include-sub-entries))
 
 (defun hyrolo-to-entry-end (&optional include-sub-entries)
@@ -2152,7 +2175,8 @@ before the final newline of the entry.
 Return current point."
   (interactive "P")
   (hyrolo-move-forward (lambda () (hyrolo-move-to-entry-end 
include-sub-entries)))
-  (when (called-interactively-p 'any)
+  (when (and (called-interactively-p 'any)
+            (not (eolp)))
     (goto-char (1- (point))))
   (point))
 
@@ -2163,6 +2187,25 @@ Return current point."
     (goto-char (1+ (point))))
   include-sub-entries)
 
+(defun hyrolo-to-next-loc ()
+  "Move to next file/buffer location header in HyRolo display matches buffer."
+  (interactive)
+  (if (re-search-forward (concat "^" hbut:source-prefix) nil t
+                        (if (looking-at hbut:source-prefix) 2 1))
+      (goto-char (match-beginning 0))
+    (when (called-interactively-p 'interactive)
+      (message "No next file/buffer location") (beep))))
+
+(defun hyrolo-to-previous-loc ()
+  "Move to previous file/buffer location header in HyRolo display matches 
buffer."
+  (interactive)
+  (let ((opoint (point)))
+    (beginning-of-line)
+    (unless (re-search-backward (concat "^" hbut:source-prefix) nil t)
+      (goto-char opoint)
+      (when (called-interactively-p 'interactive)
+       (message "No previous file/buffer location") (beep)))))
+
 ;;; ************************************************************************
 ;;; Private functions
 ;;; ************************************************************************
@@ -2184,18 +2227,19 @@ Entry is inserted before point.  The region is between 
START to END."
 The list of unusable files is displayed in a HyRolo error window.
 This will install `markdown-mode' if any Markdown files are specified and the
 package is not installed."
-  ;;  1. Ignore files without suffixes
+  ;;  1. Ignore files without suffixes in step 2
   (let ((file-suffixes
         (delq nil (mapcar (lambda (filename) (file-name-extension filename))
                           (hyrolo-get-file-list))))
        file-and-major-mode-list
        files-no-mode-list
+       files-invalid-suffix-list
        package-archives)
 
     ;;  2. If any `hyrolo-file-list' file has a markdown file suffix,
     (when (delq nil (mapcar (lambda (suffix)
-                             (string-match 
"\\(?:md\\|markdown\\|mkd\\|mdown\\|mkdn\\|mdwn\\)\\'"
-                                           suffix))
+                             (string-match-p (concat "\\(?:" 
hyrolo-markdown-suffix-regexp "\\)$")
+                                             suffix))
                            file-suffixes))
 
       ;;  3. ensure the markdown-mode package is installed from melpa.
@@ -2207,28 +2251,48 @@ package is not installed."
          (add-to-list 'package-archives '("melpa" . 
"https://melpa.org/packages/";) t))
        (package-install 'markdown-mode)))
 
-    ;;  5. Check that each suffix has an entry in auto-mode-alist,
+    ;;  5. Check that each file has an entry in auto-mode-alist,
     (setq file-and-major-mode-list
          (mapcar (lambda (filename) (cons filename
                                           (hypb:major-mode-from-file-name 
filename)))
                  (hyrolo-get-file-list))
+
+         files-invalid-suffix-list
+         (delq nil (mapcar (lambda (item) (when (not (string-match-p 
hyrolo-file-suffix-regexp (car item)))
+                                            (car item)))
+                           file-and-major-mode-list))
+
          files-no-mode-list
-         (delq nil (mapcar (lambda (item) (when (null (cdr item)) (car item)))
-                           file-and-major-mode-list)))
+         (cl-set-difference
+          (delq nil (mapcar (lambda (item) (when (null (cdr item)) (car item)))
+                            file-and-major-mode-list))
+          files-invalid-suffix-list))
+
     ;;  6. if not, display a buffer with the invalid file types and return t
-    (when files-no-mode-list
+    (when (or files-invalid-suffix-list files-no-mode-list)
       (with-help-window "*HyRolo Errors*"
-       (princ "hyrolo-file-list specifies invalid HyRolo files:\n")
-       (mapc (lambda (spec) (princ (format "\t%S" spec)) (terpri))
+       (princ "`hyrolo-file-list' gets its files from these patterns:\n")
+       (mapc (lambda (spec) (princ (format "\t%S\n" spec)))
              hyrolo-file-list)
        (terpri)
-       (princ "When expanded, includes these files that HyRolo cannot 
process\n")
-       (princ "because their file suffixes are not in `auto-mode-alist':\n")
-       (mapc (lambda (file) (princ (format "\t%S" file)) (terpri))
-             files-no-mode-list)
-       (terpri)
-       (princ "Please either remove the above files from `hyrolo-file-list'\n")
-       (princ "or add appropriate entries for them to `auto-mode-alist'.\n"))
+       (princ "When expanded, it includes the following files that HyRolo 
cannot process:\n\n")
+
+       (when files-invalid-suffix-list
+         (princ (format "Files with invalid or no suffixes:\n  (valid 
suffixes: %S)\n"
+                        hyrolo-file-suffix-regexp))
+         (mapc (lambda (file) (princ (format "\t%S\n" file)))
+               files-invalid-suffix-list)
+         (terpri)
+         (princ "Please remove the above files from `hyrolo-file-list'.\n")
+         (terpri))
+
+       (when files-no-mode-list
+         (princ "Files with invalid modes (file suffixes not in 
`auto-mode-alist'):\n")
+         (mapc (lambda (file) (princ (format "\t%S\n" file)))
+               files-no-mode-list)
+         (terpri)
+         (princ "Please add appropriate entries for the above files to 
`auto-mode-alist'.\n")
+         (terpri)))
       t)))
 
 (defun hyrolo-buffer-exists-p (hyrolo-buf)
@@ -2246,9 +2310,7 @@ HYROLO-BUF may be a file-name, `buffer-name', or buffer."
 (defun hyrolo-display-to-entry-end ()
   "Go to end of current entry, ignoring sub-entries."
   (let (case-fold-search)
-    (if (re-search-forward (concat hyrolo-hdr-regexp "\\|"
-                                  hyrolo-entry-regexp)
-                          nil t)
+    (if (re-search-forward hyrolo-entry-regexp nil t)
        (progn (beginning-of-line) (point))
       (goto-char (point-max)))))
 
@@ -2381,7 +2443,12 @@ Any non-nil value returned is a cons of (<entry-name> . 
<entry-source>)."
   ;; set its parent mode property to org-mode so can `derived-mode-p'
   ;; checks will pass.
   (put 'hyrolo-org-mode 'derived-mode-parent 'org-mode)
-  (setq-local outline-regexp org-outline-regexp
+  (setq-local hyrolo-entry-regexp (concat hyrolo-hdr-prefix-regexp 
"^\\(\\*+\\)\\([    ]+\\)")
+             hyrolo-entry-group-number 1
+             ;; `hyrolo-add' handles removing # prefix from
+             ;; trailing-space grouping below
+             hyrolo-entry-trailing-space-group-number 2
+             outline-regexp (concat hyrolo-hdr-prefix-regexp "^\\(\\*+\\)\\( 
\\)")
              outline-level #'hyrolo-org-outline-level)
   (use-local-map org-mode-map)
   ;; Modify a few syntax entries
@@ -2556,7 +2623,8 @@ This is actually either the level specified in 
`outline-heading-alist'
 or else the number of characters matched by `outline-regexp' minus
 trailing periods and whitespace.
 
-Point must be at the beginning of a heading line."
+Point must be at the beginning of a heading line and a regexp match to
+`outline-regexp' must have been done prior to calling this."
   (or (cdr (assoc (match-string-no-properties 0) outline-heading-alist))
       (1- (- (match-end 0) (match-beginning 0)))))
 
@@ -2722,8 +2790,6 @@ Call whenever `hyrolo-display-buffer' is changed."
                hyrolo--cache-major-mode-indexes (list 0)
                hyrolo--cache-major-mode-index 1)))
 
-;; TODO: !! Lookup hyrolo-entry-regexp like outline-regexp.
-
 (defun hyrolo--cache-major-mode (matched-buf)
   "Cache buffer `major-mode' for MATCHED-BUF with point in HyRolo display 
buffer.
 MATCHED-BUF must be a live buffer, not a buffer name.
@@ -2755,17 +2821,10 @@ Ensure MATCHED-BUF's `major-mode' is stored in the hash 
table."
   "Set the `major-mode' for POS in the current HyRolo display buffer.
 Add `hyrolo-hdr-regexp' to `hyrolo-entry-regexp' and `outline-regexp'."
   (funcall (hyrolo-cache-get-major-mode-from-pos pos))
-  (let ((source-prefix (if (boundp 'hbut:source-prefix) hbut:source-prefix 
"@loc> ")))
-    (unless (or (string-prefix-p hyrolo-hdr-regexp hyrolo-entry-regexp)
-               (string-prefix-p source-prefix hyrolo-entry-regexp))
-      (setq-local hyrolo-entry-regexp (concat hyrolo-hdr-regexp "\\|"
-                                             "^" source-prefix "\\|"
-                                             hyrolo-entry-regexp)))
-    (unless (or (string-prefix-p hyrolo-hdr-regexp outline-regexp)
-               (string-prefix-p source-prefix outline-regexp))
-      (setq-local outline-regexp (concat hyrolo-hdr-regexp "\\|"
-                                        "^" source-prefix "\\|"
-                                        outline-regexp))))
+  (unless (string-prefix-p hyrolo-hdr-regexp hyrolo-entry-regexp)
+    (setq-local hyrolo-entry-regexp (concat hyrolo-hdr-prefix-regexp 
hyrolo-entry-regexp)))
+  (unless (string-prefix-p hyrolo-hdr-regexp outline-regexp)
+    (setq-local outline-regexp (concat hyrolo-hdr-prefix-regexp 
outline-regexp)))
   (when (eq outline-level #'markdown-outline-level)
     (setq-local outline-level #'hyrolo-markdown-outline-level)))
 
@@ -2785,6 +2844,8 @@ Add `hyrolo-hdr-regexp' to `hyrolo-entry-regexp' and 
`outline-regexp'."
   (define-key hyrolo-mode-map "."        'hyrolo-to-entry-end)
   (define-key hyrolo-mode-map "<"        'beginning-of-buffer)
   (define-key hyrolo-mode-map ">"        'end-of-buffer)
+  (define-key hyrolo-mode-map "["        'hyrolo-to-previous-loc)
+  (define-key hyrolo-mode-map "]"        'hyrolo-to-next-loc)
   (define-key hyrolo-mode-map "?"        'describe-mode)
   (define-key hyrolo-mode-map "\177"     'scroll-down)
   (define-key hyrolo-mode-map " "        'scroll-up)
@@ -2820,7 +2881,6 @@ Add `hyrolo-hdr-regexp' to `hyrolo-entry-regexp' and 
`outline-regexp'."
         (substitute-key-definition otl-cmd hyrolo-cmd hyrolo-mode-map)))
      outline-mode-prefix-map)))
 
-
 (provide 'hyrolo)
 
 ;;; hyrolo.el ends here
diff --git a/kotl/kotl-mode.el b/kotl/kotl-mode.el
index 625533207d..96cab5192b 100644
--- a/kotl/kotl-mode.el
+++ b/kotl/kotl-mode.el
@@ -3,7 +3,7 @@
 ;; Author:       Bob Weiner
 ;;
 ;; Orig-Date:    6/30/93
-;; Last-Mod:     23-Dec-23 at 01:28:38 by Bob Weiner
+;; Last-Mod:     25-Dec-23 at 00:22:31 by Bob Weiner
 ;;
 ;; SPDX-License-Identifier: GPL-3.0-or-later
 ;;
@@ -149,10 +149,7 @@ It provides the following keys:
   (unless (and (boundp 'kotl-previous-mode) kotl-previous-mode
               (eq kotl-previous-mode #'kotl-mode)
               (not (string-prefix-p hyrolo-display-buffer (buffer-name))))
-    (setq hyrolo-entry-regexp
-         (concat hyrolo-hdr-regexp
-         "\\|^" (if (boundp 'hbut:source-prefix) hbut:source-prefix "@loc> ")
-         "\\|^" kview:outline-regexp)
+    (setq hyrolo-entry-regexp (concat hyrolo-hdr-prefix-regexp "^" 
kview:outline-regexp)
          hyrolo-entry-group-number 2
          hyrolo-entry-trailing-space-group-number 3
 
@@ -171,7 +168,7 @@ It provides the following keys:
          mode-line-format (copy-sequence mode-line-format)
          mode-line-format (set:remove "%n" mode-line-format)
          outline-level  #'kcell-view:level
-         outline-regexp kview:outline-regexp))
+         outline-regexp hyrolo-entry-regexp))
   ;;
   (when (fboundp 'add-to-invisibility-spec)
     (add-to-invisibility-spec '(outline . t)))
diff --git a/man/hyperbole.html b/man/hyperbole.html
index bc4a13c7ec..60f037e3e0 100644
--- a/man/hyperbole.html
+++ b/man/hyperbole.html
@@ -382,7 +382,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
 Edition 9.0.0
-Printed December 24, 2023.
+Printed December 25, 2023.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -7531,6 +7531,16 @@ move to the beginning of highest ancestor level.
 <dt><kbd>{.}</kbd></dt>
 <dd><p>Move to the end of the entry.  With a prefix argument,
 move to the end of the entire subtree.
+<a name="index-rolo_002c-_005b"></a>
+<a name="index-_005b-1"></a>
+</p></dd>
+<dt><kbd>{[}</kbd></dt>
+<dd><p>Move to previous file/buffer location header beginning with @loc&gt;.
+<a name="index-rolo_002c-_005d"></a>
+<a name="index-_005d-1"></a>
+</p></dd>
+<dt><kbd>{]}</kbd></dt>
+<dd><p>Move to next file/buffer location header beginning with @loc&gt;.
 <a name="index-rolo_002c-_003c"></a>
 <a name="index-_003c"></a>
 </p></dd>
@@ -13769,9 +13779,11 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Key-Index_ky_symbol-14">[</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-_005b"><code>[</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-_005b-1"><code>[</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Key-Index_ky_symbol-15">]</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-_005d"><code>]</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
+<tr><td></td><td valign="top"><a 
href="#index-_005d-1"><code>]</code></a>:</td><td>&nbsp;</td><td 
valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Key-Index_ky_symbol-16">~</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-_007e"><code>~</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
@@ -14052,6 +14064,8 @@ Next: <a href="#Function" accesskey="n" 
rel="next">Function</a>, Previous: <a hr
 <tr><td></td><td valign="top"><a href="#index-rolo_002c-t"><code>rolo, 
t</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Keys">HyRolo 
Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo_002c-TAB"><code>rolo, <span 
class="key">TAB</span></code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyRolo-Keys">HyRolo Keys</a></td></tr>
 <tr><td></td><td valign="top"><a href="#index-rolo_002c-u"><code>rolo, 
u</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Keys">HyRolo 
Keys</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-rolo_002c-_005b"><code>rolo, 
[</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Keys">HyRolo 
Keys</a></td></tr>
+<tr><td></td><td valign="top"><a href="#index-rolo_002c-_005d"><code>rolo, 
]</code></a>:</td><td>&nbsp;</td><td valign="top"><a href="#HyRolo-Keys">HyRolo 
Keys</a></td></tr>
 <tr><td colspan="4"> <hr></td></tr>
 <tr><th><a name="Key-Index_ky_letter-S">S</a></th><td></td><td></td></tr>
 <tr><td></td><td valign="top"><a 
href="#index-s"><code>s</code></a>:</td><td>&nbsp;</td><td valign="top"><a 
href="#HyControl">HyControl</a></td></tr>
diff --git a/man/hyperbole.info b/man/hyperbole.info
index 20b8514b45..c28b93dc06 100644
Binary files a/man/hyperbole.info and b/man/hyperbole.info differ
diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf
index 5966ba07e6..81d83e3c11 100644
Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ
diff --git a/man/hyperbole.texi b/man/hyperbole.texi
index 30475d7fd0..5e2cca6020 100644
--- a/man/hyperbole.texi
+++ b/man/hyperbole.texi
@@ -7,7 +7,7 @@
 @c Author:       Bob Weiner
 @c
 @c Orig-Date:     6-Nov-91 at 11:18:03
-@c Last-Mod:     24-Dec-23 at 00:20:35 by Bob Weiner
+@c Last-Mod:     25-Dec-23 at 02:39:36 by Bob Weiner
 
 @c %**start of header (This is for running Texinfo on a region.)
 @setfilename hyperbole.info
@@ -156,7 +156,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P>
 
 <PRE>
 Edition 9.0.0
-Printed December 24, 2023.
+Printed December 25, 2023.
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -198,7 +198,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 @example
 Edition 9.0.0
-December 24, 2023
+December 25, 2023
 
   Published by the Free Software Foundation, Inc.
   Author:    Bob Weiner
@@ -6324,6 +6324,12 @@ move to the beginning of highest ancestor level.
 @kitem .
 Move to the end of the entry.  With a prefix argument,
 move to the end of the entire subtree.
+@kindex rolo, [
+@kitem [
+Move to previous file/buffer location header beginning with @@loc>.
+@kindex rolo, ]
+@kitem ]
+Move to next file/buffer location header beginning with @@loc>.
 @kindex rolo, <
 @kitem <
 Move to the beginning of the buffer.

Reply via email to