diff options
Diffstat (limited to 'internal/askcli/command_complete_uuids.go')
| -rw-r--r-- | internal/askcli/command_complete_uuids.go | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/internal/askcli/command_complete_uuids.go b/internal/askcli/command_complete_uuids.go index 8c00a7b..bc160b6 100644 --- a/internal/askcli/command_complete_uuids.go +++ b/internal/askcli/command_complete_uuids.go @@ -13,6 +13,18 @@ import ( const completionDescriptionMaxLen = 60 func (d *Dispatcher) handleCompleteUUIDs(ctx context.Context, args []string, stdout, stderr io.Writer) (int, error) { + return d.completeTaskSelectors(ctx, args, stdout, stderr, taskCompletionItems) +} + +func (d *Dispatcher) handleCompleteAliases(ctx context.Context, args []string, stdout, stderr io.Writer) (int, error) { + return d.completeTaskSelectors(ctx, args, stdout, stderr, taskCompletionAliasItems) +} + +// taskCompletionLinesFn builds tab-separated "selector\tdescription" lines for +// completion output (full list vs alias-only for Fish). +type taskCompletionLinesFn func(tasks []TaskExport, aliases map[string]string) []string + +func (d *Dispatcher) completeTaskSelectors(ctx context.Context, args []string, stdout, stderr io.Writer, lines taskCompletionLinesFn) (int, error) { _ = args var outBuf bytes.Buffer code, err := d.runner.Run(ctx, []string{"status:pending", "export"}, nil, &outBuf, stderr) @@ -31,7 +43,7 @@ func (d *Dispatcher) handleCompleteUUIDs(ctx context.Context, args []string, std } // Each line is "selector\tdescription" so fish shell can show the task // summary alongside the ID in the autocompletion menu. - for _, item := range taskCompletionItems(tasks, aliases) { + for _, item := range lines(tasks, aliases) { _, _ = io.WriteString(stdout, item+"\n") } return 0, nil @@ -55,6 +67,24 @@ func taskCompletionItems(tasks []TaskExport, aliases map[string]string) []string return items } +// taskCompletionAliasItems returns tab-separated "selector\tdescription" lines +// only for short alias IDs (never the raw UUID). Used by Fish completion via +// `complete-aliases`; non-shell callers still use complete-uuids for full +// selector lists. +func taskCompletionAliasItems(tasks []TaskExport, aliases map[string]string) []string { + items := make([]string, 0, len(tasks)) + for _, task := range tasks { + if task.UUID == "" { + continue + } + desc := truncateDescription(task.Description, completionDescriptionMaxLen) + if alias := displayTaskAlias(task.UUID, aliases); alias != "" && alias != task.UUID { + items = append(items, alias+"\t"+desc) + } + } + return items +} + // truncateDescription shortens s to at most maxLen characters, appending "…" // when the string is cut, so the completion hint fits on one line. func truncateDescription(s string, maxLen int) string { |
