Why Omnifocus?
Graduate student life is not easy. Many courses, projects, school-related or -nonrelated stuff need to plan and organize. Some of them have clear goals and exact due dates, but some are not.
I tried to use a calendar-based To-Do app to plan my day in the past year. It worked well, in the sense of reminding me doing somethings, but not effeciently as I expected, because of the following reasons:
- too much sub-tasks: even preparation of a presentation can be splitted into, at least, gathering information, writing outline, formatting styles, putting figures, writing scratch, rehearsal and etc…
- too much deadlines: If I put everything into a calendar-based To-Do app, I got very upset because of tooooo many daily dues and reminders.
- Lack of systemaic view: it appears to be poorly organized even if I use the List function in To-Do apps…
I put my own opinions toward the GTD methods as in the table:
App | Calendar | Sorted3 | Omnifocus |
---|---|---|---|
Scenario | Preplanned classes, meetings, seminars | daily tasks (exercies), personal reminders | Research projects, TAing lecture, Academic conferences |
Reminder | No! Merge into Sorted app | Yes | No |
Level | Events with determined time and duration | Sudden idea, reminders | Project tasks and the split up |
Due
I set due only for project with a clear due, i.e., class assignments, meeting preprations. I usde to set due for most actions, like something I think I can complete today, but this way is not working very well to myself right now.
Thankfully the new Omnifocus supports tag
functions. It allows me to create my schedule system based on tag
s, not due, which will be presented in the next part of this blog.
Tags
…
will be updated soon
Perpectives
…
will be updated soon
Mail drop
…
will be updated soon
My Omnifocus Automation Scripts
Here are some useful Omnifocus automation scripts. Some of them are written by myself and some are downloaded from the Internet. I am trying to trace back to the sources of the scripts and if I did not put the correct authors and you know who is contributing to the specific script, please let me know!
- To better find the script in the automation script list, I add emoji to the scripts’ label.
🚩 Complete & Wait
This Complete & Wait
script is extremely helpful when you are cooprating with others. It, together with a Perspective including the wait
tag, could bring you an overview of how many tasks are pending to other’s reply.
Applicable scenario:
- After sending emails to others
- After assigning works to others
- After processing a delivery return, or initaing a delivery to someone
- …
If you want to custimize this script, please change **Line 20 **: dupTasks[0].addTag( tagNamed("wait"))
, with tagNamed("Your Waiting Tag")
.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*{
"author": "Walker",
"targets": ["omnifocus"],
"type": "action",
"identifier": "com.jappker.omnifocus.complete-and-await-reply",
"version": "1.0",
"description": "Mark the currently selected task as complete and add a new task to await the reply.",
"label": "🚩Complete & Wait",
"mediumLabel": "Complete & Wait",
"paletteLabel": "Complete & Wait",
}*/
(() => {
let action = new PlugIn.Action(function(selection) {
let duplicatedTasks = new Array()
selection.tasks.forEach(function(task){
insertionLocation = task.parent
if(insertionLocation === null){insertionLocation = inbox.ending}
dupTasks = duplicateTasks([task], insertionLocation)
dupTasks[0].name = "Waiting for: " + task.name;
dupTasks[0].addTag( tagNamed("wait"));
duplicatedTasks.push(dupTasks[0].id.primaryKey);
task.markComplete();
});
idStr = duplicatedTasks.join(",")
URL.fromString("omnifocus:///task/" + idStr).open()
});
action.validate = function(selection){
return (selection.tasks.length >= 1)
};
return action;
})();
🔢 Numbering tasks
This script is useful when you want to put some actions in sequences aside from the ‘A-Z’ order or creation time order. Applicable scenario:
- Design presentations (numbers = ppt pages)
- Review exams
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*{
"author": "Author Name",
"targets": ["omnifocus"],
"type": "action",
"identifier": "com.mycompany.numbering tasks",
"version": "0.1",
"description": "A plug-in that...",
"label": "🔢Numbering tasks",
"mediumLabel": "numbering tasks",
"paletteLabel": "numbering tasks",
}*/
(() => {
var action = new PlugIn.Action(function(selection) {
i = 0;
selection.tasks.forEach(function(task){
i = i + 1;
name = task.name;
new_name = i + " - " + name;
// console.log("name:", new_name);
task.name = new_name;
});
});
return action;
})();
📩 Task from email
This script requires that you use Mail Drop function frequenctly. Applicable scenario:
- Forward seminars, meetings …
- Forward tasks assigned by others
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*{
"author": "Author Name",
"targets": ["omnifocus"],
"type": "action",
"identifier": "com.mycompany.Task from email",
"version": "0.1",
"description": "A plug-in that...",
"label": "📩Task from email",
"mediumLabel": "Task from email",
"paletteLabel": "Task from email",
}*/
(() => {
var action = new PlugIn.Action(function(selection) {
// Add code to run when the action is invoked
// console.log("Invoked with selection", selection);
selection.tasks.forEach(function(task){
taskname = task.name;
if (taskname.includes('Fwd:')){
// console.log(task.name);
newname = taskname.replace('Fwd: ', '');
// console.log(newname);
task.name = newname;
task.addTag( tagNamed("email"));
};
});
});
return action;
})();
🔗 Open Note URL
You cannot imagine how helpful it is during the COVID, especially combining the Mail Drop function and the 📩Task from email
script to deal with emails containing zoom links!!!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*{
"type": "action",
"targets": ["omnifocus"],
"author": "Otto Automator",
"identifier": "com.omni-automation.call-note-url",
"version": "1.5",
"description": "This action will open the URL string that is the value of the note of the selected action.",
"label": "🔗Open Note URL",
"shortLabel": "Open Note URL"
}*/
(() => {
var action = new PlugIn.Action(function(selection, sender){
var note = (selection.projects.length === 1 ? selection.projects[0].task.note : selection.tasks[0].note);
if (note && note.includes("://")) {
var urlStr = note.match(/[^<\s][^\s]+\/\/[^\s>]+/)[0]
var url = URL.fromString(urlStr)
if(url){
url.open()
} else {
console.error("ERROR: \"" + urlStr + "\" is not a valid URL.")
}
}
});
action.validate = function(selection, sender){
// selection options: tasks, projects, folders, tags
return (selection.projects.length === 1 || selection.tasks.length === 1)
};
return action;
})();
🗞 Weekly report
This script is available here: https://github.com/lynnmatrix/omnifocus-weekly-report. It helps generate a Markdown
format report, containing the actions you completed during the past week, and the actions you are expecting to finish in the future week.
Here is a example report
The direct output shown in the mailbox:
#### Seminars & Meetings
##### Group Meeting
- [x] Rehearse @ Mon prepare -- @this-week @Zoom
- [x] Rehearse @ Wed prepare -- @this-week @Zoom
- [x] Rehearse again, time @Thursday @Zoom @today
##### --Department-- group meeting
- [x] --Department-- group meeting (Weds., March 10)
@today
- [x] One-slide research update March-10 @today
- [x] --Department-- Record Reading tomorrow, 3/12, 2:30pm @email
#### --Example Class--
- [x] Mid-term exam (take-home exam, due Friday) @today
- [ ] Finish the mid-term exam questions @today => 3/12/2021, 5:00:00 PM
- [x] Open a document to sort the questions properly @today
- [x] --Example Class-- Midterm question 1 @today
- [x] --Example Class-- Midterm question 2 @today
- [x] --Example Class-- Midterm question 3 @today
- [x] Review --Example Class-- midterm content - Gather all the equations and concepts in the ppts @today @to-write
- [x] 1 - Overview @today @to-write
- [x] 2 - Steady heat transfer @today @to-write
- [x] 3 - Heat diffusion @today @to-write
- [x] 4 - Subsidence and dike cooling @today @to-write
- [x] 5 - Stress pressure and isostasy @today @to-write
- [x] 6 - Stress, pressure and elasticity @today @to-write
- [x] 7 - Strain, flexure introduction @today @to-write
- [x] 8 - Lithospheric flexure @today @to-write
- [x] 9 - Gravity plate flexure @today @to-write
- [x] 10 - Yielding and plate flexure @today @to-write
- [x] 11 - Slow viscous channel flow @today @to-write
- [x] 12 - Time dependent channel flow @today @to-write
- [x] 13 - 2D flow, glacial rebound (GIA) @today @to-write
- [x] 14 - Folding, Rayleigh-Taylor instability @today @to-write
- [x] Homework 6 @this-week @to-write
- [x] Review and see if hw 6 is correct @this-week @to-write
- [x] Submit hw 6 to Roger @this-week @to-write
- [x] HW6 Problem 1 @this-week @to-write
- [x] HW6 Problem 2 @this-week @to-write
- [x] HW6 Problem 3 @this-week @to-write
Put this into any Markdown
Editor and a clear report of what you’ve done will be displayed
Example-report Seminars & Meetings
Example-report Group Meeting
- Rehearse @ Mon prepare – @this-week @Zoom
- Rehearse @ Wed prepare – @this-week @Zoom
- Rehearse again, time @Thursday @Zoom @today
Example-report –Department– group meeting
- –Department– group meeting (Weds., March 10)
@today
- One-slide research update March-10 @today
- –Department– Record Reading tomorrow, 3/12, 2:30pm @email
Example-report –Example Class–
- Mid-term exam (take-home exam, due Friday) @today
- Finish the mid-term exam questions @today => 3/12/2021, 5:00:00 PM
- Open a document to sort the questions properly @today
- –Example Class– Midterm question 1 @today
- –Example Class– Midterm question 2 @today
- –Example Class– Midterm question 3 @today
- Review –Example Class– midterm content - Gather all the equations and concepts in the ppts @today @to-write
- 1 - Overview @today @to-write
- 2 - Steady heat transfer @today @to-write
- 3 - Heat diffusion @today @to-write
- 4 - Subsidence and dike cooling @today @to-write
- 5 - Stress pressure and isostasy @today @to-write
- 6 - Stress, pressure and elasticity @today @to-write
- 7 - Strain, flexure introduction @today @to-write
- 8 - Lithospheric flexure @today @to-write
- 9 - Gravity plate flexure @today @to-write
- 10 - Yielding and plate flexure @today @to-write
- 11 - Slow viscous channel flow @today @to-write
- 12 - Time dependent channel flow @today @to-write
- 13 - 2D flow, glacial rebound (GIA) @today @to-write
- 14 - Folding, Rayleigh-Taylor instability @today @to-write
- Finish the mid-term exam questions @today => 3/12/2021, 5:00:00 PM
- Homework 6 @this-week @to-write
- Review and see if hw 6 is correct @this-week @to-write
- Submit hw 6 to — @this-week @to-write
- HW6 Problem 1 @this-week @to-write
- HW6 Problem 2 @this-week @to-write
- HW6 Problem 3 @this-week @to-write