Find file
Fetching contributors…
Cannot retrieve contributors at this time
188 lines (163 sloc) 9.32 KB

About shouldDo

shouldDo is an Org-Mode ( ) “spreadsheet” to help you focus on your ShouldDOs, activities you should be doing to achieve results/outcomes/impact. (shouldDo compliments utilizing Org-Mode to manage your ToDOs.)

shouldDo tracks your weekly progress as a “score” (where perfect equals 100) as you perform these activities.

This version of shouldDo has been tested in GNU Emacs version 23.3.1 with Org-Mode version 7.6 and with Org-Mode version 7.8.

  • shouldDo is composed of three files
    • includes four Org-Mode tables (and formulas) for:
      • entering your progress and showing your current-week score (‘activities log’)
      • viewing your score statistics (‘scores’)
      • viewing your score history (‘view history’)
      • editing your activities (‘edit activities’)
    • is a Python script that moves your past week’s score to the ‘view history’ table and resets the ‘activities log’ table.
    • is this file.


Setup and use

1.) Enter your ShouldDO activities in the Org-Mode file

  • In the table under ‘edit activities’ add your ShouldDo activities; for each activity (up to 10), enter an activity name, weekly goal quantity, unit of measurement for the weekly goal, and a weight (importance) value.
  • The total weight for all activities must equal 100 (or whatever number you wish to be considered a perfect score).
  • If you have more than 10 activities, you are not picking the right ones.

Updating activities

  • While your activities should remain fairly static for a long time, you can update your activities as needed for a new week.
    • For example, for some people, this type of activity works well:
      | ! | id | activity name | weekly goal | units | weight |
      |   |  1 | school work   |          20 | hrs   |     25 |
    • For other folks, they may want to have an activity such as this in the beginning of a school semester:
      | ! | id | activity name    | weekly goal | units | weight |
      |   |  1 | read course text |         200 | pages |     25 |
    • and later change it to this:
      | ! | id | activity name                 | weekly goal | units | weight |
      |   |  1 | research & write course paper |          20 | hrs   |     25 |

2.) Enter file location settings in the SETTINGS section of the Python script

  • Set the location of your file and the location of a backup directory, e.g.:
    shouldDoFile = '/home/you/'
    shouldDoBakupDir = '/home/you/shouldDoBakupDir'
  • A trailing slash for shouldDoBakupDir is optional

3.) Add the Python script ‘’ to your crontab, to run late Sunday night or early Monday morning.

(You could, of course, also run it manually.)

4.) Whenever you open your file, after you edit your activities, or when you want to calculate your latest score, execute ‘org-table-iterate-buffer-tables’ – three different ways to do this:

5.) Daily, log your progress toward achieving your ShouldDo activities under the day of the week headings in the ‘activities log’ table

6.) Be sure to execute ‘org-table-iterate-buffer-tables’ (see step 4 above) and save your file before your weekly cron job runs


  • Columns automatically realign when you hit TAB (with your cursor in a table).
  • Rows that start with ‘#’ automatically (re)calculate when you hit TAB.
  • Fields not intended to be edited will automatically “correct” when you hit TAB.
  • If you hose up a table, formula, etc. – just copy/paste it from a fresh copy of (from ).
  • An “Args out of range” error will occur until you have a history of 52 (or more) weeks, it is safe to ignore this error.
  • Table formulas are long – but will not get in your way if you have truncate-lines on (or visual-line-mode off).
    • I often toggle visual-line-mode, with the following in my .emacs file, its as easy as pressing F7
      ;; easy word wrap
      (global-set-key (kbd "<f7>") 'visual-line-mode)
      (global-set-key (kbd "C-<f7>") 'toggle-truncate-lines)


  • v1.7.0 to v1.7.1
    • There is no need to upgrade your file (see changelog below for details)
    • Replace with; be sure to set the file paths in SETTINGS
  • v1.* to v1.7.0
    • To upgrade from a prior version of shouldDO, just replace the tables under ‘view history’ and ‘edit activities’ in this file with the same tables from your prior version file.


  • If you are not using it, you can remove the ‘update tables’ section in the file.
  • You can relocate the tables within the file without affecting the functionality.
  • To change the start of week to Sunday, instead of Monday, change two portions of the formula for the ‘activities log’ table
    • day of the week headers, i.e,
      change this:
      to this:
    • week (of the year) number, i.e.,
      change this:
      ::@12$5='(print(format-time-string "%W"))
      to this:
      ::@12$5='(print(format-time-string "%U"))
  • If you make changes to the tables, be sure to address these dependencies:
    • The ‘’ script is dependent on a specific format for the ‘activities log’ table.
    • The ‘’ script is dependent on a specific format for the ‘view history’ table.
    • The ‘activities log’ table reads data form the ‘edit activities’ table.
    • The ‘scores’ table reads data from the ‘view history’ table.
  • For information on Org-Mode’s table editor’s spreadsheet-like capabilities, see:

Implementation notes

  • I like having this type of tool in Emacs, though I intend to (eventually) create an HTML/JavaScript implementation usable within browsers (desktop and mobile).
  • I experimented with implementing using Org-Mode’s columnview (with calculations performed in a table captured from columnview), while this is plausible, I went with Org-Mode tables as a matter of preference.


  • Create an HTML/JavaScript implementation, making this tool useful for a much wider audience.
  • This might make for a cool Emacs major mode.


** v1.7.1
    • Moved ‘about’ and ‘setup’ sections from to
    • Removed example daily entries from ‘activities log’
    • This Python script replaces the shell script (
    • Successful completion of the script will not produce output ( echo’ed file locations)
    • Replaced README
    • Edited ‘about’ and ‘setup’
    • Added changelog