From c4f76bd778c44a94a098151562a6743d26dd5c72 Mon Sep 17 00:00:00 2001 From: sxyazi Date: Fri, 25 Aug 2023 13:15:26 +0800 Subject: [PATCH] .. --- config/preset/keymap.toml | 3 +++ core/src/manager/preview/provider.rs | 13 +++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/config/preset/keymap.toml b/config/preset/keymap.toml index ae7cc053..960c26e0 100644 --- a/config/preset/keymap.toml +++ b/config/preset/keymap.toml @@ -19,6 +19,9 @@ keymap = [ { on = [ "H" ], exec = "back" }, { on = [ "L" ], exec = "forward" }, + { on = [ "" ], exec = "peek -5" }, + { on = [ "" ], exec = "peek 5" }, + { on = [ "" ], exec = "arrow -1" }, { on = [ "" ], exec = "arrow 1" }, { on = [ "" ], exec = "leave" }, diff --git a/core/src/manager/preview/provider.rs b/core/src/manager/preview/provider.rs index 43fc48c3..dd52fb1c 100644 --- a/core/src/manager/preview/provider.rs +++ b/core/src/manager/preview/provider.rs @@ -106,27 +106,28 @@ impl Provider { let mut buf = String::new(); let mut i = 0; - let mut limit = MANAGER.layout.preview_height(); - while limit > 0 && h.reader.read_line(&mut line)? > 0 { + let limit = MANAGER.layout.preview_height(); + while h.reader.read_line(&mut line)? > 0 { if tick != INCR.load(Ordering::Relaxed) { return Err("Preview cancelled".into()); } i += 1; - if i <= skip { + if i > skip + limit { + break; + } else if i <= skip { line.clear(); continue; } - limit -= 1; line = line.replace('\t', &spaces); let regions = h.highlight_lines.highlight_line(&line, syntaxes).map_err(|e| anyhow!(e))?; buf.push_str(&as_24_bit_terminal_escaped(®ions, false)); line.clear(); } - if buf.is_empty() { - return Err(PagedError::Exceed(i)); + if skip > 0 && i < skip + limit { + return Err(PagedError::Exceed(i.saturating_sub(limit))); } buf.push_str("\x1b[0m");