Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow overriding filter and search modes from CLI #635

Merged
merged 5 commits into from
Dec 18, 2022
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions atuin-client/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ atuin-common = { path = "../atuin-common", version = "12.0.0" }

log = "0.4"
chrono = { version = "0.4", features = ["serde"] }
clap = { version = "4.0.18", features = ["derive"] }
eyre = "0.6"
directories = "4"
uuid = { version = "1.2", features = ["v4"] }
Expand Down
9 changes: 7 additions & 2 deletions atuin-client/src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use std::{
};

use chrono::{prelude::*, Utc};
use clap::ValueEnum;
use config::{Config, Environment, File as ConfigFile, FileFormat};
use eyre::{eyre, Context, Result};
use fs_err::{create_dir_all, File};
Expand All @@ -16,7 +17,7 @@ pub const LAST_SYNC_FILENAME: &str = "last_sync_time";
pub const LAST_VERSION_CHECK_FILENAME: &str = "last_version_check_time";
pub const LATEST_VERSION_FILENAME: &str = "latest_version";

#[derive(Clone, Debug, Deserialize, Copy)]
#[derive(Clone, Debug, Deserialize, Copy, ValueEnum)]
pub enum SearchMode {
#[serde(rename = "prefix")]
Prefix,
Expand All @@ -28,7 +29,7 @@ pub enum SearchMode {
Fuzzy,
}

#[derive(Clone, Debug, Deserialize, Copy, PartialEq, Eq)]
#[derive(Clone, Debug, Deserialize, Copy, PartialEq, Eq, ValueEnum)]
pub enum FilterMode {
#[serde(rename = "global")]
Global = 0,
Expand Down Expand Up @@ -108,6 +109,8 @@ pub struct Settings {
pub session_path: String,
pub search_mode: SearchMode,
pub filter_mode: FilterMode,
pub filter_mode_shell_up_key_binding: FilterMode,
pub shell_up_key_binding: bool,
pub exit_mode: ExitMode,
// This is automatically loaded when settings is created. Do not set in
// config! Keep secrets and settings apart.
Expand Down Expand Up @@ -288,6 +291,8 @@ impl Settings {
.set_default("sync_address", "https://api.atuin.sh")?
.set_default("search_mode", "fuzzy")?
.set_default("filter_mode", "global")?
.set_default("filter_mode_shell_up_key_binding", "global")?
.set_default("shell_up_key_binding", false)?
.set_default("exit_mode", "return-original")?
.set_default("session_token", "")?
.set_default("style", "auto")?
Expand Down
12 changes: 11 additions & 1 deletion docs/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ auto_sync = true/false

### `update_check`

Configures whether or not to automatically check for updates. Defaults to
Configures whether or not to automatically check for updates. Defaults to
true.

```
Expand Down Expand Up @@ -143,6 +143,16 @@ Filter modes can still be toggled via ctrl-r
filter_mode = "host"
```

### `filter_mode_shell_up_key_binding`

The default filter to use when searching and being invoked from a shell up-key binding.

Accepts exactly the same options as `filter_mode` above

```
filter_mode_shell_up_key_binding = "session"
```

### `exit_mode`

What to do when the escape key is pressed when searching
Expand Down
4 changes: 2 additions & 2 deletions src/command/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ impl Cmd {
.parse_env("ATUIN_LOG")
.init();

let settings = Settings::new().wrap_err("could not load client settings")?;
let mut settings = Settings::new().wrap_err("could not load client settings")?;

let db_path = PathBuf::from(settings.db_path.as_str());
let mut db = Sqlite::new(db_path).await?;
Expand All @@ -53,7 +53,7 @@ impl Cmd {
Self::History(history) => history.run(&settings, &mut db).await,
Self::Import(import) => import.run(&mut db).await,
Self::Stats(stats) => stats.run(&mut db, &settings).await,
Self::Search(search) => search.run(&mut db, &settings).await,
Self::Search(search) => search.run(&mut db, &mut settings).await,
#[cfg(feature = "sync")]
Self::Sync(sync) => sync.run(settings, &mut db).await,
}
Expand Down
27 changes: 25 additions & 2 deletions src/command/client/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ use clap::Parser;
use eyre::Result;

use atuin_client::{
database::current_context, database::Database, history::History, settings::Settings,
database::current_context,
database::Database,
history::History,
settings::{FilterMode, SearchMode, Settings},
};

use super::history::ListMode;
Expand All @@ -15,6 +18,7 @@ mod history_list;
mod interactive;
pub use duration::format_duration;

#[allow(clippy::struct_excessive_bools)]
#[derive(Parser)]
pub struct Cmd {
/// Filter search result by directory
Expand Down Expand Up @@ -49,6 +53,18 @@ pub struct Cmd {
#[arg(long, short)]
interactive: bool,

/// Allow overriding filter mode over config
#[arg(long = "filter-mode")]
filter_mode: Option<FilterMode>,

/// Allow overriding search mode over config
#[arg(long = "search-mode")]
search_mode: Option<SearchMode>,

/// Marker argument used to inform atuin that it was invoked from a shell up-key binding (hidden from help to avoid confusion)
#[arg(long = "shell-up-key-binding", hide = true)]
shell_up_key_binding: bool,

/// Use human-readable formatting for time
#[arg(long)]
human: bool,
Expand All @@ -61,7 +77,14 @@ pub struct Cmd {
}

impl Cmd {
pub async fn run(self, db: &mut impl Database, settings: &Settings) -> Result<()> {
pub async fn run(self, db: &mut impl Database, settings: &mut Settings) -> Result<()> {
if self.search_mode.is_some() {
settings.search_mode = self.search_mode.unwrap();
}
if self.filter_mode.is_some() {
settings.filter_mode = self.filter_mode.unwrap();
}
settings.shell_up_key_binding = self.shell_up_key_binding;
if self.interactive {
pdecat marked this conversation as resolved.
Show resolved Hide resolved
let item = interactive::history(&self.query, settings, db).await?;
eprintln!("{item}");
Expand Down
6 changes: 5 additions & 1 deletion src/command/client/search/interactive.rs
Original file line number Diff line number Diff line change
Expand Up @@ -329,7 +329,11 @@ pub async fn history(
input,
results_state: ListState::default(),
context: current_context(),
filter_mode: settings.filter_mode,
filter_mode: if settings.shell_up_key_binding {
settings.filter_mode_shell_up_key_binding
} else {
settings.filter_mode
},
update_needed,
};

Expand Down
7 changes: 4 additions & 3 deletions src/shell/atuin.bash
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ _atuin_precmd() {
__atuin_history ()
{
tput rmkx
HISTORY="$(RUST_LOG=error atuin search -i -- "${READLINE_LINE}" 3>&1 1>&2 2>&3)"
# shellcheck disable=SC2048,SC2086
HISTORY="$(RUST_LOG=error atuin search $* -i -- "${READLINE_LINE}" 3>&1 1>&2 2>&3)"
tput smkx

READLINE_LINE=${HISTORY}
Expand All @@ -34,6 +35,6 @@ fi

if [[ -z ${ATUIN_NOBIND} ]]; then
bind -x '"\C-r": __atuin_history'
bind -x '"\e[A": __atuin_history'
bind -x '"\eOA": __atuin_history'
bind -x '"\e[A": __atuin_history --shell-up-key-binding'
bind -x '"\eOA": __atuin_history --shell-up-key-binding'
fi
4 changes: 2 additions & 2 deletions src/shell/atuin.fish
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ function _atuin_postexec --on-event fish_postexec
end

function _atuin_search
set h (RUST_LOG=error atuin search -i -- (commandline -b) 3>&1 1>&2 2>&3)
set h (RUST_LOG=error atuin search $* -i -- (commandline -b) 3>&1 1>&2 2>&3)
commandline -f repaint
if test -n "$h"
commandline -r $h
Expand All @@ -33,7 +33,7 @@ function _atuin_bind_up
set -l lineno (commandline --line)
switch $lineno
case 1
_atuin_search
_atuin_search --shell-up-key-binding
case '*'
up-or-search
end
Expand Down
7 changes: 4 additions & 3 deletions src/shell/atuin.zsh
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@ _atuin_search(){
echoti rmkx
# swap stderr and stdout, so that the tui stuff works
# TODO: not this
output=$(RUST_LOG=error atuin search -i -- $BUFFER 3>&1 1>&2 2>&3)
# shellcheck disable=SC2048
output=$(RUST_LOG=error atuin search $* -i -- $BUFFER 3>&1 1>&2 2>&3)
echoti smkx

if [[ -n $output ]] ; then
Expand All @@ -54,6 +55,6 @@ if [[ -z $ATUIN_NOBIND ]]; then
bindkey '^r' _atuin_search_widget

# depends on terminal mode
bindkey '^[[A' _atuin_search_widget
bindkey '^[OA' _atuin_search_widget
bindkey '^[[A' _atuin_search_widget --shell-up-key-binding
bindkey '^[OA' _atuin_search_widget --shell-up-key-binding
ellie marked this conversation as resolved.
Show resolved Hide resolved
fi