diff options
Diffstat (limited to 'helix-term/src/ui/popup.rs')
-rw-r--r-- | helix-term/src/ui/popup.rs | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/helix-term/src/ui/popup.rs b/helix-term/src/ui/popup.rs index 4ca70c50..0dbb3a24 100644 --- a/helix-term/src/ui/popup.rs +++ b/helix-term/src/ui/popup.rs @@ -19,6 +19,7 @@ pub struct Popup { contents: Box<dyn Component>, position: Option<Position>, size: (u16, u16), + scroll: usize, } impl Popup { @@ -29,12 +30,21 @@ impl Popup { contents, position: None, size: (0, 0), + scroll: 0, } } pub fn set_position(&mut self, pos: Option<Position>) { self.position = pos; } + + pub fn scroll(&mut self, offset: usize, direction: bool) { + if direction { + self.scroll += offset; + } else { + self.scroll = self.scroll.saturating_sub(offset); + } + } } impl Component for Popup { @@ -64,6 +74,21 @@ impl Component for Popup { code: KeyCode::Char('c'), modifiers: KeyModifiers::CONTROL, } => close_fn, + + KeyEvent { + code: KeyCode::Char('d'), + modifiers: KeyModifiers::CONTROL, + } => { + self.scroll(self.size.1 as usize / 2, true); + return EventResult::Consumed(None); + } + KeyEvent { + code: KeyCode::Char('u'), + modifiers: KeyModifiers::CONTROL, + } => { + self.scroll(self.size.1 as usize / 2, false); + return EventResult::Consumed(None); + } _ => self.contents.handle_event(event, cx), } // for some events, we want to process them but send ignore, specifically all input except @@ -85,6 +110,8 @@ impl Component for Popup { use tui::text::Text; use tui::widgets::{Paragraph, Widget, Wrap}; + cx.scroll = Some(self.scroll); + let position = self .position .or_else(|| cx.editor.cursor_position()) |