[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Rename, delete and move current buffer and file
From: |
net june |
Subject: |
Re: Rename, delete and move current buffer and file |
Date: |
Fri, 11 May 2018 16:10:23 +0000 |
On 05/11/2018 02:26 PM, Andreas Röhler wrote:
> Sound cool and should save a keystroke WRT dired-jump and friends.
> May you post the code?
>
Yes. The following is it.
(defun my-rename-file (arg)
"Rename or delete the file visited by current buffer."
(interactive "P")
(unless buffer-file-name
(user-error "Not a file buffer"))
(let ((old-name (file-name-nondirectory buffer-file-name))
new-file-name)
(if arg
(let ((tmp-file-name (read-file-name "Rename to: ")))
(setq new-file-name
(if (file-directory-p tmp-file-name)
(concat (file-name-as-directory
tmp-file-name) old-name)
tmp-file-name)))
(let* ((new-name (read-string "New file name: " old-name)))
(when (string= new-name old-name)
(user-error "Same as the old name. Not renamed."))
(if (string= new-name "")
(when (yes-or-no-p
(format "Delete file \"%s\"?"
buffer-file-name))
;; On fail, it will signal an error and abort.
(delete-file buffer-file-name)
(set-buffer-modified-p nil)
(kill-buffer)
(message "File deleted"))
(setq new-file-name (expand-file-name new-name)))))
(when new-file-name
(let ((modify-flag (buffer-modified-p))
(old-file-name buffer-file-name))
;; On fail, it will signal an error and abort.
(rename-file buffer-file-name new-file-name 1)
(set-visited-file-name new-file-name)
(rename-buffer (file-name-nondirectory new-file-name) t)
(set-buffer-modified-p modify-flag)
(message "Renamed: %s ==> %s" old-file-name new-file-name)))))
- Re: Rename, delete and move current buffer and file, (continued)
Re: Rename, delete and move current buffer and file, Yuri Khan, 2018/05/07
Re: Rename, delete and move current buffer and file, Andreas Röhler, 2018/05/07