diff --git a/README.md b/README.md index a539d5a..4f9bfdb 100644 --- a/README.md +++ b/README.md @@ -131,7 +131,7 @@ Status of every feature shipped. ✅ = implemented, ⬜ = roadmap. Section ancho - ✅ JSON (default — pipeable to `jq`) - ✅ `-H` / `--human` table mode (human-readable) - ✅ `-q` / `--quiet` mode (exit code only) -- ✅ `completions ` — generate shell completions +- ✅ `completions ` — generate shell completions ### Quality (v0.4) - ✅ 60+ tests `node:test` suite ([`test/`](./test/)) running against [`test/draft_content.json`](./test/draft_content.json) @@ -576,7 +576,7 @@ $ capcut set-text ./project a1b2c3 "Hey everyone" Generate shell completions: ```bash -capcut completions +capcut completions ``` #### Bash @@ -591,6 +591,14 @@ capcut completions bash >> ~/.bashrc mkdir -p ~/.zsh/completions capcut completions zsh > ~/.zsh/completions/_capcut ``` +Ensure `~/.zsh/completions` is in your `fpath` before running `compinit`. + +#### Fish + +```bash +mkdir -p ~/.config/fish/completions +capcut completions fish > ~/.config/fish/completions/capcut.fish +``` Completes command names and global flags (`--jianying`, `-H`/`--human`, `-q`/`--quiet`, `-v`/`--version`). diff --git a/src/index.ts b/src/index.ts index b2981de..143f93d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -571,6 +571,10 @@ compdef _capcut capcut `; } +function fishCompletion(): string { + return [...COMMANDS, ...GLOBAL_FLAGS].map((word) => `complete -c capcut -f -a "${word}"`).join("\n"); +} + function parseFlags(args: string[]): { positional: string[]; flags: Flags } { const positional: string[] = []; const flags: Flags = { human: false, quiet: false, batch: false }; @@ -2100,8 +2104,11 @@ async function main(): Promise { case "zsh": process.stdout.write(zshCompletion()); break; + case "fish": + process.stdout.write(fishCompletion()); + break; default: - die("Usage: capcut completions "); + die("Usage: capcut completions "); } process.exit(0); diff --git a/test/completions.test.mjs b/test/completions.test.mjs index 5a42363..8f793b2 100644 --- a/test/completions.test.mjs +++ b/test/completions.test.mjs @@ -34,3 +34,18 @@ describe("capcut completions zsh", () => { assert.match(r.stdout, /-v/); }); }); + +describe("capcut completions fish", () => { + it("prints fish completion script", () => { + const r = spawnCli(["completions", "fish"]); + + assert.match(r.stdout, /info/); + assert.match(r.stdout, /tracks/); + assert.match(r.stdout, /--jianying/); + assert.match(r.stdout, /--quiet/); + assert.match(r.stdout, /--version/); + assert.match(r.stdout, /-H/); + assert.match(r.stdout, /-q/); + assert.match(r.stdout, /-v/); + }); +});