]> git.eshelyaron.com Git - emacs.git/commitdiff
Add new command `rename-visited-file'
authorZachary Kanfer <zkanfer@gmail.com>
Tue, 28 Jun 2022 12:13:58 +0000 (14:13 +0200)
committerLars Ingebrigtsen <larsi@gnus.org>
Tue, 28 Jun 2022 12:15:47 +0000 (14:15 +0200)
* doc/emacs/files.texi (Save Commands): Document it.

* lisp/files.el (rename-visited-file): New command (bug#56229).

doc/emacs/files.texi
etc/NEWS
lisp/files.el

index 5c80cfe19049fd7c7c94950980adad073ab95509..2296bacada213af2b2931d22993b8bb2941d6676 100644 (file)
@@ -420,6 +420,9 @@ With prefix argument (@kbd{C-u}), mark the current buffer as changed.
 Save the current buffer with a specified file name (@code{write-file}).
 @item M-x set-visited-file-name
 Change the file name under which the current buffer will be saved.
+@item M-x rename-visited-file
+The same as @kbd{M-x set-visited-file-name}, but also rename the file
+the buffer if visiting (if any).
 @end table
 
 @kindex C-x C-s
index 831486bb79ebdc7f2dad6a60eeb2a9a536e3fc24..c7e0d03d6eee3ad91d4aa915f1335105ece78d91 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -352,6 +352,10 @@ match those regexps will be ignored by 'switch-to-prev-buffer' and
 
 ** Menus
 
+** New command 'rename-visited-file'.
+This command renames the file visited by the current buffer by moving
+it to a new location, and also makes the buffer visit this new file.
+
 ---
 *** The entries following the buffers in the "Buffers" menu can now be altered.
 Change the 'menu-bar-buffers-menu-command-entries' variable to alter
index cc38f4e921f02e4de2ff1c3560ee99b5c1f0efd3..1295c24c9334c6e91cb5cc258092cbd64601466c 100644 (file)
@@ -4824,6 +4824,26 @@ Interactively, confirmation is required unless you supply a prefix argument."
     ;; It's likely that the VC status at the new location is different from
     ;; the one at the old location.
     (vc-refresh-state)))
+
+(defun rename-visited-file (new-location)
+  "Rename the file visited by the current buffer to NEW-LOCATION.
+This command also sets the visited file name.  If the buffer
+isn't visiting any file, that's all it does.
+
+Interactively, this prompts for NEW-LOCATION."
+  (interactive
+   (list (if buffer-file-name
+             (read-file-name "Rename visited file to: ")
+           (read-file-name "Set visited file name: "
+                           default-directory
+                           (expand-file-name
+                            (file-name-nondirectory (buffer-name))
+                            default-directory)))))
+  (when (and buffer-file-name
+             (file-exists-p buffer-file-name))
+    (rename-file buffer-file-name new-location))
+  (set-visited-file-name new-location nil t))
+
 \f
 (defun file-extended-attributes (filename)
   "Return an alist of extended attributes of file FILENAME.