aboutsummaryrefslogtreecommitdiff
path: root/src/app/api/plugins/panes.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/app/api/plugins/panes.rs')
-rw-r--r--src/app/api/plugins/panes.rs33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/app/api/plugins/panes.rs b/src/app/api/plugins/panes.rs
index b2988998..74a5df23 100644
--- a/src/app/api/plugins/panes.rs
+++ b/src/app/api/plugins/panes.rs
@@ -8,6 +8,39 @@ use crate::api::schema::{
use crate::app::App;
impl App {
+ pub(super) fn open_plugin_popup_pane(
+ &mut self,
+ id: String,
+ params: PluginPaneOpenParams,
+ plugin: &InstalledPluginInfo,
+ pane: PluginManifestPane,
+ ) -> String {
+ let context = self.current_plugin_context("plugin-pane");
+ let extra_env =
+ match self.plugin_pane_launch_env(plugin, &pane.id, params.env.clone(), &context) {
+ Ok(env) => env,
+ Err((code, message)) => return encode_error(id, &code, message),
+ };
+ let cwd = Some(self.plugin_pane_cwd(plugin, params.cwd));
+ let width = params.width.or(pane.width);
+ let height = params.height.or(pane.height);
+ if let Err(err) = self.spawn_popup_argv_command(
+ &pane.command,
+ cwd,
+ extra_env,
+ crate::app::popup::PopupGeometry { width, height },
+ ) {
+ return encode_error(id, "plugin_pane_open_failed", err.to_string());
+ }
+ let Some(popup) = self.state.popup_pane.as_ref() else {
+ return encode_error(id, "plugin_pane_open_failed", "plugin popup disappeared");
+ };
+ if let Some(terminal) = self.state.terminals.get_mut(&popup.terminal_id) {
+ terminal.set_manual_label(pane.title);
+ }
+ encode_success(id, ResponseResult::Ok {})
+ }
+
pub(super) fn open_plugin_overlay_pane(
&mut self,
id: String,