From 3b9196a095c6843b7c87b867a82fa7a2d930bb0b Mon Sep 17 00:00:00 2001 From: Ruijie Yu Date: Mon, 6 Mar 2023 11:03:32 +0800 Subject: [PATCH 1/2] REVIEW: pull out content of arc-expunge for noninteractive deletion --- lisp/arc-mode.el | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/lisp/arc-mode.el b/lisp/arc-mode.el index 6f3e922880d..f8d7182597b 100644 --- a/lisp/arc-mode.el +++ b/lisp/arc-mode.el @@ -1508,23 +1508,26 @@ archive-chgrp-entry (archive-resummarize)) (error "Setting group is not supported for this archive type")))) -(defun archive-expunge () - "Do the flagged deletions." - (interactive) - (let (files) +(defun archive--expunge-maybe-force (force) + (let ((files (save-excursion (goto-char archive-file-list-start) - (while (< (point) archive-file-list-end) - (if (= (following-char) ?D) - (setq files (cons (archive--file-desc-ext-file-name + (cl-do ((files + nil + (prog1 + (if (eq (following-char) ?D) + (cons (archive--file-desc-ext-file-name (archive-get-descr)) - files))) - (forward-line 1))) - (setq files (nreverse files)) + files) + files) + (forward-line 1)))) + ((>= (point) archive-file-list-end) + (nreverse files)))))) (and files (or (not archive-read-only) (error "Archive is read-only")) - (or (yes-or-no-p (format "Really delete %d member%s? " + (or force + (yes-or-no-p (format "Really delete %d member%s? " (length files) (if (null (cdr files)) "" "s"))) (error "Operation aborted")) @@ -1538,6 +1541,11 @@ archive-expunge (archive-resummarize) (revert-buffer)))))) +(defun archive-expunge () + "Do the flagged deletions." + (interactive) + (archive--expunge-maybe-force nil)) + (defun archive-*-expunge (archive files command) (apply #'call-process (car command) -- 2.39.2