diff options
author | Blaž Hrastnik | 2021-05-29 01:37:47 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-05-29 01:37:47 +0000 |
commit | d54ae09d3b7a5eb56050631a58e75a1d1686ea70 (patch) | |
tree | 89f8c5079c43f026156d756df6c0325fe16083bc | |
parent | a28eaa81a0c5fede1e34aca5bbf70d411f7a174b (diff) |
ESC should exit both completion and insert mode
-rw-r--r-- | helix-term/src/ui/completion.rs | 7 | ||||
-rw-r--r-- | helix-term/src/ui/editor.rs | 25 | ||||
-rw-r--r-- | helix-term/src/ui/picker.rs | 6 |
3 files changed, 25 insertions, 13 deletions
diff --git a/helix-term/src/ui/completion.rs b/helix-term/src/ui/completion.rs index 0af03d14..a757406b 100644 --- a/helix-term/src/ui/completion.rs +++ b/helix-term/src/ui/completion.rs @@ -207,6 +207,13 @@ impl Completion { impl Component for Completion { fn handle_event(&mut self, event: Event, cx: &mut Context) -> EventResult { + // let the Editor handle Esc instead + if let Event::Key(KeyEvent { + code: KeyCode::Esc, .. + }) = event + { + return EventResult::Ignored; + } self.popup.handle_event(event, cx) } diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs index c597f840..47770ebd 100644 --- a/helix-term/src/ui/editor.rs +++ b/helix-term/src/ui/editor.rs @@ -584,7 +584,6 @@ impl Component for EditorView { if completion.is_empty() { self.completion = None; } - // TODO: if exiting InsertMode, remove completion } } } @@ -605,16 +604,24 @@ impl Component for EditorView { let (view, doc) = cx.editor.current(); view.ensure_cursor_in_view(doc); - if mode == Mode::Normal && doc.mode() == Mode::Insert { - // HAXX: if we just entered insert mode from normal, clear key buf - // and record the command that got us into this mode. + // mode transitions + match (mode, doc.mode()) { + (Mode::Normal, Mode::Insert) => { + // HAXX: if we just entered insert mode from normal, clear key buf + // and record the command that got us into this mode. - // how we entered insert mode is important, and we should track that so - // we can repeat the side effect. + // how we entered insert mode is important, and we should track that so + // we can repeat the side effect. - self.last_insert.0 = self.keymap[&mode][&key]; - self.last_insert.1.clear(); - }; + self.last_insert.0 = self.keymap[&mode][&key]; + self.last_insert.1.clear(); + } + (Mode::Insert, Mode::Normal) => { + // if exiting insert mode, remove completion + self.completion = None; + } + _ => (), + } EventResult::Consumed(callback) } diff --git a/helix-term/src/ui/picker.rs b/helix-term/src/ui/picker.rs index a715ebb5..4cff4917 100644 --- a/helix-term/src/ui/picker.rs +++ b/helix-term/src/ui/picker.rs @@ -122,14 +122,12 @@ fn inner_rect(area: Rect) -> Rect { let padding_vertical = area.height * 20 / 100; let padding_horizontal = area.width * 20 / 100; - let area = Rect::new( + Rect::new( area.x + padding_horizontal, area.y + padding_vertical, area.width - padding_horizontal * 2, area.height - padding_vertical * 2, - ); - - area + ) } impl<T: 'static> Component for Picker<T> { |