Merge pull request #1377 from zed-industries/bracketed-paste

Mikayla Maki created

Add bracketed paste support

Change summary

crates/terminal/src/connection.rs | 13 ++++++++++++-
crates/terminal/src/terminal.rs   |  2 +-
2 files changed, 13 insertions(+), 2 deletions(-)

Detailed changes

crates/terminal/src/connection.rs 🔗

@@ -7,7 +7,7 @@ use alacritty_terminal::{
     event_loop::{EventLoop, Msg, Notifier},
     grid::Scroll,
     sync::FairMutex,
-    term::SizeInfo,
+    term::{SizeInfo, TermMode},
     tty::{self, setup_env},
     Term,
 };
@@ -228,6 +228,17 @@ impl TerminalConnection {
             false
         }
     }
+
+    ///Paste text into the terminal
+    pub fn paste(&mut self, text: &str) {
+        if self.term.lock().mode().contains(TermMode::BRACKETED_PASTE) {
+            self.write_to_pty("\x1b[200~".to_string());
+            self.write_to_pty(text.replace('\x1b', "").to_string());
+            self.write_to_pty("\x1b[201~".to_string());
+        } else {
+            self.write_to_pty(text.replace("\r\n", "\r").replace('\n', "\r"));
+        }
+    }
 }
 
 impl Drop for TerminalConnection {

crates/terminal/src/terminal.rs 🔗

@@ -191,7 +191,7 @@ impl Terminal {
     fn paste(&mut self, _: &Paste, cx: &mut ViewContext<Self>) {
         if let Some(item) = cx.read_from_clipboard() {
             self.connection.update(cx, |connection, _| {
-                connection.write_to_pty(item.text().to_owned());
+                connection.paste(item.text());
             })
         }
     }