emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/coterm bd103f9 56/80: [auto-char] Fix searching in less


From: ELPA Syncer
Subject: [elpa] externals/coterm bd103f9 56/80: [auto-char] Fix searching in less
Date: Wed, 13 Oct 2021 18:57:36 -0400 (EDT)

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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]