func main() { var shouldInit bool var flagTags string var priority = workspace.PriorityNormal.String() flag.Usage = usage flag.BoolVar(&shouldInit, "i", false, "Initialise new workspace if needed.") flag.StringVar(&priority, "p", priority, "Specify the priority for new tasks.") flag.StringVar(&flagTags, "t", "", "Specify tags to be applied to new tasks.") flag.Parse() if flag.NArg() == 0 { usage() return } pri := workspace.PriorityFromString(priority) if pri == workspace.PriorityUnknown { usage() os.Exit(1) } tags := workspace.Tokenize(flagTags, ",") ws, err := workspace.ReadFile(flag.Arg(0), shouldInit) die.If(err) entryID := ws.NewEntry() entry := ws.Entries[entryID] for { tasks := ws.EntryTasks(entryID).Sort() fmt.Printf("TODO %s (%d tasks):\n", workspace.Today().Format(workspace.DateFormat), len(tasks)) for _, task := range tasks { fmt.Println(task) } fmt.Printf("New task: ") line := readline() if line == "" { break } id := workspace.NewTaskID() task := workspace.NewTask(id, line) task.Priority = pri entry.Tasks = append(entry.Tasks, id) ws.Tasks[id] = task ws.Entries[entryID] = entry for i := range tags { ws.Tag(task.ID, tags[i]) } err = workspace.WriteFile(ws) die.If(err) } }
func main() { var shouldInit bool var fromFile string flag.Usage = usage flag.StringVar(&fromFile, "f", "", "Read annotations from a file.") flag.BoolVar(&shouldInit, "i", false, "Initialise new workspace if needed.") flag.Parse() if flag.NArg() == 0 { die.With("Workspace name is required.") } ws, err := workspace.ReadFile(flag.Arg(0), shouldInit) die.If(err) entryID := ws.NewEntry() tasks := ws.EntryTasks(entryID).Unfinished().Sort() for { fmt.Println("Today's TODO:") for i, task := range tasks { fmt.Println(i, task) if len(task.Tags) == 0 { continue } fmt.Println("\tTags:", task.TagString()) } fmt.Printf("Task: ") line := readline() if line == "" { break } idx, err := strconv.Atoi(line) die.If(err) if idx > len(tasks) || idx < 0 { continue } task := tasks[idx] fmt.Println("Current tags:", task.TagString()) fmt.Printf("Tags to be added: ") line = readline() tags := workspace.Tokenize(line, ",") for i := range tags { ws.Tag(task.ID, tags[i]) } err = workspace.WriteFile(ws) die.If(err) } }