mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 19:32:43 +00:00
feat(config): add Atuin AI inline integration and keybinding
This commit is contained in:
1 parent
8a33be3e28
commit
a82921c9e2
3 files changed
+53
No files matched your search
@@ -35,6 +35,7 @@ test -s ~/.config/envman/load.fish; and source ~/.config/envman/load.fish
|
|||||||
|
|
||||||
if status is-interactive
|
if status is-interactive
|
||||||
atuin init fish | source
|
atuin init fish | source
|
||||||
|
atuin ai init fish | source
|
||||||
end
|
end
|
||||||
|
|
||||||
# cmux
|
# cmux
|
||||||
@@ -44,3 +45,52 @@ fish_add_path "/home/prad/.cache/.bun/bin"
|
|||||||
for _f in $HOME/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.fish
|
for _f in $HOME/.config/herdr/plugins/github/herdr-automatic-rename-*/shell/hook.fish
|
||||||
test -r "$_f"; and source "$_f"; and break
|
test -r "$_f"; and source "$_f"; and break
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
# Question mark at start of line - natural language mode
|
||||||
|
function _atuin_ai_question_mark
|
||||||
|
set -l buf (commandline -b)
|
||||||
|
|
||||||
|
# If buffer is empty or just contains '?', trigger natural language mode
|
||||||
|
if test -z "$buf" -o "$buf" = "?"
|
||||||
|
commandline -r ""
|
||||||
|
|
||||||
|
# Close the semantic prompt zone (OSC 133 C) so terminals with
|
||||||
|
# shell integration don't erase the TUI's output during their
|
||||||
|
# resize-time prompt reflow.
|
||||||
|
printf '\033]133;C\007' > /dev/tty
|
||||||
|
|
||||||
|
# Run atuin ai inline, swapping stdout and stderr
|
||||||
|
set -l output (atuin ai inline --hook 3>&1 1>&2 2>&3 | string collect)
|
||||||
|
|
||||||
|
if string match --quiet '__atuin_ai_print__:*' "$output"
|
||||||
|
echo (string replace "__atuin_ai_print__:" "" -- "$output" | string collect)
|
||||||
|
commandline -f repaint
|
||||||
|
else if test "$output" = "__atuin_ai_cancel__"
|
||||||
|
commandline -f repaint
|
||||||
|
else if string match --quiet '__atuin_ai_execute__:*' "$output"
|
||||||
|
# Execute the command immediately
|
||||||
|
set -l cmd (string replace "__atuin_ai_execute__:" "" -- "$output" | string collect)
|
||||||
|
commandline -r "$cmd"
|
||||||
|
commandline -f repaint
|
||||||
|
commandline -f execute
|
||||||
|
else if string match --quiet '__atuin_ai_insert__:*' "$output"
|
||||||
|
# Insert the command for editing
|
||||||
|
set -l cmd (string replace "__atuin_ai_insert__:" "" -- "$output" | string collect)
|
||||||
|
commandline -r "$cmd"
|
||||||
|
commandline -f repaint
|
||||||
|
else if test -n "$output"
|
||||||
|
# Default: insert for editing
|
||||||
|
commandline -r "$output"
|
||||||
|
commandline -f repaint
|
||||||
|
else
|
||||||
|
commandline -f repaint
|
||||||
|
end
|
||||||
|
else if not contains -- "$fish_key_bindings" fish_vi_key_bindings fish_hybrid_key_bindings
|
||||||
|
# Not at empty prompt, just insert the question mark
|
||||||
|
commandline -i "?"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Set up keybindings
|
||||||
|
bind "?" _atuin_ai_question_mark
|
||||||
@@ -11,3 +11,5 @@ function ai --description 'Choose and launch an AI CLI via gum'
|
|||||||
$choice
|
$choice
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
@@ -18,6 +18,7 @@ function fish_user_key_bindings
|
|||||||
bind -M $mode ctrl-o 'gho; commandline -f repaint'
|
bind -M $mode ctrl-o 'gho; commandline -f repaint'
|
||||||
bind -M $mode ctrl-p 'pj; commandline -f repaint'
|
bind -M $mode ctrl-p 'pj; commandline -f repaint'
|
||||||
bind -M $mode ctrl-a 'omp; commandline -f repaint'
|
bind -M $mode ctrl-a 'omp; commandline -f repaint'
|
||||||
|
bind -M $mode ctrl-w 'atuin ai inline; commandline -f repaint'
|
||||||
|
|
||||||
# Arrow keys: atuin owns up (bound from config.fish, survives the
|
# Arrow keys: atuin owns up (bound from config.fish, survives the
|
||||||
# fish_vi_key_bindings reset above because that only erases presets),
|
# fish_vi_key_bindings reset above because that only erases presets),
|
||||||
|
|||||||
Reference in new issue
Block a user