From 75c0a5ceb32d8a503915a93ccc1b64c8ad1cba8b Mon Sep 17 00:00:00 2001 From: Lloyd Bond Date: Mon, 2 Oct 2023 21:18:27 -0400 Subject: [PATCH] enable starting hx with a working directory (#8223) * added working path arg to cli and help menu * improve working path cli arg handling * enable hx to set the working path * applied cargo formatting * improved code from cargo clippy suggestion * improved code from follow up review * fix for -w is set but args.files is empty * improved formatting of --help output --- helix-term/src/application.rs | 3 +++ helix-term/src/args.rs | 15 +++++++++++++++ helix-term/src/main.rs | 1 + 3 files changed, 19 insertions(+) diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs index 3e6da5bbd..7c23ddfe2 100644 --- a/helix-term/src/application.rs +++ b/helix-term/src/application.rs @@ -156,6 +156,9 @@ impl Application { let editor_view = Box::new(ui::EditorView::new(Keymaps::new(keys))); compositor.push(editor_view); + if let Some(path) = args.working_directory { + helix_loader::set_current_working_dir(path)? + } if args.load_tutor { let path = helix_loader::runtime_file(Path::new("tutor")); editor.open(&path, Action::VerticalSplit)?; diff --git a/helix-term/src/args.rs b/helix-term/src/args.rs index dd787f1fd..f782539ca 100644 --- a/helix-term/src/args.rs +++ b/helix-term/src/args.rs @@ -17,6 +17,7 @@ pub struct Args { pub log_file: Option, pub config_file: Option, pub files: Vec<(PathBuf, Position)>, + pub working_directory: Option, } impl Args { @@ -59,6 +60,20 @@ impl Args { Some(path) => args.log_file = Some(path.into()), None => anyhow::bail!("--log must specify a path to write"), }, + "-w" | "--working-dir" => match argv.next().as_deref() { + Some(path) => { + args.working_directory = if Path::new(path).is_dir() { + Some(PathBuf::from(path)) + } else { + anyhow::bail!( + "--working-dir specified does not exist or is not a directory" + ) + } + } + None => { + anyhow::bail!("--working-dir must specify an initial working directory") + } + }, arg if arg.starts_with("--") => { anyhow::bail!("unexpected double dash argument: {}", arg) } diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs index 542d18e6a..009cbf7f4 100644 --- a/helix-term/src/main.rs +++ b/helix-term/src/main.rs @@ -66,6 +66,7 @@ FLAGS: -V, --version Prints version information --vsplit Splits all given files vertically into different windows --hsplit Splits all given files horizontally into different windows + -w, --working-dir Specify an initial working directory ", env!("CARGO_PKG_NAME"), VERSION_AND_GIT_HASH,