# HG changeset patch # User Michael Albinus # Date 1254409462 0 # Node ID 667ddf91d885b0cd9dedc6b4af10dbe5f40e5f31 # Parent 57afd13b64b92b72d21fa507d2c11f51e27b9690 * files.el (delete-directory): New defun. The original function in fileio.c has been renamed to `delete-directory-internal'. diff -r 57afd13b64b9 -r 667ddf91d885 lisp/files.el --- a/lisp/files.el Thu Oct 01 15:01:32 2009 +0000 +++ b/lisp/files.el Thu Oct 01 15:04:22 2009 +0000 @@ -4631,6 +4631,38 @@ (while create-list (make-directory-internal (car create-list)) (setq create-list (cdr create-list)))))))) + +(defun delete-directory (directory &optional recursive) + "Delete the directory named DIRECTORY. Does not follow symlinks. +If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well." + (interactive + (let ((dir (expand-file-name + (read-file-name + "Delete directory: " + default-directory default-directory nil nil)))) + (list dir + (if (directory-files + dir nil "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*") + (y-or-n-p + (format "Directory `%s' is not empty, really delete? " dir)) + nil)))) + ;; If default-directory is a remote directory, + ;; make sure we find its delete-directory handler. + (setq directory (directory-file-name (expand-file-name directory))) + (let ((handler (find-file-name-handler directory 'delete-directory))) + (if handler + (funcall handler 'delete-directory directory recursive) + (if (and recursive (not (file-symlink-p directory))) + (mapc + (lambda (file) + (if (file-directory-p file) + (delete-directory file recursive) + (delete-file file))) + ;; We do not want to delete "." and "..". + (directory-files + directory 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))) + (delete-directory-internal directory)))) + (put 'revert-buffer-function 'permanent-local t) (defvar revert-buffer-function nil