Function: trashed-do-execute-internal

trashed-do-execute-internal is a natively compiled function defined in trashed.el.

Signature

(trashed-do-execute-internal MARK-ACTION)

Documentation

Internal function to actually restore/delete files.

Restoration/deletion is done according to MARK-ACTION and each tag status. When MARK-ACTION is:

  nil -- restore/delete files with flag R/D.
  restore -- restore files with mark *.
  delete -- delete files with mark *.

Source Code

;; Defined in /nix/store/7ppdacjhnynz276lxxnfw8sdz6r2k6h2-emacs-packages-deps/share/emacs/site-lisp/elpa/trashed-20230811.157/trashed.el
(defun trashed-do-execute-internal (mark-action)
  "Internal function to actually restore/delete files.
Restoration/deletion is done according to MARK-ACTION and each tag status.
When MARK-ACTION is:

  nil     -- restore/delete files with flag R/D.
  restore -- restore files with mark *.
  delete  -- delete files with mark *."
  (let* (trash-file-name m entry)
    (save-excursion
      (trashed-reset-vpos)
      (while (setq trash-file-name (tabulated-list-get-id))
        (setq m (char-after)
              entry (tabulated-list-get-entry))
        (if (not
             (cond
              ((or (and (not mark-action) (eq m trashed-res-char))
                   (and (eq mark-action 'restore) (eq m trashed-marker-char)))
               (trashed-restore-file
                (expand-file-name trash-file-name trashed-files-dir)
                (expand-file-name (aref entry 3))))
              ((or (and (not mark-action) (eq m trashed-del-char))
                   (and (eq mark-action 'delete) (eq m trashed-marker-char)))
               (if (string= (aref entry 0) "d")
                   (delete-directory (expand-file-name trash-file-name
                                                       trashed-files-dir)
                                     t)
                 (delete-file (expand-file-name trash-file-name
                                                trashed-files-dir))))
              (t)))
            (progn
              ;; Delete info file
              (if (file-exists-p (trashed-info-file trash-file-name))
                  (delete-file (trashed-info-file trash-file-name))
                ;; Workaround for info files generated by Emacs bug #37922
                (let* ((isfx ".trashinfo")
                       (isfxlen (length isfx)))
                  (if (and (> (length trash-file-name) isfxlen)
                           (string= (substring trash-file-name (- isfxlen))
                                    isfx)
                           (not (file-exists-p (expand-file-name
                                                (substring trash-file-name
                                                           0 (- isfxlen))
                                                trashed-files-dir))))
                      (delete-file (expand-file-name trash-file-name
                                                     trashed-info-dir)))))
              ;; Delete from `tabulated-list-entries'
              (if (string= (caar tabulated-list-entries) trash-file-name)
                  (setq tabulated-list-entries (cdr tabulated-list-entries))
                (let ((tail tabulated-list-entries) tail-cdr)
                  (while (setq tail-cdr (cdr tail))
                    (setq tail (if (string= (caar tail-cdr) trash-file-name)
                                   (progn (setcdr tail (cdr tail-cdr)) nil)
                                 tail-cdr)))))
              ;; Delete from the list displayed
              (tabulated-list-delete-entry)
              ;; Subtract from trash can size
              (setq trashed-trash-can-size (- trashed-trash-can-size
                                              (string-to-number
                                               (aref entry 1)))))
          (forward-line)))
      (trashed-update-trash-can-size))))