aboutsummaryrefslogtreecommitdiffstats
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/atuin-client/config.toml14
-rw-r--r--crates/atuin-client/src/settings.rs32
-rw-r--r--crates/atuin/src/command/client/search/interactive.rs31
3 files changed, 61 insertions, 16 deletions
diff --git a/crates/atuin-client/config.toml b/crates/atuin-client/config.toml
index 415fd441..e9415851 100644
--- a/crates/atuin-client/config.toml
+++ b/crates/atuin-client/config.toml
@@ -71,12 +71,7 @@
## enable or disable showing a preview of the selected command
## useful when the command is longer than the terminal width and is cut off
-# show_preview = false
-
-## enable or disable automatic preview. It shows a preview, if the command is
-## longer than the width of the terminal. It respects max_preview_height.
-## (default: true)
-# show_preview_auto = true
+# show_preview = true
## what to do when the escape key is pressed when searching
## possible values: return-original, return-query
@@ -208,3 +203,10 @@ enter_accept = true
# This ensures that sync v2 is enabled for new installs only
# In a later release it will become the default across the board
records = true
+
+[preview]
+## which preview strategy to use to calculate the preview height (respects max_preview_height).
+## possible values: auto, static
+## auto: length of the selected command.
+## static: length of the longest command stored in the history.
+# strategy = auto
diff --git a/crates/atuin-client/src/settings.rs b/crates/atuin-client/src/settings.rs
index 0497fb64..675fb307 100644
--- a/crates/atuin-client/src/settings.rs
+++ b/crates/atuin-client/src/settings.rs
@@ -338,6 +338,31 @@ pub struct Keys {
}
#[derive(Clone, Debug, Deserialize, Serialize)]
+pub struct Preview {
+ pub strategy: PreviewStrategy,
+}
+
+impl Default for Preview {
+ fn default() -> Self {
+ Self {
+ strategy: PreviewStrategy::Auto,
+ }
+ }
+}
+
+// The preview height strategy also takes max_preview_height into account.
+#[derive(Clone, Debug, Deserialize, Copy, PartialEq, Eq, ValueEnum, Serialize)]
+pub enum PreviewStrategy {
+ // Preview height is calculated for the length of the selected command.
+ #[serde(rename = "auto")]
+ Auto,
+
+ // Preview height is calculated for the length of the longest command stored in the history.
+ #[serde(rename = "static")]
+ Static,
+}
+
+#[derive(Clone, Debug, Deserialize, Serialize)]
pub struct Settings {
pub dialect: Dialect,
pub timezone: Timezone,
@@ -358,7 +383,6 @@ pub struct Settings {
pub inline_height: u16,
pub invert: bool,
pub show_preview: bool,
- pub show_preview_auto: bool,
pub max_preview_height: u16,
pub show_help: bool,
pub show_tabs: bool,
@@ -399,6 +423,9 @@ pub struct Settings {
pub keys: Keys,
#[serde(default)]
+ pub preview: Preview,
+
+ #[serde(default)]
pub dotfiles: dotfiles::Settings,
// This is automatically loaded when settings is created. Do not set in
@@ -615,8 +642,7 @@ impl Settings {
.set_default("filter_mode", "global")?
.set_default("style", "auto")?
.set_default("inline_height", 0)?
- .set_default("show_preview", false)?
- .set_default("show_preview_auto", true)?
+ .set_default("show_preview", true)?
.set_default("max_preview_height", 4)?
.set_default("show_help", true)?
.set_default("show_tabs", true)?
diff --git a/crates/atuin/src/command/client/search/interactive.rs b/crates/atuin/src/command/client/search/interactive.rs
index 1fd07e17..d24fee0d 100644
--- a/crates/atuin/src/command/client/search/interactive.rs
+++ b/crates/atuin/src/command/client/search/interactive.rs
@@ -22,7 +22,9 @@ use unicode_width::UnicodeWidthStr;
use atuin_client::{
database::{current_context, Database},
history::{store::HistoryStore, History, HistoryStats},
- settings::{CursorStyle, ExitMode, FilterMode, KeymapMode, SearchMode, Settings},
+ settings::{
+ CursorStyle, ExitMode, FilterMode, KeymapMode, PreviewStrategy, SearchMode, Settings,
+ },
};
use super::{
@@ -544,7 +546,11 @@ impl State {
border_size: u16,
preview_width: u16,
) -> u16 {
- if settings.show_preview_auto && tab_index == 0 && !results.is_empty() {
+ if settings.show_preview
+ && settings.preview.strategy == PreviewStrategy::Auto
+ && tab_index == 0
+ && !results.is_empty()
+ {
let length_current_cmd = results[selected].command.len() as u16;
// The '- 19' takes the characters before the command (duration and time) into account
if length_current_cmd > preview_width - 19 {
@@ -556,7 +562,10 @@ impl State {
} else {
1
}
- } else if settings.show_preview && !settings.show_preview_auto && tab_index == 0 {
+ } else if settings.show_preview
+ && settings.preview.strategy == PreviewStrategy::Static
+ && tab_index == 0
+ {
let longest_command = results
.iter()
.max_by(|h1, h2| h1.command.len().cmp(&h2.command.len()));
@@ -1179,25 +1188,33 @@ fn set_clipboard(_s: String) {}
#[cfg(test)]
mod tests {
use atuin_client::history::History;
- use atuin_client::settings::Settings;
+ use atuin_client::settings::{Preview, PreviewStrategy, Settings};
use super::State;
#[test]
fn calc_preview_height_test() {
let settings_preview_auto = Settings {
- show_preview_auto: true,
+ preview: Preview {
+ strategy: PreviewStrategy::Auto,
+ },
+ show_preview: true,
..Settings::utc()
};
let settings_preview_auto_h2 = Settings {
- show_preview_auto: true,
+ preview: Preview {
+ strategy: PreviewStrategy::Auto,
+ },
+ show_preview: true,
max_preview_height: 2,
..Settings::utc()
};
let settings_preview_h4 = Settings {
- show_preview_auto: false,
+ preview: Preview {
+ strategy: PreviewStrategy::Static,
+ },
show_preview: true,
max_preview_height: 4,
..Settings::utc()