Support for date literals
[darcs-mirror-arbtt.git] / categorize.cfg
1 -- This defines some aliases, to make the reports look nicer:
2 aliases (
3         "sun-awt-X11-XFramePeer"  -> "java",
4         "sun-awt-X11-XDialogPeer" -> "java",
5         "sun-awt-X11-XWindowPeer" -> "java",
6         "gramps.py"               -> "gramps",
7         "___nforschung"           -> "ahnenforschung",
8         "Pidgin"                  -> "pidgin"
9         )
10
11 -- A rule that probably everybody wants. Being inactive for over a minute
12 -- causes this sample to be ignored by default.
13 $idle > 60 ==> tag inactive,
14
15 -- A rule that matches on a list of strings
16 current window $program == ["Navigator","galeon"] ==> tag Web,
17
18 current window $program == "sun-awt-X11-XFramePeer" &&
19 current window $title == "I3P"
20   ==> tag Program:I3P,
21
22 current window $program == "sun-awt-X11-XDialogPeer" &&
23 current window $title == " " &&
24 any window $title == "I3P"
25   ==> tag Program:I3P,
26
27 -- Simple rule that just tags the current program
28 tag Program:$current.program,
29
30 -- I'd like to know what evolution folders I'm working in. But when sending a
31 -- mail, the window title only contains the (not very helpful) subject. So I do
32 -- not tag necessarily by the active window title, but the title that contains
33 -- the folder
34 current window $program == "evolution" &&
35 any window ($program == "evolution" && $title =~ /^(.*) \([0-9]+/)
36   ==> tag Evo-Folder:$1,
37
38 -- A general rule that works well with gvim and gnome-terminal and tells me
39 -- what project I'm currently working on
40 current window $title =~ m!(?:~|home/jojo)/projekte/(?:programming/(?:haskell/)?)?([^/)]*)!
41   ==> tag Project:$1,
42 current window $title =~ m!(?:~|home/jojo)/debian!
43   ==> tag Project:Debian,
44
45 -- This was a frequently looked-at pdf-File
46 current window $title =~ m!output.pdf! &&
47 any window ($title =~ /nforschung/)
48   ==> tag Project:ahnenforschung,
49
50
51 -- My diploma thesis is in a different directory
52 current window $title =~ [ m!(?:~|home/jojo)/dokumente/Uni/DA!
53                          , m!Diplomarbeit.pdf!
54                          , m!LoopSubgroupPaper.pdf! ]
55   ==> tag Project:DA,
56
57 current window $title =~ m!TDM!
58   ==> tag Project:TDM,
59
60 ( $date >= 2010-08-01 &&
61   $date <= 2010-12-01 &&
62   ( current window $program == "sun-awt-X11-XFramePeer" &&
63       current window $title == "I3P" ||
64     current window $program == "sun-awt-X11-XDialogPeer" &&
65       current window $title == " " &&
66       any window $title == "I3P" ||
67     current window $title =~ m!(?:~|home/jojo)/dokumente/Uni/SA! ||
68     current window $title =~ m!Isabelle200! ||
69     current window $title =~ m!isar-ref.pdf! ||
70     current window $title =~ m!document.pdf! ||
71     current window $title =~ m!outline.pdf! ||
72     current window $title =~ m!Studienarbeit.pdf! )
73 ) ==> tag Project:SA,
74
75
76 -- Out of curiosity: what percentage of my time am I actually coding Haskell?
77 current window ($program == "gvim" && $title =~ /^[^ ]+\.hs \(/ )
78   ==> tag Editing-Haskell,
79
80 {-
81 -- Example of time-related rules. I do not use these myself.
82
83 -- To be able to match on the time of day, I introduce tags for that as well.
84 -- $time evaluates to local time.
85 $time >=  2:00 && $time <  8:00 ==> tag time-of-day:night,
86 $time >=  8:00 && $time < 12:00 ==> tag time-of-day:morning,
87 $time >= 12:00 && $time < 14:00 ==> tag time-of-day:lunchtime,
88 $time >= 14:00 && $time < 18:00 ==> tag time-of-day:afternoon,
89 $time >= 18:00 && $time < 22:00 ==> tag time-of-day:evening,
90 $time >= 22:00 || $time <  2:00 ==> tag time-of-day:late-evening,
91
92 -- This tag always refers to the last 24h
93 $sampleage <= 24:00 ==> tag last-day,
94
95 -- To categorize by calendar periods (months, weeks, or arbitrary periods),
96 -- I use $date variable, and some auxiliary functions. All these functions
97 -- evaluate dates in local time. Set TZ environment variable if you need
98 -- statistics in a different time zone.
99
100 -- You can compare dates:
101 $date >= 2001-01-01 ==> tag this_century,
102 -- You have to write them in YYYY-MM-DD format, else they will not be recognized. 
103
104 -- “format $date” produces a string with the date in ISO 8601 format
105 -- (YYYY-MM-DD), it may be compared with strings. For example, to match
106 -- everything on and after a particular date I can use
107 format $date =~ ".*-03-19"  ==> tag period:on_a_special_day,
108 -- but note that this is a rather expensive operation and will slow down your
109 -- data processing considerably.
110
111 -- “day of month $date” gives the day of month (1..31),
112 -- “day of week $date” gives a sequence number of the day of week
113 -- (1..7, Monday is 1):
114 (day of month $date == 13) && (day of week $date == 5) ==> tag day:friday_13,
115
116 -- “month $date” gives a month number (1..12), “year $date” gives a year:
117 month $date == 1 ==> tag month:January,
118 month $date == 2 ==> tag month:February,
119 year $date == 2010 ==> tag year:2010,
120 -}