mirror of
https://github.com/atuinsh/atuin.git
synced 2025-06-25 20:32:01 +02:00
refactor: preview_auto to use enum and different option (#1991)
* refactor: preview_auto to use enum and different option * fix: typo
This commit is contained in:
parent
282e39d39f
commit
831dd783ed
@ -71,12 +71,7 @@
|
|||||||
|
|
||||||
## enable or disable showing a preview of the selected command
|
## enable or disable showing a preview of the selected command
|
||||||
## useful when the command is longer than the terminal width and is cut off
|
## useful when the command is longer than the terminal width and is cut off
|
||||||
# show_preview = false
|
# show_preview = true
|
||||||
|
|
||||||
## 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
|
|
||||||
|
|
||||||
## what to do when the escape key is pressed when searching
|
## what to do when the escape key is pressed when searching
|
||||||
## possible values: return-original, return-query
|
## possible values: return-original, return-query
|
||||||
@ -208,3 +203,10 @@ enter_accept = true
|
|||||||
# This ensures that sync v2 is enabled for new installs only
|
# This ensures that sync v2 is enabled for new installs only
|
||||||
# In a later release it will become the default across the board
|
# In a later release it will become the default across the board
|
||||||
records = true
|
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
|
||||||
|
@ -337,6 +337,31 @@ pub struct Keys {
|
|||||||
pub scroll_exits: bool,
|
pub scroll_exits: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[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)]
|
#[derive(Clone, Debug, Deserialize, Serialize)]
|
||||||
pub struct Settings {
|
pub struct Settings {
|
||||||
pub dialect: Dialect,
|
pub dialect: Dialect,
|
||||||
@ -358,7 +383,6 @@ pub struct Settings {
|
|||||||
pub inline_height: u16,
|
pub inline_height: u16,
|
||||||
pub invert: bool,
|
pub invert: bool,
|
||||||
pub show_preview: bool,
|
pub show_preview: bool,
|
||||||
pub show_preview_auto: bool,
|
|
||||||
pub max_preview_height: u16,
|
pub max_preview_height: u16,
|
||||||
pub show_help: bool,
|
pub show_help: bool,
|
||||||
pub show_tabs: bool,
|
pub show_tabs: bool,
|
||||||
@ -398,6 +422,9 @@ pub struct Settings {
|
|||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub keys: Keys,
|
pub keys: Keys,
|
||||||
|
|
||||||
|
#[serde(default)]
|
||||||
|
pub preview: Preview,
|
||||||
|
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub dotfiles: dotfiles::Settings,
|
pub dotfiles: dotfiles::Settings,
|
||||||
|
|
||||||
@ -615,8 +642,7 @@ impl Settings {
|
|||||||
.set_default("filter_mode", "global")?
|
.set_default("filter_mode", "global")?
|
||||||
.set_default("style", "auto")?
|
.set_default("style", "auto")?
|
||||||
.set_default("inline_height", 0)?
|
.set_default("inline_height", 0)?
|
||||||
.set_default("show_preview", false)?
|
.set_default("show_preview", true)?
|
||||||
.set_default("show_preview_auto", true)?
|
|
||||||
.set_default("max_preview_height", 4)?
|
.set_default("max_preview_height", 4)?
|
||||||
.set_default("show_help", true)?
|
.set_default("show_help", true)?
|
||||||
.set_default("show_tabs", true)?
|
.set_default("show_tabs", true)?
|
||||||
|
@ -22,7 +22,9 @@ use unicode_width::UnicodeWidthStr;
|
|||||||
use atuin_client::{
|
use atuin_client::{
|
||||||
database::{current_context, Database},
|
database::{current_context, Database},
|
||||||
history::{store::HistoryStore, History, HistoryStats},
|
history::{store::HistoryStore, History, HistoryStats},
|
||||||
settings::{CursorStyle, ExitMode, FilterMode, KeymapMode, SearchMode, Settings},
|
settings::{
|
||||||
|
CursorStyle, ExitMode, FilterMode, KeymapMode, PreviewStrategy, SearchMode, Settings,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{
|
use super::{
|
||||||
@ -544,7 +546,11 @@ impl State {
|
|||||||
border_size: u16,
|
border_size: u16,
|
||||||
preview_width: u16,
|
preview_width: u16,
|
||||||
) -> 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;
|
let length_current_cmd = results[selected].command.len() as u16;
|
||||||
// The '- 19' takes the characters before the command (duration and time) into account
|
// The '- 19' takes the characters before the command (duration and time) into account
|
||||||
if length_current_cmd > preview_width - 19 {
|
if length_current_cmd > preview_width - 19 {
|
||||||
@ -556,7 +562,10 @@ impl State {
|
|||||||
} else {
|
} else {
|
||||||
1
|
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
|
let longest_command = results
|
||||||
.iter()
|
.iter()
|
||||||
.max_by(|h1, h2| h1.command.len().cmp(&h2.command.len()));
|
.max_by(|h1, h2| h1.command.len().cmp(&h2.command.len()));
|
||||||
@ -1179,25 +1188,33 @@ fn set_clipboard(_s: String) {}
|
|||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use atuin_client::history::History;
|
use atuin_client::history::History;
|
||||||
use atuin_client::settings::Settings;
|
use atuin_client::settings::{Preview, PreviewStrategy, Settings};
|
||||||
|
|
||||||
use super::State;
|
use super::State;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn calc_preview_height_test() {
|
fn calc_preview_height_test() {
|
||||||
let settings_preview_auto = Settings {
|
let settings_preview_auto = Settings {
|
||||||
show_preview_auto: true,
|
preview: Preview {
|
||||||
|
strategy: PreviewStrategy::Auto,
|
||||||
|
},
|
||||||
|
show_preview: true,
|
||||||
..Settings::utc()
|
..Settings::utc()
|
||||||
};
|
};
|
||||||
|
|
||||||
let settings_preview_auto_h2 = Settings {
|
let settings_preview_auto_h2 = Settings {
|
||||||
show_preview_auto: true,
|
preview: Preview {
|
||||||
|
strategy: PreviewStrategy::Auto,
|
||||||
|
},
|
||||||
|
show_preview: true,
|
||||||
max_preview_height: 2,
|
max_preview_height: 2,
|
||||||
..Settings::utc()
|
..Settings::utc()
|
||||||
};
|
};
|
||||||
|
|
||||||
let settings_preview_h4 = Settings {
|
let settings_preview_h4 = Settings {
|
||||||
show_preview_auto: false,
|
preview: Preview {
|
||||||
|
strategy: PreviewStrategy::Static,
|
||||||
|
},
|
||||||
show_preview: true,
|
show_preview: true,
|
||||||
max_preview_height: 4,
|
max_preview_height: 4,
|
||||||
..Settings::utc()
|
..Settings::utc()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user