aboutsummaryrefslogtreecommitdiff
path: root/src/pane.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-17 01:41:16 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-17 01:41:16 +0300
commite4de58b37f58d59d146158239ed218a8accd5c3c (patch)
tree6bb35b8c9aaec969110ff51a58814dd8099617c0 /src/pane.rs
parent86adf88351e17c6a11cac253714b169eac0db233 (diff)
feat: add agent start for server-owned terminals
Diffstat (limited to 'src/pane.rs')
-rw-r--r--src/pane.rs40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/pane.rs b/src/pane.rs
index 272229fa..b5886933 100644
--- a/src/pane.rs
+++ b/src/pane.rs
@@ -328,6 +328,46 @@ impl PaneRuntime {
)
}
+ pub fn spawn_argv_command(
+ pane_id: PaneId,
+ rows: u16,
+ cols: u16,
+ cwd: std::path::PathBuf,
+ argv: &[String],
+ scrollback_limit_bytes: usize,
+ host_terminal_theme: crate::terminal_theme::TerminalTheme,
+ events: mpsc::Sender<AppEvent>,
+ render_notify: Arc<Notify>,
+ render_dirty: Arc<AtomicBool>,
+ ) -> std::io::Result<Self> {
+ let Some((program, args)) = argv.split_first() else {
+ return Err(std::io::Error::new(
+ std::io::ErrorKind::InvalidInput,
+ "argv must not be empty",
+ ));
+ };
+ let mut cmd = CommandBuilder::new(program);
+ for arg in args {
+ cmd.arg(arg);
+ }
+ cmd.cwd(cwd);
+ cmd.env(crate::HERDR_ENV_VAR, crate::HERDR_ENV_VALUE);
+ apply_pane_terminal_env(&mut cmd);
+ crate::integration::apply_pane_env(&mut cmd, pane_id);
+ Self::spawn_command_builder(
+ pane_id,
+ rows,
+ cols,
+ scrollback_limit_bytes,
+ host_terminal_theme,
+ events,
+ render_notify,
+ render_dirty,
+ cmd,
+ "failed to spawn argv command pane",
+ )
+ }
+
fn spawn_command_builder(
pane_id: PaneId,
rows: u16,