From d7f89296564fc3acb79a1c6f361797f58f4efffe Mon Sep 17 00:00:00 2001 From: Richard Jones <4550158+RichardDRJ@users.noreply.github.com> Date: Mon, 31 Jul 2023 18:36:58 +0100 Subject: [PATCH] Add support for `max_preview_height` setting (#1088) --- atuin-client/src/settings.rs | 2 ++ .../src/command/client/search/interactive.rs | 26 ++++++++++++------- docs/docs/config/config.md | 8 ++++++ 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs index 3cc9955..6705079 100644 --- a/atuin-client/src/settings.rs +++ b/atuin-client/src/settings.rs @@ -158,6 +158,7 @@ pub struct Settings { pub inline_height: u16, pub invert: bool, pub show_preview: bool, + pub max_preview_height: u16, pub show_help: bool, pub exit_mode: ExitMode, pub word_jump_mode: WordJumpMode, @@ -369,6 +370,7 @@ impl Settings { .set_default("style", "auto")? .set_default("inline_height", 0)? .set_default("show_preview", false)? + .set_default("max_preview_height", 4)? .set_default("show_help", true)? .set_default("invert", false)? .set_default("exit_mode", "return-original")? diff --git a/atuin/src/command/client/search/interactive.rs b/atuin/src/command/client/search/interactive.rs index e7e7189..79399ab 100644 --- a/atuin/src/command/client/search/interactive.rs +++ b/atuin/src/command/client/search/interactive.rs @@ -300,9 +300,14 @@ impl State { .max_by(|h1, h2| h1.command.len().cmp(&h2.command.len())); longest_command.map_or(0, |v| { std::cmp::min( - 4, - (v.command.len() as u16 + preview_width - 1 - border_size) - / (preview_width - border_size), + settings.max_preview_height, + v.command + .split('\n') + .map(|line| { + (line.len() as u16 + preview_width - 1 - border_size) + / (preview_width - border_size) + }) + .sum(), ) }) + border_size * 2 } else if compact { @@ -488,12 +493,15 @@ impl State { } else { use itertools::Itertools as _; let s = &results[selected].command; - s.char_indices() - .step_by(preview_width.into()) - .map(|(i, _)| i) - .chain(Some(s.len())) - .tuple_windows() - .map(|(a, b)| &s[a..b]) + s.split('\n') + .flat_map(|line| { + line.char_indices() + .step_by(preview_width.into()) + .map(|(i, _)| i) + .chain(Some(line.len())) + .tuple_windows() + .map(|(a, b)| &line[a..b]) + }) .join("\n") }; let preview = if compact { diff --git a/docs/docs/config/config.md b/docs/docs/config/config.md index 209d34c..dd7c80f 100644 --- a/docs/docs/config/config.md +++ b/docs/docs/config/config.md @@ -196,6 +196,14 @@ Configure whether or not to show a preview of the selected command. Useful when the command is longer than the terminal width and is cut off. +### `max_preview_height` + +Configure the maximum height of the preview to show. + +Useful when you have long scripts in your history that you want to distinguish by more than the first few lines. + +Defaults to `4`. + ### `show_help` Configure whether or not to show the help row, which includes the current Atuin version (and whether an update is available), a keymap hint, and the total amount of commands in your history.