aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAge
* chore: update funding (#1543)Ellie Huxtable2024-01-10
|
* fix(bash): work around bash < 4 and introduce initialization guards (#1533)Koichi Murase2024-01-10
| | | | | | | | | | | | | | | | | | | | | | | | | * 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.
* feat: add extended help (#1540)Ellie Huxtable2024-01-10
| | | | | | | 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
* feat(bash): support high-resolution timing even without ble.sh (#1534)Koichi Murase2024-01-10
| | | | | | | | | | | | | | | | * 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.
* refactor(shell): refactor and localize `HISTORY => __atuin_output` (#1535)Koichi Murase2024-01-10
|
* docs: Improve style (#1537)Mike Tsao2024-01-10
| | | "backup" is a noun. "back up" is a verb.
* docs: clarify enter/tab usage (#1538)Ellie Huxtable2024-01-10
|
* style(bash): use consistent coding style (#1528)Koichi Murase2024-01-09
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * 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`.
* docs: fix `Destination file already exists` in Nushell (#1530)Azzam S.A2024-01-09
| | | | It is a common practice to use `-f` in Nushell configurations to avoid `Destination file already exists` error.
* docs: remove activity graphEllie Huxtable2024-01-09
|
* fix: disable musl deb building (#1525)Ellie Huxtable2024-01-09
| | | | | | 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
* fix(shell): fix incorrect timing of child shells (#1510)Koichi Murase2024-01-08
| | | | | | | | | 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.
* feat: make it clear what you are registering for (#1523)Ellie Huxtable2024-01-08
| | | Resolve #1516
* chore: schema cleanup (#1522)Ellie Huxtable2024-01-08
| | | | | | | | | | | 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.
* docs: refer to image with multi-arch support (#1513)Matthew Berryman2024-01-08
|
* chore(deps): bump hyper from 0.14.28 to 1.1.0 (#1520)dependabot[bot]2024-01-08
| | | | | | | | | | | | | | | | 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>
* chore(deps): bump ratatui from 0.24.0 to 0.25.0 (#1521)dependabot[bot]2024-01-08
| | | | | | | | | | | | | | | | 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>
* feat(ui): add redraw (#1519)依云2024-01-08
| | | | | replace old Ctrl-L shortcut and remove the opposite one (Ctrl-H). fixes #1507.
* feat: include atuin login in secret patterns (#1518)Matthew Berryman2024-01-08
| | | | | * include atuin login in secret patterns * doc catchup
* fix(bash): fix and improve the keybinding to `up` (#1515)Koichi Murase2024-01-07
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix(bash): improve up key in multiline mode of ble.sh ble.sh has a multiline mode where pressing [up] can be used to move to the previous line. The command history is loaded only when the [up] key is pressed when the cursor is in the first line. However, with Atuin's integration, the [up] key always causes Atuin's history search and cannot be used to move to the previous line when the cursor is not in the first line. There is also another situation that the [up] key does not load the command history. In this patch, with ble.sh, we perform Atuin's history search only in the situation where the command history is loaded in the original binding of ble.sh. * fix(init): perform bind on explicitly specified keymaps With the current implementation, the keybindings to [C-r] and [up] are only set up in the currently activated keymaps in Bash. As a result, if the user changes the keymap after `eval "$(atuin init bash)"`, Atuin's keybindings do not take effect. In this patch, we bind Atuin's keybindings in all the keymaps (emacs, vi-insert, and vi-command) by explicitly specifying them (as done for the Zsh integration). The keybinding to "k" in the vi-command keymap is also added to make it consistent with the Zsh integration. * fix(init): work around limitation of "bind -x" in bash <= 4.2 In bash <= 4.2, "bind -x" with a key sequence with more than two bytes does not work properly. Inputting the key sequence will produce an error message saying "bash: bash_execute_unix_command: cannot find keymap for command", and the shell command is not executed. To work around this, we can first translate the key sequences to another key sequence with two bytes and run the shell command through the two-byte key sequence. In this patch, we use \C-x\C-p as the two-byte key sequence. * refactor(bash): move the inlined binding scripts to atuin.bash * refactor(init): use `is_ok()` instead of negating `is_err()` Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com> --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* fix(bash): work around custom IFS (#1514)Koichi Murase2024-01-07
| | | | | | | | | | | | | | | | | | When the user sets a custom value of IFS, the up keybinding may fail because the option `--shell-up-key-binding` passed to `__atuin_history` is broken by the word splitting of the shell. For example, when the user sets IFS=-, `atuin` called from __atuin_history receives `shell up key binding <content>` as the search string. $ IFS=- $ echo [up] # <-- this does not work as expected Note that the problem only happens with the plain Bash without ble.sh. The problem does not arise within ble.sh because ble.sh separates the user environment and the line-editor environment by saving/restoring the shell settings. The keybindings are processed in the line-editor environment, so the custom IFS set by the user does not affect it. In this patch, we properly quote the arguments to the atuin command.
* refactor: String -> HistoryId (#1512)Ellie Huxtable2024-01-06
|
* fix(bash): prevent input to be interpreted as options for blesh ↵Koichi Murase2024-01-06
| | | | | | | auto-complete (#1511) Apply the change for zsh-autosuggestions in https://github.com/atuinsh/atuin/pull/1506 to the code for blesh auto-complete.
* fix(bash): avoid unexpected `atuin history start` for keybindings (#1509)Koichi Murase2024-01-06
| | | | | | | | | | | | | | | | | | | | | | | | | | This fixes the second issue of "0s or wrong command duration" reported at https://github.com/atuinsh/atuin/issues/1003. The problem is that, with bash-preexec, the preexec hook may be called even for the commands executed by the keybindings. * In particular, the preexec is called before the command `__atuin_history` is executed on pressing [C-r] and [up]. In this case, $1 passed to `__atuin_preexec` contains the last entry in the command history, so `atuin history start` is called for the last command. As a result, pressing [C-r] and [up] clears the duration of the last command. This causes the reported 0s duration. * Furthermore, the precmd hook corresponding to the keybinding command will not be called, so the duration is only filled when the next user command starts. This replaces the duration of the last command with the time interval between the last press of [C-r] or [up] and the start time of the next command. This causes the reported wrong duration. There is no general and robust way to distinguish the preexec invocation for keybindings from that for the user commands, but in this patch we exclude the preexec invocation for Atuin's keybindings [C-r] and [up] at least.
* feat: rework record sync for improved reliability (#1478)Ellie Huxtable2024-01-05
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * feat: rework record sync for improved reliability So, to tell a story 1. We introduced the record sync, intended to be the new algorithm to sync history. 2. On top of this, I added the KV store. This was intended as a simple test of the record sync, and to see if people wanted that sort of functionality 3. History remained syncing via the old means, as while it had issues it worked more-or-less OK. And we are aware of its flaws 4. If KV syncing worked ok, history would be moved across KV syncing ran ok for 6mo or so, so I started to move across history. For several weeks, I ran a local fork of Atuin + the server that synced via records instead. The record store maintained ordering via a linked list, which was a mistake. It performed well in testing, but was really difficult to debug and reason about. So when a few small sync issues occured, they took an extremely long time to debug. This PR is huge, which I regret. It involves replacing the "parent" relationship that records once had (pointing to the previous record) with a simple index (generally referred to as idx). This also means we had to change the recordindex, which referenced "tails". Tails were the last item in the chain. Now that we use an "array" vs linked list, that logic was also replaced. And is much simpler :D Same for the queries that act on this data. ---- This isn't final - we still need to add 1. Proper server/client error handling, which has been lacking for a while 2. The actual history implementation on top This exists in a branch, just without deletions. Won't be much to add that, I just don't want to make this any larger than it already is The _only_ caveat here is that we basically lose data synced via the old record store. This is the KV data from before. It hasn't been deleted or anything, just no longer hooked up. So it's totally possible to write a migration script. I just need to do that. * update .gitignore * use correct endpoint * fix for stores with length of 1 * use create/delete enum for history store * lint, remove unneeded host_id * remove prints * add command to import old history * add enable/disable switch for record sync * add record sync to auto sync * satisfy the almighty clippy * remove file that I did not mean to commit * feedback
* fix: Prevent input to be interpreted as options for zsh autosuggestions (#1506)Mattias Eriksson2024-01-05
| | | Co-authored-by: Mattias Eriksson <snaggen@mayam.com>
* feat: enable enhanced keyboard mode (#1505)Ellie Huxtable2024-01-05
| | | | | | | | | | | | | This enabled the Kitty Keyboard Protocol Read more here: https://sw.kovidgoyal.net/kitty/keyboard-protocol/ No change on unsupported terminals, but means in the future we can be more creative with keybinding depending on terminal. Tested on Alacritty and events come through with all modifiers supported. Will be useful for #193
* refactor: use enum instead of magic numbers (#1499)依云2024-01-04
|
* docs: add forum link to contributing (#1498)Ellie Huxtable2024-01-03
|
* docs(readme): add repology badge (#1494)Marcin Puc2024-01-03
|
* chore: remove the teapot response (#1496)Ellie Huxtable2024-01-03
| | | | | It was fun, but it wasn't as informative as it needs to be I'm leaving the function name though :)
* chore(release): prepare for release v17.2.1 (#1495)Ellie Huxtable2024-01-03
|
* fix(server): typo with default config (#1493)Ellie Huxtable2024-01-03
| | | | | | | | | | | Without TLS config, the server fails to load defaults. Until this is released, add this to your server config ``` [tls] enable = false cert_path = "" pkey_path = "" ```
* chore(release): prepare for release v17.2.0 (#1492)Ellie Huxtable2024-01-03
|
* fix(import/zsh): zsh use a special format to escape some characters (#1490)依云2024-01-03
| | | | | | | | | | * fix(import/zsh): zsh use a special format to escape some characters unescape those correctly rather than throw them away. zsh side code: https://github.com/zsh-users/zsh/blob/9f57ca4ac8ae071727b1d77cbb8c4c0d893b9099/Src/utils.c#L4889-L4900 * fix code style
* feat(bash): provide auto-complete source for ble.sh (#1487)Koichi Murase2024-01-02
| | | | | * feat(bash): provide auto-complete source for ble.sh * docs(integration): mention the auto-complete source for ble.sh
* fix(bash): fix error by the use of ${PS1@P} in bash < 4.4 (#1488)Koichi Murase2024-01-02
| | | | | | | The parameter expansions for the prompt strings, `${PS1@P}`, is only available in bash >= 4.4. In Bash 4.3 or below w/ bash-preexec, the current implementation produces error messages. There is no way to evaluate PS1 with bash < 4.4, so we give up the adjustments for multiline prompts in bash < 4.4 in this patch.
* fix(zsh): zsh_autosuggest_strategy for no-unset environment (#1486)DS/Charlie2024-01-02
| | | | | * fix for zsh no-unset environments * fix zsh_autosuggest_strategy for no-unset environment
* feat(shell): support high-resolution duration if available (#1484)Koichi Murase2024-01-02
| | | | | | | | | | | | | | | | | * feat(bash): measure duration in microsecond resolution with ble.sh * feat(zsh): measure duration in nanosecond resolution with zsh/datetime * refactor(history): use Option<i64> for command-line arg duration Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com> * style(history): apply suggestion by `cargo fmt` * fix(history): use Option<u64> for arg duration --------- Co-authored-by: Ellie Huxtable <ellie@elliehuxtable.com>
* fix(bash,zsh): fix quirks on search cancel (#1483)Koichi Murase2024-01-02
| | | | | | | | | | | | | | | * fix(bash): preserve the line content on search cancel In the current implementation for Bash, the line content is lost when the user cancels the atuin search by pressing ESC, C-g, or Down at the bottom line. This is because the line content is set to the empty string returned by atuin on the cancellation of the search. In the integrations for other shells, zsh and fish, the empty output is properly handled so that the line content is preserved. This patch makes the behavior in Bash consistent with that in zsh and fish, i.e., we do nothing when the atuin search returns an empty output. * fix(zsh): ignore confusing line `__atuin_accept__:*` on search cancel
* refactor(bash): refactor and optimize `__atuin_accept_line` (#1482)Koichi Murase2024-01-02
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * fix(bash): prefix "__atuin_" to avoid variable conflicts Because the function "__atuin_history" executes an arbitary user command for "enter_accept", the local variable names should be carefully chosen. A local variable can shadow a global variable that the user wants to use when there is a name conflict. To avoid such a situation we try to namespace the variables used by atuin by prefixing "__atuin_". * fix(bash): work around "shopt -s xpg_echo" * refactor(bash): simplify the rendering of the prompt * perf(bash): avoid extra evaluation of PS1 * refactor(bash): count \n by wc We can simply use "wc -l" to count the number of newline characters. In the POSIX standard, a line in a text stream is defined as characters terminated by a newline character, so the unterminated line is not counted by "wc -l". As a result, "wc -l" actually counts the number of newline characters. * refactor(bash): rename localvar `HISTORY => __atuin_command` This patch renames the local variable `HISTORY` in __atuin_accept_line to `__atuin_command`. The name of the global variable `HISTORY` set by `__atuin_history` is kept.
* docs: update logo (#1481)Ellie Huxtable2024-01-01
|
* docs: remove stray character from READMEEllie Huxtable2024-01-01
|
* docs: add docs for zsh-autosuggestion integration (#1480)Ellie Huxtable2024-01-01
| | | | I've added an integrations page to the docs. We can maintain a list of such integrations
* feat: integrate with zsh-autosuggestions (#1479)Ellie Huxtable2024-01-01
| | | | | | | | | | | | | | | | | * feat: integrate with zsh-autosuggestions * Update atuin/src/shell/atuin.zsh Co-authored-by: Patrick Jackson <patrick@jackson.dev> * Update atuin/src/shell/atuin.zsh Co-authored-by: Patrick Jackson <patrick@jackson.dev> * feedback --------- Co-authored-by: Patrick Jackson <patrick@jackson.dev>
* fix(stats): time now_local not working Conrad Ludgate2024-01-01
|
* refactor(bash): factorize `__atuin_accept_line` (#1476)Koichi Murase2024-01-01
|
* fix(bash): fix small issues of `enter_accept` for the plain Bash (#1467)Koichi Murase2024-01-01
| | | | | | | | | | | | | | | | | | | | | | | * fix(bash): history should be updated before preexec * fix(bash): properly execute "--" With the current implementation, the user command "--" would not be executed even if it were the intended one. This is because it would be confused as an option by the "eval" builtin. We can specify "--" to tell "eval" that the later arguments should be literally treated as the command. * fix(bash): correctly restore $? and $_ * fix(bash): fix the use of preexec_ret_value The exit status of preexec_ret_value is used to suppress the execution of the corresponding command in the extdebug mode. The current implementation somehow tries to set $? before the call of stty, which does not have any effect. Instead, we can manually turn off the execution of the user command when the condition matches. * feat(bash): support array PROMPT_COMMAND of Bash >= 5.1
* fix(install): discord broken linkEllie Huxtable2023-12-31
|
* fix(docs): discord link expiredEllie Huxtable2023-12-31
|