Commit Graph

1094 Commits

Author SHA1 Message Date
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
600ebc33ab feat: make store init idempotent (#1609) 2024-01-22 16:48:21 +00:00
f727d6c8bf refactor(search): refactor handling of key inputs (#1606) 2024-01-22 12:26:47 +00:00
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
d13b7c31c1 fix(docs): update repo url in CONTRIBUTING.md (#1594) 2024-01-22 10:39:52 +00:00
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
5ab8fa3e9d report alternate keys so shift still works (#1601) 2024-01-21 18:24:33 +00:00
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
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
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
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
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
8913d46dab Escape control characters using caret notation (#1585)
Instead of using their equivalent hex codes.
2024-01-18 18:08:55 +00:00
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
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
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
b3b4b8cdd4 feat: add metrics counter for records downloaded (#1584) 2024-01-17 10:56:16 +00:00
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
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
ed33f63cce docs: remove old docusaurus (#1581) 2024-01-16 18:27:47 +00:00
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
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
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
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
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
9e3d41eab3 refactor(search): refactor vim mode (#1559) 2024-01-14 23:04:02 +00:00
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
5d55195e17 fix(search): fix invisible tab title (#1560) 2024-01-14 10:52:42 +00:00
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
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
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
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
a60d8934c5 chore: update funding (#1543) 2024-01-10 17:43:23 +00:00
a7bed61461 fix(bash): work around bash < 4 and introduce initialization guards (#1533)
* fix(bash): add a guard for interactive shells

* fix(bash): add a guard for the Bash version

* fix(bash): localize READLINE_LINE in bash < 4

In bash < 4, the variables READLINE_LINE and READLINE_POINT are not
supported for the shell commands called by `bind -x`.  Even if it is
not supported, atuin works in not a bad way.  However, this sometimes
causes a strange behavior by the remaining values of READLINE_LINE set
in the previous calls of __atuin_history.  In bash < 4, we can
consistently use an empty string instead of $READLINE_LINE, and the
changes to READLINE_LINE and READLINE_POINT should be localized within
the function.

* fix(bash): add guard for double initialization

In bash, it is customary to reload the settings by sourcing `.bashrc`
again after modifying it.  In such a case, `eval "$(atuin init bash)"`
is executed again.  This registers duplicate hooks to
`preexec_functions` and `precmd_functions`.  To prevent this in this
patch, we introduce an include guard, so that the initialization is
not performed more than once.
2024-01-10 14:11:12 +00:00
6dda16d047 feat: add extended help (#1540)
Given some of the questions we've had lately, I think it's sensible to
add extended help to the top of the Atuin window.

Future plans: Ctrl-<something else> to open up a help popup, with all
common keys
2024-01-10 14:07:40 +00:00
99f76ced50 feat(bash): support high-resolution timing even without ble.sh (#1534)
* feat(bash): support high-resolution timing without blesh

For the integration using bash-preexec, this measures the execution
time of the command using EPOCHREALTIME without the support by ble.sh.
This is not as accurate as the measurement by ble.sh as it contains
also the processing time of the preexec and precmd hooks, but it is
still free from the fork cost.

* fix(shell): work around custom IFS for duration

When a custom IFS is set by the user, the word splitting of
${duration:+--duration "$duration"} does not work as expected.  We
instead use the form "--duration=$duration" with the word splitting
being disabled.
2024-01-10 13:23:51 +00:00
a80ca27cc4 refactor(shell): refactor and localize HISTORY => __atuin_output (#1535) 2024-01-10 13:21:13 +00:00
803b2fed5c docs: Improve style (#1537)
"backup" is a noun. "back up" is a verb.
2024-01-10 08:22:35 +00:00
d1fc843db3 docs: clarify enter/tab usage (#1538) 2024-01-10 08:18:47 +00:00
f63f24699e style(bash): use consistent coding style (#1528)
* style(bash): make indentation consistent

Initially, in this file, the first level is indented by four spaces,
and additional levels are indented by adding two spaces.  However,
this does not seem intentional because the other files, such as
atuin.zsh, are consistently indented by four spaces for any levels.
The indentation was gradually fixed to use four spaces when the
relevant code is updated, but there are still remaining parts using
two spaces.  In this patch, the remaining parts are updated to use the
consistent indentation of four spaces.

* style(bash): remove extra quotations on rhs of assignments

On the right-hand sides of assignments, the quoting of the variable
expansions are not needed because they are not subject to the word
splitting and the pathname expansions.

* style(bash): strip `{` and `}` from `${var}` when not needeed

* style(bash): do not use unnecessary quoting in the conditional commands

In the conditional commands [[ ... ]], the words are not subject to
the word splitting and the pathname expansions, so we do not need to
quote the expansions except for the right-hand sides of ==, !=, and
=~, where the quoting has a special meaning.  In the first place, the
syntax [[ .. ]] is introduced to resolve the issue of the quoting, so
it is natural to use the unquoted form inside [[ ... ]] by default.
In this patch, we use the unquoted form of expansions.

* style(bash): prefer [[ $a && ! $b ]] to [[ -n $a && -z $b ]]

* style(bash): put "then" in the same line as "if"

This is also the format that Bash outputs with `bash --pretty-print
FILE` or `declare -f FUNC`.
2024-01-09 20:42:27 +00:00
3a0e070e74 docs: fix Destination file already exists in Nushell (#1530)
It is a common practice to use `-f` in Nushell configurations to avoid
`Destination file already exists` error.
2024-01-09 16:37:57 +00:00
af51485767 docs: remove activity graph 2024-01-09 11:53:51 +00:00
2b94f05735 fix: disable musl deb building (#1525)
It never worked, and broke release building. I don't think we need musl
debs, but if so ensure they don't break install scripts

Resolve #1500
2024-01-09 11:49:00 +00:00
cc5efd2971 fix(shell): fix incorrect timing of child shells (#1510)
When a child shell session is started from another shell session
(parent session), the environment variable ATUIN_HISTORY_ID set by the
parent session causes Atuin's precmd hook of the child session to be
unexpectedly performed before the first call of Atuin's preexec hook.

In this patch, we clear ATUIN_HISTORY_ID (possibly set by the parent
session) on the startup of the session.
2024-01-08 20:22:42 +00:00
7e48768ddf feat: make it clear what you are registering for (#1523)
Resolve #1516
2024-01-08 17:47:41 +00:00
41e8d135a8 chore: schema cleanup (#1522)
The columns referred to in this PR, were for some reason created with
defaults. When created years ago, they were `bigserial` not `bigint`.

The defaults were never actually used, as verified by

1. Checking the value of the sequences on the database
2. Checking the code

So we're safe to clean them up.
2024-01-08 13:43:33 +00:00
21e934a23d docs: refer to image with multi-arch support (#1513) 2024-01-08 09:43:15 +00:00
d426397ca0 chore(deps): bump hyper from 0.14.28 to 1.1.0 (#1520)
Bumps [hyper](https://github.com/hyperium/hyper) from 0.14.28 to 1.1.0.
- [Release notes](https://github.com/hyperium/hyper/releases)
- [Changelog](https://github.com/hyperium/hyper/blob/master/CHANGELOG.md)
- [Commits](https://github.com/hyperium/hyper/compare/v0.14.28...v1.1.0)

---
updated-dependencies:
- dependency-name: hyper
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-08 09:42:27 +00:00
b881268243 chore(deps): bump ratatui from 0.24.0 to 0.25.0 (#1521)
Bumps [ratatui](https://github.com/ratatui-org/ratatui) from 0.24.0 to 0.25.0.
- [Release notes](https://github.com/ratatui-org/ratatui/releases)
- [Changelog](https://github.com/ratatui-org/ratatui/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ratatui-org/ratatui/compare/v0.24.0...v0.25.0)

---
updated-dependencies:
- dependency-name: ratatui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-08 09:42:06 +00:00