complete-computing-environment/delete-this-file.org

2.0 KiB

Quickly Delete the Current File

SPC SPC delete-this-file lets me quickly delete the file my current buffer is editing, and optionally the buffer too:

(defun delete-this-file (&optional buffer-too)
  (interactive "P")
  (let* ((bfn (buffer-file-name))
         (prompt (if buffer-too
                     (format "Delete %s and kill this buffer? " bfn)
                   (format "Delete %s? " bfn))))
    (when (and bfn (yes-or-no-p prompt))
      (delete-file bfn)
      (when buffer-too
        (kill-this-buffer)))))

(defun rename-file-and-buffer (new-name)
  "Renames both current buffer and file it's visiting to NEW-NAME."
  (interactive "sNew name: ")
  (let ((name (buffer-name))
        (filename (buffer-file-name)))
    (if (not filename)
        (message "Buffer '%s' is not visiting a file!" name)
      (if (get-buffer new-name)
          (message "A buffer named '%s' already exists!" new-name)
        (progn
          (rename-file filename new-name 1)
          (rename-buffer new-name)
          (set-visited-file-name new-name)
          (set-buffer-modified-p nil))))))

(defun move-buffer-file (dir)
  "Moves both current buffer and file it's visiting to DIR."
  (interactive "DNew directory: ")
  (let* ((name (buffer-name))
         (filename (buffer-file-name))
         (dir
          (if (string-match dir "\\(?:/\\|\\\\)$")
              (substring dir 0 -1) dir))
         (newname (concat dir "/" name)))
    (if (not filename)
        (message "Buffer '%s' is not visiting a file!" name)
      (progn
        (copy-file filename newname 1)
        (delete-file filename)
        (set-visited-file-name newname)
        (set-buffer-modified-p nil)
        t))))