diff --git a/helix-term/src/args.rs b/helix-term/src/args.rs index f782539ca..6a49889b6 100644 --- a/helix-term/src/args.rs +++ b/helix-term/src/args.rs @@ -24,6 +24,7 @@ impl Args { pub fn parse_args() -> Result { let mut args = Args::default(); let mut argv = std::env::args().peekable(); + let mut line_number = 0; argv.next(); // skip the program, we don't care about that @@ -88,6 +89,13 @@ impl Args { } } } + arg if arg.starts_with('+') => { + let arg = &arg[1..]; + line_number = match arg.parse::() { + Ok(n) => n.saturating_sub(1), + _ => anyhow::bail!("bad line number after +"), + }; + } arg => args.files.push(parse_file(arg)), } } @@ -97,6 +105,12 @@ impl Args { args.files.push(parse_file(&arg)); } + if let Some(file) = args.files.first_mut() { + if line_number != 0 { + file.1.row = line_number; + } + } + Ok(args) } } diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs index ed3478ac9..8db5f3100 100644 --- a/helix-term/src/main.rs +++ b/helix-term/src/main.rs @@ -67,6 +67,7 @@ FLAGS: --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 + +N Open the first given file at line number N ", env!("CARGO_PKG_NAME"), VERSION_AND_GIT_HASH,