New GTaskD Keyboard Shortcuts to Help You Get Things Done Faster with Google Tasks

As you might expect, as I’ve been building GTaskD, I’ve been using it (and Canvas before that) to keep track of all my tasks and ideas. That’s led to a pretty huge task list in Google Tasks, and so the update I pushed to production last week has some upgrades to help you manage lists with hundreds or thousands of tasks. Here’s how I use it, which is hopefully helpful to some of you.

If I have a brainstorm about something, I’ll quickly write down some notes, but don’t have time to wait for the giant list of tasks to load. For that situation I created new tasks mode so you can quickly open GTaskD and write down your ideas ASAP, even from your phone. I actually added this in the last update a few weeks back, but it was one of the features I didn’t mention in the post at the time.

On my Android phone’s home screen, I’ve got separate links to my most-commonly used lists in both “new tasks” mode and “browser load all” modes. That way if I need to quickly add an idea, I can use the former, or use the latter if I need to edit existing tasks.

Later, when I go back to the full list, I’ve then got the possible issue that I want to move those new ideas to somewhere else in the list, near other ideas they’re related to, or in the order I want to implement them. So for now I use the browser search feature to find the related tasks. At that point I know where the two or more tasks are, but in a long list it’s hard to bring them together. Enter some new keyboard shortcuts.

I use the search feature of the browser (Ctrl+f) to find the other related task and then make it active, either by hitting Esc from the browser find box or by clicking the task. At that point I can use the new Ctrl+Alt+Left/Right keyboard shortcuts to go back and forth through the list of recently active tasks. This lets you move either of the related tasks around, and easily get back and forth between them.

Take a look at the full list of new keyboard shortcuts, but here are a few of my favorites to get you started:

  • Move to next/previous sibling (no more making a blank task to move around quickly with Ctrl+Up/Down)
    • Ctrl+Alt+Down/Up
  • Move backward/forward through recently active tasks
    • Ctrl+Alt+Left/Right
  • Collapse/Expand all tasks’ subtasks
    • Ctrl+Alt+Shift+Up/Down
  • Make the current task the first child of it’s next sibling
    • Alt+Shift+Right

I said “for now” earlier about using the browser search feature, and that’s because we’re not too far away from being able to search Google Tasks using GTaskD Pro. My next major project is going to be building my own API so we can all keep our multiple levels of subtasks before Google’s subtask-magendon coming on August 30. Search is going to be one of the core features of GTaskD Pro, and while I can’t afford to make it free, I’m going to keep it as cheap as possible.

Autoupdate, Dark Mode, and More!

Sorry it’s been about two months since I posted and a month and a half since I pushed new code to the production server—life has been crazy. After our non-profit’s 400-band music festival at the end of April, I was getting close to finishing the code to autoupdate tasks with changes from other apps. Before I could, though, my wife and I welcomed our daughter (our first) into the world in mid-May, a little earlier than expected.

Things have been really good, if a little sleep-deprived, and I have even been finding time to work on GTaskD. Now that I’m a parent, I have never found it more helpful to have a GTD system plus the Pomodoro technique to get things done when I have only limited stretches of time for Deep Work.

While my wife and I have been figuring out this whole “parent” thing, Google has been figuring out new ways to ruin their formerly-good (though not great) Google Tasks API. One change they made while I was taking some time off: if you uncheck a task, it erases the parent/order/hierarchy info and moves it to the very top of the list. That’s not a feature, Google, it’s a bug. Much of the code I’ve needed to write that’s in this update is making workarounds for some of their recent changes.

I’ll be posting again soon, hopefully this weekend. There are some bug reports I need to submit to Google first, and after I do I’ll post the links and would appreciate your help getting Google’s attention by “starring” them and some other bugs they’ve recently introduced in the API. An example (that thankfully got fixed): did you notice that your tasks stopped showing up on Google Calendar for a few weeks if you added them from GTaskD or any other app? That was a major Google bug they took a couple weeks to fix.

