aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorplexom2022-07-01 09:27:32 +0000
committerGitHub2022-07-01 09:27:32 +0000
commitf10b6f6ee2bbf4d6d9356e27be25b25bdb85b9cd (patch)
treed6a949fcd15c85b9a682edf8559ca821b7c0b340
parent15d96c843aca5b87fde26faf6c556265402c32c1 (diff)
adds --vsplit and --hsplit arguments (#2773)
* adds --vsplit and --hsplit arguments * moved comment * fixed lint (third time's a charm) * changed vsplit and hsplit from two separate bools to type Option<Layout>, and some cleanup
-rw-r--r--contrib/completion/hx.bash2
-rw-r--r--contrib/completion/hx.fish3
-rw-r--r--contrib/completion/hx.zsh2
-rw-r--r--helix-term/src/application.rs21
-rw-r--r--helix-term/src/args.rs4
-rw-r--r--helix-term/src/main.rs2
6 files changed, 29 insertions, 5 deletions
diff --git a/contrib/completion/hx.bash b/contrib/completion/hx.bash
index 6371bedb..87c34028 100644
--- a/contrib/completion/hx.bash
+++ b/contrib/completion/hx.bash
@@ -16,7 +16,7 @@ _hx() {
COMPREPLY=($(compgen -W "$languages" -- $2))
;;
*)
- COMPREPLY=($(compgen -fd -W "-h --help --tutor -V --version -v -vv -vvv --health -g --grammar" -- $2))
+ COMPREPLY=($(compgen -fd -W "-h --help --tutor -V --version -v -vv -vvv --health -g --grammar --vsplit --hsplit" -- $2))
;;
esac
} && complete -F _hx hx
diff --git a/contrib/completion/hx.fish b/contrib/completion/hx.fish
index 4ec690d8..df2fb500 100644
--- a/contrib/completion/hx.fish
+++ b/contrib/completion/hx.fish
@@ -9,4 +9,5 @@ complete -c hx -l health -x -a "$langs" -d "Checks for errors in editor setup"
complete -c hx -s g -l grammar -x -a "fetch build" -d "Fetches or builds tree-sitter grammars"
complete -c hx -s v -o vv -o vvv -d "Increases logging verbosity"
complete -c hx -s V -l version -d "Prints version information"
-
+complete -c hx -l vsplit -d "Splits all given files vertically into different windows"
+complete -c hx -l hsplit -d "Splits all given files horizontally into different windows"
diff --git a/contrib/completion/hx.zsh b/contrib/completion/hx.zsh
index 16631519..f9d58d3c 100644
--- a/contrib/completion/hx.zsh
+++ b/contrib/completion/hx.zsh
@@ -14,6 +14,8 @@ _hx() {
"--health[Checks for errors in editor setup]:language:->health" \
"-g[Fetches or builds tree-sitter grammars]:action:->grammar" \
"--grammar[Fetches or builds tree-sitter grammars]:action:->grammar" \
+ "--vsplit[Splits all given files vertically into different windows]" \
+ "--hsplit[Splits all given files horizontally into different windows]" \
"*:file:_files"
case "$state" in
diff --git a/helix-term/src/application.rs b/helix-term/src/application.rs
index 23f4610f..805f660f 100644
--- a/helix-term/src/application.rs
+++ b/helix-term/src/application.rs
@@ -5,7 +5,7 @@ use helix_core::{
pos_at_coords, syntax, Selection,
};
use helix_lsp::{lsp, util::lsp_pos_to_pos, LspProgressMap};
-use helix_view::{align_view, editor::ConfigEvent, theme, Align, Editor};
+use helix_view::{align_view, editor::ConfigEvent, theme, tree::Layout, Align, Editor};
use serde_json::json;
use crate::{
@@ -158,16 +158,31 @@ impl Application {
} else {
let nr_of_files = args.files.len();
editor.open(first, Action::VerticalSplit)?;
- for (file, pos) in args.files {
+ // Because the line above already opens the first file, we can
+ // simply skip opening it a second time by using .skip(1) here.
+ for (file, pos) in args.files.into_iter().skip(1) {
if file.is_dir() {
return Err(anyhow::anyhow!(
"expected a path to file, found a directory. (to open a directory pass it as first argument)"
));
} else {
+ // If the user passes in either `--vsplit` or
+ // `--hsplit` as a command line argument, all the given
+ // files will be opened according to the selected
+ // option. If neither of those two arguments are passed
+ // in, just load the files normally.
+ let action = match args.split {
+ Some(Layout::Vertical) => Action::VerticalSplit,
+ Some(Layout::Horizontal) => Action::HorizontalSplit,
+ None => Action::Load,
+ };
let doc_id = editor
- .open(&file, Action::Load)
+ .open(&file, action)
.context(format!("open '{}'", file.to_string_lossy()))?;
// with Action::Load all documents have the same view
+ // NOTE: this isn't necessarily true anymore. If
+ // `--vsplit` or `--hsplit` are used, the file which is
+ // opened last is focused on.
let view_id = editor.tree.focus;
let doc = editor.document_mut(doc_id).unwrap();
let pos = Selection::point(pos_at_coords(doc.text().slice(..), pos, true));
diff --git a/helix-term/src/args.rs b/helix-term/src/args.rs
index b99c7d1a..c3019ea7 100644
--- a/helix-term/src/args.rs
+++ b/helix-term/src/args.rs
@@ -1,5 +1,6 @@
use anyhow::Result;
use helix_core::Position;
+use helix_view::tree::Layout;
use std::path::{Path, PathBuf};
#[derive(Default)]
@@ -11,6 +12,7 @@ pub struct Args {
pub load_tutor: bool,
pub fetch_grammars: bool,
pub build_grammars: bool,
+ pub split: Option<Layout>,
pub verbosity: u64,
pub files: Vec<(PathBuf, Position)>,
}
@@ -28,6 +30,8 @@ impl Args {
"--version" => args.display_version = true,
"--help" => args.display_help = true,
"--tutor" => args.load_tutor = true,
+ "--vsplit" => args.split = Some(Layout::Vertical),
+ "--hsplit" => args.split = Some(Layout::Horizontal),
"--health" => {
args.health = true;
args.health_arg = argv.next_if(|opt| !opt.starts_with('-'));
diff --git a/helix-term/src/main.rs b/helix-term/src/main.rs
index 7b26fb11..eb186d78 100644
--- a/helix-term/src/main.rs
+++ b/helix-term/src/main.rs
@@ -67,6 +67,8 @@ FLAGS:
-v Increases logging verbosity each use for up to 3 times
(default file: {})
-V, --version Prints version information
+ --vsplit Splits all given files vertically into different windows
+ --hsplit Splits all given files horizontally into different windows
",
env!("CARGO_PKG_NAME"),
env!("VERSION_AND_GIT_HASH"),