diff options
author | Benoît CORTIER | 2021-06-17 22:24:15 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-06-18 01:08:32 +0000 |
commit | 42142cf680197a2076b9fa8ec864b91e67068082 (patch) | |
tree | 8921d450dcfc03474bbc70f6fa664b1390fe15e9 /helix-term/src/ui/prompt.rs | |
parent | 8664d70e731c73fa34dda293b4f6b6dec80a3273 (diff) |
Fix panic when entering unicode in command prompt
It was attempted to use `String::insert` and `String::remove` to insert
without taking care of unicodes.
Fixes https://github.com/helix-editor/helix/issues/282
Diffstat (limited to 'helix-term/src/ui/prompt.rs')
-rw-r--r-- | helix-term/src/ui/prompt.rs | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/helix-term/src/ui/prompt.rs b/helix-term/src/ui/prompt.rs index 7b8af820..991b328d 100644 --- a/helix-term/src/ui/prompt.rs +++ b/helix-term/src/ui/prompt.rs @@ -53,7 +53,16 @@ impl Prompt { } pub fn insert_char(&mut self, c: char) { - self.line.insert(self.cursor, c); + let pos = if self.line.is_empty() { + 0 + } else { + self.line + .char_indices() + .nth(self.cursor) + .map(|(pos, _)| pos) + .unwrap_or_else(|| self.line.len()) + }; + self.line.insert(pos, c); self.cursor += 1; self.completion = (self.completion_fn)(&self.line); self.exit_selection(); @@ -79,7 +88,13 @@ impl Prompt { pub fn delete_char_backwards(&mut self) { if self.cursor > 0 { - self.line.remove(self.cursor - 1); + let pos = self + .line + .char_indices() + .nth(self.cursor - 1) + .map(|(pos, _)| pos) + .expect("line is not empty"); + self.line.remove(pos); self.cursor -= 1; self.completion = (self.completion_fn)(&self.line); } |