package cmd import ( "fmt" "os" "git.jnss.me/joakim/opal/internal/engine" "github.com/spf13/cobra" ) var listCmd = &cobra.Command{ Use: "list [filter...]", Short: "List tasks", Long: `List tasks matching the filter criteria. Examples: opal list # List all pending tasks opal list +home # List tasks with +home tag opal list project:backend # List backend project tasks opal list priority:H # List high priority tasks opal 2 list # List using filter 2 (flexible syntax)`, Run: func(cmd *cobra.Command, args []string) { parsed := getParsedArgs(cmd) if err := listTasks(parsed.Filters); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } }, } func listTasks(args []string) error { // Parse filter var filter *engine.Filter var err error if len(args) == 0 { filter = engine.DefaultFilter() } else { filter, err = engine.ParseFilter(args) if err != nil { return fmt.Errorf("failed to parse filter: %w", err) } } // Build working set ws, err := engine.BuildWorkingSet(filter) if err != nil { return fmt.Errorf("failed to build working set: %w", err) } // Get tasks tasks := ws.GetTasks() // Display fmt.Println(engine.FormatTaskList(tasks, ws)) return nil }