mirror of https://github.com/helix-editor/helix
Add a '--no-format' flag for :write commands
parent
636cbe58e3
commit
2f560914fb
|
@ -321,7 +321,11 @@ fn buffer_previous(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_impl(cx: &mut compositor::Context, path: Option<&str>, force: bool) -> anyhow::Result<()> {
|
fn write_impl(
|
||||||
|
cx: &mut compositor::Context,
|
||||||
|
path: Option<&str>,
|
||||||
|
options: WriteOptions,
|
||||||
|
) -> anyhow::Result<()> {
|
||||||
let config = cx.editor.config();
|
let config = cx.editor.config();
|
||||||
let jobs = &mut cx.jobs;
|
let jobs = &mut cx.jobs;
|
||||||
let (view, doc) = current!(cx.editor);
|
let (view, doc) = current!(cx.editor);
|
||||||
|
@ -340,14 +344,14 @@ fn write_impl(cx: &mut compositor::Context, path: Option<&str>, force: bool) ->
|
||||||
doc.append_changes_to_history(view);
|
doc.append_changes_to_history(view);
|
||||||
|
|
||||||
let (view, doc) = current_ref!(cx.editor);
|
let (view, doc) = current_ref!(cx.editor);
|
||||||
let fmt = if config.auto_format {
|
let fmt = if config.auto_format && options.auto_format {
|
||||||
doc.auto_format(cx.editor).map(|fmt| {
|
doc.auto_format(cx.editor).map(|fmt| {
|
||||||
let callback = make_format_callback(
|
let callback = make_format_callback(
|
||||||
doc.id(),
|
doc.id(),
|
||||||
doc.version(),
|
doc.version(),
|
||||||
view.id,
|
view.id,
|
||||||
fmt,
|
fmt,
|
||||||
Some((path.map(Into::into), force)),
|
Some((path.map(Into::into), options.force)),
|
||||||
);
|
);
|
||||||
|
|
||||||
jobs.add(Job::with_callback(callback).wait_before_exiting());
|
jobs.add(Job::with_callback(callback).wait_before_exiting());
|
||||||
|
@ -358,7 +362,7 @@ fn write_impl(cx: &mut compositor::Context, path: Option<&str>, force: bool) ->
|
||||||
|
|
||||||
if fmt.is_none() {
|
if fmt.is_none() {
|
||||||
let id = doc.id();
|
let id = doc.id();
|
||||||
cx.editor.save(id, path, force)?;
|
cx.editor.save(id, path, options.force)?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -423,12 +427,25 @@ fn insert_final_newline(doc: &mut Document, view_id: ViewId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub struct WriteOptions {
|
||||||
|
pub force: bool,
|
||||||
|
pub auto_format: bool,
|
||||||
|
}
|
||||||
|
|
||||||
fn write(cx: &mut compositor::Context, args: Args, event: PromptEvent) -> anyhow::Result<()> {
|
fn write(cx: &mut compositor::Context, args: Args, event: PromptEvent) -> anyhow::Result<()> {
|
||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
write_impl(cx, args.first(), false)
|
write_impl(
|
||||||
|
cx,
|
||||||
|
args.first(),
|
||||||
|
WriteOptions {
|
||||||
|
force: false,
|
||||||
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn force_write(cx: &mut compositor::Context, args: Args, event: PromptEvent) -> anyhow::Result<()> {
|
fn force_write(cx: &mut compositor::Context, args: Args, event: PromptEvent) -> anyhow::Result<()> {
|
||||||
|
@ -436,7 +453,14 @@ fn force_write(cx: &mut compositor::Context, args: Args, event: PromptEvent) ->
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
write_impl(cx, args.first(), true)
|
write_impl(
|
||||||
|
cx,
|
||||||
|
args.first(),
|
||||||
|
WriteOptions {
|
||||||
|
force: true,
|
||||||
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_buffer_close(
|
fn write_buffer_close(
|
||||||
|
@ -448,7 +472,14 @@ fn write_buffer_close(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
write_impl(cx, args.first(), false)?;
|
write_impl(
|
||||||
|
cx,
|
||||||
|
args.first(),
|
||||||
|
WriteOptions {
|
||||||
|
force: false,
|
||||||
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
let document_ids = buffer_gather_paths_impl(cx.editor, args);
|
let document_ids = buffer_gather_paths_impl(cx.editor, args);
|
||||||
buffer_close_by_ids_impl(cx, &document_ids, false)
|
buffer_close_by_ids_impl(cx, &document_ids, false)
|
||||||
|
@ -463,7 +494,14 @@ fn force_write_buffer_close(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
write_impl(cx, args.first(), true)?;
|
write_impl(
|
||||||
|
cx,
|
||||||
|
args.first(),
|
||||||
|
WriteOptions {
|
||||||
|
force: true,
|
||||||
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
|
},
|
||||||
|
)?;
|
||||||
|
|
||||||
let document_ids = buffer_gather_paths_impl(cx.editor, args);
|
let document_ids = buffer_gather_paths_impl(cx.editor, args);
|
||||||
buffer_close_by_ids_impl(cx, &document_ids, false)
|
buffer_close_by_ids_impl(cx, &document_ids, false)
|
||||||
|
@ -644,7 +682,14 @@ fn write_quit(cx: &mut compositor::Context, args: Args, event: PromptEvent) -> a
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
write_impl(cx, args.first(), false)?;
|
write_impl(
|
||||||
|
cx,
|
||||||
|
args.first(),
|
||||||
|
WriteOptions {
|
||||||
|
force: false,
|
||||||
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
|
},
|
||||||
|
)?;
|
||||||
cx.block_try_flush_writes()?;
|
cx.block_try_flush_writes()?;
|
||||||
quit(cx, Args::default(), event)
|
quit(cx, Args::default(), event)
|
||||||
}
|
}
|
||||||
|
@ -658,7 +703,14 @@ fn force_write_quit(
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
write_impl(cx, args.first(), true)?;
|
write_impl(
|
||||||
|
cx,
|
||||||
|
args.first(),
|
||||||
|
WriteOptions {
|
||||||
|
force: true,
|
||||||
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
|
},
|
||||||
|
)?;
|
||||||
cx.block_try_flush_writes()?;
|
cx.block_try_flush_writes()?;
|
||||||
force_quit(cx, Args::default(), event)
|
force_quit(cx, Args::default(), event)
|
||||||
}
|
}
|
||||||
|
@ -780,7 +832,7 @@ pub fn write_all_impl(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_all(cx: &mut compositor::Context, _args: Args, event: PromptEvent) -> anyhow::Result<()> {
|
fn write_all(cx: &mut compositor::Context, args: Args, event: PromptEvent) -> anyhow::Result<()> {
|
||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
@ -790,14 +842,14 @@ fn write_all(cx: &mut compositor::Context, _args: Args, event: PromptEvent) -> a
|
||||||
WriteAllOptions {
|
WriteAllOptions {
|
||||||
force: false,
|
force: false,
|
||||||
write_scratch: true,
|
write_scratch: true,
|
||||||
auto_format: true,
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn force_write_all(
|
fn force_write_all(
|
||||||
cx: &mut compositor::Context,
|
cx: &mut compositor::Context,
|
||||||
_args: Args,
|
args: Args,
|
||||||
event: PromptEvent,
|
event: PromptEvent,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
|
@ -809,14 +861,14 @@ fn force_write_all(
|
||||||
WriteAllOptions {
|
WriteAllOptions {
|
||||||
force: true,
|
force: true,
|
||||||
write_scratch: true,
|
write_scratch: true,
|
||||||
auto_format: true,
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_all_quit(
|
fn write_all_quit(
|
||||||
cx: &mut compositor::Context,
|
cx: &mut compositor::Context,
|
||||||
_args: Args,
|
args: Args,
|
||||||
event: PromptEvent,
|
event: PromptEvent,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
|
@ -827,7 +879,7 @@ fn write_all_quit(
|
||||||
WriteAllOptions {
|
WriteAllOptions {
|
||||||
force: false,
|
force: false,
|
||||||
write_scratch: true,
|
write_scratch: true,
|
||||||
auto_format: true,
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
},
|
},
|
||||||
)?;
|
)?;
|
||||||
quit_all_impl(cx, false)
|
quit_all_impl(cx, false)
|
||||||
|
@ -835,7 +887,7 @@ fn write_all_quit(
|
||||||
|
|
||||||
fn force_write_all_quit(
|
fn force_write_all_quit(
|
||||||
cx: &mut compositor::Context,
|
cx: &mut compositor::Context,
|
||||||
_args: Args,
|
args: Args,
|
||||||
event: PromptEvent,
|
event: PromptEvent,
|
||||||
) -> anyhow::Result<()> {
|
) -> anyhow::Result<()> {
|
||||||
if event != PromptEvent::Validate {
|
if event != PromptEvent::Validate {
|
||||||
|
@ -846,7 +898,7 @@ fn force_write_all_quit(
|
||||||
WriteAllOptions {
|
WriteAllOptions {
|
||||||
force: true,
|
force: true,
|
||||||
write_scratch: true,
|
write_scratch: true,
|
||||||
auto_format: true,
|
auto_format: !args.has_flag(WRITE_NO_FORMAT_FLAG.name),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
quit_all_impl(cx, true)
|
quit_all_impl(cx, true)
|
||||||
|
@ -2588,6 +2640,12 @@ const SHELL_COMPLETER: CommandCompleter = CommandCompleter::positional(&[
|
||||||
completers::repeating_filenames,
|
completers::repeating_filenames,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
const WRITE_NO_FORMAT_FLAG: Flag = Flag {
|
||||||
|
name: "no-format",
|
||||||
|
doc: "skip auto-formatting",
|
||||||
|
..Flag::DEFAULT
|
||||||
|
};
|
||||||
|
|
||||||
pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
TypableCommand {
|
TypableCommand {
|
||||||
name: "quit",
|
name: "quit",
|
||||||
|
@ -2718,6 +2776,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::positional(&[completers::filename]),
|
completer: CommandCompleter::positional(&[completers::filename]),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(1)),
|
positionals: (0, Some(1)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2729,6 +2788,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::positional(&[completers::filename]),
|
completer: CommandCompleter::positional(&[completers::filename]),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(1)),
|
positionals: (0, Some(1)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2740,6 +2800,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::positional(&[completers::filename]),
|
completer: CommandCompleter::positional(&[completers::filename]),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(1)),
|
positionals: (0, Some(1)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2751,6 +2812,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::positional(&[completers::filename]),
|
completer: CommandCompleter::positional(&[completers::filename]),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(1)),
|
positionals: (0, Some(1)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2831,6 +2893,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::positional(&[completers::filename]),
|
completer: CommandCompleter::positional(&[completers::filename]),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(1)),
|
positionals: (0, Some(1)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2842,6 +2905,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::positional(&[completers::filename]),
|
completer: CommandCompleter::positional(&[completers::filename]),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(1)),
|
positionals: (0, Some(1)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2853,6 +2917,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::none(),
|
completer: CommandCompleter::none(),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(0)),
|
positionals: (0, Some(0)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2864,6 +2929,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::none(),
|
completer: CommandCompleter::none(),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(0)),
|
positionals: (0, Some(0)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2875,6 +2941,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::none(),
|
completer: CommandCompleter::none(),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(0)),
|
positionals: (0, Some(0)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -2886,6 +2953,7 @@ pub const TYPABLE_COMMAND_LIST: &[TypableCommand] = &[
|
||||||
completer: CommandCompleter::none(),
|
completer: CommandCompleter::none(),
|
||||||
signature: Signature {
|
signature: Signature {
|
||||||
positionals: (0, Some(0)),
|
positionals: (0, Some(0)),
|
||||||
|
flags: &[WRITE_NO_FORMAT_FLAG],
|
||||||
..Signature::DEFAULT
|
..Signature::DEFAULT
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue