aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman1999-09-15 23:29:16 +0000
committerRichard M. Stallman1999-09-15 23:29:16 +0000
commitf06280268ad4dd2e28e352a0e265154769c8251e (patch)
tree8b6e7976005530210d83c8ff5794145e6df39ce2
parentfaa935b653571584c6caad016b29421b55e975eb (diff)
downloademacs-f06280268ad4dd2e28e352a0e265154769c8251e.tar.gz
emacs-f06280268ad4dd2e28e352a0e265154769c8251e.zip
(dired-recursive-deletes): New custom variable.
(dired-re-no-dot): New variable. (dired-delete-file): New function deletes files and directories recursively. (dired-internal-do-deletions): Use `dired-delete-file' to delete files.
-rw-r--r--lisp/dired.el51
1 files changed, 45 insertions, 6 deletions
diff --git a/lisp/dired.el b/lisp/dired.el
index 748965f89f2..f89259964ec 100644
--- a/lisp/dired.el
+++ b/lisp/dired.el
@@ -1780,6 +1780,50 @@ Optional argument means return a file name relative to `default-directory'."
1780 1780
1781;; Deleting files 1781;; Deleting files
1782 1782
1783(defcustom dired-recursive-deletes nil ; Default only delete empty directories.
1784 "*Decide whether recursive deletes are allowed.
1785Nil means no recursive deletes.
1786`always' means delete recursively without asking. This is DANGEROUS!
1787`top' means ask for each directory at top level, but delete its subdirectories
1788without asking.
1789Anything else means ask for each directory."
1790 :type '(choice :tag "Delete not empty directory"
1791 (const :tag "No. Only empty directories" nil)
1792 (const :tag "Ask for each directory" t)
1793 (const :tag "Ask for each top directory only" top))
1794 :group 'dired)
1795
1796;; Match anything but `.' and `..'.
1797(defvar dired-re-no-dot "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*")
1798
1799;; Delete file, possibly delete a directory and all its files.
1800;; This function is usefull outside of dired. One could change it's name
1801;; to e.g. recursive-delete-file and put it somewhere else.
1802(defun dired-delete-file (file &optional recursive) "\
1803Delete FILE or directory (possibly recursively if optional RECURSIVE is true.)
1804RECURSIVE determines what to do with a non-empty directory. If RECURSIVE is:
1805Nil, do not delete.
1806`always', delete recursively without asking.
1807`top', ask for each directory at top level.
1808Anything else, ask for each sub-directory."
1809 (let (files)
1810 ;; This test is equivalent to
1811 ;; (and (file-directory-p fn) (not (file-symlink-p fn)))
1812 ;; but more efficient
1813 (if (not (eq t (car (file-attributes file))))
1814 (delete-file file)
1815 (when (and recursive
1816 (setq files
1817 (directory-files file t dired-re-no-dot)) ; Not empty.
1818 (or (eq recursive 'always)
1819 (yes-or-no-p (format "Recursive delete of %s "
1820 (dired-make-relative file)))))
1821 (if (eq recursive 'top) (setq recursive 'always)) ; Don't ask again.
1822 (while files ; Recursively delete (possibly asking).
1823 (dired-delete-file (car files) recursive)
1824 (setq files (cdr files))))
1825 (delete-directory file))))
1826
1783(defun dired-do-flagged-delete (&optional nomessage) 1827(defun dired-do-flagged-delete (&optional nomessage)
1784 "In dired, delete the files flagged for deletion. 1828 "In dired, delete the files flagged for deletion.
1785If NOMESSAGE is non-nil, we don't display any message 1829If NOMESSAGE is non-nil, we don't display any message
@@ -1835,12 +1879,7 @@ if there are no flagged files."
1835 (let (buffer-read-only) 1879 (let (buffer-read-only)
1836 (condition-case err 1880 (condition-case err
1837 (let ((fn (car (car l)))) 1881 (let ((fn (car (car l))))
1838 ;; This test is equivalent to 1882 (dired-delete-file fn dired-recursive-deletes)
1839 ;; (and (file-directory-p fn) (not (file-symlink-p fn)))
1840 ;; but more efficient
1841 (if (eq t (car (file-attributes fn)))
1842 (delete-directory fn)
1843 (delete-file fn))
1844 ;; if we get here, removing worked 1883 ;; if we get here, removing worked
1845 (setq succ (1+ succ)) 1884 (setq succ (1+ succ))
1846 (message "%s of %s deletions" succ count) 1885 (message "%s of %s deletions" succ count)