Commit graph

19 commits

Author SHA1 Message Date
Martin von Zweigbergk
170de4749f allow passing environment variables to external tools
We would like our default pager of `less -FRX` to also get passed
`LESSCHARSET=utf-8`. I don't like having defaults that the user can't
specify themselves, so this commits provides users with a way to pass
environment variables to their configured pager (or editor, or merge
tool, ...).

I didn't document this feature and I didn't add it to the config
schema because it seems it's going to be so rarely useful to users.
2023-02-12 07:23:29 -08:00
Yuya Nishihara
ba1c4f5fe5 cli: replace all $variable matches found in edit/merge-args 2023-02-07 18:32:57 +09:00
Yuya Nishihara
a1bfe33a08 cli: expand $left/$right parameters in merge-tools.<name>.edit-args
And set edit_args = ["$left", "$right"] by default.
2023-02-07 18:32:57 +09:00
Yuya Nishihara
449e84d7ea cli: rename interpolate_mergetool_filename_patterns(), inline caller
I'll add string interpolation support to edit-args.
2023-02-07 18:32:57 +09:00
Yuya Nishihara
baa67fe1db cli: make interpolate_mergetool_filename_patterns() simply work with strings
The assumption here is temp_dir wouldn't contain invalid utf-8 bytes. If it
can contain invalid bytes, maybe we can remove temp_dir from arguments, and
chdir(temp_dir) instead.

This unblocks the use of Regex. We could use regex::bytes, but it's way
more complex as we would have to go back and forth between str/OsStr and
bytes.
2023-02-07 18:32:57 +09:00
Yuya Nishihara
d5f05b7897 cli: implement Default for MergeTool, do not override it with empty args
The default edit_args will be changed to ["$left", "$right"] to support
variable substitution without breaking the existing configuration too much.

The default merge_args could also be set if we could come up with something
meaningful.
2023-02-07 18:32:57 +09:00
Yuya Nishihara
7bb7d2bd35 cli: rename FullCommandArgs to CommandNameAndArgs
Per discussion in #1198.
2023-02-06 15:03:08 +09:00
Yuya Nishihara
eb95b31b78 cli: split command name and args by FullCommandArgs
If FullCommandArgs is renamed to CommandNameAndArgs, the meaning of .args()
will get fuzzy. This also clarifies that the name part exists even if the
source command string is empty.
2023-02-06 15:03:08 +09:00
Yuya Nishihara
13d9dc4460 cli: allow to set ui.diff/merge-editor arguments inline
For stock merge-tools, having name -> args indirection makes sense. For
user-specific settings, it's simpler to set command name and arguments
together.

It might be a bit odd that "name with whitespace" can be parsed differently
depending on the existence of merge-tools."name with whitespace".
2023-02-06 11:28:40 +09:00
Yuya Nishihara
78b63c8137 cli: check value type of ui.diff/merge-editor config 2023-02-06 11:28:40 +09:00
Yuya Nishihara
6f4522e34a cli: move MergeArgsNotConfigured to ExternalToolError
Even though this is an error specific to merge operation, I think it's
rather a tool-level error than conflict resolution.
2023-02-06 11:28:40 +09:00
Yuya Nishihara
2f23d0dd10 cli: specify ui.diff/merge-editor keys statically
This helps me grep source code.
2023-02-06 11:28:40 +09:00
Yuya Nishihara
0163bba347 cli: add basic tests for diff/merge-editor configuration 2023-02-06 11:28:40 +09:00
Yuya Nishihara
7b24df25e4 cli: remove redundant check for undefined "merge-tools" section
The section should be defined by default.
2023-01-24 15:06:12 +09:00
Samuel Tardieu
5d0535276c style: use #[error(transparent)] instead of #[error("{0}")]
This is the canonical way of forwarding an error message with
the "thiserror" crate.
2023-01-17 20:39:39 +01:00
Ilya Grigoriev
6b064ef54e run_merge_tool, edit_diff: Print command args with -v instead of errors 2023-01-12 23:07:59 -08:00
Yuya Nishihara
4a28962aaa cli: migrate ui.write_hint() to writeln!() 2023-01-12 17:32:18 +09:00
Yuya Nishihara
20bed8f80e cli: pass UserSettings in to merge_tools::get_*_from_settings() explicitly
editor_name_from_settings() needs &mut Ui to show hint, but we're lucky that
the caller has a clone of UserSettings. This is one reason I want to remove
ui.settings(). A function taking (&mut Ui, &UserSettings) sounds reasonable,
but we can't pass in (&mut ui, ui.settings()) to it.
2023-01-05 07:56:03 +09:00
Ilya Grigoriev
dac80ef88c Rename diff_edit.rs to merge_tools.rs
This is important especially since we're about to rename the `touchup` command into `diffedit`.
2022-12-17 22:26:59 -08:00
Renamed from src/diff_edit.rs (Browse further)