mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Fix default-directory of buffers visiting files in renamed directories
* lisp/dired-aux.el (dired-rename-file): Take note of whether FILE is a directory before it is renamed, which makes it impossible to determine if it was a directory. (dired-rename-subdir, dired-rename-subdir-1): Revert to using dired-in-this-tree-p instead of file-in-directory-p, for the benefit of files that were renamed/removed, because file-in-directory-p returns nil in those cases. (Bug#54838)
This commit is contained in:
parent
cccaa9c31d
commit
e71c7a7c60
1 changed files with 19 additions and 18 deletions
|
|
@ -1838,22 +1838,23 @@ rename them using `vc-rename-file'."
|
||||||
"Rename FILE to NEWNAME.
|
"Rename FILE to NEWNAME.
|
||||||
Signal a `file-already-exists' error if a file NEWNAME already exists
|
Signal a `file-already-exists' error if a file NEWNAME already exists
|
||||||
unless OK-IF-ALREADY-EXISTS is non-nil."
|
unless OK-IF-ALREADY-EXISTS is non-nil."
|
||||||
(dired-handle-overwrite newname)
|
(let ((file-is-dir-p (file-directory-p file)))
|
||||||
(dired-maybe-create-dirs (file-name-directory newname))
|
(dired-handle-overwrite newname)
|
||||||
(if (and dired-vc-rename-file
|
(dired-maybe-create-dirs (file-name-directory newname))
|
||||||
(vc-backend file)
|
(if (and dired-vc-rename-file
|
||||||
(ignore-errors (vc-responsible-backend newname)))
|
(vc-backend file)
|
||||||
(vc-rename-file file newname)
|
(ignore-errors (vc-responsible-backend newname)))
|
||||||
;; error is caught in -create-files
|
(vc-rename-file file newname)
|
||||||
(rename-file file newname ok-if-already-exists))
|
;; error is caught in -create-files
|
||||||
;; Silently rename the visited file of any buffer visiting this file.
|
(rename-file file newname ok-if-already-exists))
|
||||||
(and (get-file-buffer file)
|
;; Silently rename the visited file of any buffer visiting this file.
|
||||||
(with-current-buffer (get-file-buffer file)
|
(and (get-file-buffer file)
|
||||||
(set-visited-file-name newname nil t)))
|
(with-current-buffer (get-file-buffer file)
|
||||||
(dired-remove-file file)
|
(set-visited-file-name newname nil t)))
|
||||||
;; See if it's an inserted subdir, and rename that, too.
|
(dired-remove-file file)
|
||||||
(when (file-directory-p file)
|
;; See if it's an inserted subdir, and rename that, too.
|
||||||
(dired-rename-subdir file newname)))
|
(when file-is-dir-p
|
||||||
|
(dired-rename-subdir file newname))))
|
||||||
|
|
||||||
(defun dired-rename-subdir (from-dir to-dir)
|
(defun dired-rename-subdir (from-dir to-dir)
|
||||||
(setq from-dir (file-name-as-directory from-dir)
|
(setq from-dir (file-name-as-directory from-dir)
|
||||||
|
|
@ -1866,7 +1867,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
|
||||||
(while blist
|
(while blist
|
||||||
(with-current-buffer (car blist)
|
(with-current-buffer (car blist)
|
||||||
(if (and buffer-file-name
|
(if (and buffer-file-name
|
||||||
(file-in-directory-p buffer-file-name expanded-from-dir))
|
(dired-in-this-tree-p buffer-file-name expanded-from-dir))
|
||||||
(let ((modflag (buffer-modified-p))
|
(let ((modflag (buffer-modified-p))
|
||||||
(to-file (replace-regexp-in-string
|
(to-file (replace-regexp-in-string
|
||||||
(concat "^" (regexp-quote from-dir))
|
(concat "^" (regexp-quote from-dir))
|
||||||
|
|
@ -1885,7 +1886,7 @@ unless OK-IF-ALREADY-EXISTS is non-nil."
|
||||||
(while alist
|
(while alist
|
||||||
(setq elt (car alist)
|
(setq elt (car alist)
|
||||||
alist (cdr alist))
|
alist (cdr alist))
|
||||||
(if (file-in-directory-p (car elt) expanded-dir)
|
(if (dired-in-this-tree-p (car elt) expanded-dir)
|
||||||
;; ELT's subdir is affected by the rename
|
;; ELT's subdir is affected by the rename
|
||||||
(dired-rename-subdir-2 elt dir to)))
|
(dired-rename-subdir-2 elt dir to)))
|
||||||
(if (equal dir default-directory)
|
(if (equal dir default-directory)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue