diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs index 6d364db..c4a9ddc 100644 --- a/atuin-client/src/database.rs +++ b/atuin-client/src/database.rs @@ -35,6 +35,7 @@ pub struct OptFilters { pub after: Option, pub limit: Option, pub offset: Option, + pub reverse: bool, } pub fn current_context() -> Context { @@ -354,9 +355,7 @@ impl Database for Sqlite { ) -> Result> { let mut sql = SqlBuilder::select_from("history"); - sql.group_by("command") - .having("max(timestamp)") - .order_desc("timestamp"); + sql.group_by("command").having("max(timestamp)"); if let Some(limit) = filter_options.limit { sql.limit(limit); @@ -366,6 +365,12 @@ impl Database for Sqlite { sql.offset(offset); } + if filter_options.reverse { + sql.order_asc("timestamp"); + } else { + sql.order_desc("timestamp"); + } + match filter { FilterMode::Global => &mut sql, FilterMode::Host => sql.and_where_eq("hostname", quote(&context.hostname)), diff --git a/docs/docs/commands/search.md b/docs/docs/commands/search.md index eacb22e..d33b755 100644 --- a/docs/docs/commands/search.md +++ b/docs/docs/commands/search.md @@ -22,6 +22,7 @@ appended with a wildcard). | `--limit` | Limit the number of results (default: none) | | `--offset` | Offset from the start of the results (default: none) | | `--delete` | Delete history matching this query | +| `--reverse` | Reverse order of search results, oldest first | ## Examples @@ -48,5 +49,8 @@ atuin search --delete --exit 0 --after "yesterday 3pm" cargo atuin search --limit 1 cargo # Search for a single result for a command beginning with cargo, skipping (offsetting) one result -atuin search --offset 1 --limit cargo +atuin search --offset 1 --limit 1 cargo + +# Find the oldest cargo command +atuin search --limit 1 --reverse cargo ``` diff --git a/src/command/client/search.rs b/src/command/client/search.rs index f125b8b..356ae25 100644 --- a/src/command/client/search.rs +++ b/src/command/client/search.rs @@ -83,6 +83,10 @@ pub struct Cmd { #[arg(long)] delete: bool, + /// Reverse the order of results, oldest first + #[arg(long, short)] + reverse: bool, + /// Available variables: {command}, {directory}, {duration}, {user}, {host}, {time}, {exit} and /// {relativetime}. /// Example: --format "{time} - [{duration}] - {directory}$\t{command}" @@ -116,6 +120,7 @@ impl Cmd { after: self.after, limit: self.limit, offset: self.offset, + reverse: self.reverse, }; let mut entries =