todoist-shortcuts is a browser extension or greasemonkey script which adds a bunch of keyboard shortcuts to Todoist. Along with this repository, it is also available from the following places:
These keyboard shortcuts are directly inspired by the shortcuts used for GMail, which, in turn were inspired by vim-like keyboard interaction. I highly recommend enabling the advanced keyboard shortcuts if you use GMail.
So, if the choices of keypresses seem strange, stick with it! Many of the keypresses used here can also be used in GMail or even vim (or, better yet, evil-mode ;) ).
keys | action |
---|---|
q |
Add task |
a |
Add new task at the bottom of the list |
A |
Add new task at the top of the list |
See the "Task Quick Add shortcuts" section of todoist's keyboard shortcuts documentation for information about shorthands to use when adding tasks. "Adding or editing tasks" is also a good section to read, which includes keyboard shortcuts not described in this document.
keys | action |
---|---|
j or down |
move cursor down |
k or up |
move cursor up |
h or left |
collapse nested at cursor |
l or right |
expand nested at cursor |
^ |
move cursor to first task |
$ |
move cursor to last task |
{ |
move cursor up to first section task |
} |
move cursor down to next section |
/ or f |
focus search input |
g |
enter section navigation mode |
G |
navigate to task's project, or select in agenda if already on project |
` |
select the next top section (including favorites) |
~ |
select the previous top section (including favorites) |
In "section navigation mode", the different selections in the left
pane are annotated with the keys to press to navigate to that
section. Sometimes the sidebar can have more than a screenful of
content. While in this mode, you can scroll the left pane down and up
with space
and shift+space
. For smaller scrolling jumps, you can
also use up arrow and down arrow.
When projects have sub-projects, they are automatically expanded when the project is selected from the list. To collapse the sub-projects, just use navigation mode to select the same project again.
keys | action |
---|---|
enter |
edit task at cursor |
o |
add task after cursor |
shift+o |
add task before cursor |
c |
open comments for cursor task |
shift+j or shift+down |
move task at cursor downwards |
shift+k or shift+up |
move task at cursor upwards |
shift+l or shift+left |
dedent task at cursor |
shift+h or shift+right |
indent task at cursor |
shift+c |
clicks toggl-button (time tracking integration extension) |
Note that there are some known bugs related to task motion - see #27 and #29.
keys | action |
---|---|
x |
add task at cursor to selection |
* a |
select all tasks |
* n or escape |
clear selection |
* 1 |
add all priority 1 tasks to selection |
* 2 |
add all priority 2 tasks to selection |
* 3 |
add all priority 3 tasks to selection |
* 4 or * 0 |
add all priority 4 tasks to selection |
* h |
collapses all tasks |
* l |
expands all tasks |
If none are selected, then these will apply to the cursor instead.
keys | action |
---|---|
t |
schedule |
T |
schedule by editing text |
d |
done: mark task as complete |
e |
archive |
# |
delete |
& |
duplicate |
v |
move to project via search prompt |
@ |
add label |
y |
remove label |
1 |
set priority to 1 |
2 |
set priority to 2 |
3 |
set priority to 3 |
4 or 0 |
set priority to 4 |
Archiving a task via e
is fairly similar to marking it complete via d
. Here
are the differences:
-
If the task is a child task, if you "Complete" it it will be checked and greyed out (and will remain in the list under the uncompleted parent task until the parent task is completed). If you "Archive" the child task it will be checked and then removed from view.
-
If the task is a Recurring Task (e.g. every day) and you "Complete Task" it will be scheduled for the next date of recurrence. If you "Archive Task" it will be completed and not recur again.
When scheduling is opened via t
, the following keybindings will apply:
keys | date |
---|---|
c |
today (mnemonic is "current day") |
t |
tomorrow |
w |
next week |
s |
suggested date (1 task), smart scheduler (many tasks), or postpone (recurring task) |
r |
remove |
backspace or delete |
clear and focus text date entry |
enter |
focus text date entry without clearing it |
escape |
exit scheduling |
The "Smart Scheduler" is opened by pressing s
when scheduling
multiple items. Currently there are only two keybindings for the smart
scheduler: enter
to apply the choices, and escape
to cancel.
When viewing the inbox or a project, the following keybindings can be used to sort the tasks:
keys | sorted by |
---|---|
s |
Sort by date |
p |
Sort by priority |
r |
Sort by assignee |
n |
Sort by name |
keys | action |
---|---|
* t |
enter bulk reschedule mode |
v or alt+v |
switch to bulk move mode (see below) |
escape |
exit bulk reschedule mode |
Once bulk reschedule mode is entered, it will repeatedly bring up the reschedule dialog until there are no more tasks after the cursor. All of the normal cursor navigation keys can be used while in this mode.
keys | action |
---|---|
* v |
enter bulk move mode |
alt+t |
switch to bulk reschedule mode (see above) |
escape |
exit bulk move mode |
Once bulk move mode is entered, it will repeatedly bring up the move-to-project
dialog until there are no more tasks after the cursor. By holding down alt
,
you can use the normal cursor navigation keys in this mode.
keys | action |
---|---|
u or ctrl+z |
undo |
f or / |
open search |
shift+enter |
clicks first link in the task the cursor is on |
ctrl+s |
manually synchronize state with server |
Note that undo only works when the "UNDO" button is visible at the bottom of the screen. Some actions are not undo-able, such as deletion or archiving multiple tasks
Ideally, there would be a UI for customizing keyboard shortcuts. However, it seems like this would take a substantial amount of development effort (PR contributions appreciated!). For now, you can do the following to customize the keyboard shortcuts in Chrome:
-
Clone this repository (run
git clone https://github.com/mgsloan/todoist-shortcuts
) -
Go to
chrome://extensions
in the url bar, and switch from the official version of todoist-shortcuts to a local version.-
Disable the official version of todoist-shortcuts by unchecking "Enabled".
-
Click the "Developer mode" box in the top right if it is not yet checked.
-
Click the "Load unpacked extension..." button. In the directory selecter navigate to the folder you cloned todoist-shortcuts to, and point it at the
src
sub-directory.
-
-
Edit
src/todoist-shortcuts.js
in a text editor.-
You will probably just want to edit the definition of KEY_BINDINGS near the top.
-
To disable a keybinding, put
//
in front of it. -
The functions in the section marked
Actions
are intended to be bound directly to keys. You can also combine multiple actions via use of thesequence
andifThenElse
action combiners. -
Multiple key sequences can be bound to the same action by using a list of key sequences (like
['j', 'down']
) instead of a single string for it. The docs for mousetrap may be helpful in figuring out how to express key sequences.
-
-
Use
ctrl+r
onchrome://extensions
. This causes the extension to be reloaded from your local files. -
If you reload Todoist, you will now be using your modified version of the extension.
I'm sure there is a similar mechanism for Firefox, but I do not use it for developing the extension, so not sure of the details.
One thing to note is that you will no longer receive automated updates. To update your locally modified extension, do the following:
-
git stash
to store your changes. -
git pull
to fetch the most recent changes in this repository. -
git stash apply
to bring back your changes. This may cause merge conflicts.
See the git documentation. A miscellaneous aside is that I highly recommend git from the bottom up as a guide to understanding git's data model.
todoist-shortcuts
in electron application
This repository provides browser extentions for both Chrome and Firefox, and
therefore augments the browser's web client of Todoist. If you wanted the
todoist-shortcuts
in the standalone Todoist desktop application it is not as
easy/straight-forward. The following article and associated repository outline
how you can achieve such a solution:
- https://kevinjalbert.com/todoist-with-keyboard-navigation-via-nativefier/
- https://github.com/kevinjalbert/todoist-shortcuts-nativefier
An alternative approach, suggested here, is to use google chrome's "open as window" functionality.
Contributions are appreciated. See development.md for more information about development.
Much of the work on this has been kindly supported by Amir Salihefendic of Doist company. They're awesome!
In response to a "Need a way of buying beer" issue, I've created a "Buy Me a Coffee" account. If you feel the urge to send me a few dollars in support of my work on this project, then feel free to do so. If not, that's fine too, I hope you enjoy using todoist-shortcuts :)