add fish shell completions for sandlot
This commit is contained in:
parent
267b519e14
commit
c67c89f4f7
75
completions/sandlot.fish
Normal file
75
completions/sandlot.fish
Normal file
|
|
@ -0,0 +1,75 @@
|
||||||
|
# Fish completions for sandlot
|
||||||
|
# Install: cp completions/sandlot.fish ~/.config/fish/completions/
|
||||||
|
|
||||||
|
# Helper: list active session branches from .sandlot/state.json
|
||||||
|
function __sandlot_sessions
|
||||||
|
set -l root (git rev-parse --show-toplevel 2>/dev/null)
|
||||||
|
or return
|
||||||
|
set -l state "$root/.sandlot/state.json"
|
||||||
|
test -f "$state"; or return
|
||||||
|
string match -rg '"branch":\s*"([^"]+)"' <"$state"
|
||||||
|
end
|
||||||
|
|
||||||
|
# All top-level subcommands (used for __fish_seen_subcommand_from checks)
|
||||||
|
set -l __sandlot_cmds new list open review shell close rm merge save diff show log dir cleanup vm
|
||||||
|
set -l __sandlot_vm_cmds create start shell status info stop destroy
|
||||||
|
|
||||||
|
# Disable file completions
|
||||||
|
complete -c sandlot -f
|
||||||
|
|
||||||
|
# ── Top-level subcommands ────────────────────────────────────────────
|
||||||
|
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a new -d 'Create a new session and launch Claude'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a list -d 'Show all active sessions'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a open -d 'Re-enter an existing session'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a review -d 'Launch a code review for a branch'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a shell -d 'Open a shell in the VM'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a close -d 'Remove a worktree and clean up'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a merge -d 'Merge a branch into main and close'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a save -d 'Stage all changes and commit'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a diff -d 'Show changes for a branch'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a show -d 'Show prompt and diff for a branch'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a log -d 'Show commits not on main'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a dir -d 'Print the worktree path'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a cleanup -d 'Remove stale sessions'
|
||||||
|
complete -c sandlot -n "not __fish_seen_subcommand_from $__sandlot_cmds" -a vm -d 'Manage the sandlot VM'
|
||||||
|
|
||||||
|
# ── Session branch completions ───────────────────────────────────────
|
||||||
|
|
||||||
|
for cmd in open review shell close rm merge save diff show log dir
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from $cmd; and not __fish_seen_subcommand_from vm" -a '(__sandlot_sessions)'
|
||||||
|
end
|
||||||
|
|
||||||
|
# ── Command options ──────────────────────────────────────────────────
|
||||||
|
|
||||||
|
# new
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from new' -s p -l print -r -d 'Run Claude non-interactively with prompt'
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from new' -s n -l no-save -d 'Skip auto-save after Claude exits'
|
||||||
|
|
||||||
|
# list
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from list' -l json -d 'Output as JSON'
|
||||||
|
|
||||||
|
# open
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from open' -s p -l print -r -d 'Run Claude non-interactively with prompt'
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from open' -s n -l no-save -d 'Skip auto-save after Claude exits'
|
||||||
|
|
||||||
|
# review
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from review' -s p -l print -d 'Print review to stdout'
|
||||||
|
|
||||||
|
# close / rm
|
||||||
|
complete -c sandlot -n '__fish_seen_subcommand_from close rm' -s f -l force -d 'Close even with unsaved changes'
|
||||||
|
|
||||||
|
# ── vm subcommands ───────────────────────────────────────────────────
|
||||||
|
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a create -d 'Create and provision the VM'
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a start -d 'Start the VM'
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a shell -d 'Open a shell in the VM'
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a status -d 'Show VM status'
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a info -d 'Show VM system info'
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a stop -d 'Stop the VM'
|
||||||
|
complete -c sandlot -n "__fish_seen_subcommand_from vm; and not __fish_seen_subcommand_from $__sandlot_vm_cmds" -a destroy -d 'Stop and delete the VM'
|
||||||
|
|
||||||
|
# ── Global options ───────────────────────────────────────────────────
|
||||||
|
|
||||||
|
complete -c sandlot -s h -l help -d 'Show help'
|
||||||
|
complete -c sandlot -s V -l version -d 'Show version'
|
||||||
Loading…
Reference in New Issue
Block a user