Automatically create parent directories on visiting a new file in Emacs



Categories: emacs

One minute read

In emacs we can open a file in a non-existent directory and then use the command make-directory to create the parent directory (or directories) if they do not exist. While this is really useful, I find it a bit cumbersome to press M-x make-directory RET RET every time I visit such a file. I was looking for ways to automate this when I came across the variable find-file-not-found-functions . According to the documentation ( C-h v find-file-not-found-functions RET )

List of functions to be called for `find-file’ on nonexistent file. These functions are called as soon as the error is detected. Variable ‘buffer-file-name’ is already set up. The functions are called in the order given until one of them returns non-nil.

I wrote a simple function which checks whether the parent directories exist for a given file and offers to create them if they do not exist.

( defun my-create-non-existent-directory () ( let (( parent-directory ( file-name-directory buffer-file-name))) ( when ( and (not ( file-exists-p parent-directory)) ( y-or-n-p ( format "Directory `%s' does not exist! Create it?" parent-directory))) ( make-directory parent-directory t))))

I added this function to find-file-not-found-functions

( add-to-list 'find-file-not-found-functions # 'my-create-non-existent-directory )

So now whenever I visit a file a non existent directory emacs offers to create the parent directories.