emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/crux 2c7143de47 5/6: More robust `crux-rename-file-and-buf


From: ELPA Syncer
Subject: [nongnu] elpa/crux 2c7143de47 5/6: More robust `crux-rename-file-and-buffer`.
Date: Mon, 21 Nov 2022 03:58:59 -0500 (EST)

branch: elpa/crux
commit 2c7143de477a804fa694600d01bfb196977087d1
Author: Jimmy Yuen Ho Wong <wyuenho@gmail.com>
Commit: Bozhidar Batsov <bozhidar@batsov.dev>

    More robust `crux-rename-file-and-buffer`.
    
    * Offer to save file first if modified or new unsaved buffer.
    * Message user if new file name is the same.
---
 CHANGELOG.md |  1 +
 crux.el      | 15 ++++++++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d98ae2d78..47ee8efe67 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,7 @@
 # Changelog
 
 ## master (unreleased)
+* More robust `crux-rename-file-and-buffer`.
 
 * [#94](https://github.com/bbatsov/crux/pull/94): Add 
`crux-with-region-or-sexp-or-line`.
 
diff --git a/crux.el b/crux.el
index e7aa8aaf1f..deb45d9f93 100644
--- a/crux.el
+++ b/crux.el
@@ -37,6 +37,7 @@
 (require 'thingatpt)
 (require 'seq)
 (require 'tramp)
+(require 'subr-x)
 
 (declare-function dired-get-file-for-visit "dired")
 (declare-function org-element-property "org-element")
@@ -413,11 +414,15 @@ there's a region, all lines that region covers will be 
duplicated."
 (defun crux-rename-file-and-buffer ()
   "Rename current buffer and if the buffer is visiting a file, rename it too."
   (interactive)
-  (let ((filename (buffer-file-name)))
-    (if (not (and filename (file-exists-p filename)))
-        (rename-buffer (read-from-minibuffer "New name: " (buffer-name)))
-      (let* ((new-name (read-file-name "New name: " (file-name-directory 
filename)))
-             (containing-dir (file-name-directory new-name)))
+  (when-let* ((filename (buffer-file-name))
+              (new-name (or (read-file-name "New name: " (file-name-directory 
filename) nil 'confirm)))
+              (containing-dir (file-name-directory new-name)))
+    (when (or (buffer-modified-p) (not (file-exists-p filename)))
+      (if (y-or-n-p "Can't move file before saving. Would you like to save it 
now?")
+          (save-buffer)))
+    (if (get-file-buffer new-name)
+        (message "Already editing new file name")
+      (progn
         (make-directory containing-dir t)
         (cond
          ((vc-backend filename)



reply via email to

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