branch: externals/hyperbole commit 2c5606513fe0d7bad18d3ef64b795e1ffdacbe46 Author: Bob Weiner <r...@gnu.org> Commit: Bob Weiner <r...@gnu.org>
Redo HyRolo movement commands; change {,} and {.} to move by entry --- ChangeLog | 37 ++++++++++++ HY-TALK/HYPB | 22 ++++++- hbut.el | 101 +++++++++++++++---------------- hui-mouse.el | 30 ++++------ hyrolo-logic.el | 16 +---- hyrolo.el | 163 ++++++++++++++++++++++++++++++++++++++------------- man/hyperbole.html | 78 +++++++++++++++--------- man/hyperbole.info | Bin 590690 -> 591066 bytes man/hyperbole.pdf | Bin 1341841 -> 1342312 bytes man/hyperbole.texi | 18 ++++-- man/version.texi | 4 +- test/hyrolo-tests.el | 19 +++--- 12 files changed, 321 insertions(+), 167 deletions(-) diff --git a/ChangeLog b/ChangeLog index 39f93c9427..936116dcb0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,40 @@ +2022-10-25 Bob Weiner <r...@gnu.org> + +* hyrolo.el (hyrolo-backward-same-level): Add and bind to {b}. + (hyrolo-forward-same-level): Add and find to {f}. + (hyrolo-next-visible-heading): Add and bind to {n}. + (hyrolo-previous-visible-heading): Add and bind to {p}. + (hyrolo-up-heading): Add and bind to {u}. + +2022-10-24 Bob Weiner <r...@gnu.org> + +* hui-mouse.el (smart-outline-assist, smart-outline, + (smart-outline-to-entry-end): Remove 2nd arg 'curr-entry-level' + and simplify logic. + +* hyrolo.el, hyrolo-logic.el: Remove 'next-entry-exists' and + 'previous-entry-exists'. + +* test/hyrolo-tests.el (hyrolo-demo-move-to-beginning-and-end-of-file): + Rewrite to match new {,} and {.} bindings. + +* hyrolo.el (hyrolo-to-entry-end): Remove 2nd optional arg + curr-entry-level-len. + +2022-10-23 Bob Weiner <r...@gnu.org> + +* man/hyperbole.texi (HyRolo Keys): + hyrolo.el (hyrolo-to-entry-end): Make interactive and bind to {.}. + (hyrolo-to-entry-beginning): Add and bind to {,}. + Previously, these keys were bound to begin and end of buffer but + were mistakenly reversed. Also, simplify these two commands. + (previous-entry-exists): Add this free variable and use + in 'hyrolo-to-entry-beginning'. + +* hbut.el (hbut:get-key-src): Add save-excursion so point does not move. + hyrolo.el (hyrolo-edit-entry): Fix so if point is not on an entry + (src is a buffer, not a string), then raise an error. + 2022-10-20 Mats Lidell <ma...@gnu.org> * hload-path.el (hyperb:dir): Use defvar. Thanks to Stefan Monnier. diff --git a/HY-TALK/HYPB b/HY-TALK/HYPB index 0fb6510a98..c84a45a1fd 100644 --- a/HY-TALK/HYPB +++ b/HY-TALK/HYPB @@ -19,9 +19,23 @@ or interactively after loading Hyperbole: * Keystroke Display +** interaction-log Package - font-lock highlighted log of keys and commands + Used for EmacsConf 2022 + + Install: <unless (package-installed-p 'interaction-log) (package-install 'interaction-log)> + Activate: <interaction-log-mode 1> + Deactivate: <interaction-log-mode 0> + + Configure: + <progn (setq ilog-display-state 'commands) + (global-set-key + (kbd "C-h C-l") + (lambda () (interactive) (display-buffer ilog-buffer-name)))> + ** Keypression - overlaying parts of buffer (shows trail of keys) + Used for EmacsNYC talk - Install: <unless (featurep 'keypression) (package-install 'keypression)> + Install: <unless (package-installed-p 'keypression) (package-install 'keypression)> Activate: <keypression-mode 1> Deactivate: <keypression-mode 0> @@ -34,6 +48,10 @@ or interactively after loading Hyperbole: keypression-combine-same-keystrokes t keypression-font-face-attribute '(:width normal :height 200 :weight bold)> +* Frame layout + + <burly-open-bookmark "hyperorg"> + * Pathname Prefixes @@ -67,4 +85,4 @@ Emacs Yank Bug: bug#5320 <hpath:find "${hyperb:dir}"> -<[PDF Viewer]> == "${hyperb:dir}/man/hyperbole.pdf" \ No newline at end of file +<[PDF Viewer]> == "${hyperb:dir}/man/hyperbole.pdf" diff --git a/hbut.el b/hbut.el index aa69906760..a4854dbac9 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: 15-Oct-22 at 18:44:48 by Bob Weiner +;; Last-Mod: 23-Oct-22 at 12:12:32 by Bob Weiner ;; ;; Copyright (C) 1991-2022 Free Software Foundation, Inc. ;; See the "HY-COPY" file for license information. @@ -1101,55 +1101,56 @@ With optional DIR-FLAG, return the default directory of the key source. Return value may be a directory, filename or a buffer unless DIR-FLAG is given." - (let ((key-src (cond ((hmail:mode-is-p) (current-buffer)) - ;; If buffer represents the output of a document - ;; formatter, e.g. an Info document produced from a - ;; Texinfo source, then return the Texinfo source - ;; file, for example. - ((hbut:key-src-fmt)) - ;; Handle directory movement within `make' output. - ((save-excursion - (and (re-search-backward - "^[a-z]*make[^a-z]+\\(Entering\\|Leaving\\) directory `\\([^']+\\)'" nil t) - (string-equal "Entering" (match-string 1)))) - (let ((limit (match-end 2)) - ;; Latest working directory that `make' reported - (wd (match-string 2)) - cd) - ;; But another cd or pushd command may have been issued. - ;; Return the closest directory from the make output. - (if (re-search-backward - "\\<\\(cd\\|pushd\\)\\s +[\"\']?\\([^;\"\'\n\r\^L\\]+\\)" - limit t) - (progn (setq cd (match-string 2)) - ;; Eliminate any trailing whitespace. - (setq cd (substring - cd 0 (string-match "\\s +\\'" cd))) - (expand-file-name cd wd)) - wd))) - (buffer-file-name - (if full-flag - buffer-file-name - (file-name-nondirectory buffer-file-name))) - ;; Handle any preceding @loc hyp-source implicit button location references. - ;; This is used in report buffers of explicit buttons, i.e. hui:hbut-report - ;; and the *HyRolo* abd *HyNote* output buffers. - ((save-excursion - (save-restriction - (widen) - (end-of-visible-line) - (when (and (search-backward hbut:source-prefix nil t) - (or (memq (preceding-char) '(?\n ?\r)) - (= (point) (point-min)))) - (hbut:source full-flag))))) - (t (current-buffer))))) - (if dir-flag - (if (stringp key-src) - (if (directory-name-p key-src) - key-src - (file-name-directory key-src)) - (buffer-local-value 'default-directory key-src)) - key-src))) + (save-excursion + (let ((key-src (cond ((hmail:mode-is-p) (current-buffer)) + ;; If buffer represents the output of a document + ;; formatter, e.g. an Info document produced from a + ;; Texinfo source, then return the Texinfo source + ;; file, for example. + ((hbut:key-src-fmt)) + ;; Handle directory movement within `make' output. + ((save-excursion + (and (re-search-backward + "^[a-z]*make[^a-z]+\\(Entering\\|Leaving\\) directory `\\([^']+\\)'" nil t) + (string-equal "Entering" (match-string 1)))) + (let ((limit (match-end 2)) + ;; Latest working directory that `make' reported + (wd (match-string 2)) + cd) + ;; But another cd or pushd command may have been issued. + ;; Return the closest directory from the make output. + (if (re-search-backward + "\\<\\(cd\\|pushd\\)\\s +[\"\']?\\([^;\"\'\n\r\^L\\]+\\)" + limit t) + (progn (setq cd (match-string 2)) + ;; Eliminate any trailing whitespace. + (setq cd (substring + cd 0 (string-match "\\s +\\'" cd))) + (expand-file-name cd wd)) + wd))) + (buffer-file-name + (if full-flag + buffer-file-name + (file-name-nondirectory buffer-file-name))) + ;; Handle any preceding @loc hyp-source implicit button location references. + ;; This is used in report buffers of explicit buttons, i.e. hui:hbut-report + ;; and the *HyRolo* abd *HyNote* output buffers. + ((save-excursion + (save-restriction + (widen) + (end-of-visible-line) + (when (and (search-backward hbut:source-prefix nil t) + (or (memq (preceding-char) '(?\n ?\r)) + (= (point) (point-min)))) + (hbut:source full-flag))))) + (t (current-buffer))))) + (if dir-flag + (if (stringp key-src) + (if (directory-name-p key-src) + key-src + (file-name-directory key-src)) + (buffer-local-value 'default-directory key-src)) + key-src)))) (defun hbut:is-p (object) "Return non-nil if OBJECT is a symbol representing a Hyperbole button." diff --git a/hui-mouse.el b/hui-mouse.el index 594ea23396..da2b377965 100644 --- a/hui-mouse.el +++ b/hui-mouse.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 04-Feb-89 -;; Last-Mod: 16-Oct-22 at 19:29:34 by Mats Lidell +;; Last-Mod: 24-Oct-22 at 23:09:18 by Bob Weiner ;; ;; Copyright (C) 1991-2022 Free Software Foundation, Inc. ;; See the "HY-COPY" file for license information. @@ -1828,7 +1828,7 @@ If key is pressed: (or (outline-get-next-sibling) ;; Skip past start of current entry (progn (re-search-forward outline-regexp nil t) - (smart-outline-to-entry-end t (funcall outline-level)))))) + (smart-outline-to-entry-end t))))) ((or (eolp) (zerop (smart-outline-level))) (funcall action-key-eol-function)) @@ -1864,8 +1864,7 @@ If assist-key is pressed: (kill-region (point) ;; Skip past start of current entry (progn (re-search-forward outline-regexp nil t) - (smart-outline-to-entry-end - nil (funcall outline-level))))) + (smart-outline-to-entry-end)))) ((or (eolp) (zerop (smart-outline-level))) (funcall assist-key-eol-function)) ;; On an outline heading line but not at the start/end of line. @@ -1873,20 +1872,15 @@ If assist-key is pressed: (outline-show-entry)) (t (outline-hide-entry)))) -(defun smart-outline-to-entry-end (&optional include-sub-entries curr-entry-level) - "Go to end of whole entry if optional INCLUDE-SUB-ENTRIES is non-nil. -CURR-ENTRY-LEVEL is an integer representing the length of the current level -string which matched to `outline-regexp'. If INCLUDE-SUB-ENTRIES is nil, -CURR-ENTRY-LEVEL is not needed." - (let (next-entry-exists) - (while (and (setq next-entry-exists (re-search-forward outline-regexp nil t)) - include-sub-entries - (save-excursion - (beginning-of-line) - (> (funcall outline-level) curr-entry-level)))) - (if next-entry-exists - (progn (beginning-of-line) (point)) - (goto-char (point-max))))) +(defun smart-outline-to-entry-end (&optional include-sub-entries) + "Move point past the end of the current entry. +With optional INCLUDE-SUB-ENTRIES non-nil, move to the end of the +entire subtree. Return final point." + (if include-sub-entries + (progn (outline-end-of-subtree) + (goto-char (1+ (point)))) + (outline-next-heading)) + (point)) (defun smart-outline-subtree-hidden-p () "Return t if at least initial subtree of heading is hidden, else nil." diff --git a/hyrolo-logic.el b/hyrolo-logic.el index b4ccc90899..3034d45959 100644 --- a/hyrolo-logic.el +++ b/hyrolo-logic.el @@ -3,7 +3,7 @@ ;; Author: Bob Weiner ;; ;; Orig-Date: 13-Jun-89 at 22:57:33 -;; Last-Mod: 9-Oct-22 at 18:01:03 by Bob Weiner +;; Last-Mod: 24-Oct-22 at 22:49:42 by Bob Weiner ;; ;; Copyright (C) 1989-2022 Free Software Foundation, Inc. ;; See the "HY-COPY" file for license information. @@ -62,10 +62,6 @@ (require 'hyrolo) -;; Quiet byte compiler warnings for these free variables. -(eval-when-compile - (defvar next-entry-exists nil)) - ;;; ************************************************************************ ;;; Public functions ;;; ************************************************************************ @@ -234,14 +230,11 @@ evaluations of SEXP that match entries." (let* ((start) (end) (end-entry-hdr) - (curr-entry-level-len) (num-found 0)) (while (re-search-forward hyrolo-entry-regexp nil t) (setq end-entry-hdr (match-end hyrolo-entry-group-number) start (match-beginning hyrolo-entry-group-number) - next-entry-exists nil - curr-entry-level-len (length (match-string-no-properties hyrolo-entry-group-number)) - end (hyrolo-to-entry-end include-sub-entries curr-entry-level-len)) + end (hyrolo-to-entry-end include-sub-entries)) (let ((result (eval sexp `((start . ,start) (end . ,end))))) (unless count-only (and result (= num-found 0) @@ -275,16 +268,13 @@ evaluations of SEXP that match entries." (let* ((start) (end) (end-entry-hdr) - (curr-entry-level-len) (num-found 0) result) (mapc (lambda (cell-ref) (when (setq result (kotl-mode:goto-cell cell-ref)) (setq end-entry-hdr (point) start (line-beginning-position) - next-entry-exists nil - curr-entry-level-len (- result start) - end (hyrolo-to-entry-end include-sub-entries curr-entry-level-len)) + end (hyrolo-to-entry-end include-sub-entries)) (unless count-only (and result (= num-found 0) (let* ((src (or (buffer-file-name hyrolo-buf) diff --git a/hyrolo.el b/hyrolo.el index 8d2570c5c8..9824a20565 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: 12-Oct-22 at 22:47:51 by Mats Lidell +;; Last-Mod: 25-Oct-22 at 01:28:37 by Bob Weiner ;; ;; Copyright (C) 1991-2022 Free Software Foundation, Inc. ;; See the "HY-COPY" file for license information. @@ -37,8 +37,7 @@ (unless (require 'bbdb nil t) (defvar bbdb-file nil)) (unless (require 'google-contacts nil t) - (defvar google-contacts-buffer-name nil)) - (defvar next-entry-exists nil)) + (defvar google-contacts-buffer-name nil))) ;;; ************************************************************************ ;;; Public declarations @@ -257,7 +256,7 @@ entry which begins with the parent string." (setq level (match-string-no-properties hyrolo-entry-group-number)) (error "(hyrolo-add): Insertion failed, `%s' parent entry not found in \"%s\"" parent file))) - (narrow-to-region (point) (progn (hyrolo-to-entry-end t (length level)) (point))) + (narrow-to-region (point) (progn (hyrolo-to-entry-end t) (point))) (let* ((name-level (concat level "*")) (level-len (length name-level)) (first-char (aref name 0)) @@ -287,7 +286,7 @@ entry which begins with the parent string." "])") nil t)) (goto-char (match-end 0)) - (hyrolo-to-entry-end t level-len) + (hyrolo-to-entry-end t) ;; Now at the insertion point, immediately after ;; the last existing entry whose first character ;; is less than that of `name'. Setting `again' @@ -299,7 +298,7 @@ entry which begins with the parent string." (while (and again (re-search-forward entry-regexp nil 'end)) (setq entry-level-len (length (match-string-no-properties hyrolo-entry-group-number))) (if (/= entry-level-len level-len) - (hyrolo-to-entry-end t entry-level-len) + (hyrolo-to-entry-end t) (setq entry-spc (match-string-no-properties hyrolo-entry-trailing-space-group-number) entry (buffer-substring-no-properties (point) (save-excursion @@ -309,7 +308,7 @@ entry which begins with the parent string." (string-match "\\`.*#+" entry-spc)) (setq entry-spc (substring entry-spc (length (match-string 0 entry-spc))))) (cond ((string-lessp entry name) - (hyrolo-to-entry-end t entry-level-len)) + (hyrolo-to-entry-end t)) ((string-lessp name entry) (setq again nil) (beginning-of-line)) (t ;; found existing entry matching name @@ -419,16 +418,19 @@ Return entry name if found, else nil." (interactive) (let ((name (hyrolo-name-at)) src) - (if name - (progn (setq src (hbut:to-key-src)) + (if name + (progn (setq src (hbut:to-key-src t)) (cond ((and (boundp 'bbdb-file) (stringp bbdb-file) (equal src (expand-file-name bbdb-file))) ;; For now, can't edit an entry from the bbdb database, signal an error. (error "(hyrolo-edit-entry): BBDB entries are not editable")) ((and (hyrolo-google-contacts-p) (equal src (get-buffer google-contacts-buffer-name))) ;; For now, can't edit an entry from Google Contacts, signal an error. (error "(hyrolo-edit-entry): Google Contacts entries are not editable")) - (t (hyrolo-edit name src) - name))) + ((stringp src) + (hyrolo-edit name src) + name) + (t + (error "(hyrolo-edit-entry): Move to an entry to edit it")))) (error "(hyrolo-edit-entry): Move to an entry to edit it")))) ;;;###autoload @@ -663,7 +665,7 @@ Return t if entry is killed, nil otherwise." (let ((kill-op (lambda (start level-len) (kill-region - start (hyrolo-to-entry-end t level-len)) + start (hyrolo-to-entry-end t)) (setq killed t) (hyrolo-save-buffer) (hyrolo-kill-buffer))) @@ -1362,7 +1364,7 @@ Return number of matching entries found." (setq actual-buf (hyrolo-find-file-noselect hyrolo-file-or-buf) new-buf-p t)))) (let ((hdr-pos) (num-found 0) (curr-entry-level-len) - (incl-hdr t) start next-entry-exists) + (incl-hdr t) start) (when max-matches (cond ((eq max-matches t) (setq incl-hdr nil max-matches nil)) @@ -1386,11 +1388,10 @@ Return number of matching entries found." (while (and (or (null max-matches) (< num-found max-matches)) (funcall hyrolo-next-match-function pattern headline-only)) (re-search-backward hyrolo-entry-regexp nil t) - (setq start (point) - next-entry-exists nil) + (setq start (point)) (re-search-forward hyrolo-entry-regexp nil t) (setq curr-entry-level-len (length (buffer-substring-no-properties start (point)))) - (hyrolo-to-entry-end t curr-entry-level-len) + (hyrolo-to-entry-end t) (or count-only (if (and (zerop num-found) incl-hdr) (let* ((src (or (buffer-file-name actual-buf) @@ -1744,7 +1745,7 @@ Return point where matching entry begins or nil if not found." (when level (narrow-to-region (point) (save-excursion - (hyrolo-to-entry-end t (length level)) (point))))) + (hyrolo-to-entry-end t) (point))))) (goto-char (point-min)) (while (and (search-forward name nil t) (not (save-excursion @@ -1761,23 +1762,103 @@ Return point where matching entry begins or nil if not found." "Pop to BUFFER." (pop-to-buffer buffer other-window-flag)) -(defun hyrolo-to-entry-end (&optional include-sub-entries curr-entry-level-len) - "Move point to the end of whole entry if optional INCLUDE-SUB-ENTRIES is non-nil. -CURR-ENTRY-LEVEL-LEN is the integer length of the last entry -header found. If INCLUDE-SUB-ENTRIES is nil, -CURR-ENTRY-LEVEL-LEN is not needed. Return current point." - ;; Set free variable, next-entry-exists, for speed. - (while (and (setq next-entry-exists - (re-search-forward hyrolo-entry-regexp nil t)) - include-sub-entries - ;; Prevents including trailing whitespace in entry level - ;; length which in turn causes moving to (point-max). - (goto-char (or (match-end hyrolo-entry-group-number) (match-end 0))) - (> (- (point) (line-beginning-position)) - curr-entry-level-len))) - (if next-entry-exists - (progn (beginning-of-line) (point)) - (goto-char (point-max)))) + +(defun hyrolo-backward-same-level (arg) + "Move backward to the ARG'th subheading at same level as this one. +Stop at the first and last subheadings of a superior heading." + (interactive "p") + (hyrolo-move-backward #'outline-backward-same-level arg)) + +(defun hyrolo-previous-visible-heading (arg) + "Move to the previous heading line. +With ARG, repeats or can move forward if negative. +A heading line is one that starts with a `*' (or that +`outline-regexp' matches)." + (interactive "p") + (hyrolo-move-backward #'outline-previous-visible-heading arg)) + +(defun hyrolo-up-heading (arg &optional invisible-ok) + "Move to the visible heading line of which the present line is a subheading. +With argument, move up ARG levels. +If INVISIBLE-OK is non-nil, also consider invisible lines." + (interactive "p") + (hyrolo-move-backward #'outline-up-heading arg invisible-ok)) + +(defun hyrolo-move-backward (func &rest args) + "Move back past any file header and apply FUNC to ARGS. +Return final point." + ;; Prevent error when calling 'func' when within a file header. + (while (and (looking-at hyrolo-hdr-regexp) + (outline-previous-heading))) + (apply #'funcall func args) + ;; If on a file header, skip to its beginning. + (while (and (looking-at hyrolo-hdr-regexp) + (outline-previous-heading))) + (point)) + +(defun hyrolo-to-entry-beginning (&optional include-sub-entries) + "Move point to the beginning of the current entry. +With optional prefix arg INCLUDE-SUB-ENTRIES non-nil, move to the +beginning of the highest ancestor level. Return final point." + (interactive "P") + (hyrolo-move-backward + (lambda (include-sub-entries) + ;; Prevent error when calling 'outline-back-to-heading' when within + ;; a file header. + (outline-back-to-heading) + (if include-sub-entries + (unless (<= (funcall outline-level) 1) + (outline-up-heading 80)))) + include-sub-entries)) + +(defun hyrolo-forward-same-level (arg) + "Move forward to the ARG'th subheading at same level as this one. +Stop at the first and last subheadings of a superior heading." + (interactive "p") + (hyrolo-move-forward #'outline-forward-same-level arg)) + +(defun hyrolo-next-visible-heading (arg) + "Move to the next visible heading line. +With ARG, repeats or can move backward if negative. +A heading line is one that starts with a `*' (or that +`outline-regexp' matches)." + (interactive "p") + (hyrolo-move-forward #'outline-next-visible-heading arg)) + +(defun hyrolo-move-forward (func &rest args) + "Move forward past any file header and apply FUNC to ARGS. +Return final point." + (let (in-hdr) + (while (looking-at hyrolo-hdr-regexp) + (when (outline-next-heading) + (setq in-hdr t))) + (unless in-hdr + (condition-case nil + (apply #'funcall func args) + ;; Prevent error and move past file header. + (error (while (and (outline-next-heading) + (looking-at hyrolo-hdr-regexp))))))) + (point)) + +(defun hyrolo-to-entry-end (&optional include-sub-entries) + "Move point past the end of the current entry. +With optional prefix arg INCLUDE-SUB-ENTRIES non-nil, move past +the end of the entire subtree. Return final point. + +When called interactively, leave point one character earlier, before +the final newline of the entry." + (interactive "P") + (if (not include-sub-entries) + (outline-next-heading) + (condition-case nil + (progn (outline-end-of-subtree) + (goto-char (1+ (point)))) + ;; Prevent error and move past file header. + (error (while (and (outline-next-heading) + (looking-at hyrolo-hdr-regexp)))))) + (when (called-interactively-p 'any) + (goto-char (1- (point)))) + (point)) (defun hyrolo-mode-outline-level () "Heuristically determine `outline-level' function to use in HyRolo match buffer." @@ -1894,23 +1975,23 @@ String search expressions are converted to regular expressions.") (if (fboundp 'set-keymap-name) (set-keymap-name hyrolo-mode-map 'hyrolo-mode-map)) (suppress-keymap hyrolo-mode-map) + (define-key hyrolo-mode-map "," 'hyrolo-to-entry-beginning) + (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 "." 'beginning-of-buffer) - (define-key hyrolo-mode-map "," 'end-of-buffer) (define-key hyrolo-mode-map "?" 'describe-mode) (define-key hyrolo-mode-map "\177" 'scroll-down) (define-key hyrolo-mode-map " " 'scroll-up) (define-key hyrolo-mode-map "a" 'outline-show-all) - (define-key hyrolo-mode-map "b" 'outline-backward-same-level) + (define-key hyrolo-mode-map "b" 'hyrolo-backward-same-level) (define-key hyrolo-mode-map "e" 'hyrolo-edit-entry) - (define-key hyrolo-mode-map "f" 'outline-forward-same-level) + (define-key hyrolo-mode-map "f" 'hyrolo-forward-same-level) (define-key hyrolo-mode-map "h" 'hyrolo-hide-subtree) (define-key hyrolo-mode-map "l" 'hyrolo-locate) (define-key hyrolo-mode-map "m" 'hyrolo-mail-to) - (define-key hyrolo-mode-map "n" 'outline-next-visible-heading) + (define-key hyrolo-mode-map "n" 'hyrolo-next-visible-heading) (define-key hyrolo-mode-map "o" 'hyrolo-overview) - (define-key hyrolo-mode-map "p" 'outline-previous-visible-heading) + (define-key hyrolo-mode-map "p" 'hyrolo-previous-visible-heading) (define-key hyrolo-mode-map "q" 'hyrolo-quit) (define-key hyrolo-mode-map "r" 'hyrolo-grep-or-fgrep) (define-key hyrolo-mode-map "s" 'outline-show-subtree) @@ -1919,7 +2000,7 @@ String search expressions are converted to regular expressions.") (define-key hyrolo-mode-map "\C-i" 'hyrolo-next-match) ;; {TAB} (define-key hyrolo-mode-map "\M-\C-i" 'hyrolo-previous-match) ;; {M-TAB} (define-key hyrolo-mode-map [backtab] 'hyrolo-previous-match) ;; {Shift-TAB} - (define-key hyrolo-mode-map "u" 'outline-up-heading)) + (define-key hyrolo-mode-map "u" 'hyrolo-up-heading)) ;; Prompt user to rename old personal rolo file to new name, if necessary. (unless noninteractive diff --git a/man/hyperbole.html b/man/hyperbole.html index 80b3d8b8df..07660fd3f9 100644 --- a/man/hyperbole.html +++ b/man/hyperbole.html @@ -1,7 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <!-- This manual is for GNU Hyperbole -(Edition 8.0.1pre, Published May, 2022). +(Edition 8.0.1pre, Published October, 2022). Copyright (C) 1989-2022 Free Software Foundation, Inc. @@ -370,7 +370,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.</P> <PRE> Edition 8.0.1pre -Printed May 15, 2022. +Printed October 23, 2022. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -6919,17 +6919,27 @@ hide entry subtree command now moves to the beginning of the entry. </p></dd> <dt><kbd>{u}</kbd></dt> <dd><p>Move to the previous higher entry one level up. +<span id="index-rolo_002c-_002c"></span> +<span id="index-_002c"></span> +</p></dd> +<dt><kbd>{,}</kbd></dt> +<dd><p>Move to the beginning of the entry. With a prefix argument, +move to the beginning of highest ancestor level. <span id="index-rolo_002c-_002e"></span> +<span id="index-_002e-1"></span> +</p></dd> +<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. <span id="index-rolo_002c-_003c"></span> -<span id="index-_002e-or-_003c"></span> +<span id="index-_003c"></span> </p></dd> -<dt><kbd>{. or <}</kbd></dt> +<dt><kbd>{<}</kbd></dt> <dd><p>Move to the beginning of the buffer. -<span id="index-rolo_002c-_002c"></span> <span id="index-rolo_002c-_003e"></span> -<span id="index-_002c-or-_003e"></span> +<span id="index-_003e"></span> </p></dd> -<dt><kbd>{, or >}</kbd></dt> +<dt><kbd>{>}</kbd></dt> <dd><p>Move to the end of the buffer. <span id="index-rolo_002c-DEL"></span> <span id="index-DEL"></span> @@ -12720,17 +12730,21 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <a class="summary-letter" href="#Key-Index_ky_symbol-8"><b>0</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-9"><b>=</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-9"><b><</b></a> + +<a class="summary-letter" href="#Key-Index_ky_symbol-10"><b>=</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-10"><b>?</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-11"><b>></b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-11"><b>@</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-12"><b>?</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-12"><b>[</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-13"><b>@</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-13"><b>]</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-14"><b>[</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-14"><b>~</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-15"><b>]</b></a> + +<a class="summary-letter" href="#Key-Index_ky_symbol-16"><b>~</b></a> <br> <a class="summary-letter" href="#Key-Index_ky_letter-A"><b>A</b></a> @@ -12792,7 +12806,7 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <tr><td></td><td valign="top"><a href="#index-_002b"><code>+</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_symbol-5">,</th><td></td><td></td></tr> -<tr><td></td><td valign="top"><a href="#index-_002c-or-_003e"><code>, or ></code></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-_002c"><code>,</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_symbol-6">-</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_002d"><code>-</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> @@ -12800,27 +12814,33 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_symbol-7">.</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_002e"><code>.</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> -<tr><td></td><td valign="top"><a href="#index-_002e-or-_003c"><code>. or <</code></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-_002e-1"><code>.</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_symbol-8">0</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-0_002d9"><code>0-9</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> -<tr><th id="Key-Index_ky_symbol-9">=</th><td></td><td></td></tr> +<tr><th id="Key-Index_ky_symbol-9"><</th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-_003c"><code><</code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th id="Key-Index_ky_symbol-10">=</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_003d"><code>=</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> -<tr><th id="Key-Index_ky_symbol-10">?</th><td></td><td></td></tr> +<tr><th id="Key-Index_ky_symbol-11">></th><td></td><td></td></tr> +<tr><td></td><td valign="top"><a href="#index-_003e"><code>></code></a>:</td><td> </td><td valign="top"><a href="#HyRolo-Keys">HyRolo Keys</a></td></tr> +<tr><td colspan="4"> <hr></td></tr> +<tr><th id="Key-Index_ky_symbol-12">?</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_003f"><code>?</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> -<tr><th id="Key-Index_ky_symbol-11">@</th><td></td><td></td></tr> +<tr><th id="Key-Index_ky_symbol-13">@</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_0040"><code>@</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> -<tr><th id="Key-Index_ky_symbol-12">[</th><td></td><td></td></tr> +<tr><th id="Key-Index_ky_symbol-14">[</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_005b"><code>[</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> -<tr><th id="Key-Index_ky_symbol-13">]</th><td></td><td></td></tr> +<tr><th id="Key-Index_ky_symbol-15">]</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_005d"><code>]</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> -<tr><th id="Key-Index_ky_symbol-14">~</th><td></td><td></td></tr> +<tr><th id="Key-Index_ky_symbol-16">~</th><td></td><td></td></tr> <tr><td></td><td valign="top"><a href="#index-_007e"><code>~</code></a>:</td><td> </td><td valign="top"><a href="#HyControl">HyControl</a></td></tr> <tr><td colspan="4"> <hr></td></tr> <tr><th id="Key-Index_ky_letter-A">A</th><td></td><td></td></tr> @@ -13179,17 +13199,21 @@ Next: <a href="#Function" accesskey="n" rel="next">Function</a>, Previous: <a hr <a class="summary-letter" href="#Key-Index_ky_symbol-8"><b>0</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-9"><b>=</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-9"><b><</b></a> + +<a class="summary-letter" href="#Key-Index_ky_symbol-10"><b>=</b></a> + +<a class="summary-letter" href="#Key-Index_ky_symbol-11"><b>></b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-10"><b>?</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-12"><b>?</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-11"><b>@</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-13"><b>@</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-12"><b>[</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-14"><b>[</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-13"><b>]</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-15"><b>]</b></a> -<a class="summary-letter" href="#Key-Index_ky_symbol-14"><b>~</b></a> +<a class="summary-letter" href="#Key-Index_ky_symbol-16"><b>~</b></a> <br> <a class="summary-letter" href="#Key-Index_ky_letter-A"><b>A</b></a> diff --git a/man/hyperbole.info b/man/hyperbole.info index 5e201b31f2..0d2e10312e 100644 Binary files a/man/hyperbole.info and b/man/hyperbole.info differ diff --git a/man/hyperbole.pdf b/man/hyperbole.pdf index 0b67c71aae..7f40daad61 100644 Binary files a/man/hyperbole.pdf and b/man/hyperbole.pdf differ diff --git a/man/hyperbole.texi b/man/hyperbole.texi index 712c014812..1a077986f4 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: 15-May-22 at 00:21:56 by Bob Weiner +@c Last-Mod: 23-Oct-22 at 12:42:30 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 8.0.1pre -Printed May 15, 2022. +Printed October 23, 2022. Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -198,7 +198,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. @example Edition 8.0.1pre -May 15, 2022 +October 23, 2022 Published by the Free Software Foundation, Inc. Author: Bob Weiner @@ -5896,13 +5896,19 @@ Move to the previous entry at any level. @kindex rolo, u @kitem u Move to the previous higher entry one level up. +@kindex rolo, , +@kitem , +Move to the beginning of the entry. With a prefix argument, +move to the beginning of highest ancestor level. @kindex rolo, . +@kitem . +Move to the end of the entry. With a prefix argument, +move to the end of the entire subtree. @kindex rolo, < -@kitem . or < +@kitem < Move to the beginning of the buffer. -@kindex rolo, , @kindex rolo, > -@kitem , or > +@kitem > Move to the end of the buffer. @kindex rolo, @key{DEL} @kitem @key{DEL} diff --git a/man/version.texi b/man/version.texi index e3c0a6f00d..0acc217017 100644 --- a/man/version.texi +++ b/man/version.texi @@ -1,4 +1,4 @@ -@set UPDATED May, 2022 -@set UPDATED-MONTH May 2022 +@set UPDATED October, 2022 +@set UPDATED-MONTH October 2022 @set EDITION 8.0.1pre @set VERSION 8.0.1pre diff --git a/test/hyrolo-tests.el b/test/hyrolo-tests.el index 1e77e1018d..d5109a273d 100644 --- a/test/hyrolo-tests.el +++ b/test/hyrolo-tests.el @@ -120,7 +120,8 @@ (hyrolo-demo-quit))) (ert-deftest hyrolo-demo-move-to-beginning-and-end-of-file () - "Keys {<} or {.} and {>} or {,} shall move to beginning and end of file, respectively." + "*HyRolo* keys {<} and {>} move to beginning and end of file, respectively. +{,} and {.} move to beginning and end of current entry, respectively." (skip-unless (not noninteractive)) (unwind-protect (progn @@ -128,19 +129,21 @@ (should (hact 'kbd-key "C-x 4r work RET TAB")) (hy-test-helpers:consume-input-events) (should (string= (buffer-name) hyrolo-display-buffer)) - (should (looking-at "Work")) - - (should (hact 'kbd-key ">")) - (should (equal (point) (point-max))) + (should (looking-at "work")) (should (hact 'kbd-key "<")) (should (equal (point) (point-min))) - (should (hact 'kbd-key ",")) + (should (hact 'kbd-key ">")) (should (equal (point) (point-max))) + (should (hact 'kbd-key "\C-u,n")) + (hy-test-helpers:consume-input-events) + (should (looking-at "\\*\\*\\s-+Hansen")) + (should (hact 'kbd-key ".")) - (should (equal (point) (point-min)))) + (hy-test-helpers:consume-input-events) + (should (looking-at "\\s-?\\*\\*\\*\\s-+Dunn"))) (hyrolo-demo-quit))) (ert-deftest hyrolo-demo-move-between-entries-on-same-level () @@ -212,7 +215,7 @@ and {b} the previous same level cell." ; Verify insertion order and following date on separate line (goto-char (point-min)) (should (looking-at "===")) - (dolist (insertion-order '("c" "b" "d" "a")) + (dolist (insertion-order '("a" "b" "d" "c")) (goto-char (1+ (should (search-forward insertion-order)))) (should (looking-at-p "^\t[0-9/]+$")))