diff --git a/Cargo.lock b/Cargo.lock index d1a72305..9aff0431 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1932,6 +1932,7 @@ version = "0.0.1" dependencies = [ "alacritty_terminal", "anyhow", + "base64 0.13.0", "bit-vec 0.5.1", "cc", "config", @@ -1992,6 +1993,7 @@ version = "0.0.1" dependencies = [ "alacritty_terminal", "anyhow", + "base64 0.13.0", "crossbeam-channel 0.5.1", "git2", "home", diff --git a/core/Cargo.toml b/core/Cargo.toml index cf9e3097..075c572b 100644 --- a/core/Cargo.toml +++ b/core/Cargo.toml @@ -5,6 +5,7 @@ authors = ["Dongdong Zhou "] edition = "2018" [dependencies] +base64 = "0.13.0" alacritty_terminal = "0.15.0" config = "0.11" indexmap = "1.7.0" diff --git a/core/src/command.rs b/core/src/command.rs index b861ebaa..d4670ddc 100644 --- a/core/src/command.rs +++ b/core/src/command.rs @@ -384,7 +384,7 @@ pub enum LapceUICommand { UpdateLineChanges(BufferId), PublishDiagnostics(PublishDiagnosticsParams), UpdateDiffFiles(Vec), - TerminalUpdateContent(TermId, TerminalContent), + TerminalUpdateContent(TermId, Arc), ReloadBuffer(BufferId, u64, String), EnsureVisible((Rect, (f64, f64), Option)), EnsureRectVisible(Rect), diff --git a/core/src/proxy.rs b/core/src/proxy.rs index ad6d0fb5..d0583a8e 100644 --- a/core/src/proxy.rs +++ b/core/src/proxy.rs @@ -411,7 +411,7 @@ pub enum Notification { }, UpdateTerminal { term_id: TermId, - content: Vec, + content: String, }, } diff --git a/core/src/terminal.rs b/core/src/terminal.rs index eb8623ef..80bd7736 100644 --- a/core/src/terminal.rs +++ b/core/src/terminal.rs @@ -143,7 +143,7 @@ pub struct LapceTerminalData { pub widget_id: WidgetId, pub split_id: WidgetId, pub panel_widget_id: Option, - pub content: TerminalContent, + pub content: Arc, } impl LapceTerminalData { @@ -208,7 +208,7 @@ pub fn new( widget_id, split_id, panel_widget_id, - content: TerminalContent::new(), + content: Arc::new(TerminalContent::new()), } } } @@ -282,9 +282,9 @@ pub fn run(&mut self, receiver: Receiver) -> Result<()> { } alacritty_terminal::event::Event::CursorBlinkingChange(_) => {} alacritty_terminal::event::Event::Wakeup => { - let content = TerminalContent { + let content = Arc::new(TerminalContent { grid: self.term.grid().clone(), - }; + }); self.event_sink.submit_command( LAPCE_UI_COMMAND, LapceUICommand::TerminalUpdateContent( @@ -298,7 +298,7 @@ pub fn run(&mut self, receiver: Receiver) -> Result<()> { alacritty_terminal::event::Event::Exit => {} }, TerminalEvent::UpdateContent(content) => { - self.update_content(&content); + self.update_content(content); self.sender.send(TerminalEvent::Event( alacritty_terminal::event::Event::Wakeup, )); @@ -307,9 +307,11 @@ pub fn run(&mut self, receiver: Receiver) -> Result<()> { } } - pub fn update_content(&mut self, content: &[u8]) { - for byte in content { - self.parser.advance(&mut self.term, *byte); + pub fn update_content(&mut self, content: String) { + if let Ok(content) = base64::decode(content) { + for byte in content { + self.parser.advance(&mut self.term, byte); + } } } } @@ -694,7 +696,7 @@ fn paint(&mut self, ctx: &mut PaintCtx, data: &LapceTabData, env: &Env) { pub enum TerminalEvent { Resize(usize, usize), Event(alacritty_terminal::event::Event), - UpdateContent(Vec), + UpdateContent(String), } pub enum TerminalHostEvent { @@ -705,7 +707,7 @@ pub enum TerminalHostEvent { Exit, } -#[derive(Clone, Debug)] +#[derive(Debug)] pub struct TerminalContent { grid: Grid, } diff --git a/proxy/Cargo.toml b/proxy/Cargo.toml index e9fda887..957f5e46 100644 --- a/proxy/Cargo.toml +++ b/proxy/Cargo.toml @@ -5,6 +5,7 @@ authors = ["Dongdong Zhou "] edition = "2018" [dependencies] +base64 = "0.13.0" alacritty_terminal = "0.15.0" mio = "0.6.20" notify = "4.0.16" diff --git a/proxy/src/terminal.rs b/proxy/src/terminal.rs index 1cb224bf..bd112e8a 100644 --- a/proxy/src/terminal.rs +++ b/proxy/src/terminal.rs @@ -121,7 +121,7 @@ pub fn run(&mut self, dispatcher: Dispatcher) { "update_terminal", json!({ "term_id": self.term_id, - "content": buf[..n], + "content": base64::encode(&buf[..n]), }), ); }