aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Ryder <tom@sanctum.geek.nz>2019-05-30 16:40:58 +1200
committerTom Ryder <tom@sanctum.geek.nz>2019-05-30 16:40:58 +1200
commit1fffa6426c1c511668ccf4f5d17a63e94536d5e9 (patch)
treee514dbac9d71fa3aa61d97b822b0cf828a69b87c
parentFirst version (diff)
downloadvim-write-mkpath-1fffa6426c1c511668ccf4f5d17a63e94536d5e9.tar.gz
vim-write-mkpath-1fffa6426c1c511668ccf4f5d17a63e94536d5e9.zip
Extend to respect 'confirm' if set
-rw-r--r--README.md10
-rw-r--r--autoload/write_mkpath.vim21
-rw-r--r--doc/write_mkpath.txt13
3 files changed, 39 insertions, 5 deletions
diff --git a/README.md b/README.md
index aefaaa4..ed9be85 100644
--- a/README.md
+++ b/README.md
@@ -1,8 +1,14 @@
write\_mkpath.vim
=================
-If `:write!` is issued for a file that has nonexistent path elements, create
-the full path with `mkdir()` before saving.
+This plugin supports creation of any missing path elements in the path to a
+buffer's filename before the buffer is written.
+
+If 'confirm' is enabled on `:write` or `:w`, the user will be prompted to
+confirm that Vim should create any missing path elements.
+
+On `:write!` or `:w!`, the path will be created automatically, ignoring the
+value of 'confirm'.
License
-------
diff --git a/autoload/write_mkpath.vim b/autoload/write_mkpath.vim
index 36d3501..94fe21a 100644
--- a/autoload/write_mkpath.vim
+++ b/autoload/write_mkpath.vim
@@ -1,5 +1,24 @@
function! write_mkpath#(path) abort
- if v:cmdbang && !isdirectory(a:path)
+
+ " Path exists, we don't need to do anything
+ if isdirectory(a:path)
+ return
+ endif
+
+ " If :write! was issued, we'll try to create the path; failing that, if
+ " 'confirm' is enabled, and the user responds affirmatively to the prompt,
+ " that will do, too. Otherwise, we will allow the write to fail.
+ if v:cmdbang
+ let l:mkpath = 1
+ elseif &confirm
+ let l:mkpath = confirm('Create path '.a:path.'?', "&Yes\n&No") == 1
+ else
+ let l:mkpath = 0
+ endif
+
+ " If we decided to attempt a path creation, do so
+ if l:mkpath
call mkdir(a:path, 'p')
endif
+
endfunction
diff --git a/doc/write_mkpath.txt b/doc/write_mkpath.txt
index 8d7bcc2..f9d0c9d 100644
--- a/doc/write_mkpath.txt
+++ b/doc/write_mkpath.txt
@@ -2,8 +2,17 @@
DESCRIPTION *write_mkpath*
-If |:write!| is issued for a file that has nonexistent path elements, create
-the full path with |mkdir()| before saving.
+This plugin supports creation of any missing path elements in the path to a
+buffer's filename before the buffer is written.
+
+If 'confirm' is enabled on |:write| or |:w|, the user will be prompted to
+confirm that Vim should create any missing path elements.
+
+On |:write!| or |:w!|, the path will be created automatically, ignoring the
+value of 'confirm'.
+
+The directory creation is done using the |mkdir()| command, with its {path}
+argument set to 'p' to create the elements recursively.
REQUIREMENTS *write_mkpath-requirements*