summaryrefslogtreecommitdiff
path: root/internal/askcli/completion.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/askcli/completion.go')
-rw-r--r--internal/askcli/completion.go51
1 files changed, 47 insertions, 4 deletions
diff --git a/internal/askcli/completion.go b/internal/askcli/completion.go
index ec7631e..04dbb25 100644
--- a/internal/askcli/completion.go
+++ b/internal/askcli/completion.go
@@ -9,6 +9,19 @@ type fishCompletionItem struct {
description string
}
+var askSingleSelectorCompletionCommands = []string{
+ "info",
+ "annotate",
+ "start",
+ "stop",
+ "done",
+ "priority",
+ "tag",
+ "modify",
+ "denotate",
+ "delete",
+}
+
var askRootCompletionItems = []fishCompletionItem{
{name: "add", description: "Create a new task"},
{name: "list", description: "List active tasks"},
@@ -49,6 +62,34 @@ var askUUIDCompletionItems = []fishCompletionItem{
{name: "delete", description: "Delete a task"},
}
+func fishSingleSelectorCompletionContext(positional []string) bool {
+ if len(positional) != 1 {
+ return false
+ }
+
+ for _, command := range askSingleSelectorCompletionCommands {
+ if positional[0] == command {
+ return true
+ }
+ }
+ return false
+}
+
+func fishDepSelectorCompletionContext(positional []string) bool {
+ if len(positional) < 2 || positional[0] != "dep" {
+ return false
+ }
+
+ switch positional[1] {
+ case "add", "rm":
+ return len(positional) == 2 || len(positional) == 3
+ case "list":
+ return len(positional) == 2
+ default:
+ return false
+ }
+}
+
func FishCompletion() string {
return FishCompletionFor("ask")
}
@@ -136,11 +177,13 @@ func writeFishUUIDContextFunction(b *strings.Builder) {
b.WriteString(" if test (count $positional) -eq 0\n")
b.WriteString(" return 1\n")
b.WriteString(" end\n")
- b.WriteString(" if test (count $positional) -gt 2\n")
+ b.WriteString(" if test (count $positional) -ne 1\n")
b.WriteString(" return 1\n")
b.WriteString(" end\n")
b.WriteString(" switch $positional[1]\n")
- b.WriteString(" case info annotate start stop done priority tag modify denotate delete\n")
+ b.WriteString(" case ")
+ b.WriteString(strings.Join(askSingleSelectorCompletionCommands, " "))
+ b.WriteString("\n")
b.WriteString(" return 0\n")
b.WriteString(" case '*'\n")
b.WriteString(" return 1\n")
@@ -167,11 +210,11 @@ func writeFishDepUUIDContextFunction(b *strings.Builder) {
b.WriteString(" end\n")
b.WriteString(" switch $positional[2]\n")
b.WriteString(" case add rm\n")
- b.WriteString(" if test (count $positional) -le 4\n")
+ b.WriteString(" if test (count $positional) -eq 2 -o (count $positional) -eq 3\n")
b.WriteString(" return 0\n")
b.WriteString(" end\n")
b.WriteString(" case list\n")
- b.WriteString(" if test (count $positional) -le 3\n")
+ b.WriteString(" if test (count $positional) -eq 2\n")
b.WriteString(" return 0\n")
b.WriteString(" end\n")
b.WriteString(" case '*'\n")