Skip to content

Instantly share code, notes, and snippets.

@knu
Last active September 5, 2023 13:20
Show Gist options
  • Save knu/6114d2a0a64e6840be41e38faf79d046 to your computer and use it in GitHub Desktop.
Save knu/6114d2a0a64e6840be41e38faf79d046 to your computer and use it in GitHub Desktop.
Emacs snippet: Prompt user for make-directory when a non-existent directory is input in read-file-name
;; Prompt user for make-directory when a non-existent directory is input in read-file-name
(defun exit-minibuffer:prompt-for-make-directory (&rest args)
(and (cl-loop
for (_ func) in (backtrace-frames)
with n = 0
do (cl-case func
(read-file-name
(cl-return t))
(read-char-from-minibuffer
(cl-return nil))
(read-from-minibuffer
(if (= n 1)
(cl-return nil)
(incf n)))))
(let* ((path (substitute-in-file-name (minibuffer-contents-no-properties)))
(edir (directory-file-name (file-name-directory (expand-file-name path))))
(dir (abbreviate-file-name edir)))
(when (and (not (file-directory-p edir))
(y-or-n-p (format "Directory %s does not exist; create it?" dir)))
(make-directory edir t)
(message "Directory %s is created!" dir)
(sit-for 1)))))
(advice-add #'exit-minibuffer :before #'exit-minibuffer:prompt-for-make-directory)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment