branch: externals/hyperbole commit 6550a0ac7c8ed1e6fd5accc5611944ac62e32732 Author: bw <r...@gnu.org> Commit: bw <r...@gnu.org>
hyrolo-any-file-type-problem-p - Add to handle invalid file suffixes Will also install the markdown-mode package as necessary when a Markdown file is specified in 'hyrolo-file-list'. This fixes failures with Markdown files improperly put into fundamental-mode which means their headings are not recognized properly. hload-path.el (auto-mode-alist): Setup to invoke 'outline-mode' on ".otl" suffixed files. man/hyperbole.texi (HyRolo Concepts): hyrolo.el (hyrolo-file-list): Update doc to specify allowable file suffixes and types. --- ChangeLog | 18 +++++++++++++ hload-path.el | 12 ++++++--- hui-jmenu.el | 6 ++--- hypb.el | 47 ++++++++++++++++++++++++++++++++- hyrolo.el | 75 +++++++++++++++++++++++++++++++++++++++++++++++------ man/hyperbole.html | 56 ++++++++++++++++++++++++++++++++------- man/hyperbole.info | Bin 615904 -> 617671 bytes man/hyperbole.pdf | Bin 1370426 -> 1371766 bytes man/hyperbole.texi | 24 ++++++++++++----- 9 files changed, 206 insertions(+), 32 deletions(-) diff --git a/ChangeLog b/ChangeLog index f865876778..92cb4d0681 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,23 @@ +2023-12-24 Bob Weiner <r...@gnu.org> + +* hyrolo.el (hyrolo-any-file-type-problem-p): Add to handle file suffixes + that HyRolo cannot handle and to install the markdown-mode package as + necessary when a Markdown file is specified in 'hyrolo-file-list'. + (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. + +* hload-path.el (auto-mode-alist): Setup to invoke 'outline-mode' on ".otl" + suffixed files. + +* man/hyperbole.texi (HyRolo Concepts): + hyrolo.el (hyrolo-file-list): Update doc to specify allowable file suffixes + and types. + 2023-12-23 Bob Weiner <r...@gnu.org> +* hypb.el (hypb:major-mode-from-file-name): Add for initial use in "hyrolo.el". + * hactypes.el (link-to-regexp-match): Fix to use arg 'n' in the regexp search. * kotl/kotl-mode.el (kotl-mode): Ensure local vars are set if current buffer diff --git a/hload-path.el b/hload-path.el index 0a9830f6d6..b306fc2950 100644 --- a/hload-path.el +++ b/hload-path.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 29-Jun-16 at 14:39:33 -;; Last-Mod: 19-Nov-23 at 23:18:02 by Bob Weiner +;; Last-Mod: 24-Dec-23 at 00:41:54 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -57,16 +57,20 @@ directory separator character.") (add-to-list 'load-path (directory-file-name hyperb:dir)) ;;; ************************************************************************ -;;; Koutliner mode and file suffix importation settings +;;; Koutliner mode and file suffix settings ;;; ************************************************************************ -;; Perform Koutliner initializations. - (add-to-list 'load-path (expand-file-name "kotl" hyperb:dir)) ;; Invoke kotl-mode for files ending in ".kotl". ;; Also allow ".kot" for DOS and Windows users. (add-to-list 'auto-mode-alist '("\\.kotl?\\'" . kotl-mode)) +;;; ************************************************************************ +;;; Emacs Outline settings for .otl files +;;; ************************************************************************ + +(add-to-list 'auto-mode-alist '("\\.otl\\'" . outline-mode)) + ;;; ************************************************************************ ;;; Hyperbole test importation settings ;;; ************************************************************************ diff --git a/hui-jmenu.el b/hui-jmenu.el index fd72bc4bf1..a07cee36b8 100644 --- a/hui-jmenu.el +++ b/hui-jmenu.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 9-Mar-94 at 23:37:28 -;; Last-Mod: 3-Oct-23 at 23:25:31 by Mats Lidell +;; Last-Mod: 24-Dec-23 at 00:06:07 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -147,9 +147,9 @@ Jump to chosen buffer." "----" ["Name-Configuration" hywconfig-add-by-name t] ["Delete-Name" hywconfig-delete-by-name - (frame-parameter nil 'hywconfig-names)] + (frame-parameter nil 'named-hywconfigs)] ["Restore-Name" hywconfig-restore-by-name - (frame-parameter nil 'hywconfig-names)] + (frame-parameter nil 'named-hywconfigs)] "----" ["Pop-from-Ring" hywconfig-delete-pop (not (hywconfig-ring-empty-p))] ["Save-to-Ring" hywconfig-ring-save t] diff --git a/hypb.el b/hypb.el index 6f1f590593..798337fd21 100644 --- a/hypb.el +++ b/hypb.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 6-Oct-91 at 03:42:38 -;; Last-Mod: 23-Dec-23 at 01:16:28 by Bob Weiner +;; Last-Mod: 23-Dec-23 at 23:57:52 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -720,6 +720,51 @@ then `locate-post-command-hook'." current-prefix-arg)) (locate search-string filter arg)) + +;; Adapted from `set-auto-mode' in "files.el". +;;;###autoload +(defun hypb:major-mode-from-file-name (name) + "Return `major-mode' function for file NAME from file name alone. +If no matching rule in `auto-mode-alist' or NAME is invalid, +return nil." + (when (stringp name) + (let ((remote-id (file-remote-p name)) + (case-insensitive-p (file-name-case-insensitive-p + name)) + mode) + ;; Remove backup-suffixes from file name. + (setq name (file-name-sans-versions name)) + ;; Remove remote file name identification. + (when (and (stringp remote-id) + (string-match (regexp-quote remote-id) name)) + (setq name (substring name (match-end 0)))) + (while name + ;; Find first matching alist entry. + (setq mode + (if case-insensitive-p + ;; Filesystem is case-insensitive. + (let ((case-fold-search t)) + (assoc-default name auto-mode-alist + 'string-match)) + ;; Filesystem is case-sensitive. + (or + ;; First match case-sensitively. + (let ((case-fold-search nil)) + (assoc-default name auto-mode-alist + 'string-match)) + ;; Fallback to case-insensitive match. + (and auto-mode-case-fold + (let ((case-fold-search t)) + (assoc-default name auto-mode-alist + 'string-match)))))) + (if (and mode + (consp mode) + (cadr mode)) + (setq mode (car mode) + name (substring name 0 (match-beginning 0))) + (setq name nil))) + mode))) + ;;;###autoload (defun hypb:map-plist (func plist) "Apply FUNC of two args, key and value, to key-value pairs in PLIST." diff --git a/hyrolo.el b/hyrolo.el index e182535685..8a19b7337a 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: 22-Dec-23 at 22:44:50 by Bob Weiner +;; Last-Mod: 24-Dec-23 at 02:38:06 by Bob Weiner ;; ;; SPDX-License-Identifier: GPL-3.0-or-later ;; @@ -17,7 +17,8 @@ ;; This is Hyperbole's advanced rolo system, HyRolo, for convenient ;; management of hierarchical, record-oriented information. Most ;; often this is used for contact management but it can quickly be -;; adapted to most any record-oriented lookup task, for fast retrieval. +;; adapted to most any record-oriented lookup task, for fast, full-text +;; retrieval. ;; ;; See all the autoloaded functions herein for interactive commands. ;; See the Info manual entry "(hyperbole)HyRolo" for usage information. @@ -134,7 +135,9 @@ executable must be found as well (for Oauth security)." (defcustom hyrolo-file-list nil "List of files containing hyrolo entries. The first file should be a user-specific hyrolo file, typically in the home -directory. +directory and must have a suffix of either .org (Org mode) or .otl (Emacs +Outline mode). Other files in the list may use suffixes of .org, .otl, .md +(Markdown mode) or .kotl (Koutline mode). A hyrolo-file consists of: (1) an optional header beginning with and ending with a line which matches @@ -970,7 +973,9 @@ Raise an error if a match is not found." ;;;###autoload (defun hyrolo-let-file-list (symbol value) (set symbol value) - (setq hyrolo--expanded-file-list (hyrolo-expand-path-list value))) + (setq hyrolo--expanded-file-list (hyrolo-expand-path-list value)) + (when (hyrolo-any-file-type-problem-p) + (error "(HyRolo): Invalid files used in `hyrolo-file-list'; see the *HyRolo Errors* buffer"))) ;;;###autoload (defun hyrolo-set-file-list (symbol value) @@ -978,6 +983,8 @@ Raise an error if a match is not found." (setq hyrolo--expanded-file-list (hyrolo-expand-path-list value)) (unless (symbol-value symbol) (set-default symbol hyrolo--expanded-file-list)) + (when (hyrolo-any-file-type-problem-p) + (error "(HyRolo): Invalid files used in `hyrolo-file-list'; see the *HyRolo Errors* buffer")) ;; Prompt user to rename old personal rolo file to new name, if necessary. (unless (or noninteractive (hyperb:stack-frame '(hyrolo-rename))) (call-interactively 'hyrolo-rename))) @@ -1416,7 +1423,7 @@ otherwise just use the cdr of the item." (defun hyrolo-helm-org-rifle (&optional context-only-flag) "Search with helm and interactively show all matches from `hyrolo-file-list'. Prompt for the search pattern. -Search only readable .org and .otl files. With optional prefix +Search readable .org and .otl files only. With optional prefix arg CONTEXT-ONLY-FLAG, show one extra line only of context around a matching line, rather than entire entries." (interactive "P") @@ -1460,9 +1467,9 @@ entries." ;;;###autoload (defun hyrolo-helm-org-rifle-directories (&optional context-only-flag &rest dirs) "Interactively search over Emacs outline format files in rest of DIRS. -Only readable .org and .otl files are searched. With optional -prefix arg CONTEXT-ONLY-FLAG, show one extra line only of context -around a matching line, rather than entire entries." +Search readable .org and .otl files only. With optional prefix +arg CONTEXT-ONLY-FLAG, show one extra line only of context around +a matching line, rather than entire entries." (interactive "P") (let ((hyrolo-file-list (hypb:filter-directories "\\.\\(org\\|otl\\)$" dirs))) (hyrolo-helm-org-rifle context-only-flag))) @@ -2172,6 +2179,58 @@ Entry is inserted before point. The region is between START to END." (hyrolo-highlight-matches regexp opoint (point)) (set-buffer hyrolo-buf))) +(defun hyrolo-any-file-type-problem-p () + "Return t if any file from `hyrolo-file-list' has an unusable format. +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 + (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 + 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)) + file-suffixes)) + + ;; 3. ensure the markdown-mode package is installed from melpa. + (unless (package-installed-p 'markdown-mode) + ;; 4. if not, ensure melpa is temporarily added to package + ;; source list and then install markdown-mode. + (unless (assoc "melpa" package-archives) + (setq package-archives (cl-copy-list package-archives)) + (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, + (setq file-and-major-mode-list + (mapcar (lambda (filename) (cons filename + (hypb:major-mode-from-file-name filename))) + (hyrolo-get-file-list)) + files-no-mode-list + (delq nil (mapcar (lambda (item) (when (null (cdr item)) (car item))) + file-and-major-mode-list))) + ;; 6. if not, display a buffer with the invalid file types and return t + (when 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)) + 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")) + t))) + (defun hyrolo-buffer-exists-p (hyrolo-buf) "Return buffer given by HYROLO-BUF or nil. HYROLO-BUF may be a file-name, `buffer-name', or buffer." diff --git a/man/hyperbole.html b/man/hyperbole.html index 7ff9fdb17b..bc4a13c7ec 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 3, 2023. +Printed December 24, 2023. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -3176,6 +3176,15 @@ activated anywhere within such a line. breakpoint line. This works with gdb, dbx, and xdb. Such lines are recognized in any buffer. </p> +<a name="index-ibtypes-hib_002dpython_002dtraceback"></a> +<a name="index-pdb"></a> +<a name="index-python-traceback"></a> +<a name="index-python-error"></a> +<a name="index-source-line-1"></a> +</dd> +<dt><code>hib-python-traceback</code></dt> +<dd><p>Test for and jump to line referenced in Python pdb, traceback, or pytype error. +</p> <a name="index-ibtypes-grep_002dmsg"></a> <a name="index-grep"></a> <a name="index-compiler-error-1"></a> @@ -3185,6 +3194,13 @@ recognized in any buffer. <dd><p>Jump to the line associated with a grep or compilation error message. Messages are recognized in any buffer. </p> +<a name="index-hyrolo_002dstuck_002dmsg"></a> +<a name="index-hyrolo-error"></a> +</dd> +<dt><code>hyrolo-stuck-msg</code></dt> +<dd><p>Jump to the position where a HyRolo search has become stuck from the error. +Such errors are recognized in any buffer. +</p> <a name="index-ibtypes-ripgrep_002dmsg"></a> <a name="index-grep-1"></a> <a name="index-ripgrep"></a> @@ -7137,12 +7153,22 @@ Next: <a href="#HyRolo-Menu" accesskey="n" rel="next">HyRolo Menu</a>, Previous: <a name="index-rolo-file"></a> <a name="index-rolo-entry"></a> -<p>HyRolo manages and searches rolo files. A <em>rolo file</em> consists of +<a name="index-hyrolo_002dfile_002dlist"></a> +<p>HyRolo manages and searches a list of rolo files stored in the +<code>hyrolo-file-list</code> custom option. A <em>rolo file</em> consists of an optional header that starts and ends with a line of equal signs (at least three equal signs starting at the beginning of a line), followed -by zero or more rolo records which we call entries. You must manually -add a header to any rolo file if you want it to have one. Rolo files -may be Emacs outline files, Org files, Markdown files or Koutline files. +by zero or more rolo records which we call entries. +</p> +<a name="index-Org-mode"></a> +<a name="index-Markdown-mode"></a> +<a name="index-Emacs-Outline-mode"></a> +<a name="index-Koutline-mode"></a> +<p>The first file in the list should be a user-specific hyrolo file, +typically in the home directory and must have a suffix of either .org +(Org mode) or .otl (Emacs Outline mode). Other files in the list may +use suffixes of .org, .otl, .md (Markdown mode) or .kotl (Koutline +mode). </p> <p>Rolo <em>entries</em> begin with optional space, followed by a delimiter of one or more special characters followed by another space. Delimiters @@ -7562,7 +7588,7 @@ Previous: <a href="#HyRolo-Keys" accesskey="p" rel="prev">HyRolo Keys</a>, Up: < <a name="HyRolo-Settings-1"></a> <h3 class="section">8.5 HyRolo Settings</h3> -<a name="index-hyrolo_002dfile_002dlist"></a> +<a name="index-hyrolo_002dfile_002dlist-1"></a> <a name="index-rolo_002c-personal"></a> <p>The files used in any rolo search are given by the <code>hyrolo-file-list</code> variable, whose default value is typically @@ -11619,7 +11645,7 @@ Next: <a href="#Smart-Key-_002d-Ivy" accesskey="n" rel="next">Smart Key - Ivy</a <h4 class="subsection">E.2.2 Smart Key - Org Mode</h4> <a name="index-hsys_002dorg_002denable_002dsmart_002dkeys-1"></a> -<a name="index-Org-mode"></a> +<a name="index-Org-mode-1"></a> <div class="format"> <pre class="format">When in an Org mode context and <code>hsys-org-enable-smart-keys</code> is non-nil: ACTION KEY @@ -14532,7 +14558,8 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-hyrolo_002demail_002dformat">hyrolo-email-format</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_002dentry_002dregexp">hyrolo-entry-regexp</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_002dfgrep"><code>hyrolo-fgrep</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_002dfile_002dlist">hyrolo-file-list</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_002dfile_002dlist">hyrolo-file-list</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-hyrolo_002dfile_002dlist-1">hyrolo-file-list</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_002dfind_002dfile"><code>hyrolo-find-file</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_002dgoogle_002dcontacts_002dfgrep"><code>hyrolo-google-contacts-fgrep</code></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_002dgoogle_002dcontacts_002dflag">hyrolo-google-contacts-flag</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Settings">HyRolo Settings</a></td></tr> @@ -14548,6 +14575,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_002dstuck_002dmsg"><code>hyrolo-stuck-msg</code></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-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> @@ -14582,6 +14610,7 @@ Next: <a href="#Concept-Index" accesskey="n" rel="next">Concept Index</a>, Previ <tr><td></td><td valign="top"><a href="#index-ibtypes-glink"><code>ibtypes glink</code></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-ibtypes-gnus_002dpush_002dbutton"><code>ibtypes gnus-push-button</code></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-ibtypes-grep_002dmsg"><code>ibtypes grep-msg</code></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-ibtypes-hib_002dpython_002dtraceback"><code>ibtypes hib-python-traceback</code></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-ibtypes-hyp_002daddress"><code>ibtypes hyp-address</code></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-ibtypes-hyp_002dsource"><code>ibtypes hyp-source</code></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-ibtypes-hyperbole_002drun_002dtest"><code>ibtypes hyperbole-run-test</code></a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> @@ -15249,6 +15278,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-Emacs-Lisp-variables">Emacs Lisp variables</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-Emacs-Lisp-variables-1">Emacs Lisp variables</a>:</td><td> </td><td valign="top"><a href="#Link-Variable-Substitution">Link Variable Substitution</a></td></tr> <tr><td></td><td valign="top"><a href="#index-emacs-outline">emacs outline</a>:</td><td> </td><td valign="top"><a href="#Inserting-and-Importing">Inserting and Importing</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-Emacs-Outline-mode">Emacs Outline 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-Emacs-package-manager">Emacs package manager</a>:</td><td> </td><td valign="top"><a href="#Elpa-Stable-Package-Installation">Elpa Stable Package Installation</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Emacs-Regression-Test-_0028ERT_0029-symbol">Emacs Regression Test (ERT) symbol</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-Emacs-Regression-Test-framework">Emacs Regression Test framework</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> @@ -15428,6 +15458,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-hypertext-2">hypertext</a>:</td><td> </td><td valign="top"><a href="#Glossary">Glossary</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyRolo">HyRolo</a>:</td><td> </td><td valign="top"><a href="#HyRolo">HyRolo</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyRolo-commands">HyRolo commands</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-error">hyrolo error</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-hyrolo-matches">hyrolo matches</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-HyRolo-Match-Buffers">Smart Key - HyRolo Match Buffers</a></td></tr> <tr><td></td><td valign="top"><a href="#index-HyRolo-menu">HyRolo menu</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-menu">hyrolo menu</a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> @@ -15562,6 +15593,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-Koutline-import">Koutline import</a>:</td><td> </td><td valign="top"><a href="#Inserting-and-Importing">Inserting and Importing</a></td></tr> <tr><td></td><td valign="top"><a href="#index-koutline-link">koutline link</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-koutline-mode">koutline mode</a>:</td><td> </td><td valign="top"><a href="#Inserting-and-Importing">Inserting and Importing</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-Koutline-mode">Koutline 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-Koutliner-commands">Koutliner commands</a>:</td><td> </td><td valign="top"><a href="#Menu-Commands">Menu Commands</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Koutliner-import_002fexport-commands">Koutliner import/export commands</a>:</td><td> </td><td valign="top"><a href="#Menu-Commands">Menu Commands</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Koutliner-menu">Koutliner menu</a>:</td><td> </td><td valign="top"><a href="#Menu-Commands">Menu Commands</a></td></tr> @@ -15630,6 +15662,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-man-pages">man pages</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-margin">margin</a>:</td><td> </td><td valign="top"><a href="#Filling">Filling</a></td></tr> <tr><td></td><td valign="top"><a href="#index-markdown-link">markdown link</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-Markdown-mode">Markdown 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-markup-pair">markup pair</a>:</td><td> </td><td valign="top"><a href="#Thing-Selection">Thing Selection</a></td></tr> <tr><td></td><td valign="top"><a href="#index-markup-pair-1">markup pair</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Delimited-Things">Smart Key - Delimited Things</a></td></tr> <tr><td></td><td valign="top"><a href="#index-match-lines">match lines</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> @@ -15804,7 +15837,8 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-option-settings">option settings</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> <tr><td></td><td valign="top"><a href="#index-Org-ID">Org ID</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-link_002c-outside-Org">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-mode">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-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-tables">Org tables</a>:</td><td> </td><td valign="top"><a href="#Promoting-and-Demoting">Promoting and Demoting</a></td></tr> <tr><td></td><td valign="top"><a href="#index-org_002dmode">org-mode</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_002dmode">Org-mode</a>:</td><td> </td><td valign="top"><a href="#Questions-and-Answers">Questions and Answers</a></td></tr> @@ -15859,6 +15893,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-pathname">pathname</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-pathname-variables">pathname variables</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-pathname_002c-line-and-column">pathname, line and column</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-pdb">pdb</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-permanent-identifier">permanent identifier</a>:</td><td> </td><td valign="top"><a href="#Koutliner">Koutliner</a></td></tr> <tr><td></td><td valign="top"><a href="#index-permanent-identifier-1">permanent identifier</a>:</td><td> </td><td valign="top"><a href="#Idstamps">Idstamps</a></td></tr> <tr><td></td><td valign="top"><a href="#index-pipe-character">pipe character</a>:</td><td> </td><td valign="top"><a href="#View-Specs">View Specs</a></td></tr> @@ -15876,6 +15911,8 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-proportional-scrolling">proportional scrolling</a>:</td><td> </td><td valign="top"><a href="#Glossary">Glossary</a></td></tr> <tr><td></td><td valign="top"><a href="#index-proportional-scrolling-1">proportional scrolling</a>:</td><td> </td><td valign="top"><a href="#Smart-Key-_002d-Smart-Scrolling">Smart Key - Smart Scrolling</a></td></tr> <tr><td></td><td valign="top"><a href="#index-pulldown-menu">pulldown menu</a>:</td><td> </td><td valign="top"><a href="#Menus">Menus</a></td></tr> +<tr><td></td><td valign="top"><a href="#index-python-error">python error</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-python-traceback">python traceback</a>:</td><td> </td><td valign="top"><a href="#Implicit-Button-Types">Implicit Button Types</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th><a name="Concept-Index_cp_letter-Q">Q</a></th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-quit-HyControl">quit HyControl</a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> @@ -16004,6 +16041,7 @@ Previous: <a href="#Function" accesskey="p" rel="prev">Function</a>, Up: <a href <tr><td></td><td valign="top"><a href="#index-social-media">social media</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-social-reference">social reference</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-source-line">source line</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-source-line-1">source line</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-source-point">source point</a>:</td><td> </td><td valign="top"><a href="#By-Link">By Link</a></td></tr> <tr><td></td><td valign="top"><a href="#index-splitting-a-cell">splitting a cell</a>:</td><td> </td><td valign="top"><a href="#Splitting-and-Appending">Splitting and Appending</a></td></tr> <tr><td></td><td valign="top"><a href="#index-stable-release-installation">stable release installation</a>:</td><td> </td><td valign="top"><a href="#Elpa-Stable-Package-Installation">Elpa Stable Package Installation</a></td></tr> diff --git a/man/hyperbole.info b/man/hyperbole.info index 8d1890f832..20b8514b45 100644 Binary files a/man/hyperbole.info and b/man/hyperbole.info differ diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf index 6f491493fe..5966ba07e6 100644 Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ diff --git a/man/hyperbole.texi b/man/hyperbole.texi index 562cf9861c..30475d7fd0 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: 21-Dec-23 at 13:10:20 by Bob Weiner +@c Last-Mod: 24-Dec-23 at 00:20:35 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 21, 2023. +Printed December 24, 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 21, 2023 +December 24, 2023 Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -5956,12 +5956,22 @@ tool. @cindex rolo file @cindex rolo entry -HyRolo manages and searches rolo files. A @dfn{rolo file} consists of +@vindex hyrolo-file-list +HyRolo manages and searches a list of rolo files stored in the +@code{hyrolo-file-list} custom option. A @dfn{rolo file} consists of an optional header that starts and ends with a line of equal signs (at least three equal signs starting at the beginning of a line), followed -by zero or more rolo records which we call entries. You must manually -add a header to any rolo file if you want it to have one. Rolo files -may be Emacs outline files, Org files, Markdown files or Koutline files. +by zero or more rolo records which we call entries. + +@cindex Org mode +@cindex Markdown mode +@cindex Emacs Outline mode +@cindex Koutline mode +The first file in the list should be a user-specific hyrolo file, +typically in the home directory and must have a suffix of either .org +(Org mode) or .otl (Emacs Outline mode). Other files in the list may +use suffixes of .org, .otl, .md (Markdown mode) or .kotl (Koutline +mode). Rolo @dfn{entries} begin with optional space, followed by a delimiter of one or more special characters followed by another space. Delimiters