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

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

[nongnu] elpa/helm dd5047990d: Fix preselection after persistent killing


From: ELPA Syncer
Subject: [nongnu] elpa/helm dd5047990d: Fix preselection after persistent killing of buffers
Date: Fri, 4 Apr 2025 01:00:44 -0400 (EDT)

branch: elpa/helm
commit dd5047990dfa5a86a7788e017f32bd660fa3e474
Author: Thierry Volpiatto <thievol@posteo.net>
Commit: Thierry Volpiatto <thievol@posteo.net>

    Fix preselection after persistent killing of buffers
---
 helm-buffers.el | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/helm-buffers.el b/helm-buffers.el
index ea3dcfd912..5c445ce1d2 100644
--- a/helm-buffers.el
+++ b/helm-buffers.el
@@ -1057,26 +1057,33 @@ vertically."
          bufname)))))
 
 (defun helm-buffers-persistent-kill (_buffer)
-  (let ((marked (helm-marked-candidates))
-        (sel (helm-get-selection))
-        (msg "Buffer `%s' modified, please save it before kill"))
-    (unwind-protect
-         (cl-loop for b in marked
-                  do (if (and (buffer-file-name b) (buffer-modified-p b))
-                         (message msg (buffer-name b))
-                       ;; We need to preselect each marked because
-                       ;; helm-buffers-persistent-kill-1 is deleting
-                       ;; current selection.
-                       (helm-preselect
-                        (format "^%s"
-                                (helm-buffers--quote-truncated-buffer b)))
-                       (helm-buffers-persistent-kill-1 b)
-                       (message nil)
-                       (helm--remove-marked-and-update-mode-line b)))
-      (with-helm-buffer
+  (let* ((marked (helm-marked-candidates))
+         (msg "Buffer `%s' modified, please save it before kill")
+         ;; After marking, selection should be after the last marked unless 
user
+         ;; has not moved, if deleting current, use current selection after
+         ;; having deleted.
+         (sel (and (cdr marked) (helm-get-selection))))
+    (with-helm-buffer
+      (unwind-protect
+           (dolist (b marked)
+             (if (and (buffer-file-name b) (buffer-modified-p b))
+                 (progn (message msg (buffer-name b)) (sit-for 1))
+               ;; We need to preselect each marked because
+               ;; helm-buffers-persistent-kill-1 is deleting
+               ;; current selection.
+               (helm-preselect
+                (format "^[[:multibyte:] ]*%s"
+                        (helm-buffers--quote-truncated-buffer b)))
+               (helm-buffers-persistent-kill-1 b)
+               (helm--remove-marked-and-update-mode-line b)))
         (setq helm-marked-candidates nil
               helm-visible-mark-overlays nil))
-      (helm-force-update (helm-buffers--quote-truncated-buffer sel)))))
+      (helm-force-update (format "^[[:multibyte:] ]*%s"
+                                 (helm-buffers--quote-truncated-buffer
+                                  ;; Ensure user has not moved selection on one
+                                  ;; of marked.
+                                  (or (and (buffer-live-p sel) sel)
+                                      (helm-get-selection))))))))
 
 (defun helm-buffers-list-persistent-action (candidate)
   (let ((current (window-buffer helm-persistent-action-display-window)))



reply via email to

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