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

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

[nongnu] elpa/sweeprolog aafeb08c94 1/2: ENHANCED: restore original poin


From: ELPA Syncer
Subject: [nongnu] elpa/sweeprolog aafeb08c94 1/2: ENHANCED: restore original point when a term search is quit
Date: Thu, 5 Jan 2023 06:59:58 -0500 (EST)

branch: elpa/sweeprolog
commit aafeb08c94781f2d8297782f4af532581193d6b3
Author: Eshel Yaron <me@eshelyaron.com>
Commit: Eshel Yaron <me@eshelyaron.com>

    ENHANCED: restore original point when a term search is quit
---
 sweeprolog.el | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)

diff --git a/sweeprolog.el b/sweeprolog.el
index 95427cde77..637cca49fd 100644
--- a/sweeprolog.el
+++ b/sweeprolog.el
@@ -4656,8 +4656,16 @@ propely."
   (interactive "" sweeprolog-mode)
   (sweeprolog-term-search sweeprolog-term-search-last-term t))
 
+(defun sweeprolog-term-search-abort ()
+  "Abort term search and restore point to its original position."
+  (interactive "" sweeprolog-mode)
+  (goto-char (mark t))
+  (pop-mark)
+  (signal 'quit nil))
+
 (defvar sweeprolog-term-search-map
   (let ((map (make-sparse-keymap)))
+    (define-key map (kbd "C-g") #'sweeprolog-term-search-abort)
     (define-key map (kbd "C-m") #'sweeprolog-term-search-delete-overlays)
     (define-key map (kbd "C-r") #'sweeprolog-term-search-repeat-backward)
     (define-key map (kbd "C-s") #'sweeprolog-term-search-repeat-forward)
@@ -4711,11 +4719,14 @@ instead, or the last overlay if no overlay ends before 
POINT."
             (setq overlays tail))))
       (or match first))))
 
-(defun sweeprolog-term-search (term &optional backward)
+(defun sweeprolog-term-search (term &optional backward interactive)
   "Search forward for Prolog term TERM in the current buffer.
 
-If BACKWARD is non-nil, search backward instead."
-  (interactive (list (sweeprolog-term-search-read-term) nil)
+If BACKWARD is non-nil, search backward instead.
+
+If INTERACTIVE is non-nil, as it is when called interactively,
+push the current position to the mark ring before moving point."
+  (interactive (list (sweeprolog-term-search-read-term) nil t)
                sweeprolog-mode)
   (sweeprolog-term-search-delete-overlays)
   (setq sweeprolog-term-search-last-term term)
@@ -4735,7 +4746,8 @@ If BACKWARD is non-nil, search backward instead."
              (sweeprolog-term-search-next
               (point) sweeprolog-term-search-overlays backward)))
         (overlay-put next 'face 'isearch)
-        (push-mark (point) t)
+        (when interactive
+          (push-mark (point) t))
         (goto-char (overlay-start next)))
       (set-transient-map sweeprolog-term-search-map t
                          #'sweeprolog-term-search-delete-overlays)



reply via email to

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