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

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

[elpa] externals/activities a7abc9ee9e 5/6: Add: (activities-anti-kill-p


From: ELPA Syncer
Subject: [elpa] externals/activities a7abc9ee9e 5/6: Add: (activities-anti-kill-predicates) etc.
Date: Sun, 18 Feb 2024 21:57:18 -0500 (EST)

branch: externals/activities
commit a7abc9ee9eca26d2633abae18d23a0f70c783f14
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Add: (activities-anti-kill-predicates) etc.
---
 activities-tabs.el |  1 -
 activities.el      | 35 +++++++++++++++++++++++++++++------
 2 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/activities-tabs.el b/activities-tabs.el
index 3bddf92b22..78c51c5a8e 100644
--- a/activities-tabs.el
+++ b/activities-tabs.el
@@ -113,7 +113,6 @@ closed."
                                 (alist-get 'activities-buffer-list (cdr 
tab)))))))
 
 (defun activities-tabs--kill-buffers ()
-  ;; TODO: Exclude e.g. special buffers from being killed.
   ;; TODO: Frame parameter name should be prefixed with `activities'.
   "Kill buffers that are only in the current tab's buffer list.
 Only does so when `activities-kill-buffers' is non-nil."
diff --git a/activities.el b/activities.el
index 48bcfa634a..31bac0f93e 100644
--- a/activities.el
+++ b/activities.el
@@ -284,6 +284,17 @@ prefixes will be added automatically."
 Only applies when `activities-tabs-mode' is disabled."
   :type 'boolean)
 
+(defcustom activities-anti-kill-predicates
+  '(activities-buffer-hidden-p activities-buffer-special-p)
+  "Predicates which prevent a buffer from being killed.
+Used when suspending an activity and `activities-kill-buffers' is
+enabled.  Each predicate is called with the buffer as its
+argument.  If any predicate returns non-nil, the buffer is not
+killed."
+  :type '(set (function-item activities-buffer-special-p)
+              (function-item activities-buffer-hidden-p)
+              (function :tag "Other predicate")))
+
 (defcustom activities-anti-save-predicates
   '(active-minibuffer-window activities--backtrace-visible-p)
   "Predicates which prevent an activity's state from being saved.
@@ -800,18 +811,30 @@ Adds `activities-name-prefix'."
                         (throw :found t)))))))
 
 (defun activities--kill-buffers ()
-  ;; TODO: Exclude e.g. special buffers from being killed.
   ;; TODO: Frame parameter name should be prefixed with `activities'.
   "Kill buffers that are only in the current frame's/tab's buffer list.
 Only does so when `activities-kill-buffers' is non-nil."
   (when activities-kill-buffers
-    (let ((target-buffers
-           (cl-reduce (lambda (acc frame)
-                        (seq-difference acc (frame-parameter frame 
'buffer-list)))
-                      (remove (selected-frame) (frame-list))
-                      :initial-value (frame-parameter nil 'buffer-list))))
+    (let* ((frame-buffers (cl-reduce (lambda (acc frame)
+                                       (seq-difference acc (frame-parameter 
frame 'buffer-list)))
+                                     (remove (selected-frame) (frame-list))
+                                     :initial-value (frame-parameter nil 
'buffer-list)))
+           (target-buffers (cl-remove-if (lambda (buffer)
+                                           (run-hook-with-args-until-success
+                                            'activities-anti-kill-predicates 
buffer))
+                                         frame-buffers)))
       (mapc #'kill-buffer target-buffers))))
 
+(defun activities-buffer-special-p (buffer)
+  "Return non-nil if BUFFER is special.
+That is, if its name starts with an asterisk."
+  (string-prefix-p "*" (buffer-name buffer)))
+
+(defun activities-buffer-hidden-p (buffer)
+  "Return non-nil if BUFFER is hidden.
+That is, if its name starts with a space."
+  (string-prefix-p " " (buffer-name buffer)))
+
 ;;;; Project support
 
 (declare-function project-name "project")



reply via email to

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