aboutsummaryrefslogtreecommitdiff
path: root/src/app/input/mod.rs
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-06-14 02:43:45 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-06-14 03:47:07 +0300
commitfbd20ad6e488fb3b9efc1612fdffee6e672976c1 (patch)
treed21daf93241786f8aa6fde23b41cdb9e15182b79 /src/app/input/mod.rs
parentd35c642ef36ee5ac2afe7c1b18ad5a717bc807d8 (diff)
feat: add plugin v1 system
Add manifest-driven plugin actions, event hooks, pane entrypoints, link handlers, and host APIs. Support plugin link, GitHub install, build commands, installed plugin registry, pane movement, runtime context, and plugin docs.
Diffstat (limited to 'src/app/input/mod.rs')
-rw-r--r--src/app/input/mod.rs12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/app/input/mod.rs b/src/app/input/mod.rs
index 1b5dfefe..339f7293 100644
--- a/src/app/input/mod.rs
+++ b/src/app/input/mod.rs
@@ -341,6 +341,13 @@ impl App {
};
self.last_pane_click = None;
+ match self.invoke_plugin_link_handler_for_url(&url, info.id) {
+ Ok(true) => return true,
+ Ok(false) => {}
+ Err(err) => {
+ tracing::warn!(err = %err, url = %url, "failed to invoke plugin link handler");
+ }
+ }
if let Err(err) = crate::platform::open_url(&url) {
tracing::warn!(err = %err, url = %url, "failed to open pane URL");
}
@@ -514,6 +521,7 @@ impl AppState {
self.pane_scrollback_limit_bytes,
self.host_terminal_theme,
crate::pane::PaneShellConfig::new(&self.default_shell, self.shell_mode),
+ Vec::new(),
) {
let new_id = new_pane.pane_id;
terminal_runtimes.insert(new_pane.terminal.id.clone(), new_pane.runtime);
@@ -622,7 +630,9 @@ fn wait_for_file(path: &std::path::Path) -> String {
let deadline = std::time::Instant::now() + std::time::Duration::from_secs(2);
while std::time::Instant::now() < deadline {
if let Ok(content) = std::fs::read_to_string(path) {
- return content;
+ if !content.is_empty() {
+ return content;
+ }
}
std::thread::sleep(std::time::Duration::from_millis(20));
}