Mercurial > emacs
comparison lisp/files.el @ 108851:cb093dac3d58
Merge from mainline.
author | Katsumi Yamaoka <yamaoka@jpl.org> |
---|---|
date | Fri, 28 May 2010 00:48:45 +0000 |
parents | 511da81b16c5 |
children | b29291853540 |
comparison
equal
deleted
inserted
replaced
108850:7cd8ffa6f7db | 108851:cb093dac3d58 |
---|---|
4673 | 4673 |
4674 (defconst directory-files-no-dot-files-regexp | 4674 (defconst directory-files-no-dot-files-regexp |
4675 "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*" | 4675 "^\\([^.]\\|\\.\\([^.]\\|\\..\\)\\).*" |
4676 "Regexp of file names excluging \".\" an \"..\".") | 4676 "Regexp of file names excluging \".\" an \"..\".") |
4677 | 4677 |
4678 (defun delete-directory (directory &optional recursive) | 4678 (defun delete-directory (directory &optional recursive trash) |
4679 "Delete the directory named DIRECTORY. Does not follow symlinks. | 4679 "Delete the directory named DIRECTORY. Does not follow symlinks. |
4680 If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well." | 4680 If RECURSIVE is non-nil, all files in DIRECTORY are deleted as well. |
4681 TRASH non-nil means to trash the directory instead, provided | |
4682 `delete-by-moving-to-trash' is non-nil. | |
4683 | |
4684 When called interactively, TRASH is t if no prefix argument is | |
4685 given. With a prefix argument, TRASH is nil." | |
4681 (interactive | 4686 (interactive |
4682 (let ((dir (expand-file-name | 4687 (let* ((trashing (and delete-by-moving-to-trash |
4683 (read-file-name | 4688 (null current-prefix-arg))) |
4684 "Delete directory: " | 4689 (dir (expand-file-name |
4685 default-directory default-directory nil nil)))) | 4690 (read-file-name |
4691 (if trashing | |
4692 "Move directory to trash: " | |
4693 "Delete directory: ") | |
4694 default-directory default-directory nil nil)))) | |
4686 (list dir | 4695 (list dir |
4687 (if (directory-files dir nil directory-files-no-dot-files-regexp) | 4696 (if (directory-files dir nil directory-files-no-dot-files-regexp) |
4688 (y-or-n-p | 4697 (y-or-n-p |
4689 (format "Directory `%s' is not empty, really delete? " dir)) | 4698 (format "Directory `%s' is not empty, really %s? " |
4690 nil)))) | 4699 dir (if trashing "trash" "delete"))) |
4700 nil) | |
4701 (null current-prefix-arg)))) | |
4691 ;; If default-directory is a remote directory, make sure we find its | 4702 ;; If default-directory is a remote directory, make sure we find its |
4692 ;; delete-directory handler. | 4703 ;; delete-directory handler. |
4693 (setq directory (directory-file-name (expand-file-name directory))) | 4704 (setq directory (directory-file-name (expand-file-name directory))) |
4694 (let ((handler (find-file-name-handler directory 'delete-directory))) | 4705 (let ((handler (find-file-name-handler directory 'delete-directory))) |
4695 (cond | 4706 (cond |
4696 (handler | 4707 (handler |
4697 (funcall handler 'delete-directory directory recursive)) | 4708 (funcall handler 'delete-directory directory recursive)) |
4698 (delete-by-moving-to-trash | 4709 ((and delete-by-moving-to-trash trash) |
4699 ;; Only move non-empty dir to trash if recursive deletion was | 4710 ;; Only move non-empty dir to trash if recursive deletion was |
4700 ;; requested. This mimics the non-`delete-by-moving-to-trash' | 4711 ;; requested. This mimics the non-`delete-by-moving-to-trash' |
4701 ;; case, where the operation fails in delete-directory-internal. | 4712 ;; case, where the operation fails in delete-directory-internal. |
4702 ;; As `move-file-to-trash' trashes directories (empty or | 4713 ;; As `move-file-to-trash' trashes directories (empty or |
4703 ;; otherwise) as a unit, we do not need to recurse here. | 4714 ;; otherwise) as a unit, we do not need to recurse here. |
4713 (mapc (lambda (file) | 4724 (mapc (lambda (file) |
4714 ;; This test is equivalent to | 4725 ;; This test is equivalent to |
4715 ;; (and (file-directory-p fn) (not (file-symlink-p fn))) | 4726 ;; (and (file-directory-p fn) (not (file-symlink-p fn))) |
4716 ;; but more efficient | 4727 ;; but more efficient |
4717 (if (eq t (car (file-attributes file))) | 4728 (if (eq t (car (file-attributes file))) |
4718 (delete-directory file recursive) | 4729 (delete-directory file recursive nil) |
4719 (delete-file file))) | 4730 (delete-file file nil))) |
4720 ;; We do not want to delete "." and "..". | 4731 ;; We do not want to delete "." and "..". |
4721 (directory-files | 4732 (directory-files |
4722 directory 'full directory-files-no-dot-files-regexp))) | 4733 directory 'full directory-files-no-dot-files-regexp))) |
4723 (delete-directory-internal directory))))) | 4734 (delete-directory-internal directory))))) |
4724 | 4735 |