From cc536655a1efc2b82a978faf22a1ad9ffc3a57d8 Mon Sep 17 00:00:00 2001 From: Aleksei Gusev Date: Sat, 31 May 2025 20:02:56 +0300 Subject: [PATCH] Fix slowness in Terminal when vi-mode is enabled (#31824) It seems alacritty handles vi-mode motions in a special way and it is up to the client to decide when redraw is necessary. With this change, `TerminalView` notifies the context if a keystroke is processed and vi mode is enabled. Fixes #31447 Before: https://github.com/user-attachments/assets/a78d4ba0-23a3-4660-a834-2f92948f586c After: https://github.com/user-attachments/assets/cabbb0f4-a1f9-4f1c-87d8-a56a10e35cc8 Release Notes: - Fixed sluggish cursor motions in Terminal when Vi Mode is enabled [#31447] --- crates/terminal_view/src/terminal_view.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index af1466a1a257dc773a86084ae3de6d211f884a68..c393fd54ad18fcd8ffd936d8148513ac041d2b90 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -651,7 +651,12 @@ impl TerminalView { if let Some(keystroke) = Keystroke::parse(&text.0).log_err() { self.clear_bell(cx); self.terminal.update(cx, |term, cx| { - term.try_keystroke(&keystroke, TerminalSettings::get_global(cx).option_as_meta); + let processed = + term.try_keystroke(&keystroke, TerminalSettings::get_global(cx).option_as_meta); + if processed && term.vi_mode_enabled() { + cx.notify(); + } + processed }); } }