branch: externals/coterm
commit bd103f9f8b11db975680229df87af36ee37fcdc3
Author: m <>
Commit: m <>
[auto-char] Fix searching in less
---
coterm.el | 68 ++++++++++++++++++++++++++++++++++++++++++++-------------------
1 file changed, 48 insertions(+), 20 deletions(-)
diff --git a/coterm.el b/coterm.el
index 376a630..afd4a86 100644
--- a/coterm.el
+++ b/coterm.el
@@ -236,26 +236,54 @@ If point is not on process mark, leave `coterm-char-mode'
and
(when coterm-scroll-snap-mode (coterm-scroll-snap-mode -1)))))
(defun coterm--auto-char-less-prompt ()
- "Enter `coterm-char-mode' if a \"less\" prompt is detected."
- (when (eobp)
- (let ((opoint (point)))
- (forward-line 0)
- (prog1
- (when (looking-at
- (concat
- "\\(?:"
- ":\\|"
- "(END)\\|"
- "byte [0-9]+\\|"
- "100%\\|"
- "\\(?:.* \\)?" "[0-9]?[0-9]%\\|"
- ".*(press h for help or q to quit)\\|"
- ".*(press RETURN)"
- "\\)\\'"))
- (unless coterm-char-mode (coterm-char-mode 1))
- (unless coterm-scroll-snap-mode (coterm-scroll-snap-mode 1))
- t)
- (goto-char opoint)))))
+ "Enter `coterm-char-mode' if a \"less\" prompt is detected.
+In addition, temporarily modify `coterm-auto-char-functions' such
+that char mode is maintained even if the user presses \"/\",
+\":\", \"ESC\" or \"-\"."
+ (when (and (eobp) (coterm--auto-char-less-prompt-1))
+ (unless coterm-char-mode (coterm-char-mode 1))
+ (unless coterm-scroll-snap-mode (coterm-scroll-snap-mode 1))
+ (cl-labels
+ ((hook ()
+ (if (not (eobp))
+ (rem-hook)
+ (or
+ (coterm--auto-char-less-prompt-1)
+ (progn
+ (forward-line 0)
+ (prog1 (looking-at (concat
+ "\\(?: ESC\\| :\\|-\\)\\'\\|"
+ "Examine: \\|/"))
+ (goto-char (point-max))))
+ (rem-hook))))
+ (rem-hook ()
+ (remove-hook 'coterm-auto-char-functions #'hook t)
+ (remove-hook 'coterm-auto-char-mode-hook #'rem-hook t)
+ (remove-hook 'coterm-char-mode-hook #'rem-hook t)
+ (remove-hook 'coterm-scroll-snap-mode-hook #'rem-hook t)
+ nil))
+ (add-hook 'coterm-auto-char-functions #'hook nil t)
+ (add-hook 'coterm-auto-char-mode-hook #'rem-hook nil t)
+ (add-hook 'coterm-char-mode-hook #'rem-hook nil t)
+ (add-hook 'coterm-scroll-snap-mode-hook #'rem-hook nil t))
+ t))
+
+(defun coterm--auto-char-less-prompt-1 ()
+ "Return t if point is after a less prompt."
+ (let ((opoint (point)))
+ (forward-line 0)
+ (prog1 (looking-at
+ (concat
+ "\\(?:"
+ ":\\|"
+ "(END)\\|"
+ "byte [0-9]+\\|"
+ "100%\\|"
+ "\\(?:.* \\)?" "[0-9]?[0-9]%\\|"
+ ".*(press h for help or q to quit)\\|"
+ ".*(press RETURN)"
+ "\\)\\'"))
+ (goto-char opoint))))
(defun coterm--auto-char-mpv-prompt ()
"Enter `coterm-char-mode' if a mpv prompt is detected.