scanner: &'static Scan,
conf: InstanceStatusConfig,
last_size: Option<(usize, usize)>,
+ page_len: usize,
keystate: ComposerKeyState,
goal_column: Option<usize>,
header: FileHeader,
scanner: Scan::get(),
conf,
last_size: None,
+ page_len: 0,
keystate: ComposerKeyState::Start,
goal_column: None,
header,
self.goal_column = None;
}
}
+
+ fn page_down(&mut self) {
+ let (_x, y) = self.cursor_pos.expect("post_update should have run");
+ self.goto_xy(0, y + self.page_len);
+ }
+
+ fn page_up(&mut self) {
+ let (_x, y) = self.cursor_pos.expect("post_update should have run");
+ if let Some(newy) = y.checked_sub(self.page_len) {
+ self.goto_xy(0, newy);
+ } else {
+ self.core.beginning_of_buffer();
+ }
+ }
}
#[test]
fn resize(&mut self, w: usize, h: usize) {
if self.last_size != Some((w, h)) {
self.last_size = Some((w, h));
+ self.page_len = h.saturating_sub(
+ self.header.render(w).len() + self.headersep.render(w).len()
+ );
self.post_update();
}
}
(Start, Ctrl('N')) | (Start, Down) => self.next_line(),
(Start, Ctrl('P')) | (Start, Up) => self.prev_line(),
+ (Start, Ctrl('V')) | (Start, PgDn) => self.page_down(),
+ (Start, Ctrl('Z')) | (Start, PgUp) => self.page_up(),
+
(Start, Return) => {
self.core.insert("\n");
self.post_update();