parent
1735be05d7
commit
38172f3501
17 changed files with 55 additions and 49 deletions
|
@ -70,8 +70,8 @@ pub fn current_context() -> Context {
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
pub trait Database: Send + Sync + 'static {
|
pub trait Database: Send + Sync + 'static {
|
||||||
async fn save(&mut self, h: &History) -> Result<()>;
|
async fn save(&self, h: &History) -> Result<()>;
|
||||||
async fn save_bulk(&mut self, h: &[History]) -> Result<()>;
|
async fn save_bulk(&self, h: &[History]) -> Result<()>;
|
||||||
|
|
||||||
async fn load(&self, id: &str) -> Result<Option<History>>;
|
async fn load(&self, id: &str) -> Result<Option<History>>;
|
||||||
async fn list(
|
async fn list(
|
||||||
|
@ -193,7 +193,7 @@ impl Sqlite {
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl Database for Sqlite {
|
impl Database for Sqlite {
|
||||||
async fn save(&mut self, h: &History) -> Result<()> {
|
async fn save(&self, h: &History) -> Result<()> {
|
||||||
debug!("saving history to sqlite");
|
debug!("saving history to sqlite");
|
||||||
let mut tx = self.pool.begin().await?;
|
let mut tx = self.pool.begin().await?;
|
||||||
Self::save_raw(&mut tx, h).await?;
|
Self::save_raw(&mut tx, h).await?;
|
||||||
|
@ -202,7 +202,7 @@ impl Database for Sqlite {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn save_bulk(&mut self, h: &[History]) -> Result<()> {
|
async fn save_bulk(&self, h: &[History]) -> Result<()> {
|
||||||
debug!("saving history to sqlite");
|
debug!("saving history to sqlite");
|
||||||
|
|
||||||
let mut tx = self.pool.begin().await?;
|
let mut tx = self.pool.begin().await?;
|
||||||
|
|
|
@ -37,7 +37,7 @@ async fn sync_download(
|
||||||
key: &Key,
|
key: &Key,
|
||||||
force: bool,
|
force: bool,
|
||||||
client: &api_client::Client<'_>,
|
client: &api_client::Client<'_>,
|
||||||
db: &mut (impl Database + Send),
|
db: &(impl Database + Send),
|
||||||
) -> Result<(i64, i64)> {
|
) -> Result<(i64, i64)> {
|
||||||
debug!("starting sync download");
|
debug!("starting sync download");
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ async fn sync_upload(
|
||||||
key: &Key,
|
key: &Key,
|
||||||
_force: bool,
|
_force: bool,
|
||||||
client: &api_client::Client<'_>,
|
client: &api_client::Client<'_>,
|
||||||
db: &mut (impl Database + Send),
|
db: &(impl Database + Send),
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
debug!("starting sync upload");
|
debug!("starting sync upload");
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ async fn sync_upload(
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn sync(settings: &Settings, force: bool, db: &mut (impl Database + Send)) -> Result<()> {
|
pub async fn sync(settings: &Settings, force: bool, db: &(impl Database + Send)) -> Result<()> {
|
||||||
let client = api_client::Client::new(
|
let client = api_client::Client::new(
|
||||||
&settings.sync_address,
|
&settings.sync_address,
|
||||||
&settings.session_token,
|
&settings.session_token,
|
||||||
|
|
|
@ -18,7 +18,7 @@ mod kv;
|
||||||
mod search;
|
mod search;
|
||||||
mod stats;
|
mod stats;
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand, Debug)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
pub enum Cmd {
|
pub enum Cmd {
|
||||||
/// Manipulate shell history
|
/// Manipulate shell history
|
||||||
|
@ -54,22 +54,24 @@ impl Cmd {
|
||||||
.parse_env("ATUIN_LOG")
|
.parse_env("ATUIN_LOG")
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
|
tracing::trace!(command = ?self, "client command");
|
||||||
|
|
||||||
let mut 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 db_path = PathBuf::from(settings.db_path.as_str());
|
||||||
let record_store_path = PathBuf::from(settings.record_store_path.as_str());
|
let record_store_path = PathBuf::from(settings.record_store_path.as_str());
|
||||||
|
|
||||||
let mut db = Sqlite::new(db_path).await?;
|
let db = Sqlite::new(db_path).await?;
|
||||||
let mut store = SqliteStore::new(record_store_path).await?;
|
let mut store = SqliteStore::new(record_store_path).await?;
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
Self::History(history) => history.run(&settings, &mut db).await,
|
Self::History(history) => history.run(&settings, &db).await,
|
||||||
Self::Import(import) => import.run(&mut db).await,
|
Self::Import(import) => import.run(&db).await,
|
||||||
Self::Stats(stats) => stats.run(&mut db, &settings).await,
|
Self::Stats(stats) => stats.run(&db, &settings).await,
|
||||||
Self::Search(search) => search.run(db, &mut settings).await,
|
Self::Search(search) => search.run(db, &mut settings).await,
|
||||||
|
|
||||||
#[cfg(feature = "sync")]
|
#[cfg(feature = "sync")]
|
||||||
Self::Sync(sync) => sync.run(settings, &mut db, &mut store).await,
|
Self::Sync(sync) => sync.run(settings, &db, &mut store).await,
|
||||||
|
|
||||||
#[cfg(feature = "sync")]
|
#[cfg(feature = "sync")]
|
||||||
Self::Account(account) => account.run(settings).await,
|
Self::Account(account) => account.run(settings).await,
|
||||||
|
|
|
@ -8,13 +8,13 @@ pub mod login;
|
||||||
pub mod logout;
|
pub mod logout;
|
||||||
pub mod register;
|
pub mod register;
|
||||||
|
|
||||||
#[derive(Args)]
|
#[derive(Args, Debug)]
|
||||||
pub struct Cmd {
|
pub struct Cmd {
|
||||||
#[command(subcommand)]
|
#[command(subcommand)]
|
||||||
command: Commands,
|
command: Commands,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand, Debug)]
|
||||||
pub enum Commands {
|
pub enum Commands {
|
||||||
/// Login to the configured server
|
/// Login to the configured server
|
||||||
Login(login::Cmd),
|
Login(login::Cmd),
|
||||||
|
|
|
@ -12,7 +12,7 @@ use atuin_client::{
|
||||||
use atuin_common::api::LoginRequest;
|
use atuin_common::api::LoginRequest;
|
||||||
use rpassword::prompt_password;
|
use rpassword::prompt_password;
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Debug)]
|
||||||
pub struct Cmd {
|
pub struct Cmd {
|
||||||
#[clap(long, short)]
|
#[clap(long, short)]
|
||||||
pub username: Option<String>,
|
pub username: Option<String>,
|
||||||
|
|
|
@ -4,7 +4,7 @@ use tokio::{fs::File, io::AsyncWriteExt};
|
||||||
|
|
||||||
use atuin_client::{api_client, settings::Settings};
|
use atuin_client::{api_client, settings::Settings};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Debug)]
|
||||||
pub struct Cmd {
|
pub struct Cmd {
|
||||||
#[clap(long, short)]
|
#[clap(long, short)]
|
||||||
pub username: Option<String>,
|
pub username: Option<String>,
|
||||||
|
|
|
@ -23,7 +23,7 @@ use time::{macros::format_description, OffsetDateTime};
|
||||||
|
|
||||||
use super::search::format_duration_into;
|
use super::search::format_duration_into;
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand, Debug)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
pub enum Cmd {
|
pub enum Cmd {
|
||||||
/// Begins a new command in the history
|
/// Begins a new command in the history
|
||||||
|
@ -239,7 +239,7 @@ fn parse_fmt(format: &str) -> ParsedFmt {
|
||||||
impl Cmd {
|
impl Cmd {
|
||||||
#[allow(clippy::too_many_lines, clippy::cast_possible_truncation)]
|
#[allow(clippy::too_many_lines, clippy::cast_possible_truncation)]
|
||||||
async fn handle_start(
|
async fn handle_start(
|
||||||
db: &mut impl Database,
|
db: &impl Database,
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
command: &[String],
|
command: &[String],
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
|
@ -268,7 +268,7 @@ impl Cmd {
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn handle_end(
|
async fn handle_end(
|
||||||
db: &mut impl Database,
|
db: &impl Database,
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
id: &str,
|
id: &str,
|
||||||
exit: i64,
|
exit: i64,
|
||||||
|
@ -313,7 +313,7 @@ impl Cmd {
|
||||||
#[allow(clippy::too_many_arguments)]
|
#[allow(clippy::too_many_arguments)]
|
||||||
#[allow(clippy::fn_params_excessive_bools)]
|
#[allow(clippy::fn_params_excessive_bools)]
|
||||||
async fn handle_list(
|
async fn handle_list(
|
||||||
db: &mut impl Database,
|
db: &impl Database,
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
context: atuin_client::database::Context,
|
context: atuin_client::database::Context,
|
||||||
session: bool,
|
session: bool,
|
||||||
|
@ -361,7 +361,7 @@ impl Cmd {
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn run(self, settings: &Settings, db: &mut impl Database) -> Result<()> {
|
pub async fn run(self, settings: &Settings, db: &impl Database) -> Result<()> {
|
||||||
let context = current_context();
|
let context = current_context();
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
|
@ -377,7 +377,6 @@ impl Cmd {
|
||||||
format,
|
format,
|
||||||
} => {
|
} => {
|
||||||
let mode = ListMode::from_flags(human, cmd_only);
|
let mode = ListMode::from_flags(human, cmd_only);
|
||||||
let reverse = reverse;
|
|
||||||
Self::handle_list(
|
Self::handle_list(
|
||||||
db, settings, context, session, cwd, mode, format, false, print0, reverse,
|
db, settings, context, session, cwd, mode, format, false, print0, reverse,
|
||||||
)
|
)
|
||||||
|
|
|
@ -14,7 +14,7 @@ use atuin_client::{
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
pub enum Cmd {
|
pub enum Cmd {
|
||||||
/// Import history for the current shell
|
/// Import history for the current shell
|
||||||
|
@ -39,7 +39,7 @@ pub enum Cmd {
|
||||||
const BATCH_SIZE: usize = 100;
|
const BATCH_SIZE: usize = 100;
|
||||||
|
|
||||||
impl Cmd {
|
impl Cmd {
|
||||||
pub async fn run<DB: Database>(&self, db: &mut DB) -> Result<()> {
|
pub async fn run<DB: Database>(&self, db: &DB) -> Result<()> {
|
||||||
println!(" Atuin ");
|
println!(" Atuin ");
|
||||||
println!("======================");
|
println!("======================");
|
||||||
println!(" \u{1f30d} ");
|
println!(" \u{1f30d} ");
|
||||||
|
@ -104,11 +104,11 @@ impl Cmd {
|
||||||
pub struct HistoryImporter<'db, DB: Database> {
|
pub struct HistoryImporter<'db, DB: Database> {
|
||||||
pb: ProgressBar,
|
pb: ProgressBar,
|
||||||
buf: Vec<History>,
|
buf: Vec<History>,
|
||||||
db: &'db mut DB,
|
db: &'db DB,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'db, DB: Database> HistoryImporter<'db, DB> {
|
impl<'db, DB: Database> HistoryImporter<'db, DB> {
|
||||||
fn new(db: &'db mut DB, len: usize) -> Self {
|
fn new(db: &'db DB, len: usize) -> Self {
|
||||||
Self {
|
Self {
|
||||||
pb: ProgressBar::new(len as u64),
|
pb: ProgressBar::new(len as u64),
|
||||||
buf: Vec::with_capacity(BATCH_SIZE),
|
buf: Vec::with_capacity(BATCH_SIZE),
|
||||||
|
@ -138,7 +138,7 @@ impl<'db, DB: Database> Loader for HistoryImporter<'db, DB> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn import<I: Importer + Send, DB: Database>(db: &mut DB) -> Result<()> {
|
async fn import<I: Importer + Send, DB: Database>(db: &DB) -> Result<()> {
|
||||||
println!("Importing history from {}", I::NAME);
|
println!("Importing history from {}", I::NAME);
|
||||||
|
|
||||||
let mut importer = I::new().await?;
|
let mut importer = I::new().await?;
|
||||||
|
|
|
@ -3,7 +3,7 @@ use eyre::{Context, Result};
|
||||||
|
|
||||||
use atuin_client::{encryption, kv::KvStore, record::store::Store, settings::Settings};
|
use atuin_client::{encryption, kv::KvStore, record::store::Store, settings::Settings};
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand, Debug)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
pub enum Cmd {
|
pub enum Cmd {
|
||||||
// atuin kv set foo bar bar
|
// atuin kv set foo bar bar
|
||||||
|
|
|
@ -19,7 +19,7 @@ mod interactive;
|
||||||
pub use duration::{format_duration, format_duration_into};
|
pub use duration::{format_duration, format_duration_into};
|
||||||
|
|
||||||
#[allow(clippy::struct_excessive_bools)]
|
#[allow(clippy::struct_excessive_bools)]
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Debug)]
|
||||||
pub struct Cmd {
|
pub struct Cmd {
|
||||||
/// Filter search result by directory
|
/// Filter search result by directory
|
||||||
#[arg(long, short)]
|
#[arg(long, short)]
|
||||||
|
@ -103,7 +103,7 @@ pub struct Cmd {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cmd {
|
impl Cmd {
|
||||||
pub async fn run(self, mut db: impl Database, settings: &mut Settings) -> Result<()> {
|
pub async fn run(self, db: impl Database, settings: &mut Settings) -> Result<()> {
|
||||||
if self.delete && self.query.is_empty() {
|
if self.delete && self.query.is_empty() {
|
||||||
println!("Please specify a query to match the items you wish to delete. If you wish to delete all history, pass --delete-it-all");
|
println!("Please specify a query to match the items you wish to delete. If you wish to delete all history, pass --delete-it-all");
|
||||||
return Ok(());
|
return Ok(());
|
||||||
|
@ -147,7 +147,7 @@ impl Cmd {
|
||||||
};
|
};
|
||||||
|
|
||||||
let mut entries =
|
let mut entries =
|
||||||
run_non_interactive(settings, opt_filter.clone(), &self.query, &mut db).await?;
|
run_non_interactive(settings, opt_filter.clone(), &self.query, &db).await?;
|
||||||
|
|
||||||
if entries.is_empty() {
|
if entries.is_empty() {
|
||||||
std::process::exit(1)
|
std::process::exit(1)
|
||||||
|
@ -165,8 +165,7 @@ impl Cmd {
|
||||||
}
|
}
|
||||||
|
|
||||||
entries =
|
entries =
|
||||||
run_non_interactive(settings, opt_filter.clone(), &self.query, &mut db)
|
run_non_interactive(settings, opt_filter.clone(), &self.query, &db).await?;
|
||||||
.await?;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
super::history::print_list(
|
super::history::print_list(
|
||||||
|
@ -189,7 +188,7 @@ async fn run_non_interactive(
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
filter_options: OptFilters,
|
filter_options: OptFilters,
|
||||||
query: &[String],
|
query: &[String],
|
||||||
db: &mut impl Database,
|
db: &impl Database,
|
||||||
) -> Result<Vec<History>> {
|
) -> Result<Vec<History>> {
|
||||||
let dir = if filter_options.cwd.as_deref() == Some(".") {
|
let dir = if filter_options.cwd.as_deref() == Some(".") {
|
||||||
Some(utils::get_current_dir())
|
Some(utils::get_current_dir())
|
||||||
|
|
|
@ -12,7 +12,7 @@ use atuin_client::{
|
||||||
};
|
};
|
||||||
use time::{Duration, OffsetDateTime, Time};
|
use time::{Duration, OffsetDateTime, Time};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Debug)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
pub struct Cmd {
|
pub struct Cmd {
|
||||||
/// compute statistics for the specified period, leave blank for statistics since the beginning
|
/// compute statistics for the specified period, leave blank for statistics since the beginning
|
||||||
|
@ -73,7 +73,7 @@ fn compute_stats(history: &[History], count: usize) -> Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Cmd {
|
impl Cmd {
|
||||||
pub async fn run(&self, db: &mut impl Database, settings: &Settings) -> Result<()> {
|
pub async fn run(&self, db: &impl Database, settings: &Settings) -> Result<()> {
|
||||||
let context = current_context();
|
let context = current_context();
|
||||||
let words = if self.period.is_empty() {
|
let words = if self.period.is_empty() {
|
||||||
String::from("all")
|
String::from("all")
|
||||||
|
|
|
@ -11,7 +11,7 @@ mod status;
|
||||||
|
|
||||||
use crate::command::client::account;
|
use crate::command::client::account;
|
||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand, Debug)]
|
||||||
#[command(infer_subcommands = true)]
|
#[command(infer_subcommands = true)]
|
||||||
pub enum Cmd {
|
pub enum Cmd {
|
||||||
/// Sync with the configured server
|
/// Sync with the configured server
|
||||||
|
@ -44,7 +44,7 @@ impl Cmd {
|
||||||
pub async fn run(
|
pub async fn run(
|
||||||
self,
|
self,
|
||||||
settings: Settings,
|
settings: Settings,
|
||||||
db: &mut impl Database,
|
db: &impl Database,
|
||||||
store: &mut (impl Store + Send + Sync),
|
store: &mut (impl Store + Send + Sync),
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
match self {
|
match self {
|
||||||
|
@ -74,7 +74,7 @@ impl Cmd {
|
||||||
async fn run(
|
async fn run(
|
||||||
settings: &Settings,
|
settings: &Settings,
|
||||||
force: bool,
|
force: bool,
|
||||||
db: &mut impl Database,
|
db: &impl Database,
|
||||||
store: &mut (impl Store + Send + Sync),
|
store: &mut (impl Store + Send + Sync),
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let (diff, remote_index) = sync::diff(settings, store).await?;
|
let (diff, remote_index) = sync::diff(settings, store).await?;
|
||||||
|
|
|
@ -6,7 +6,7 @@ use eyre::{Context, Result};
|
||||||
|
|
||||||
use atuin_server::{launch, Settings};
|
use atuin_server::{launch, Settings};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser, Debug)]
|
||||||
#[clap(infer_subcommands = true)]
|
#[clap(infer_subcommands = true)]
|
||||||
pub enum Cmd {
|
pub enum Cmd {
|
||||||
/// Start the server
|
/// Start the server
|
||||||
|
@ -29,6 +29,8 @@ impl Cmd {
|
||||||
.with(EnvFilter::from_default_env())
|
.with(EnvFilter::from_default_env())
|
||||||
.init();
|
.init();
|
||||||
|
|
||||||
|
tracing::trace!(command = ?self, "server command");
|
||||||
|
|
||||||
let settings = Settings::new().wrap_err("could not load server settings")?;
|
let settings = Settings::new().wrap_err("could not load server settings")?;
|
||||||
|
|
||||||
match self {
|
match self {
|
||||||
|
|
|
@ -12,12 +12,13 @@ _atuin_precmd() {
|
||||||
|
|
||||||
[[ -z "${ATUIN_HISTORY_ID}" ]] && return
|
[[ -z "${ATUIN_HISTORY_ID}" ]] && return
|
||||||
|
|
||||||
(RUST_LOG=error atuin history end --exit "${EXIT}" -- "${ATUIN_HISTORY_ID}" &) >/dev/null 2>&1
|
(ATUIN_LOG=error atuin history end --exit "${EXIT}" -- "${ATUIN_HISTORY_ID}" &) >/dev/null 2>&1
|
||||||
|
export ATUIN_HISTORY_ID=""
|
||||||
}
|
}
|
||||||
|
|
||||||
__atuin_history() {
|
__atuin_history() {
|
||||||
# shellcheck disable=SC2048,SC2086
|
# shellcheck disable=SC2048,SC2086
|
||||||
HISTORY="$(RUST_LOG=error atuin search $* -i -- "${READLINE_LINE}" 3>&1 1>&2 2>&3)"
|
HISTORY="$(ATUIN_LOG=error atuin search $* -i -- "${READLINE_LINE}" 3>&1 1>&2 2>&3)"
|
||||||
|
|
||||||
READLINE_LINE=${HISTORY}
|
READLINE_LINE=${HISTORY}
|
||||||
READLINE_POINT=${#READLINE_LINE}
|
READLINE_POINT=${#READLINE_LINE}
|
||||||
|
|
|
@ -9,13 +9,14 @@ end
|
||||||
function _atuin_postexec --on-event fish_postexec
|
function _atuin_postexec --on-event fish_postexec
|
||||||
set s $status
|
set s $status
|
||||||
if test -n "$ATUIN_HISTORY_ID"
|
if test -n "$ATUIN_HISTORY_ID"
|
||||||
RUST_LOG=error atuin history end --exit $s -- $ATUIN_HISTORY_ID &>/dev/null &
|
ATUIN_LOG=error atuin history end --exit $s -- $ATUIN_HISTORY_ID &>/dev/null &
|
||||||
disown
|
disown
|
||||||
end
|
end
|
||||||
|
set --erase ATUIN_HISTORY_ID
|
||||||
end
|
end
|
||||||
|
|
||||||
function _atuin_search
|
function _atuin_search
|
||||||
set h (RUST_LOG=error atuin search $argv -i -- (commandline -b) 3>&1 1>&2 2>&3)
|
set h (ATUIN_LOG=error atuin search $argv -i -- (commandline -b) 3>&1 1>&2 2>&3)
|
||||||
commandline -f repaint
|
commandline -f repaint
|
||||||
if test -n "$h"
|
if test -n "$h"
|
||||||
commandline -r "$h"
|
commandline -r "$h"
|
||||||
|
|
|
@ -19,16 +19,17 @@ let _atuin_pre_prompt = {||
|
||||||
if 'ATUIN_HISTORY_ID' not-in $env {
|
if 'ATUIN_HISTORY_ID' not-in $env {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
with-env { RUST_LOG: error } {
|
with-env { ATUIN_LOG: error } {
|
||||||
atuin history end $'--exit=($last_exit)' -- $env.ATUIN_HISTORY_ID | null
|
atuin history end $'--exit=($last_exit)' -- $env.ATUIN_HISTORY_ID | null
|
||||||
}
|
}
|
||||||
|
hide-env ATUIN_HISTORY_ID
|
||||||
}
|
}
|
||||||
|
|
||||||
def _atuin_search_cmd [...flags: string] {
|
def _atuin_search_cmd [...flags: string] {
|
||||||
[
|
[
|
||||||
$ATUIN_KEYBINDING_TOKEN,
|
$ATUIN_KEYBINDING_TOKEN,
|
||||||
([
|
([
|
||||||
`commandline (RUST_LOG=error run-external --redirect-stderr atuin search`,
|
`commandline (ATUIN_LOG=error run-external --redirect-stderr atuin search`,
|
||||||
($flags | append [--interactive, --] | each {|e| $'"($e)"'}),
|
($flags | append [--interactive, --] | each {|e| $'"($e)"'}),
|
||||||
`(commandline) | complete | $in.stderr | str substring ..-1)`,
|
`(commandline) | complete | $in.stderr | str substring ..-1)`,
|
||||||
] | flatten | str join ' '),
|
] | flatten | str join ' '),
|
||||||
|
|
|
@ -23,7 +23,8 @@ _atuin_precmd() {
|
||||||
|
|
||||||
[[ -z "${ATUIN_HISTORY_ID:-}" ]] && return
|
[[ -z "${ATUIN_HISTORY_ID:-}" ]] && return
|
||||||
|
|
||||||
(RUST_LOG=error atuin history end --exit $EXIT -- $ATUIN_HISTORY_ID &) >/dev/null 2>&1
|
(ATUIN_LOG=error atuin history end --exit $EXIT -- $ATUIN_HISTORY_ID &) >/dev/null 2>&1
|
||||||
|
export ATUIN_HISTORY_ID=""
|
||||||
}
|
}
|
||||||
|
|
||||||
_atuin_search() {
|
_atuin_search() {
|
||||||
|
@ -33,7 +34,7 @@ _atuin_search() {
|
||||||
# swap stderr and stdout, so that the tui stuff works
|
# swap stderr and stdout, so that the tui stuff works
|
||||||
# TODO: not this
|
# TODO: not this
|
||||||
# shellcheck disable=SC2048
|
# shellcheck disable=SC2048
|
||||||
output=$(RUST_LOG=error atuin search $* -i -- $BUFFER 3>&1 1>&2 2>&3)
|
output=$(ATUIN_LOG=error atuin search $* -i -- $BUFFER 3>&1 1>&2 2>&3)
|
||||||
|
|
||||||
if [[ -n $output ]]; then
|
if [[ -n $output ]]; then
|
||||||
RBUFFER=""
|
RBUFFER=""
|
||||||
|
|
Loading…
Reference in a new issue