Commit Graph

1174 Commits

Author SHA1 Message Date
dependabot[bot]
b0062cdb60
chore(deps): bump debian (#1734)
Bumps debian from bullseye-20240130-slim to bullseye-20240211-slim.

---
updated-dependencies:
- dependency-name: debian
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-26 12:37:54 +00:00
Eric Hodel
a3743f846b
fix(stats): Enable multiple command stats to be shown using unicode_segmentation (#1739)
* Enable multiple command stats to be shown

Add improved pipe splitting

Clean up split logic

Remove unnecessary lifetime annotations

Add per-column command padding

* Add failing test case

* Update #1054 to use unicode_segmentation

This addresses feedback in PR #1054

Closes #1054

* Address cargo clippy, fmt

---------

Co-authored-by: Sorenson Stallings <contact@sorenson.dev>
Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-02-26 12:07:59 +00:00
Mike Pastore
43a1d3a862
feat: Add '/', '?', and 'I' bindings to vim-normal mode (#1760)
Add 'I' binding to vim-normal mode (a la 'A' introduced in #1697) to
jump into vim-insert mode at the beginning of the search input.

Also add '/' and '?' bindings to vim-normal mode to clear the search
input and jump into vim-insert mode. This mimics the UX in e.g. `set -o
vi` (bash) or `bindkey -v` (zsh) mode when you are using 'k' and 'j' to
browse history lines and can type '/' or '?' to start a new search. (In
a perfect world it would target the search in the forward or backward
range starting at your current position in the history, but this is a
reasonable first step.)
2024-02-26 12:01:14 +00:00
Korvin Szanto
d7582b62fd
feat: Add PHP package manager "composer" to list of default common subcommands (#1757)
* Add PHP package manager "composer" to list of default common subcommands

* Run cargo fmt and sort entries
2024-02-26 11:59:34 +00:00
Helmut K. C. Tessarek
91ddcd60ca
fix(client): no panic on empty inspector (#1768)
* fix(client): no panic on empty inspector

* fix: clippy warning

Although I am not that happy with this clippy rule.
I am old school and we learned to put the most likely path first.
Back then compiler optimizations were not too great and cache prediction
was better handled this way.

* Update atuin/src/command/client/search/interactive.rs

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-02-26 11:57:23 +00:00
Ellie Huxtable
cf09464d4d
chore(release): prepare for release v18.0.2 (#1775) 2024-02-26 11:37:54 +00:00
Ellie Huxtable
248213bf3e
fix: ensure sync time is saved for sync v2 (#1758) 2024-02-22 19:02:02 +00:00
Ellie Huxtable
05857c1c0e
fix: check session file exists for status command (#1756) 2024-02-22 18:53:51 +00:00
David Chocholatý
cf2cbd23f0
refactor(alias): Clarify operation result for working with aliases (#1748) 2024-02-21 16:27:08 +00:00
Ellie Huxtable
6a885cf4ab
feat: add alias feedback and list command (#1747) 2024-02-21 11:54:46 +00:00
Aloxaf
21fee97a62
fix(import/zsh-histdb): missing or wrong fields (#1740)
* fix(import/zsh-histdb): import exit_status and session

* fix(import/zsh-histdb): avoid session id conflict

* fix(import/zsh-histdb): follow the format conventions of session and hostname

* fix(import/zsh-histdb): duration unit is nanosecond
2024-02-21 08:56:41 +00:00
Xavier Vello
3c375cad07
feat: add history prune subcommand (#1743) 2024-02-21 08:42:53 +00:00
Helmut K. C. Tessarek
56b971ae19
feat(client): add config option keys.scroll_exits (#1744)
* feat(client): add config option keys.scroll_exits

If the config option is set the `false`, using the up/down key won't
exit the TUI when scrolled past the first/last entry.

Example:

```
[keys]
scroll_exits = false
```

The default is `true`, which is the current behavior.

* Update atuin/src/command/client/search/interactive.rs

Co-authored-by: Koichi Murase <myoga.murase@gmail.com>

* refactor: add option to config.toml

---------

Co-authored-by: Koichi Murase <myoga.murase@gmail.com>
2024-02-21 08:25:55 +00:00
dependabot[bot]
3d82adad36
chore(deps): bump lukemathwalker/cargo-chef (#1705)
Bumps lukemathwalker/cargo-chef from latest-rust-1.75.0-buster to latest-rust-1.76.0-buster.

---
updated-dependencies:
- dependency-name: lukemathwalker/cargo-chef
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-20 13:08:54 +00:00
Onè
409456fce1
fix: typo (#1741) 2024-02-20 12:54:48 +00:00
Steven Xu
1c29702e44
refactor(nushell): update commandline syntax, closes #1733 (#1735)
* refactor(nushell): update `commandline` syntax, closes #1733

* refactor(nushell): add backwards compatibility for *Nushell* v0.90.x
2024-02-20 08:19:33 +00:00
依云
2a65f89cd5
feat: change fulltext to do multi substring match (#1660) 2024-02-19 11:03:09 +00:00
Koichi Murase
38dfaabf10
fix(bash): rework #1509 to recover from the preexec failure (#1729)
In GitHub #1509, we blocked the unintended preexec event caused by the
keybinding of Atuin.  However, with that fix, the preexec event for
the intended user command is still missing.  In this patch, we try to
manually run the preexec hook when we detected the unintended preexec
(which means the missing intended preexec).

References:

https://github.com/atuinsh/atuin/pull/1509
https://forum.atuin.sh/t/atuin-bash-and-ble-sh/175
https://github.com/atuinsh/atuin/issues/1003#issuecomment-1947905213
https://github.com/atuinsh/atuin/pull/1727
https://github.com/atuinsh/atuin/pull/1728
2024-02-17 19:43:25 +00:00
Ellie Huxtable
07f363ba3a
Revert "Revert "fix(bash): avoid unexpected atuin history start for keybind…" (#1728)
This reverts commit 032ca19c73.
2024-02-17 10:50:19 +00:00
Ellie Huxtable
032ca19c73
Revert "fix(bash): avoid unexpected atuin history start for keybindings (#1…" (#1727)
This reverts commit 86f2c8e588.
2024-02-17 09:48:15 +00:00
jfmontanaro
4512cd5c7f
fix(xonsh): Add xonsh to auto import, respect $HISTFILE in xonsh import, and fix issue with up-arrow keybinding in xonsh (#1711)
* add xonsh to `atuin import auto`

* respect $HISTFILE in xonsh importers

* disable up-arrow binding in xonsh when completion menu is active

* include xonsh logic in the same conditional as other shells

* format and fix clippy lints
2024-02-15 19:33:30 +00:00
Ellie Huxtable
0d31499a62
fix: fish init (#1725) 2024-02-15 19:29:39 +00:00
Ellie Huxtable
20f3296468
feat: support syncing aliases (#1721)
* feat: support syncing aliases

This is definitely not yet finished, but works for zsh right now.

TODO:

1. Support other shells
2. Cache the alias generation, so we don't have to do a bunch of work at
   shell init time

* correct imports

* fix clippy errors

* fix tests

* add the other shells

* support xonsh

* add delete

* update rust, then make clippy happy once more

* omfg fmt too
2024-02-15 19:07:08 +00:00
David
f8d01eef99
feat: add 'ignored_commands' option to stats (#1722) 2024-02-15 18:52:19 +00:00
Koichi Murase
063d9054d7
feat(search): process Ctrl+m for kitty keyboard protocol (#1720)
Fixes https://github.com/atuinsh/atuin/issues/1719

[C-m] is usually identical to [RET] in the terminal protocol, and some
users use [C-m] in place of [RET].  However, kitty's extended keyboard
protocol enables differentiating them so that [C-m] does not function
as does without the extended keyboard protocol.

For the compatibility with terminals without extended keyboard
protocols, we anyway cannot assign a distinct feature to [C-m], so we
can safely add the explicit binding of InputAction::Accept to [C-m].
2024-02-14 08:54:44 +00:00
依云
1a432b61ee
fix(ui): don't preserve for empty space (#1712)
For the following situation:

$ atuin search -i --inline-height 15
 [     HOST     ] query
  > 1m    19d ago item 1
  1 0s    1mo ago item 2
  2 0s    1mo ago item 3
  3 0s    1mo ago item 4
  4 0s    1mo ago item 5
  5 0s    1mo ago item 6

 Atuin v17.2.1 [...]

Scrolling item 6 results:

 [     HOST     ] query
    0s    1mo ago item 3
    0s    1mo ago item 4
    0s    1mo ago item 5
  > 0s    1mo ago item 6

 Atuin v17.2.1 [...]

With this patch it becomes:

 [     HOST     ] query
    1m    19d ago item 1
    0s    1mo ago item 2
    0s    1mo ago item 3
    0s    1mo ago item 4
    0s    1mo ago item 5
  > 0s    1mo ago item 6

 Atuin v17.2.1 [...]
2024-02-13 18:33:23 +00:00
jfmontanaro
87e19df9c5
feat: Add xonsh history import (#1678)
* add importers for xonsh JSON files and SQLite db

* rustfmt xonsh importers

* remove env-dependent tests from xonsh importers

* pass xonsh_data_dir into path resolver instead of looking up in env

* review: run format

* review: fix clippy errors

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-02-12 10:32:07 +00:00
Ellie Huxtable
8ef5f67f8b
perf: optimize history init-store (#1691)
Instead of lots of small sqlite transaction, do one monster one.

A single tx with 100s of 1000s of rows should be fine on all systems

A very unscientific test shows this to be roughly 10x faster
2024-02-12 09:56:42 +00:00
Caleb Maclennan
8805d04c4b
feat: Add 'a', 'A', 'h', and 'l' bindings to vim-normal mode (#1697)
The current 'i' binding to switch to insert mode is entirely unintuitive
since what I almost always want to do is append to the current query.
The fact that the cursor extends past the current input (which vim
doesn't do with default settings) adds to the problem. The 'a' key is
what I would reach for, but 'A' makes a lot of sense too so I added
that.

The 'h' and 'l' bindings for moving the cursor also help makes things
a bit more usable.
2024-02-12 09:31:35 +00:00
David
b4f8d1433b
docs: minor formatting updates to the default config.toml (#1689) 2024-02-12 09:26:29 +00:00
Eric Long
5a805dc22c
feat: use ATUIN_TEST_SQLITE_STORE_TIMEOUT to specify test timeout of SQLite store (#1703)
Low-end devices like RISC-V SBCs are sometimes too slow to initialize SQLite in 0.1s. Option to specify a higher value allows check to pass on such devices with relaxed restrictions.
2024-02-12 09:25:06 +00:00
Ellie Huxtable
1464cb657a
chore(release): prepare for release v18.0.1 (#1706) 2024-02-12 08:38:23 +00:00
Andrew Lee
f96cb6903d
fix: reorder the exit of enhanced keyboard mode (#1694)
The `Stdout::new` function first enters an alternate
screen then later enables enhanced keyboard mode.

In `Drop`, we need to do this in the opposite order:
disable enhanced keyboard mode then exit alternate mode.

Fixes #1693
2024-02-12 08:24:24 +00:00
Ellie Huxtable
5738d06282
chore(release): prepare for release v18.0.0 (#1685) 2024-02-09 12:42:34 +00:00
Koichi Murase
e2f080ccff
docs(README): clarify prerequisites for Bash (#1686)
* docs(README): clarify prerequisites for Bash

https://github.com/atuinsh/atuin/discussions/1683

* docs(README): fix grammar
2024-02-08 14:16:19 +00:00
Ellie Huxtable
8460210202
feat: add progress bars to sync and store init (#1684)
Replace lots of logging with some progress bars. This looks much nicer

I'd like to move it out of the atuin-client crate and into the atuin
crate. But first, I want to decouple a lot of the record moving, so it
can wait until that's done.
2024-02-08 13:34:41 +00:00
Ellie Huxtable
1993653102
fix(tests): add Settings::utc() for utc settings (#1677)
Means we don't try and load timezones in tests, as this fails due to
multiple threads.

Also allow specifying '0' or 'utc' as a timezone
2024-02-06 17:47:00 +00:00
cyqsimon
318bdd8955
Add timezone configuration option & CLI overrides (#1517)
* Allow specifying a timezone in history search/list

* Fix clippy complaints

* Add a bit more comment on supporting named timezones

* Add rudimentary tests

* Ditch local timezone test

* Timezone configuration support

* Set default timezone to `local`

* `--tz` -> `--timezone`

`--tz` is kept as a visible alias
2024-02-06 15:34:03 +00:00
dependabot[bot]
8372abb613
chore(deps): bump debian (#1673)
Bumps debian from bullseye-20240110-slim to bullseye-20240130-slim.

---
updated-dependencies:
- dependency-name: debian
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-05 09:34:16 +00:00
Ellie Huxtable
6a2576fc5b
chore(ci): run rust build/test/check on 3 platforms (#1675)
* chore(ci): run rust build/test/check on 3 platforms

* need to properly test windows

* do not need to strip here, and windows has a suffix anyway
2024-02-05 09:28:55 +00:00
Ellie Huxtable
3ff2e2552f
fix: correct download list for incremental builds (#1672) 2024-02-04 20:06:47 +00:00
Ellie Huxtable
cc2aa6524d
feat: disable auto record store init (#1671)
I think this makes more sense as a manual action
2024-02-04 19:24:43 +00:00
Joe Ardent
b7bb583d8d
fix: set durability for sqlite to recommended settings (#1667)
Also do an optimize on connection close. Fixes lag on history insertion.
2024-02-04 18:42:48 +00:00
Koichi Murase
c2af6f7ae8
fix(bash/preexec): support termcap names for tput (#1670)
* fix(bash/preexec): support termcap-based tput

The current uses of tput specify the terminfo entry names.  However,
there are different implementations of the tput command.  There are
two ways to specify the terminal capability: terminfo and termcap
names.  Although recent implementations of tput (such as ncurses in
Linux) accepts the terminfo name, some accept both the terminfo and
termcap names, and some old implementations (such as in FreeBSD) only
accept the termcap names.

In this patch, we first attempt the terminfo name and then the termcap
name if the terminfo name fails.

Note: When both fail due to e.g. non-existent tput, we end up with
outputting nothing.  This does not cause a serious problem because it
just does not clear the previous prompts.

* perf(bash/preexec): cache the results of tput

With the current implementation, we spwan 10 processes of the tput
command at most every time we perform `enter_accept`.  In this patch,
to reduce the delay, we separate the related code into a function and
cache the results of the tput commands.
2024-02-04 17:36:06 +00:00
Koichi Murase
9c210e8987 fix(bash/preexec): erase the previous prompt before overwriting
When the previous prompt is longer than the prompt calculated by the
current PS1, some extra characters from the previous prompt remains in
the terminal display.  In this patch, we erase the content of the
previous prompt before outputting our new prompt.
2024-02-03 23:49:14 +01:00
Koichi Murase
b00887562b fix(bash/preexec): erase the prompt last line before Bash renders it
Fixes https://github.com/atuinsh/atuin/issues/1668

When the prompt becomes longer after "enter_accept", Bash still uses
the previous shorter prompt, so the extra characters in the new prompt
drawn by Atuin is left in the terminal display.  In this patch, we
remove the last line of the prompt drawn by Atuin so that it doesn't
interfere with the last line of the prompt drawn by Bash.
2024-02-03 23:49:14 +01:00
Ellie Huxtable
374255dd58 feat: add store pull
This allows the user to

1. Specify that they want to sync, but ONLY pull new data
2. Specify that they wish to force pull, which will wipe the local store
   and download it from the remote

With the other set of changes, this allows the user to perform
sufficient maintenance to recovery from most errors I can think of right
now.
2024-02-02 18:01:09 +00:00
Ellie Huxtable
c9a453289e feat: add store push --force
This will

1. Wipe the remote store
2. Upload all of the local store to remote

Imagine the scenario where you end up with some mixed keys locally :(

You confirm this with

```
atuin store verify
```

You then fix it locally with

```
atuin store purge
```

Ensure that your local changes are reflected remotely with

```
atuin store push --force
```

and then (another PR, coming soon), update all other hosts with

```
atuin store pull --force
```
2024-02-02 18:01:09 +00:00
Ellie Huxtable
3c420f85f6 feat: failure to decrypt history = failure to sync
Now that the user can purge their store and _do something_ about invalid
records, we should not tolerate mixed key records in store.
2024-02-02 18:01:09 +00:00
Ellie Huxtable
754f17ddb4 feat: add store purge command
This command will delete all records from the local store that cannot be
decrypted with the current key.

If a verify fails before running this, it should pass _after_ running
it.

Required afterwards:
- A `push --force`, to allow ensuring the remote store equals the local
  store (deletions have now occured!)
- A `pull --force`, as once remote has been forced then local needs the
  same

Nice to have:
- Provide "old" keys to purge, in case the are not lost. Or maybe rekey.
2024-02-02 18:01:09 +00:00