Ah that's a shame, and there was I hoping it would be something simple :(
|
These scripts are really helpful, but I'm having a problem with the Inbox and Context versions—they both show completed/checked items. I can't figure out how to alter the script show it only shows active or uncompleted items.
I'm a really new OF user, so I don't know if it's a setting that I'm missing. Thank you for any help. |
[QUOTE=RobertK;111439]I can't figure out how to alter the script show it only shows active or uncompleted items.[/QUOTE]
You can add the condition [I]and dateCompleted is null[/I] inside a [I]where[/I] clause. Sth like:[INDENT][I]task where inInbox = 1 and dateCompleted is null[/I][/INDENT]or[INDENT][I]task join context c on task.context = c.persistentIdentifier where c.name=\"Library\" and dateCompleted is null[/I][/INDENT] [COLOR="White"]--[/COLOR] |
Thank you so much!
|
Single-Action list
How do I get it to show tasks that are in a certain Single-Action list, project or folder?
|
I haven't built any shortcuts for those – at the moment I'm afraid I'll just have to point you towards [URL="http://forums.omnigroup.com/showpost.php?p=90786&postcount=5"]post 5 in this thread[/URL], and to the documentation for Sqlite3 …
But perhaps others have already shaped up queries for the listings you want ... |
Here is a template for a shell script (for direct Applescript-free use with Geektool) which uses [URL="http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/awk.1.html"]awk[/URL] for formatting, and would enable you to list tasks by [B]project[/B].
This version uses the % wildcard to list any projects with names containing the word "write", together with any uncompleted tasks in those projects. [CODE]#!/bin/sh #OFOC=$(osascript -e 'tell application "Finder" to get id of application file id "OFOC"') OFOC="com.omnigroup.OmniFocus" # For Appstore-purchased variant use (slower) line above instead echo "SAMPLE LISTING:" sqlite3 $HOME/Library/Caches/$OFOC/OmniFocusDatabase2 ' SELECT p.name, c.name, tt.name FROM ((task t left join projectinfo pi on t.containingprojectinfo=pi.pk) tt left join task p on tt.task=p.persistentIdentifier) left join context c on tt.context = c.persistentIdentifier WHERE tt.dateCompleted is null and p.name like "%write%" ORDER BY p.name, c.name' | awk ' BEGIN {FS="\|"; prj=0; ctx=0;} { # Whenever the value of col. 1 changes, # write it out as a PROJECT header, if (prj!=$1) {prj=$1; if (length(prj) < 1) {print "\n(INBOX)"} else {print "\n" toupper(prj)}}; # and whenever the value of col. 2 changes, # write it out as a [CONTEXT] sub-header. if (ctx!=$2) {ctx=$2; if (length(ctx) > 0) {print "[" ctx "]"}}; # Whenever col 3. contains sth other than the project name, # write it out as a • TASK. if (length($3) > 0 && $3!=$1) {print "• " $3} }'[/CODE] [COLOR="White"]--[/COLOR] |
[QUOTE=drongo;112517]How do I get it to show tasks that are in a certain Single-Action list, project or [B]folder[/B]?[/QUOTE]
A shell-script example of filtering by folder. (In this case for projects and tasks in folders with names containing the string "[I]writ[/I]") [CODE]#!/bin/sh #OFOC=$(osascript -e 'tell application "Finder" to get id of application file id "OFOC"') OFOC="com.omnigroup.OmniFocus" # For Appstore-purchased variant use (slower) line above instead echo "SAMPLE LISTING:" sqlite3 $HOME/Library/Caches/$OFOC/OmniFocusDatabase2 ' SELECT f.name, p.name,c.name, tt.name FROM (((task t left join projectinfo pi on t.containingprojectinfo=pi.pk) tt left join task p on tt.task=p.persistentIdentifier) left join context c on tt.context = c.persistentIdentifier) left join folder f on tt.folder=f.persistentIdentifier WHERE tt.dateCompleted is null and f.name like "%writ%" ORDER BY f.name, p.name, c.name'| awk ' BEGIN {FS="\|"; fldr=0; prj=0; ctx=0;} { # Whenever the value of col. 1 changes, # write it out as a FOLDER header, if (fldr!=$1){fldr=$1; if (length(fldr) < 1) {print "\n(No folder)"} else {print "\n[Folder: " toupper(fldr) "]"}}; # and whenever the value of col. 2 changes, # write it out as a PROJECT header. if (prj!=$2){prj=$2; if (length(prj) < 1) {print "\n\t(INBOX)"} else {print "\n\t" toupper(prj)}}; # Whenever the value of col. 3 changes, # write it out as a [CONTEXT] sub-header. if (ctx!=$3){ctx=$3; if (length(ctx) > 0) {print "\t[" ctx "]"}}; # and whenever col 4. contains sth other than the project name, # write it out as a • TASK. if (length($4) > 0 && $4!=$2) {print "\t• " $4} }'[/CODE] |
[QUOTE=drongo;112517]How do I get it to show tasks that are in a certain [B]Single-Action list[/B], project or folder?[/QUOTE]
Single-Action holders with names containing the string "misc" [CODE]#!/bin/sh #OFOC=$(osascript -e 'tell application "Finder" to get id of application file id "OFOC"') OFOC="com.omnigroup.OmniFocus" # For Appstore-purchased variant use (slower) line above instead echo "SAMPLE LISTING:" sqlite3 $HOME/Library/Caches/$OFOC/OmniFocusDatabase2 ' SELECT f.name, p.name, c.name, tt.name FROM (((task t left join projectinfo pi on t.containingprojectinfo=pi.pk) tt left join task p on tt.task=p.persistentIdentifier) left join context c on tt.context = c.persistentIdentifier) left join folder f on tt.folder=f.persistentIdentifier WHERE tt.dateCompleted is null and tt.containsSingletonActions=1 and p.name like "%misc%" ORDER BY p.name, c.name' | awk ' BEGIN {FS="\|"; fld=0; prj=0; ctx=0;} { # Whenever the value of col. 1 changes, # write it out as a FOLDER header, if ( fld!=$1) { fld=$1; if (length( fld) < 1) {print "\n(No folder)"} else {print "\n[Folder: " toupper( fld) "]"}}; # and whenever the value of col. 2 changes, # write it out as a PROJECT header. if (prj!=$2) {prj=$2; if (length(prj) < 1) {print "\n\t(INBOX)"} else {print "\n\t" toupper(prj)}}; # Whenever the value of col. 3 changes, # write it out as a [CONTEXT] sub-header. if (ctx!=$3) {ctx=$3; if (length(ctx) > 0 && length($4) > 0) {print "\t[" ctx "]"}}; # and whenever col 4. contains sth other than the project name, # write it out as a • TASK. if (length($4) > 0 && $4!=$2) {print "\t• " $4} }'[/CODE] |
A shell script version of Due Soon, illustrating an approach to listing imminently due tasks with their due date (+time) and number of remaining days, in NerdTool GeekTool etc
[CODE]#!/bin/sh #OFOC=$(osascript -e 'tell application "Finder" to get id of application file id "OFOC"') OFOC="com.omnigroup.OmniFocus" # For Appstore-purchased variant use (slower) line above instead echo "DUE SOON:" OFQUERY="sqlite3 $HOME/Library/Caches/$OFOC/OmniFocusDatabase2" YEARZERO=$($OFQUERY "SELECT strftime('%s','2001-01-01')") NOW=$($OFQUERY "SELECT (strftime('%s','now', 'localtime'))") DUE="($YEARZERO + tt.effectiveDateDue)" DAY=86400 DAYS_LEFT="round((($DUE-$NOW)*1.0)/$DAY,1)" DAYS_OVERDUE="($NOW-$DUE)/$DAY" $OFQUERY " SELECT f.name, p.name, c.name, tt.name, $DAYS_LEFT, strftime('%m-%d %H:%M',$DUE, 'unixepoch') FROM (((task t left join projectinfo pi on t.containingprojectinfo=pi.pk) tt left join task p on tt.task=p.persistentIdentifier) left join context c on tt.context = c.persistentIdentifier) left join folder f on tt.folder=f.persistentIdentifier WHERE tt.isDueSoon=1 and $DAYS_OVERDUE < 14 " | awk ' BEGIN {FS="\|"; fld=0; prj=0; ctx=0;} { # Whenever the value of col. 1 changes, write it out as a FOLDER header, if ( fld!=$1) { fld=$1; if (length( fld) < 1) {print "\n(No folder)"} else {print "\n[Folder: " toupper( fld) "]"}}; # and whenever the value of col. 2 changes, write it out as a PROJECT header. if (prj!=$2) {prj=$2; if (length(prj) < 1) {print "\n\t(INBOX)"} else {print "\n\t" toupper(prj)}}; # Whenever the value of col. 3 changes, write it out as a [CONTEXT] sub-header. if (ctx!=$3) {ctx=$3; if (length(ctx) > 0) {print "\t[" ctx "]"}}; # and whenever col 4. contains sth other than the project name, write it out as a • TASK. if (length($4) > 0 && $4!=$2) {print "\t• " $4, "("$5" days to "$6")"} }'[/CODE] |
All times are GMT -8. The time now is 07:12 PM. |
Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.