From 78fa77b4022322a519aa58d84f4ad24f8b8bab35 Mon Sep 17 00:00:00 2001 From: iamazy Date: Mon, 18 Aug 2025 23:29:14 +0800 Subject: [PATCH 1/2] fix --- crates/egui-term/src/alacritty/mod.rs | 1 + crates/egui-term/src/view.rs | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/egui-term/src/alacritty/mod.rs b/crates/egui-term/src/alacritty/mod.rs index 87449de..c869381 100644 --- a/crates/egui-term/src/alacritty/mod.rs +++ b/crates/egui-term/src/alacritty/mod.rs @@ -353,6 +353,7 @@ impl<'a> TerminalContext<'a> { pub fn write_data>>(&mut self, data: I) { self.write(data); self.terminal.scroll_display(Scroll::Bottom); + self.terminal.selection = None; } fn process_link(&mut self, link_action: LinkAction, point: Point) { diff --git a/crates/egui-term/src/view.rs b/crates/egui-term/src/view.rs index 88e6da9..8882a81 100644 --- a/crates/egui-term/src/view.rs +++ b/crates/egui-term/src/view.rs @@ -256,10 +256,15 @@ impl<'a> TerminalView<'a> { modifiers, pos, } => { - let new_pos = if is_in_terminal(pos, layout.rect) { - pos - } else { + let out_of = !is_in_terminal(pos, layout.rect); + if out_of && pressed { + continue; + } + + let new_pos = if out_of { pos.clamp(layout.rect.min, layout.rect.max) + } else { + pos }; if let Some(action) = From c30455062a54e54fed06eb7ed4ca629f6bfa5aed Mon Sep 17 00:00:00 2001 From: iamazy Date: Tue, 26 Aug 2025 21:11:06 +0800 Subject: [PATCH 2/2] fix running edit in egui_term --- crates/egui-term/src/alacritty/mod.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crates/egui-term/src/alacritty/mod.rs b/crates/egui-term/src/alacritty/mod.rs index c869381..d643f7f 100644 --- a/crates/egui-term/src/alacritty/mod.rs +++ b/crates/egui-term/src/alacritty/mod.rs @@ -230,8 +230,10 @@ impl Terminal { let event_proxy = EventProxy(event_sender); let term = Term::new(config, &term_size, event_proxy.clone()); let term = Arc::new(FairMutex::new(term)); + let pty_event_loop = EventLoop::new(term.clone(), event_proxy, pty, false, false)?; let notifier = Notifier(pty_event_loop.channel()); + let pty_notifier = Notifier(pty_event_loop.channel()); let url_regex = r#"(ipfs:|ipns:|magnet:|mailto:|gemini://|gopher://|https://|http://|news:|file://|git://|ssh:|ftp://)[^\u{0000}-\u{001F}\u{007F}-\u{009F}<>"\s{-}\^⟨⟩`]+"#; let url_regex = @@ -246,8 +248,10 @@ impl Terminal { panic!("pty_event_subscription_{id}: sending PtyEvent is failed, error: {err}") }); app_context.request_repaint(); - if let Event::Exit = event { - break; + match event { + Event::Exit => break, + Event::PtyWrite(s) => pty_notifier.notify(s.into_bytes()), + _ => {} } })?;