User Guide for CommanDo

Download JAR file View on GitHub

What is CommanDo

You have a ton of things to do. But you are really tired of the amount of mouse-clicking required to add to-dos in your to-do list management application...

Introducing CommanDo: the to-do list manager designed for you. With CommanDo, you can manage your to-do list in double quick time with just typing, completely mouse-free. With CommanDo, you can edit your to-dos with short, intuitive and English-like commands. With CommanDo, you can preview your upcoming Events and unfinished Tasks at a glance, when you open up the application.

Here's CommanDo at work:

Using CommanDo to manage everything in your life

Ready to spend less time managing your to-dos, and spend more time actually doing them? Start using CommanDo today!

Getting Started

  1. Ensure that you have Java version 1.8.0_60 or later on your device. Instructions on checking your Java version can be found here. Otherwise, install the latest version of Java.
  2. Download the latest commando.jar from CommanDo's releases tab on Github.
  3. Copy commando.jar to the folder you want to use as the home folder for CommanDo.
  4. Double-click commando.jar to start the application. CommanDo's window should appear in a few seconds:
    CommanDo on its first launch
  5. Type help and press Enter. You can open this user guide another window. Refer to the Commands section below for the list of commands available in CommanDo.
  6. For your convenience:
    • Anything you type will immediately go into the command box, even if it was out of focus.
    • With focus on the command box, press and to navigate through your command history.
    • Press Tab to switch focus between the panels, and press and with focus on a panel to scroll it up or down.

Commands

Viewing Help: help

If you end up lost in your commands, you can quickly open up this user guide with the help command. If you follow help with another command word, the corresponding section of the user guide will be shown.

Command Format:
>> help [<topic>]
Understanding Command Formats: For every command, the first word is the command word that specifies the type of the command. What follows after are fields to fill in for that command. The following legend describes the syntax we used to specify command formats:
  • <> denotes a field to fill in
  • [] denotes that the fields within it are optional
  • / separates alternatives to a keyword
  • ... denotes that the preceding field can be repeated (i.e. able to have multiple values)
Examples:
>> help
>> help add
>> help cheatsheet
This command will open up this user guide, jumping to the Cheatsheet section.

Adding To-Dos: add

The very first thing you'll want to do is to add a to-do. Each to-do contains at minimum, a description. You can associate each to-do with multiple tags and a time constraint. Depending on nature of the time constraint, to-dos are categorised into 2 types: Events (shown in the left panel) and Tasks (shown in the right panel):

In CommanDo, all Events are on the left and all Tasks are on the right

Adding Events

An Event is an activity happening within a time window. Examples include your birthday party, a meeting with your boss, or the upcoming examination you might have. To add an Event, use the add command, followed by the description, the time window, a recurrence (optional) and tags, if any.

