diff options
| author | Michael Albinus | 2009-10-01 15:04:22 +0000 |
|---|---|---|
| committer | Michael Albinus | 2009-10-01 15:04:22 +0000 |
| commit | 96ad4c3575868c703c9789a16126014f303e6c1f (patch) | |
| tree | 6fb59564337966517e04b07e494c71965cf6e393 | |
| parent | 56808ea036393fbb57d9b07bb1f78bb61b2098ed (diff) | |
| download | emacs-96ad4c3575868c703c9789a16126014f303e6c1f.tar.gz emacs-96ad4c3575868c703c9789a16126014f303e6c1f.zip | |
* files.el (delete-directory): New defun. The original function
in fileio.c has been renamed to `delete-directory-internal'.
| -rw-r--r-- | lisp/files.el | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/lisp/files.el b/lisp/files.el index a7eac5fb63e..61de4cb1704 100644 --- a/lisp/files.el +++ b/lisp/files.el | |||
| @@ -4631,6 +4631,38 @@ this happens by default." | |||
| 4631 | (while create-list | 4631 | (while create-list |
| 4632 | (make-directory-internal (car create-list)) | 4632 | (make-directory-internal (car create-list)) |
| 4633 | (setq create-list (cdr create-list)))))))) | 4633 | (setq create-list (cdr create-list)))))))) |
| 4634 | |||
| 4635 | (defun delete-directory (directory &optional recursive) | ||
| 4636 | "Delete the directory named DIRECTORY. Does not follow symlinks. | ||
| 4637 | If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well." | ||
| 4638 | (interactive | ||
| 4639 | (let ((dir (expand-file-name | ||
| 4640 | (read-file-name | ||
| 4641 | "Delete directory: " | ||
| 4642 | default-directory default-directory nil nil)))) | ||
| 4643 | (list dir | ||
| 4644 | (if (directory-files | ||
| 4645 | dir nil "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*") | ||
| 4646 | (y-or-n-p | ||
| 4647 | (format "Directory `%s' is not empty, really delete? " dir)) | ||
| 4648 | nil)))) | ||
| 4649 | ;; If default-directory is a remote directory, | ||
| 4650 | ;; make sure we find its delete-directory handler. | ||
| 4651 | (setq directory (directory-file-name (expand-file-name directory))) | ||
| 4652 | (let ((handler (find-file-name-handler directory 'delete-directory))) | ||
| 4653 | (if handler | ||
| 4654 | (funcall handler 'delete-directory directory recursive) | ||
| 4655 | (if (and recursive (not (file-symlink-p directory))) | ||
| 4656 | (mapc | ||
| 4657 | (lambda (file) | ||
| 4658 | (if (file-directory-p file) | ||
| 4659 | (delete-directory file recursive) | ||
| 4660 | (delete-file file))) | ||
| 4661 | ;; We do not want to delete "." and "..". | ||
| 4662 | (directory-files | ||
| 4663 | directory 'full "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*"))) | ||
| 4664 | (delete-directory-internal directory)))) | ||
| 4665 | |||
| 4634 | 4666 | ||
| 4635 | (put 'revert-buffer-function 'permanent-local t) | 4667 | (put 'revert-buffer-function 'permanent-local t) |
| 4636 | (defvar revert-buffer-function nil | 4668 | (defvar revert-buffer-function nil |