aboutsummaryrefslogtreecommitdiffstats
path: root/src/shell
diff options
context:
space:
mode:
authorEllie Huxtable <e@elm.sh>2021-02-15 23:33:30 +0000
committerGitHub <noreply@github.com>2021-02-15 23:33:30 +0000
commit41f072a8b443b5a404916598f0c9b7a52f5c05fb (patch)
tree449643847a5fee7c290976075a2f6fb36547aca0 /src/shell
parentSatisfy clippy (diff)
downloadatuin-41f072a8b443b5a404916598f0c9b7a52f5c05fb.zip
Add init command (#12)
* Add init command This makes setting up the shell part of A'tuin much easier. Eval the output of "atuin init". * Update readme, add up binding
Diffstat (limited to 'src/shell')
-rw-r--r--src/shell/atuin.zsh54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/shell/atuin.zsh b/src/shell/atuin.zsh
new file mode 100644
index 00000000..a984428f
--- /dev/null
+++ b/src/shell/atuin.zsh
@@ -0,0 +1,54 @@
+# Source this in your ~/.zshrc
+export ATUIN_SESSION=$(atuin uuid)
+export ATUIN_HISTORY="atuin history list"
+export ATUIN_BINDKEYS="true"
+
+_atuin_preexec(){
+ id=$(atuin history start $1)
+ export ATUIN_HISTORY_ID="$id"
+}
+
+_atuin_precmd(){
+ local EXIT="$?"
+
+ [[ -z "${ATUIN_HISTORY_ID}" ]] && return
+
+ atuin history end $ATUIN_HISTORY_ID --exit $EXIT
+}
+
+_atuin_search(){
+ emulate -L zsh
+ zle -I
+
+ output=$(eval $ATUIN_HISTORY | fzf)
+
+ if [[ -n $output ]] ; then
+ BUFFER=$output
+ fi
+
+ zle reset-prompt
+}
+
+_atuin_up_search(){
+ emulate -L zsh
+ zle -I
+
+ output=$(eval $ATUIN_HISTORY | fzf --no-sort --tac)
+
+ if [[ -n $output ]] ; then
+ BUFFER=$output
+ fi
+
+ zle reset-prompt
+}
+
+add-zsh-hook preexec _atuin_preexec
+add-zsh-hook precmd _atuin_precmd
+
+zle -N _atuin_search_widget _atuin_search
+zle -N _atuin_up_search_widget _atuin_up_search
+
+if [[ $ATUIN_BINDKEYS == "true" ]]; then
+ bindkey '^r' _atuin_search_widget
+ bindkey '^[[A' _atuin_up_search_widget
+fi