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

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

[nongnu] elpa/evil fc763f888f 2/2: Print using minibuffer


From: ELPA Syncer
Subject: [nongnu] elpa/evil fc763f888f 2/2: Print using minibuffer
Date: Fri, 2 Jun 2023 10:00:53 -0400 (EDT)

branch: elpa/evil
commit fc763f888fb9a810f99b9783aa1f3f5e895ce502
Author: Tom Dalziel <tom_dl@hotmail.com>
Commit: Tom Dalziel <33435574+tomdl89@users.noreply.github.com>

    Print using minibuffer
---
 evil-commands.el | 27 ++++++++++++++++++---------
 1 file changed, 18 insertions(+), 9 deletions(-)

diff --git a/evil-commands.el b/evil-commands.el
index 3c6b2b3537..91163f4a10 100644
--- a/evil-commands.el
+++ b/evil-commands.el
@@ -1913,8 +1913,15 @@ Includes line number at beginning of each line if LINUMP 
is non-nil."
         (when (or (= (point) (progn (evil-line-move 1 t) (point)))
                   (> (line-end-position) end))
           (setq continue nil))))
-    (setq result-string (string-trim-right result-string "\n"))
-    result-string))
+    (string-trim-right result-string "\n")))
+
+(defun evil--ex-print-to-minibuffer (string)
+  "Print STRING to the minibuffer for better persistence."
+  (let ((keymap (make-keymap))
+        minibuffer-local-map)
+    (set-char-table-range (nth 1 keymap) t 'abort-recursive-edit)
+    (setq minibuffer-local-map keymap)
+    (read-from-minibuffer "" (propertize string 'read-only t))))
 
 (defun evil--ex-print (beg end count linump)
   "Print lines in range to the echo area.
@@ -1930,17 +1937,19 @@ Include line number at the start of each line if LINUMP 
is non-nil."
                  (if (string= "" evil--ex-print-accumulator)
                      (concat evil--ex-print-accumulator substring)
                    (concat evil--ex-print-accumulator "\n" substring))))
-          (t (message "%s" substring)
+          (t (evil--ex-print-to-minibuffer substring)
              (when (string-match-p "\n" substring)
                (goto-char end)
                (evil-beginning-of-line))))))
 
-(defun evil--echo-global-print+clear ()
+(defun evil--global-print+clear ()
   "Print accumulated print output from :global print, and clear."
-  (message "%s" evil--ex-print-accumulator)
-  (setq evil--ex-print-accumulator ""))
+  (unwind-protect
+      (unless (string= "" evil--ex-print-accumulator)
+        (evil--ex-print-to-minibuffer evil--ex-print-accumulator))
+    (setq evil--ex-print-accumulator "")))
 
-(add-hook 'evil-after-global-hook #'evil--echo-global-print+clear)
+(add-hook 'evil-after-global-hook #'evil--global-print+clear)
 
 (evil-define-command evil-ex-print (beg end &optional count)
   (interactive "<r><a>")
@@ -4240,12 +4249,12 @@ Use `evil-flush-lines' if INVERT is nil, or 
`evil-keep-lines' if not."
                   (goto-char marker)
                   (eval command-form)))
             (progn
+              (setq evil--ex-global-active-p nil)
               ;; ensure that all markers are deleted afterwards,
               ;; even in the event of failure
               (dolist (marker markers)
                 (set-marker marker nil))
-              (run-hooks 'evil-after-global-hook)
-              (setq evil--ex-global-active-p nil))))))))
+              (run-hooks 'evil-after-global-hook))))))))
 
 (evil-define-operator evil-ex-global-inverted
   (beg end pattern command &optional invert)



reply via email to

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