From d71a32d0e40919e45d32c758d7a86ce7df989254 Mon Sep 17 00:00:00 2001 From: Jason Lee Date: Tue, 9 Sep 2025 09:40:07 +0800 Subject: [PATCH] input: Fix move to to skip `\r` on Windows. (#1223) This PR for continue #1214 to fix move cursor to ignore` `\r` for Windows. --- crates/ui/src/input/state.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/crates/ui/src/input/state.rs b/crates/ui/src/input/state.rs index 997f411f..c3ba519f 100644 --- a/crates/ui/src/input/state.rs +++ b/crates/ui/src/input/state.rs @@ -1918,11 +1918,25 @@ impl InputState { } fn previous_boundary(&self, offset: usize) -> usize { - self.text.clip_offset(offset.saturating_sub(1), Bias::Left) + let mut offset = self.text.clip_offset(offset.saturating_sub(1), Bias::Left); + if let Some(ch) = self.text.char_at(offset) { + if ch == '\r' { + offset -= 1; + } + } + + offset } fn next_boundary(&self, offset: usize) -> usize { - self.text.clip_offset(offset + 1, Bias::Right) + let mut offset = self.text.clip_offset(offset + 1, Bias::Right); + if let Some(ch) = self.text.char_at(offset) { + if ch == '\r' { + offset += 1; + } + } + + offset } /// Returns the true to let InputElement to render cursor, when Input is focused and current BlinkCursor is visible.