Added copying

Mikayla Maki created

Change summary

assets/keymaps/default.json     |  3 ++-
crates/terminal/src/terminal.rs | 13 ++++++++++++-
pbcpoy                          |  1 +
3 files changed, 15 insertions(+), 2 deletions(-)

Detailed changes

assets/keymaps/default.json 🔗

@@ -417,7 +417,8 @@
             "up": "terminal::Up",
             "down": "terminal::Down",
             "tab": "terminal::Tab",
-            "cmd-v": "terminal::Paste"
+            "cmd-v": "terminal::Paste",
+            "cmd-c": "terminal::Copy"
         }
     }
 ]

crates/terminal/src/terminal.rs 🔗

@@ -53,7 +53,7 @@ pub struct ScrollTerminal(pub i32);
 
 actions!(
     terminal,
-    [Sigint, Escape, Del, Return, Left, Right, Up, Down, Tab, Clear, Paste, Deploy, Quit]
+    [Sigint, Escape, Del, Return, Left, Right, Up, Down, Tab, Clear, Copy, Paste, Deploy, Quit]
 );
 impl_internal_actions!(terminal, [Input, ScrollTerminal]);
 
@@ -71,6 +71,7 @@ pub fn init(cx: &mut MutableAppContext) {
     cx.add_action(Terminal::up);
     cx.add_action(Terminal::down);
     cx.add_action(Terminal::tab);
+    cx.add_action(Terminal::copy);
     cx.add_action(Terminal::paste);
     cx.add_action(Terminal::scroll_terminal);
 }
@@ -275,6 +276,16 @@ impl Terminal {
         cx.emit(Event::CloseTerminal);
     }
 
+    ///Attempt to paste the clipboard into the terminal
+    fn copy(&mut self, _: &Copy, cx: &mut ViewContext<Self>) {
+        let term = self.term.lock();
+        let copy_text = term.selection_to_string();
+        match copy_text {
+            Some(s) => cx.write_to_clipboard(ClipboardItem::new(s)),
+            None => (),
+        }
+    }
+
     ///Attempt to paste the clipboard into the terminal
     fn paste(&mut self, _: &Paste, cx: &mut ViewContext<Self>) {
         if let Some(item) = cx.read_from_clipboard() {