Command Format:
>> add <description> from <start_datetime> to <end_datetime> [daily/weekly/monthly/yearly] [#<tag>...]
>> add <description> on <datetime> [daily/weekly/monthly/yearly] [#<tag>...] 
>> add <description> to <end_datetime> [daily/weekly/monthly/yearly] [#<tag>...] 
Examples:
>> add wild party in hostel room from 31 Dec 2016 to 1 Jan 2017
>> add shopping with wife from 5 Sep 1230h to 1730h #important #wife
>> add meeting with Dr Tan from next Saturday 9am to 10am #work #important
>> add physics revision from tues 9.30pm to 10pm weekly #physics
>> add tour with Jimmy on next Saturday 
>> add clean room on tomorrow #important 

In CommanDo, there are 3 ways to specify its time window of an Event:

  • Specifying both start_datetime and end_datetime fields: the Event starts at start_datetime and ends at end_datetime
    • With no time specified, start_datetime defaults to a time of 0000h midnight, while end_datetime defaults to 2359h
  • Specifying a datetime field: the Event starts at datetime and ends at 2359h on that day
    • With no time specified, datetime defaults to a time of 0000h midnight
  • Specifying a end_datetime field: the Event starts from the current datetime (i.e. now) and ends at end_datetime
    • With no time specified, end_datetime defaults to a time of 2359h

Datetime Formats: CommanDo is pretty flexible in parsing your datetime fields, accepting formats like 5 Jan 2016 2300 and 28/12/2016 12pm (where the date is in the DD/MM/YYYY format). You can drop the year (if you mean the current year) or even a whole date (if you mean a preceding date or the current date). For the full list of usable datetime formats, refer to the later FAQ section on supported datetime formats.

The use of keywords daily, weekly, monthly or yearly after the time window allows you to add a recurrence to the Event. The moment a recurring Event is over, CommanDo will automatically move its time window forwards based on the recurrence.

To help organise your to-do list, you can associate tags with the Event by putting them at the end of the command, prefixed with #. You'll be able to browse through your to-do list by tags with the find and recall commands described later.

In CommanDo, by default, every upcoming Event is listed in the left panel, in chronological order. When an Event is over, it will drop down to the bottom of the list, greyed out. On the next day, CommanDo will hide it for you, but you can still find it with the recall command. The following screenshots demonstrate how Events are displayed:

Result of adding a Event with command:
>> add wild party in hostel room from 31 Dec 2016 to 1 Jan 2017
Result of adding a recurring Event with command:
>> add physics revision from tues 9.30pm to 10pm weekly #physics
An Event that has past will drop to the bottom of its list, greyed out

Adding Tasks

A Task, on the other hand, is an activity that can be done at your own time or by some due date. Examples include a plan to watch the latest blockbuster movie, or the submission deadline of an assignment. To add a Task, use the add command, followed by the description, a due date (optional), a recurrence (optional) and tags, if any.

Command Format:
>> add <description> [by <due_datetime>] [daily/weekly/monthly/yearly] [#<tag>...]
Examples:
>> add finish FYP by tomorrow 2359h
>> add submit math homework by wednesday 2359h weekly
>> add watch Lord of the Rings
>> add shop for groceries: banana, pineapple, watermelon #housework
>> add walk from here to there
This command will add a Task with description walk from here to there. Although it looks like the format of an Event, CommanDo recognises that here and there are invalid datetimes.
>> add code parser to parse by tomorrow by today
This command will add a Task with description code parser to parse by tomorrow with due date of the current day 2359h.

If you do not specify a time in due_datetime, the time will default to 2359h. You can add tags and recurrence to a Task in a way similar to adding Events.

When you have completed a Task, you can mark it as done with the finish command. In CommanDo, every unfinished Task is listed on the right panel, with those with due dates prioritized at the top, in chronological order. The following screenshot shows how a Task is displayed when you add it:

Result of adding a Task with command:
>> add finish FYP by tomorrow 2359h
Escaping description of to-dos: In the case you want to use something like by today or from morning to night as the description of your Event or Task, you can wrap it with backticks like in this following example:
>> add `shop by today`
This command will add a Task with description shop by today.

Deleting To-Dos and their Fields: delete

Deleting To-Dos

If you want to delete a to-do that is no longer relevant, whether it is an Event or a Task, use the delete command, followed by the Index of the to-do you want to delete.

Command Formats:
>> delete <index>...
>> delete <start index> - <end index>
Examples:
>> delete 2 3
This command will delete the to-dos with Indices 2 and 3.
>> delete 1 - 5
This command will delete the to-dos with Indices 1, 2, 3, 4 and 5.
Index of a To-Do: To refer to an existing to-do in CommanDo, you can use its Index, which is the number visually tagged to a to-do on the interface. This is clarified in the following picture:
Index of to-do with description do homework is 1

Deleting Time Constraints of To-Dos

There are situations where the time window of an Event or the due date of a Task becomes no longer relevant. You can remove these time constraints from the to-do with the delete command, ending the command with the keyword time. Note that this means that a target Event will become a Task after such a command.

Command Formats:
>> delete <index>... time
>> delete <start index> - <end index> time

Deleting Recurrence of To-Dos

You might want to remove the recurrence of a to-do while keeping its time window (for an Event) or due date (for a Task). This can be done with the delete command, ending it with the keyword recurrence.

Command Formats:
>> delete <index>... recurrence
>> delete <start index> - <end index> recurrence

Deleting Tags of To-Dos

Similarly, to clear the tags of a to-do, use the delete command as well, but end with the keyword tag.

Command Formats:
>> delete <index>... tag
>> delete <start index> - <end index> tag

Deleting Multiple Fields of To-Dos

You can even chain tag, time, or recurrence to delete all the specified fields from the target to-dos at once.

Examples:
>> delete 2 4 5 tag time
This command will remove the tags and time constraints for all the to-dos with Indices 2, 4 and 5

Editing To-Dos: edit

More often than not, you'll need to edit the fields of a to-do after some time, such as when you make a mistake, when you have a postponed Event, or when you receive more details for a Task.

Editing Events

You can replace the description, the time window and the tags of an Event with the edit command, followed by the fields that you want to modify, in a format similar to adding Events with the add command. Note that if tags are provided in an edit, the old tags will be completely replaced by the new ones. To remove the time window, the recurrence, or the tags of a Event, use the delete command instead.

Command Format:
>> edit <index> [<description>] [from <start_datetime> to <end_datetime> [daily/weekly/monthly/yearly]] [#<tag>...]
Examples:
>> edit 1 #projectABC
This command will tag #projectABC to an Event with Index 1, replacing any tags it originally has.
>> edit 1 from today 14:00 to today 16:00 #important #work
This command will change the time window of an Event with Index 1 and replaces its tags by #important and #work.

Editing Tasks

By including suitable fields and their keywords, you'll similarly be able to replace the description, the due date and the tags of a Task.

Command Format:
>> edit <index> [<description>] [by <due_datetime>] [#<tag>...]
Examples:
>> edit 2 shopping trip to IKEA #family
This command will change the description of the Task with Index 2 to shopping trip to IKEA and replaces all of its tags with #family.
>> edit 2 by 6 feb
This command will set or change the due date of the Task with Index 2 to 6 Feburary of the current year, 2359h.
>> edit 2 `watch back by midnight`
This command will replace the description of the Task with Index 2 to watch back by midnight.

Marking Tasks as Done: finish

When you've completed a Task, mark it as done with the finish command. The to-do will initially be moved to the bottom of its list, greyed out. It is subsequently archived on the next day. You'll be able to browse through these finished Tasks with the recall command.

Events will automatically be marked done and greyed out when the current datetime is after the end of their time window. Therefore, you cannot use the finish command on an Event.
Command Formats:
>> finish <index>... 
>> finish <start index> - <end index> 
Result of finishing the Task release software V0.5 with finish command.

Searching through Undone To-Dos: find

At some point in time, you might have a long list of to-dos. Use the find command to search through all upcoming Events (from the current day onwards) and all unfinished Tasks by their description or their tags. After doing the search, use the find command again without any trailing keywords to revert to showing all upcoming Events and unfinished Tasks.

Command Format:
>> find [<keyword>...] [#<tag>...]
Examples:
>> find lunch meeting
This command will filter and show only upcoming Events and unfinished Tasks, with description or tags matching both lunch and meeting.
>> find #homework
This command will filter and show only upcoming Events and unfinished Tasks, with a tag #homework.
>> find
This command will show all undone to-dos.

More details on how the search works:

  • For a to-do to be matched, all search keywords must be matched in its description and tags, and all search tags must be matched in its tags.
  • Orderings of the search keywords and tags do not matter – keywords Chicken Egg will match
    Egg Chicken.
  • Search keywords (but not tags) will match parts of words – keyword chicken will match chickens, whereas keyword chickens will not match chicken.

Browsing To-Dos that are Done: recall

When you need to review, refer back to, or search through the past Events or finished Tasks, use the recall command. It works in the exactly same way as the find command - except it only shows to-dos that are done.

Command Format:
>> recall [<keyword>...] [#<tag>...]
Examples:
>> recall
This command will show Events that are already over and Tasks that have been finished.
>> recall wedding
This command will filter and show Events that are already over and Tasks that have been finished, with description or tags matching wedding.
Result of >> recall wedding

Listing To-Dos Within Time Window: list

Sometimes you may want to list all your to-dos within certain period of time. Use the list command, followed by a time window. This would search for Events that are going to happen or have happened within that time window, and Tasks that are finished or are due in that period. If you use this command without any keywords, you will see all to-dos - both done and undone.

Command Format:
>> list [from <start_datetime> to <end_datetime>]
>> list on <datetime>
Examples:
>> list 
This command will list all Events and Tasks, both done and undone.
>> list from today to tmr
This command will list all Events and Tasks that have time windows or due dates between the current day 0000h to the next day 2359h.
>> list on next week
This command will list all Events and Tasks that have time windows or due dates on next week.

Result of >> list from today to tmr

Marking Tasks as Not Done: unfinish

Oops, you marked a task as done when it is not done yet. You can use the unfinish command:

Command Format:
>> unfinish <index>... 
>> unfinish <start index> - <end index> 

Setting Save Location: store

Perhaps you want to save your to-do list in your Dropbox or OneDrive folder that is cloud-synced. The store command lets you do exactly that - it migrates the save file to that of the specified file path. This command will fail if there is an existing file at the specified file path, but you can end the command with the keyword override to forcibly override it.

Default Save Location: The default save location is data/todos.xml. It is relative to the commando.jar file.
Command Format:
>> store <file_path> [override]
Examples:
>> store ../../Dropbox/work/todolist.xml override
This command will change the save location for storing the to-do list data to ../../Dropbox/work/todolist.xml relative to your commando.jar, and saves the latest to-do list data to that file, overriding any data if that file already exists.
File Paths: A file path can be absolute (C:/Users/Jim/Dropbox/work/todolist.xml) or relative to the commando.jar file (../../Dropbox/work/todolist.xml). You can use any file extension you wish, but ending with .xml is recommended because the date file is in that file format.

Exporting: export

If you want to clone your to-do list data file in your current save location to another local destination, there's no need to manually do so. Instead, use the export command to save a copy of the current to-do list data to the specified file at given file path. Similar to the store command, append the keyword override behind the command to forcibly override any existing file.

Command Format:
>> export <file_path> [override]

Importing: import

If you already have an existing to-do list data file (possibly from your other devices) and want to use it in CommanDo, the import command can import a valid data file. Note that it overrides the current to-do list with the imported to-do list!

Command Format:
>> import <file_path>

Undoing: undo

You deleted a to-do by accident and you want to undo your last modification. With the undo command, the most recent add, edit, delete, clear and import would be reverted. Multiple undo commands can be used in succession. Note that you can only undo commands in your current session, which ends when you close the application.

Command Format:
>> undo

Redoing: redo

You deleted a to-do by accident. You had used undo to restore that to-do, but eventually realised that the to-do isn't worth keeping after all. The redo command reverts the most recent undo, and can be used in sucession. How many times you can redo is limited to the current session, which ends when you close the application.

Command Format:
>> redo

Clearing To-Do List: clear

If you want to reset your to-do list, use the clear command. ALL to-dos, including those finished and archived, will be removed. Use the undo command if you cleared your to-do list by accident.

Command Format:
>> clear

Exiting: exit

Finally, you are done with managing your to-do list and want to close the program. You can either click on the close button or use the exit command provided in CommanDo. This command closes the application, and all the changes to your to-do list are saved.

Command Format:
>> exit

Troubleshooting

Frequently Asked Questions

1. Double-clicking on commando.jar doesn't open up CommanDo or gives an error.

You'll need to install the latest version of Java. Refer to the installation guide.

On Windows, if you already have the latest verison of Java installed, you might need to right-click the file, click on the option Open with, and choose Java.

2. How do I save my to-do list after modifying it?

Your save file is immediately updated after every change. There is no need to save manually.

3. Is sharing across devices supported?

CommanDo doesn't directly support syncing of the to-do list across devices. Instead, use the export command to generate a save data file, transfer the file to another device, and use the import command on the 2nd device to import your to-do list from that save file. Alternatively, use a cloud-syncing service (e.g. Dropbox) and the store command to sync the to-do list automatically by setting the save location to the same file on both devices.

4. I have some Events or Tasks that are not appearing!

CommanDo automatically hides Events that are already over and Tasks that are already marked done, to ensure that your to-do list is kept clean. To see these to-dos, use the recall or list commands.

5. I keep forgetting how to use certain commands.

The help command can be used to quickly summon this guide or a relevant section of this guide when you need it. Alternatively, you can just try typing a random command - if it is invalid, CommanDo will display the correct command format for that command in the command feedback box just below the command input.

6. What date & time formats can I use in my commands?

CommanDo supports a wide variety of date and time formats, backed by the date parser library Natty. A valid datetime contains a valid date, a valid time, or a valid date and time. A sample of the accepted date & time formats are shown below:

Valid Dates
With Slashes With Month Word Presets Relative Dates
10/2/2016 (DD/MM/YYYY) January 2016 today coming fri
10/2/16 (DD/MM/YY) 11 Oct 2016 tomorrow/tmr last week/month/year
2/3 (DD/MM) 10 feb yesterday next Wednesday
3rd Apr this feb
Sept 29 x days/weeks/months later/ago
Valid Times
24 hour notation Using AM/PM Presets
19:00 (hh:mm) 11:59pm morning (0800h)
0932h (hhmm)h 9am afternoon (1200h)
1.30am evening (1900h)
night (2100h)
midnight (0000h)

Cheatsheet

Command Command Format
Add Event
>> add <description> from <start_datetime> to <end_datetime> [daily/weekly/monthly/yearly] [#<tag>...]
Add Task
>> add <description> [by <due_datetime>] [#<tag>...]
Clear To-Do List
>> clear
Delete To-Dos
>> delete <index>...
Delete Time Constraint of To-Dos
>> delete <index>... time
Delete Recurrence of Events
>> delete <index>... recurrence
Delete Tags of To-Dos
>> delete <index>... tag
Edit Event
>> edit <index> [<description>] [from <start_datetime> to <end_datetime> [daily/weekly/monthly/yearly]] [#<tag>...]
Edit Task
>> edit <index> [<description>] [by <due_datetime>] [#<tag>...]
Exit
>> exit
Export
>> export <file_path> [override]
Find To-Dos
>> find [<keyword>...]  [#<tag>...]
List To-Dos
>> list [from <start_datetime> to <end_datetime>]
Finish To-Dos
>> finish <index>...
Help
>> help [<command_word>]
Import
>> import <file_path>
Recall Past To-Dos
>> recall [<keyword>...]  [#<tag>...]
Redo
>> redo
Store at File Path
>> store <file_path> [override]
Undo
>> undo
Unfinish To-Do
>> unfinish <index>...
Legend
  • <> denotes a field to fill in
  • [] denotes that the fields within it are optional
  • / separates alternatives to a keyword
  • ... denotes that the preceding field can be repeated (i.e. able to have multiple values)