The code I pushed to the server earlier this morning is a massive update to GTaskD, and this is pretty close to the version that would have been my initial release if Google hadn’t so abruptly killed off Canvas earlier this year. Here’s the (incomplete) list of updates and bug fixes in this release:

  • Two updates that, especially together, make GTaskD much easier to use if you have hundreds or thousands of tasks on some lists (like myself). You can have multiple tabs open at the same time, which works well if you have multiple long lists.
    • Autoupdate! No more need to refresh to get tasks added from other apps to show up (only in sort by order mode for now, coming soon for sort by date mode)
      • The default is set to on and 1 minute between updates, but you can turn it off and/or set the time span in the settings
      • This versions works better than the old Canvas interface—instead of reloading the entire list and moving you to the top task each time it gets an update, it just adds the new tasks where they go and let’s you keep typing
      • Note that if the tab isn’t active, it won’t update so it’s not constantly checking the API when you’re not looking at it, but will get updates as soon as you switch back to the GTaskD tab/window
    • Automatic credentials refresh—no need to refresh after you close your laptop
  • Dark mode! Some of you had emailed asking for it, and I wanted it too (mostly for my phone)
    • As with all the user-configurable options, this is saved in the URL
    • If you want to use dark mode on your phone but not your laptop, for instance, just save a shortcut/bookmark with any (or all) options you want to set: https://tasks.gtaskd.com/?uiStyle=dark
  • Major update to how positioning tasks works after Google completely changed the way they position tasks in the API
    • Note that this change to the API means that deleted and cleared tasks no longer have parent/order/hierarchy info, so I had to disable those options in the GTaskD setting for now
    • For those of you that have been around since the very start when I launched in March, you’ll know that this isn’t the first time that I’ve been forced to make downgrades on account of bad decisions the Google Tasks team made with their API
  • Workaround for major new bug in the Google Tasks API (not GTaskD’s code) that moves tasks to the very top of the list when you uncheck them
    • I can force the API to keep them where they are if you uncheck them in GTaskD, but for now it only works in the default “sort by order” mode. If you uncheck them in any other interface/app, though, I can’t know if you or Google’s API made that change, so I have to assume it was you and the task will show up at the very top where the API put it.
    • Warning: For now unchecking tasks in sort by date mode will erase any parent/order/hierarchy information and place the task at the top of the list, but I’m working on a fix for this.
  • Cleaned up the print view
  • A LOT of bug fixes, some of which are mine, but some of which are workarounds for Google’s recent and buggy changes to the API
  • And more…

Thanks for you patience as I wrapped up autoupdate, which was the last major feature missing from the Canvas interface. It was a huge undertaking, and now that it’s working, my next major project is building my own API. At the start it’s going to largely mirror Google’s API (and stay in sync with it), with one major difference being that it will keep support for multiple levels of subtasks, which ends in just under 2 months for the official API.

Side note: this seems relevant to my life right now: https://twitter.com/iamdevloper/status/1134078388295987200?s=09

Hope you like the upgrades! Go give it a try: https://tasks.gtaskd.com/

As always, any donations are always greatly appreciated, and thanks so much to those of you that have donated so far!

Emergency Fix Rolled Out for Google Tasks API Change

As of 2019-03-05, Google changed the way the Google Tasks API returns tasks. Again.

For at least years, and I’m fairly certain ever since they built the API, listing tasks for a given tasklist returned the tasks according to their order in the hierarchy, which of course makes a lot of sense. Starting two weeks ago, listing tasks for a given tasklist returned tasks according to their order in the hierarchy, but sorted by their updated time. It was a relatively minor but annoying change, so I rewrote some code and moved on.

As of sometime last night, the hierarchy is completely ignored and calls to the API simply return the most recently updated tasks, sorted by their updated time. For anyone who cares about the hierarchy of their tasks, this is nonsense.

This change effectively means that the only way to get tasks in the correct order in the hierarchy is to download every single task on the list. When users have only a couple hundred tasks, it’s not a big deal, but when users have thousands of tasks on a list, it is a major problem. It’s extremely inefficient to have to return every single task from the API, especially if you only want to look at the tasks at the top of the list. It simply doesn’t scale well.

I run my entire life using Google Tasks, and with canvas going away, and the new UIs only having one nested level of tasks, I had to build my own solution. Now with this API change, there’s a lot more work to do. I’m working on it, as the organizational system I’ve used for close to a decade is counting on it, and they’re going to have to pry it from my cold, dead hands.