aboutsummaryrefslogtreecommitdiff
path: root/helix-term
diff options
context:
space:
mode:
authorOmnikar2022-04-12 07:52:54 +0000
committerGitHub2022-04-12 07:52:54 +0000
commit660e0e44b2b6329c1d0af788d624dd5765c2acc6 (patch)
tree03a5e162612c5c2e3ebf62530baaab2d13e63da8 /helix-term
parentd5c086697896d87f034c1dbe0ae0ccbc71f37d2c (diff)
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
Diffstat (limited to 'helix-term')
-rw-r--r--helix-term/src/commands/typed.rs31
1 files changed, 25 insertions, 6 deletions
diff --git a/helix-term/src/commands/typed.rs b/helix-term/src/commands/typed.rs
index 8f74adb6..d158388f 100644
--- a/helix-term/src/commands/typed.rs
+++ b/helix-term/src/commands/typed.rs
@@ -190,7 +190,11 @@ fn buffer_previous(
Ok(())
}
-fn write_impl(cx: &mut compositor::Context, path: Option<&Cow<str>>) -> anyhow::Result<()> {
+fn write_impl(
+ cx: &mut compositor::Context,
+ path: Option<&Cow<str>>,
+ force: bool,
+) -> anyhow::Result<()> {
let jobs = &mut cx.jobs;
let doc = doc_mut!(cx.editor);
@@ -212,7 +216,7 @@ fn write_impl(cx: &mut compositor::Context, path: Option<&Cow<str>>) -> anyhow::
jobs.callback(callback);
shared
});
- let future = doc.format_and_save(fmt);
+ let future = doc.format_and_save(fmt, force);
cx.jobs.add(Job::new(future).wait_before_exiting());
if path.is_some() {
@@ -228,7 +232,15 @@ fn write(
args: &[Cow<str>],
_event: PromptEvent,
) -> anyhow::Result<()> {
- write_impl(cx, args.first())
+ write_impl(cx, args.first(), false)
+}
+
+fn force_write(
+ cx: &mut compositor::Context,
+ args: &[Cow<str>],
+ _event: PromptEvent,
+) -> anyhow::Result<()> {
+ write_impl(cx, args.first(), true)
}
fn new_file(
@@ -381,7 +393,7 @@ fn write_quit(
args: &[Cow<str>],
event: PromptEvent,
) -> anyhow::Result<()> {
- write_impl(cx, args.first())?;
+ write_impl(cx, args.first(), false)?;
quit(cx, &[], event)
}
@@ -390,7 +402,7 @@ fn force_write_quit(
args: &[Cow<str>],
event: PromptEvent,
) -> anyhow::Result<()> {
- write_impl(cx, args.first())?;
+ write_impl(cx, args.first(), true)?;
force_quit(cx, &[], event)
}
@@ -447,7 +459,7 @@ fn write_all_impl(
jobs.callback(callback);
shared
});
- let future = doc.format_and_save(fmt);
+ let future = doc.format_and_save(fmt, force);
jobs.add(Job::new(future).wait_before_exiting());
}
@@ -1141,6 +1153,13 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
completer: Some(completers::filename),
},
TypableCommand {
+ name: "write!",
+ aliases: &["w!"],
+ doc: "Write changes to disk forcefully (creating necessary subdirectories). Accepts an optional path (:write some/path.txt)",
+ fun: force_write,
+ completer: Some(completers::filename),
+ },
+ TypableCommand {
name: "new",
aliases: &["n"],
doc: "Create a new scratch buffer.",