*** /home/micha/today/wdired.el 2012-10-09 02:27:03.638708806 +0200 --- /home/micha/today/wdired-new.el 2012-10-09 02:24:13.498706008 +0200 *************** *** 180,186 **** (defvar wdired-col-perm) ;; Column where the permission bits start (defvar wdired-old-content) (defvar wdired-old-point) ! (defun wdired-mode () "Writable Dired (WDired) mode. --- 180,186 ---- (defvar wdired-col-perm) ;; Column where the permission bits start (defvar wdired-old-content) (defvar wdired-old-point) ! (defvar wdired-old-marks) (defun wdired-mode () "Writable Dired (WDired) mode. *************** *** 221,226 **** --- 221,228 ---- (error "Not a Dired buffer")) (set (make-local-variable 'wdired-old-content) (buffer-substring (point-min) (point-max))) + (set (make-local-variable 'wdired-old-marks) + (dired-remember-marks (point-min) (point-max))) (set (make-local-variable 'wdired-old-point) (point)) (set (make-local-variable 'query-replace-skip-read-only) t) (set (make-local-variable 'isearch-filter-predicate) *************** *** 430,477 **** (let* ((rename (pop renames)) (file-new (cdr rename))) (cond ! ((rassoc file-new renames) ! (error "Trying to rename 2 files to the same name")) ! ((assoc file-new renames) ! ;; Renaming to a file name that already exists but will itself be ! ;; renamed as well. Let's wait until that one gets renamed. ! (push rename residue)) ! ((and (assoc file-new residue) ! ;; Make sure the file really exists: if it doesn't it's ! ;; not really a conflict. It might be a temp-file generated ! ;; specifically to break a circular renaming. ! (file-exists-p file-new)) ! ;; Renaming to a file name that already exists, needed to be renamed, ! ;; but whose renaming could not be performed right away. ! (if (or progress renames) ! ;; There's still a chance the conflict will be resolved. ! (push rename residue) ! ;; We have not made any progress and we've reached the end of ! ;; the renames, so we really have a circular conflict, and we ! ;; have to forcefully break the cycle. ! (message "Circular renaming: using temporary file name") ! (let ((tmp (make-temp-name file-new))) ! (push (cons (car rename) tmp) renames) ! (push (cons tmp file-new) residue)))) ! (t ! (setq progress t) ! (let ((file-ori (car rename))) ! (if wdired-use-interactive-rename ! (wdired-search-and-rename file-ori file-new) ! ;; If dired-rename-file autoloads dired-aux while ! ;; dired-backup-overwrite is locally bound, ! ;; dired-backup-overwrite won't be initialized. ! ;; So we must ensure dired-aux is loaded. ! (require 'dired-aux) ! (condition-case err ! (let ((dired-backup-overwrite nil)) ! (dired-rename-file file-ori file-new ! overwrite)) ! (error ! (setq errors (1+ errors)) ! (dired-log (concat "Rename `" file-ori "' to `" ! file-new "' failed:\n%s\n") ! err))))))))) errors)) --- 432,485 ---- (let* ((rename (pop renames)) (file-new (cdr rename))) (cond ! ((rassoc file-new renames) ! (error "Trying to rename 2 files to the same name")) ! ((assoc file-new renames) ! ;; Renaming to a file name that already exists but will itself be ! ;; renamed as well. Let's wait until that one gets renamed. ! (push rename residue)) ! ((and (assoc file-new residue) ! ;; Make sure the file really exists: if it doesn't it's ! ;; not really a conflict. It might be a temp-file generated ! ;; specifically to break a circular renaming. ! (file-exists-p file-new)) ! ;; Renaming to a file name that already exists, needed to be renamed, ! ;; but whose renaming could not be performed right away. ! (if (or progress renames) ! ;; There's still a chance the conflict will be resolved. ! (push rename residue) ! ;; We have not made any progress and we've reached the end of ! ;; the renames, so we really have a circular conflict, and we ! ;; have to forcefully break the cycle. ! (message "Circular renaming: using temporary file name") ! (let ((tmp (make-temp-name file-new))) ! (push (cons (car rename) tmp) renames) ! (push (cons tmp file-new) residue)))) ! (t ! (setq progress t) ! (let* ((file-ori (car rename)) ! (old-mark (cdr (assoc file-ori wdired-old-marks)))) ! (if wdired-use-interactive-rename ! (wdired-search-and-rename file-ori file-new) ! ;; If dired-rename-file autoloads dired-aux while ! ;; dired-backup-overwrite is locally bound, ! ;; dired-backup-overwrite won't be initialized. ! ;; So we must ensure dired-aux is loaded. ! (require 'dired-aux) ! (condition-case err ! (let ((dired-backup-overwrite nil)) ! (dired-rename-file file-ori file-new ! overwrite) ! (dired-remove-file file-ori) ! (dired-add-file file-new (if (integerp dired-keep-marker-rename) ! dired-keep-marker-rename ! old-mark))) ! (error ! (setq errors (1+ errors)) ! (dired-log (concat "Rename `" file-ori "' to `" ! file-new "' failed:\n%s\n") ! err) ! (dired-add-entry file-ori old-mark))))))))) errors))