aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTom Cammann <cammann.tom@gmail.com>2023-04-11 09:39:23 +0100
committerGitHub <noreply@github.com>2023-04-11 09:39:23 +0100
commite149a0a6e9747b238032321f5e1554d0d8ded118 (patch)
tree06c3e33912d6e3208b3931db77df02d5bebed4d8
parentAtuin stats with day, month, week and year filter (#858) (diff)
downloadatuin-e149a0a6e9747b238032321f5e1554d0d8ded118.zip
Add `--reverse` to `atuin search` (#862)
Add `-r/--reverse` flag to `atuin search` to allow searching by oldest results first. Example to find the oldest `cargo` command: ``` atuin search --limit 1 --reverse cargo ```
-rw-r--r--atuin-client/src/database.rs11
-rw-r--r--docs/docs/commands/search.md6
-rw-r--r--src/command/client/search.rs5
3 files changed, 18 insertions, 4 deletions
diff --git a/atuin-client/src/database.rs b/atuin-client/src/database.rs
index 6d364dbe..c4a9ddc3 100644
--- a/atuin-client/src/database.rs
+++ b/atuin-client/src/database.rs
@@ -35,6 +35,7 @@ pub struct OptFilters {
pub after: Option<String>,
pub limit: Option<i64>,
pub offset: Option<i64>,
+ pub reverse: bool,
}
pub fn current_context() -> Context {
@@ -354,9 +355,7 @@ impl Database for Sqlite {
) -> Result<Vec<History>> {
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 eacb22e2..d33b7556 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 f125b8bf..356ae251 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 =