diff --git a/crates/terminal_view/src/terminal_element.rs b/crates/terminal_view/src/terminal_element.rs index fc1c63879c..4608708fb1 100644 --- a/crates/terminal_view/src/terminal_element.rs +++ b/crates/terminal_view/src/terminal_element.rs @@ -1488,12 +1488,12 @@ impl InputHandler for TerminalInputHandler { &mut self, _range_utf16: Option>, new_text: &str, - new_marked_range: Option>, + _new_marked_range: Option>, _window: &mut Window, cx: &mut App, ) { self.terminal_view.update(cx, |view, view_cx| { - view.set_marked_text(new_text.to_string(), new_marked_range, view_cx); + view.set_marked_text(new_text.to_string(), view_cx); }); } diff --git a/crates/terminal_view/src/terminal_view.rs b/crates/terminal_view/src/terminal_view.rs index 82203a5b8e..21c5a23c7f 100644 --- a/crates/terminal_view/src/terminal_view.rs +++ b/crates/terminal_view/src/terminal_view.rs @@ -62,7 +62,6 @@ use std::{ struct ImeState { marked_text: String, - marked_range_utf16: Option>, } const CURSOR_BLINK_INTERVAL: Duration = Duration::from_millis(500); @@ -327,16 +326,11 @@ impl TerminalView { } /// Sets the marked (pre-edit) text from the IME. - pub(crate) fn set_marked_text( - &mut self, - text: String, - range: Option>, - cx: &mut Context, - ) { - self.ime_state = Some(ImeState { - marked_text: text, - marked_range_utf16: range, - }); + pub(crate) fn set_marked_text(&mut self, text: String, cx: &mut Context) { + if text.is_empty() { + return self.clear_marked_text(cx); + } + self.ime_state = Some(ImeState { marked_text: text }); cx.notify(); } @@ -344,7 +338,7 @@ impl TerminalView { pub(crate) fn marked_text_range(&self) -> Option> { self.ime_state .as_ref() - .and_then(|state| state.marked_range_utf16.clone()) + .map(|state| 0..state.marked_text.encode_utf16().count()) } /// Clears the marked (pre-edit) text state.