Commit Graph

861 Commits

Author SHA1 Message Date
Dongxu Wang
e1c2b9c783
feat: make history list format configurable (#1638)
* feat: make history list format configurable

* Update atuin-client/config.toml

* review: run format

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-29 10:58:20 +00:00
Koichi Murase
2ef5169357
feat(zsh): update widget names (#1631)
The current widget names for Zsh start with "_", which gives an
impression to users that those widgets are internal API and should not
be bound by the users.  However, we actually instruct users to set up
custom keybindings by specifying them to bindkey.

In other shells, a separate namespace for widgets are not prepared, so
we want to prefix "_" to shell function names to tell the users that
these are not the commands that are supposed to be called from the
command line.  However, the widget names are separated in their own
namespace in Zsh, so we do not have to isolate them by prefixing "_".
In fact, other frameworks such as `fzf` define widgets with names not
starting with "_".

In this patch, we update the widget names to have the form "atuin-*".
The old widget names that existed in the release version <= 17.2.1 are
left for compatibility.
2024-01-29 10:35:34 +00:00
Conrad Ludgate
bdcb143996
chore(deps): update axum (#1637) 2024-01-28 13:33:45 +00:00
Ellie Huxtable
4b20544474
chore: use resolver 2, update editions + cargo (#1635) 2024-01-26 17:59:06 +00:00
Ellie Huxtable
cdf31ad839
docs: Update CONTRIBUTING.md (#1633) 2024-01-26 16:24:57 +00:00
Ellie Huxtable
2f64778ceb
docs: Create pull_request_template.md (#1632) 2024-01-26 16:18:58 +00:00
Nemo157
d9c40d6895
fix: Skip padding time if it will overflow the allowed prefix length (#1630) 2024-01-26 11:53:34 +00:00
Koichi Murase
2e48e21692
feat(shell)!: bind the Atuin search to "/" in vi-normal mode (#1629)
A search feature in the vi-normal mode of shells can be called by "/".
To make the shell-integration keybindings consistent with the existing
shell keybindings, we add the keybinding to "/" in this patch.

This patch removes the Ctrl-r binding in the "vicmd" keymap in Zsh.
The key Ctrl-r is used for the `redo` operation in the vi-normal mode
by default.  We would like to avoid overwriting an existing keybinding
with a totally different feature.
2024-01-26 11:48:00 +00:00
Nemo157
230bf2d1c6
feat(ui): When in vim-normal mode apply an alternative highlighting to the selected line (#1574)
This makes it much more obvious whether you're in normal or insert mode.
2024-01-26 10:49:04 +00:00
Mag Mell
d21de3cd25
chore: add feature to allow always disable check update (#1628)
* chore: add feature to allow always disable check update

In the packaging rules of some distributions, the software's self-update check needs to be permanently turned off

This commit will make it easier for these users to

* fix: formatting

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-26 09:45:42 +00:00
Peter Holloway
400e1ba23d
fix: Check for format errors when printing history (#1623)
The runtime formatting used to list history commands can fail in its
Display implementation and the error is not propagated through to the
write error it causes. Instead, the error is cached in the FormatArgs
being printed. It's a bit clumsy but by checking if there's a cached
error, we can get a more useful error for the user. eg,

    atuin search cargo --format '{invalid}'

gives

    history output failed with: The requested key "invalid" is unknown

instead of

    history output failed with: formatter error
2024-01-24 20:13:31 +00:00
Philippe Normand
079a078fdb
stats: Misc improvements (#1613)
* fix(stats): Don't bail/error if no command is found

An empty history shouldn't be source of error when printing stats.

* fix(stats): Improve help message a bit.

It wasn't clear what the period format could be.
2024-01-24 19:37:05 +00:00
Ellie Huxtable
bdc533d2bc
feat: add registered and deleted metrics (#1622) 2024-01-23 20:01:20 +00:00
Koichi Murase
067bda66e2
fix(bash): strip control chars generated by \[\] in PS1 with bash-preexec (#1620)
* fix(bash): strip control chars generated by \[\] in PS1 with bash-preexec

Fixes https://github.com/atuinsh/atuin/issues/1617

* perf(bash): count newlines using Bash built-in features
2024-01-23 17:53:47 +00:00
Peter Holloway
2bd7114cea
fix: Only escape control characters when writing to terminal (#1593)
When piping the output of `atuin history list` to a file, it makes more
sense for the literal commands to be written rather than the escaped
ones that would be printed to the terminal.
2024-01-23 10:21:45 +00:00
Philippe Normand
ed1ac5a2a9
docs: Mention environment variables for custom paths (#1614)
Thanks to Ellie and Pete's help on this forum post:
https://forum.atuin.sh/t/migration-was-previously-applied-but-is-missing-in-the-resolved-migrations/84
2024-01-23 10:13:53 +00:00
Ellie Huxtable
d84f5b2d33
feat: don't stop with invalid key (#1612)
An issue with the old sync was that if there was _one_ record encrypted
with a different key, sync would stop. You'd need to delete your account
and start from scratch. This sucked.

This change means we will carry on, and try to encrypt and build with as
much of the history as we are able to decrypt.

This is possible because we can quite happily store data on disk that we
cannot decrypt. The old store couldn't do this.

In future, we might consider a keyring containing multiple keys.
2024-01-22 20:07:19 +00:00
Ellie Huxtable
6af6c9066b
fix(tui): dedupe was removing history (#1610)
Related: https://forum.atuin.sh/t/search-ignoring-commands/74/5?u=ellie

When a user ran a duplicated command, but in another session, it was
removed by filters. This is because the subquery that was once used did
not have the same filters applied as the main query.

Instead of messing with subqueries, `group by` instead. This aligns with
the search() function
2024-01-22 17:06:34 +00:00
Ellie Huxtable
600ebc33ab
feat: make store init idempotent (#1609) 2024-01-22 16:48:21 +00:00
Koichi Murase
f727d6c8bf
refactor(search): refactor handling of key inputs (#1606) 2024-01-22 12:26:47 +00:00
Koichi Murase
e484a68b8b
feat(search): make cursor style configurable (#1595)
* feat(search): make cursor style configurable

The vim mode of the interactive Atuin search changes the cursor style
on a mode change, but the current implementation has the following
issues.

* The terminal's cursor style set by the Atuin search remains after
  Atuin exits.  This causes an inconsistency with the shell's setting
  for the cursor style.

* Also, the cursor style for each keymap mode is currently hardcoded
  in the source code, which is not necessarily consistent with the
  user's cursor-style setting in the shell.

* Since the current implementation does not set the cursor style for
  the initial keymap mode but only sets the cursor style when the
  keymap mode is changed, it also causes inconsistency in the cursor
  style and the actual keymap when the shell's keymap and Atuin's
  initial keymap mode are different.

This patch solves those issues by introducing an opt-in configuration
variable `keymap_cursor`.  By default, the vim mode does not change
the cursor style because there is no way to automatically determine
the cursor style consistent with the shell settings.  We enable the
feature only when the user specifies the preferred cursor style in
each mode in their config.  Also, the cursor style is set on the
startup of the Atuin search (based on the initial keymap mode) and is
reset on the termination of the Atuin search (based on the shell's
keymap mode that started the Atuin search).

* chore(settings): remove dependency on crossterm
2024-01-22 10:56:44 +00:00
Dongxu Wang
d13b7c31c1
fix(docs): update repo url in CONTRIBUTING.md (#1594) 2024-01-22 10:39:52 +00:00
dependabot[bot]
2e3dde64e4
chore(deps): bump argon2 from 0.5.2 to 0.5.3 (#1603)
Bumps [argon2](https://github.com/RustCrypto/password-hashes) from 0.5.2 to 0.5.3.
- [Commits](https://github.com/RustCrypto/password-hashes/compare/argon2-v0.5.2...argon2-v0.5.3)

---
updated-dependencies:
- dependency-name: argon2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-22 10:00:25 +00:00
Conrad Ludgate
5ab8fa3e9d
report alternate keys so shift still works (#1601) 2024-01-21 18:24:33 +00:00
dependabot[bot]
732f882c6e
chore(deps): bump the cargo group across 1 directories with 1 update (#1591)
Bumps the cargo group with 1 update in the /. directory: [h2](https://github.com/hyperium/h2).


Updates `h2` from 0.3.22 to 0.3.24
- [Release notes](https://github.com/hyperium/h2/releases)
- [Changelog](https://github.com/hyperium/h2/blob/v0.3.24/CHANGELOG.md)
- [Commits](https://github.com/hyperium/h2/compare/v0.3.22...v0.3.24)

---
updated-dependencies:
- dependency-name: h2
  dependency-type: indirect
  dependency-group: cargo-security-group
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-19 17:40:10 +00:00
Ellie Huxtable
8899ce5089
fix: add acquire timeout to sqlite database connection (#1590)
* fix: add acquire timeout to sqlite database connection

This should fix #1503

I wasn't able to trigger enough IO pressure for the SQL connection to be
a problem.

This adds `local_timeout` to the client config. This is a float, and
represents the number of seconds (units in line with the other timeouts,
though those are ints). Users may well want to reduce this if they
regularly have issues, but by default I think 2s is fine and avoids a
non-responsive system in bad situations.

* tests
2024-01-19 15:45:42 +00:00
Peter Holloway
10f465da8f
fix: Use existing db querying for history list (#1589)
When printing the history list with either the session or cwd filter
enabled, use to same query method as without either to ensure that the
other options (hide deleted entries etc) are respected.
2024-01-19 11:21:05 +00:00
Peter Holloway
62f81a8c91
fix: Escape control characters in command preview (#1588)
This was missed in the initial change to escape control characters.
2024-01-19 11:18:29 +00:00
Peter Holloway
cda135d241
fix: Print literal control characters to non terminals (#1586)
* Print literal control characters to non terminals

Previous 'fix' to prevent control sequences being interpreted when they
shouldn't have been also prevented them being used when they should have
been. This checks if the output is to a terminal (where control
sequences shouldn't be interpreted) before escaping control characters.

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

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-19 11:16:25 +00:00
Peter Holloway
8913d46dab
Escape control characters using caret notation (#1585)
Instead of using their equivalent hex codes.
2024-01-18 18:08:55 +00:00
dependabot[bot]
1ada866058
chore(deps): bump lukemathwalker/cargo-chef (#1474)
Bumps lukemathwalker/cargo-chef from latest-rust-1.74.1-buster to latest-rust-1.75.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-01-17 19:51:00 +00:00
dependabot[bot]
4192fd88c2
chore(deps): bump rustix from 0.38.28 to 0.38.30 (#1566)
Bumps [rustix](https://github.com/bytecodealliance/rustix) from 0.38.28 to 0.38.30.
- [Release notes](https://github.com/bytecodealliance/rustix/releases)
- [Commits](https://github.com/bytecodealliance/rustix/compare/v0.38.28...v0.38.30)

---
updated-dependencies:
- dependency-name: rustix
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-17 19:49:06 +00:00
dependabot[bot]
1121ec9c4f
chore(deps): bump debian (#1568)
Bumps debian from bullseye-20231120-slim to bullseye-20240110-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-01-17 19:48:54 +00:00
Ellie Huxtable
b3b4b8cdd4
feat: add metrics counter for records downloaded (#1584) 2024-01-17 10:56:16 +00:00
Ellie Huxtable
d9317a1a9c
feat: make deleting from the UI work with record store sync (#1580)
* feat: make deleting from the UI work with record store sync

* sort cli delete too

* teeny bit more logs
2024-01-17 09:58:09 +00:00
Peter Holloway
ef38fd0a29
Stop control characters being printed to terminal (#1576)
If a previous command in the history contained a literal control
character (eg via Ctrl-v, Ctrl-[), when the command was printed, the
control character was printed and whatever control sequence it was part
of was interpreted by the terminal. For instance, if a command contained
the SGR sequence `^[[31m`,  all subsequent output from `atuin history
list` would be in red.

Slightly less of a problem, control characters would also not appear in
the interactive search widget although they would be printed when
selected. This meant `echo '^[[31foo'` would appear as `echo '[31foo'`.
When the entry was selected, the same problem as before would occur and,
for the example above, `echo 'foo'` would be printed with 'foo' in red.
When copied, this command would not behave the same as the original as
it would be missing the control sequence.

This adds an extension trait to add a method to anything that behaves
like a string to escape ascii control characters and return a string
that can be printed safely. This string can then be copied and run
directly without having to add the control characters back.
2024-01-17 08:58:11 +00:00
Ellie Huxtable
ed33f63cce
docs: remove old docusaurus (#1581) 2024-01-16 18:27:47 +00:00
Koichi Murase
6bff8c8e1a
feat(search): introduce keymap-dependent vim-mode (#1570)
* feat(search): introduce keymap-dependent vim-mode

* fix(zsh): provide widgets with specific keymaps

* fix(settings): unify "vim" and "keymap_mode"
2024-01-16 13:35:10 +00:00
Ellie Huxtable
a2578c4521
feat: add history rebuild (#1575)
* feat: add history rebuild

This adds a function that will

1. List all history from the store
2. Segment by create/delete
3. Insert all creates into the database
4. Delete all deleted

This replaces the old history sync.

Presently it's incomplete. There is no incremental rebuild, it can only
do the entire thing at once.

This is ran by `atuin store rebuild history`

* fix tests

* add incremental sync

* add auto sync
2024-01-16 11:25:09 +00:00
Ellie Huxtable
c2439d1ed6
fix(sync): save sync time when it starts, not ends (#1573)
Imagine the scenario where a sync fails. The function touched here will
never save the sync time.

That means that external to this function, the sync never happened. The
next command will try and start one immediately.

The happy scenario is that this succeeds. The unhappy scenario is that
this fails. Fails, and isn't saved, so we try again...

Should add proper backoff but this is a good start.
2024-01-15 13:10:10 +00:00
Ellie Huxtable
ecce55b445
feat: add better error handling for sync (#1572)
Hopefully this helps users get more descriptive errors, and give more
descriptive bug reports
2024-01-15 12:57:28 +00:00
Matt Godbolt
69ec991118
fix(fish): integration on older fishes (#1563)
* Fix fish integration on older fishes

- On fish 3.3 the bash-style `$(...)` doesn't work, we should use `(...)`
- Also quoting `"(moo)"` on older fishes gives a literal `moo`
- The result of a `(subcommand)` is a single token, so no need to quote it, anyway

Tested by making the change, executing `cargo run -- init fish --disable-up-arrow` and then
executing that shell script on a system with fish 3.3, as well as 3.6 and observing both still work.

Fixes #1562.

* Alternative way of fixing the problem. Compatible with 3.3 and 3.4+
2024-01-15 07:32:28 +00:00
Koichi Murase
9e3d41eab3
refactor(search): refactor vim mode (#1559) 2024-01-14 23:04:02 +00:00
Ellie Huxtable
7f4b32de3b
fix: shorten text, use ctrl-o for inspector (#1561)
1. Some shells/terminals seem to directly bind ctrl-i to be tab :( Use
   ctrl-o for the inspector instead
2. Shorten the help text so it doesn't get squished
2024-01-14 18:12:29 +00:00
依云
7629bb4701
chore: make clipboard dep optional as a feature (#1558)
The cli-clipboard doesn't compile on systems other than Windows, Linux
and MacOS, e.g. on Android it fails to compile.
2024-01-14 10:53:06 +00:00
Koichi Murase
5d55195e17
fix(search): fix invisible tab title (#1560) 2024-01-14 10:52:42 +00:00
YummyOreo
33eedf93b6
fix(windows): disables unix specific stuff for windows (#1557)
* fix(windows): disables unix specific stuff for windows (windows has this on by default iirc)

* refactor: use windows not target_family
2024-01-14 10:48:50 +00:00
YummyOreo
a56085f059
feat(ui): vim mode (#1553)
* feat(config): add vim option to config

* feat(ui): simple vim mode

* fix(windows): windows sadly doesn't support the stuff

* feat(ui): blinking

* fix(merge)

* revert: reverts some debugging stuff

* feat(ui): changes the defaut to insert, don't know what should be the default

* feat(ui): implements some vim parity

* doc: adds this to the docs

* docs(keybindings): adds vim mode keybindsings to the list of keybindings

* refactor: rustfmt and remove the docs for pr in own repo

* refactor: use execute!

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

---------

Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
2024-01-13 17:15:49 +00:00
Ellie Huxtable
4d41a741f0
fix(perm): set umask 077 (#1554)
This ensures no other user can read shell history data

Resolves #1250
2024-01-12 18:52:39 +00:00
Ellie Huxtable
99249ea319
feat: Add interactive command inspector (#1296)
* Begin work on command inspector

This is a separate pane in the interactive mode that allows for
exploration and inspecting of specific commands.

I've restructured things a bit. It made logical sense that things
were nested under commands, however the whole point of `atuin` is to
provide commands. Breaking things out like this enables a bit less
crazy nesting as we add more functionality to things like interactive
search. I'd like to add a few more interactive things and it was
starting to feel very cluttered

* Some vague tab things

* functioning inspector with stats

* add interactive delete to inspector

* things

* clippy

* borders

* sus

* revert restructure for another pr

* Revert "sus"

This reverts commit d4bae8cf61.
2024-01-12 16:02:08 +00:00