From 24cc9859c7d28aaf35cf461839145314c4d9586f Mon Sep 17 00:00:00 2001 From: Mikayla Maki Date: Mon, 26 Sep 2022 20:01:05 -0700 Subject: [PATCH] Added terminal::SendText command, for sending text to the terminal --- Cargo.lock | 1 + crates/terminal/Cargo.toml | 2 ++ crates/terminal/src/terminal_view.rs | 17 ++++++++++++++++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 9d2c6a35fa..3c8a7ce1a6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -5489,6 +5489,7 @@ dependencies = [ "procinfo", "project", "rand 0.8.5", + "serde", "settings", "shellexpand", "smallvec", diff --git a/crates/terminal/Cargo.toml b/crates/terminal/Cargo.toml index da59979145..a0b5231501 100644 --- a/crates/terminal/Cargo.toml +++ b/crates/terminal/Cargo.toml @@ -30,6 +30,8 @@ libc = "0.2" anyhow = "1" thiserror = "1.0" lazy_static = "1.4.0" +serde = { version = "1.0", features = ["derive"] } + diff --git a/crates/terminal/src/terminal_view.rs b/crates/terminal/src/terminal_view.rs index 33d573a76a..856ed3af41 100644 --- a/crates/terminal/src/terminal_view.rs +++ b/crates/terminal/src/terminal_view.rs @@ -6,11 +6,12 @@ use gpui::{ actions, elements::{AnchorCorner, ChildView, ParentElement, Stack}, geometry::vector::Vector2F, - impl_internal_actions, + impl_actions, impl_internal_actions, keymap::Keystroke, AnyViewHandle, AppContext, Element, ElementBox, Entity, ModelHandle, MutableAppContext, Task, View, ViewContext, ViewHandle, }; +use serde::Deserialize; use settings::{Settings, TerminalBlink}; use smol::Timer; use workspace::pane; @@ -28,6 +29,9 @@ pub struct DeployContextMenu { pub position: Vector2F, } +#[derive(Clone, Default, Deserialize, PartialEq)] +pub struct SendText(String); + actions!( terminal, [ @@ -43,6 +47,9 @@ actions!( SearchTest ] ); + +impl_actions!(terminal, [SendText]); + impl_internal_actions!(project_panel, [DeployContextMenu]); pub fn init(cx: &mut MutableAppContext) { @@ -53,6 +60,7 @@ pub fn init(cx: &mut MutableAppContext) { cx.add_action(TerminalView::escape); cx.add_action(TerminalView::enter); //Useful terminal views + cx.add_action(TerminalView::send_text); cx.add_action(TerminalView::deploy_context_menu); cx.add_action(TerminalView::copy); cx.add_action(TerminalView::paste); @@ -283,6 +291,13 @@ impl TerminalView { } } + fn send_text(&mut self, text: &SendText, cx: &mut ViewContext) { + self.clear_bel(cx); + self.terminal.update(cx, |term, _| { + term.input(text.0.to_string()); + }); + } + ///Synthesize the keyboard event corresponding to 'up' fn up(&mut self, _: &Up, cx: &mut ViewContext) { self.clear_bel(cx);