aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-30 19:37:17 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-30 19:38:03 +0300
commitc71c6c108245b91f6478d95a3abf9a9a9e2e57a9 (patch)
tree5475b2c656295f1d987ad884e2a3b6b25fabbffc /src
parent2548acea155de392aac7ce4f638754e2972da69a (diff)
fix: resolve split current from caller pane
refs #902
Diffstat (limited to 'src')
-rw-r--r--src/cli/pane.rs50
1 files changed, 38 insertions, 12 deletions
diff --git a/src/cli/pane.rs b/src/cli/pane.rs
index c81e5835..b2579d42 100644
--- a/src/cli/pane.rs
+++ b/src/cli/pane.rs
@@ -529,7 +529,10 @@ fn pane_read(args: &[String]) -> std::io::Result<i32> {
}
fn pane_split(args: &[String]) -> std::io::Result<i32> {
- let params = match parse_pane_split_args(args) {
+ let env_pane_id = std::env::var("HERDR_PANE_ID")
+ .ok()
+ .filter(|value| !value.trim().is_empty());
+ let params = match parse_pane_split_args(args, env_pane_id.as_deref()) {
Ok(params) => params,
Err(message) => {
eprintln!("{message}");
@@ -543,7 +546,10 @@ fn pane_split(args: &[String]) -> std::io::Result<i32> {
})?)
}
-fn parse_pane_split_args(args: &[String]) -> Result<PaneSplitParams, String> {
+fn parse_pane_split_args(
+ args: &[String],
+ env_pane_id: Option<&str>,
+) -> Result<PaneSplitParams, String> {
let mut env = std::collections::HashMap::new();
let mut pane_id = None;
let mut direction = None;
@@ -569,7 +575,7 @@ fn parse_pane_split_args(args: &[String]) -> Result<PaneSplitParams, String> {
index += 2;
}
"--current" => {
- pane_id = None;
+ pane_id = env_pane_id.map(super::normalize_pane_id);
index += 1;
}
"--direction" => {
@@ -1470,13 +1476,10 @@ mod tests {
#[test]
fn parse_pane_split_args_accepts_ratio() {
- let params = parse_pane_split_args(&args(&[
- "issue-1",
- "--direction",
- "right",
- "--ratio",
- "0.333",
- ]))
+ let params = parse_pane_split_args(
+ &args(&["issue-1", "--direction", "right", "--ratio", "0.333"]),
+ None,
+ )
.unwrap();
assert_eq!(params.target_pane_id, Some("issue-1".into()));
@@ -1486,7 +1489,29 @@ mod tests {
#[test]
fn parse_pane_split_args_accepts_current_target() {
- let params = parse_pane_split_args(&args(&["--direction", "down", "--current"])).unwrap();
+ let params = parse_pane_split_args(
+ &args(&["--direction", "down", "--current"]),
+ Some("issue-1"),
+ )
+ .unwrap();
+
+ assert_eq!(params.target_pane_id, Some("issue-1".into()));
+ assert_eq!(params.direction, crate::api::schema::SplitDirection::Down);
+ }
+
+ #[test]
+ fn parse_pane_split_args_current_without_env_keeps_focused_fallback() {
+ let params =
+ parse_pane_split_args(&args(&["--direction", "down", "--current"]), None).unwrap();
+
+ assert_eq!(params.target_pane_id, None);
+ assert_eq!(params.direction, crate::api::schema::SplitDirection::Down);
+ }
+
+ #[test]
+ fn parse_pane_split_args_omitted_target_keeps_focused_fallback() {
+ let params =
+ parse_pane_split_args(&args(&["--direction", "down"]), Some("issue-1")).unwrap();
assert_eq!(params.target_pane_id, None);
assert_eq!(params.direction, crate::api::schema::SplitDirection::Down);
@@ -1495,7 +1520,8 @@ mod tests {
#[test]
fn parse_pane_split_args_accepts_pane_option() {
let params =
- parse_pane_split_args(&args(&["--pane", "issue-2", "--direction", "right"])).unwrap();
+ parse_pane_split_args(&args(&["--pane", "issue-2", "--direction", "right"]), None)
+ .unwrap();
assert_eq!(params.target_pane_id, Some("issue-2".into()));
assert_eq!(params.direction, crate::api::schema::SplitDirection::Right);