diff options
author | Zachary Kanfer <zkanfer@gmail.com> | 2022-06-28 14:13:58 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2022-06-28 14:15:47 +0200 |
commit | 772b189143453745a8e014e21d4b6b78f855bba3 (patch) | |
tree | 90cfbdcf735317c412f201ec6fc70cf4e43ca4d7 | |
parent | 0b62ad2f3a57845c664965658da82ffc93cb6e26 (diff) | |
download | emacs-772b189143453745a8e014e21d4b6b78f855bba3.tar.gz |
Add new command `rename-visited-file'
* doc/emacs/files.texi (Save Commands): Document it.
* lisp/files.el (rename-visited-file): New command (bug#56229).
-rw-r--r-- | doc/emacs/files.texi | 3 | ||||
-rw-r--r-- | etc/NEWS | 4 | ||||
-rw-r--r-- | lisp/files.el | 20 |
3 files changed, 27 insertions, 0 deletions
diff --git a/doc/emacs/files.texi b/doc/emacs/files.texi index 5c80cfe1904..2296bacada2 100644 --- a/doc/emacs/files.texi +++ b/doc/emacs/files.texi @@ -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 @@ -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 diff --git a/lisp/files.el b/lisp/files.el index cc38f4e921f..1295c24c933 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -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)) + (defun file-extended-attributes (filename) "Return an alist of extended attributes of file FILENAME. |