Add support for max_preview_height setting (#1088)

This commit is contained in:
Richard Jones 2023-07-31 18:36:58 +01:00 committed by GitHub
parent 8b05b15355
commit d7f8929656
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 9 deletions

View file

@ -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")?

View file

@ -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()
s.split('\n')
.flat_map(|line| {
line.char_indices()
.step_by(preview_width.into())
.map(|(i, _)| i)
.chain(Some(s.len()))
.chain(Some(line.len()))
.tuple_windows()
.map(|(a, b)| &s[a..b])
.map(|(a, b)| &line[a..b])
})
.join("\n")
};
let preview = if compact {

View file

@ -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.