diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-30 19:37:17 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-06-30 19:38:03 +0300 |
| commit | c71c6c108245b91f6478d95a3abf9a9a9e2e57a9 (patch) | |
| tree | 5475b2c656295f1d987ad884e2a3b6b25fabbffc /src | |
| parent | 2548acea155de392aac7ce4f638754e2972da69a (diff) | |
fix: resolve split current from caller pane
refs #902
Diffstat (limited to 'src')
| -rw-r--r-- | src/cli/pane.rs | 50 |
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); |
