Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'helix-term/src/main.rs')
-rw-r--r--helix-term/src/main.rs75
1 files changed, 40 insertions, 35 deletions
diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs
index bdca0c01..fbe1a846 100644
--- a/helix-term/src/main.rs
+++ b/helix-term/src/main.rs
@@ -1,4 +1,5 @@
use anyhow::{Context, Error, Result};
+use crossterm::event::EventStream;
use helix_loader::VERSION_AND_GIT_HASH;
use helix_term::application::Application;
use helix_term::args::Args;
@@ -39,15 +40,8 @@ fn main() -> Result<()> {
#[tokio::main]
async fn main_impl() -> Result<i32> {
- let args = Args::parse_args().context("could not parse arguments")?;
-
- helix_loader::initialize_config_file(args.config_file.clone());
- helix_loader::initialize_log_file(args.log_file.clone());
-
- // Help has a higher priority and should be handled separately.
- if args.display_help {
- print!(
- "\
+ let help = format!(
+ "\
{} {}
{}
{}
@@ -56,34 +50,40 @@ USAGE:
hx [FLAGS] [files]...
ARGS:
- <files>... Set the input file to use, position can also be specified via file[:row[:col]]
+ <files>... Sets the input file to use, position can also be specified via file[:row[:col]]
FLAGS:
- -h, --help Print help information
- --tutor Load the tutorial
- --health [CATEGORY] Check for potential errors in editor setup
- CATEGORY can be a language or one of 'clipboard', 'languages',
- 'all-languages' or 'all'. 'languages' is filtered according to
- user config, 'all-languages' and 'all' are not. If not specified,
- the default is the same as 'all', but with languages filtering.
- -g, --grammar {{fetch|build}} Fetch or builds tree-sitter grammars listed in languages.toml
- -c, --config <file> Specify a file to use for configuration
- -v Increase logging verbosity each use for up to 3 times
- --log <file> Specify a file to use for logging
+ -h, --help Prints help information
+ --tutor Loads the tutorial
+ --health [CATEGORY] Checks for potential errors in editor setup
+ CATEGORY can be a language or one of 'clipboard', 'languages'
+ or 'all'. 'all' is the default if not specified.
+ -g, --grammar {{fetch|build}} Fetches or builds tree-sitter grammars listed in languages.toml
+ -c, --config <file> Specifies a file to use for configuration
+ -v Increases logging verbosity each use for up to 3 times
+ --log <file> Specifies a file to use for logging
(default file: {})
- -V, --version Print version information
- --vsplit Split all given files vertically into different windows
- --hsplit Split all given files horizontally into different windows
+ -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 <path> Specify an initial working directory
- +[N] Open the first given file at line number N, or the last line, if
- N is not specified.
+ +N Open the first given file at line number N
",
- env!("CARGO_PKG_NAME"),
- VERSION_AND_GIT_HASH,
- env!("CARGO_PKG_AUTHORS"),
- env!("CARGO_PKG_DESCRIPTION"),
- helix_loader::default_log_file().display(),
- );
+ env!("CARGO_PKG_NAME"),
+ VERSION_AND_GIT_HASH,
+ env!("CARGO_PKG_AUTHORS"),
+ env!("CARGO_PKG_DESCRIPTION"),
+ helix_loader::default_log_file().display(),
+ );
+
+ let mut args = Args::parse_args().context("could not parse arguments")?;
+
+ helix_loader::initialize_config_file(args.config_file.clone());
+ helix_loader::initialize_log_file(args.log_file.clone());
+
+ // Help has a higher priority and should be handled separately.
+ if args.display_help {
+ print!("{}", help);
std::process::exit(0);
}
@@ -116,6 +116,11 @@ FLAGS:
setup_logging(args.verbosity).context("failed to initialize logging")?;
+ // Before setting the working directory, resolve all the paths in args.files
+ for (path, _) in args.files.iter_mut() {
+ *path = helix_stdx::path::canonicalize(&path);
+ }
+
// NOTE: Set the working directory early so the correct configuration is loaded. Be aware that
// Application::new() depends on this logic so it must be updated if this changes.
if let Some(path) = &args.working_directory {
@@ -150,10 +155,10 @@ FLAGS:
});
// TODO: use the thread local executor to spawn the application task separately from the work pool
- let mut app = Application::new(args, config, lang_loader).context("unable to start Helix")?;
- let mut events = app.event_stream();
+ let mut app =
+ Application::new(args, config, lang_loader).context("unable to create new application")?;
- let exit_code = app.run(&mut events).await?;
+ let exit_code = app.run(&mut EventStream::new()).await?;
Ok(exit_code)
}