From 660e0e44b2b6329c1d0af788d624dd5765c2acc6 Mon Sep 17 00:00:00 2001 From: Omnikar Date: Tue, 12 Apr 2022 03:52:54 -0400 Subject: Add `:write!` to create nonexistent subdirectories (#1839) * Make `:write` create nonexistent subdirectories Prompting as to whether this should take place remains a TODO. * Move subdirectory creation to new `w!` command--- helix-view/src/document.rs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'helix-view') diff --git a/helix-view/src/document.rs b/helix-view/src/document.rs index 5d739af5..f4b4dc35 100644 --- a/helix-view/src/document.rs +++ b/helix-view/src/document.rs @@ -434,15 +434,16 @@ impl Document { Some(fut) } - pub fn save(&mut self) -> impl Future> { - self.save_impl::>(None) + pub fn save(&mut self, force: bool) -> impl Future> { + self.save_impl::>(None, force) } pub fn format_and_save( &mut self, formatting: Option>, + force: bool, ) -> impl Future> { - self.save_impl(formatting) + self.save_impl(formatting, force) } // TODO: do we need some way of ensuring two save operations on the same doc can't run at once? @@ -454,6 +455,7 @@ impl Document { fn save_impl>( &mut self, formatting: Option, + force: bool, ) -> impl Future> { // we clone and move text + path into the future so that we asynchronously save the current // state without blocking any further edits. @@ -475,7 +477,11 @@ impl Document { if let Some(parent) = path.parent() { // TODO: display a prompt asking the user if the directories should be created if !parent.exists() { - bail!("can't save file, parent directory does not exist"); + if force { + std::fs::DirBuilder::new().recursive(true).create(parent)?; + } else { + bail!("can't save file, parent directory does not exist"); + } } } -- cgit v1.2.3-70-g09d2