aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <4550158+RichardDRJ@users.noreply.github.com>2023-07-31 18:36:58 +0100
committerGitHub <noreply@github.com>2023-07-31 18:36:58 +0100
commitd7f89296564fc3acb79a1c6f361797f58f4efffe (patch)
treee3f1dddead8fb416b880f006552299681c76b4e4
parentfix: nushell empty hooks (#1138) (diff)
downloadatuin-d7f89296564fc3acb79a1c6f361797f58f4efffe.zip
Add support for `max_preview_height` setting (#1088)
-rw-r--r--atuin-client/src/settings.rs2
-rw-r--r--atuin/src/command/client/search/interactive.rs26
-rw-r--r--docs/docs/config/config.md8
3 files changed, 27 insertions, 9 deletions
diff --git a/atuin-client/src/settings.rs b/atuin-client/src/settings.rs
index 3cc99558..67050792 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 e7e71898..79399abf 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 209d34cd..dd7c80fe 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.