mirror of
https://github.com/prdlk/dotfiles.git
synced 2026-11-02 11:32:42 +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
|
||||
atuin init fish | source
|
||||
atuin ai init fish | source
|
||||
end
|
||||
|
||||
# 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
|
||||
test -r "$_f"; and source "$_f"; and break
|
||||
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
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ function fish_user_key_bindings
|
||||
bind -M $mode ctrl-o 'gho; 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-w 'atuin ai inline; commandline -f repaint'
|
||||
|
||||
# Arrow keys: atuin owns up (bound from config.fish, survives the
|
||||
# fish_vi_key_bindings reset above because that only erases presets),
|
||||
|
||||
Reference in new issue
Block a user