emacs-devel
[Top][All Lists]
Advanced

[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)))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]