Commit 7ab0abbc9ecc719cc9911799de84f3717703e9f2
1 parent
fceb2ecb
Split timesheet in reusable helper
Showing
5 changed files
with
148 additions
and
139 deletions
timesheet/datetimehelper.sh
0 → 100755
1 | +function tstodate() { | |
2 | + [[ $# -eq 0 ]] && return 1 | |
3 | + date -d @${1} +%Y-%m-%d | |
4 | +} | |
5 | + | |
6 | +function extracttime() { | |
7 | + local OIFS=${IFS} | |
8 | + | |
9 | + if [[ $# -eq 0 || -z $1 ]] | |
10 | + then | |
11 | + TIMEKEY="" | |
12 | + TIME="00:00:00" | |
13 | + else | |
14 | + IFS=: | |
15 | + set -- $=1 | |
16 | + IFS=${OIFS} | |
17 | + TIMEKEY=$1 | |
18 | + TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4) | |
19 | + fi | |
20 | +} | |
21 | + | |
22 | +# vim: set et ts=4 sw=4: | ... | ... |
timesheet/stringhelper.sh
0 → 100755
timesheet/taskhelper.sh
0 → 100755
1 | +#!/bin/zsh | |
2 | + | |
3 | +function tasktimes() { | |
4 | + [[ $# -eq 0 ]] && return 1 | |
5 | + | |
6 | + local KEY=${2:-\\1} | |
7 | + local T | |
8 | + local D='([0-9]{4}-[0-9]{2}-[0-9]{2})' | |
9 | + local N='([0-9]+)' | |
10 | + local EXPR='s/'$D'.*PT('$N'H)?('$N'M)?('$N').*/'${KEY}':\3:\5:\7/;te;d;:e' | |
11 | + | |
12 | + task $1 info | sed -r ${EXPR} | awk -F: ' | |
13 | + { | |
14 | + s = (d[$1][2] + $4) % 60 | |
15 | + _m = int((d[$1][2] + $4) / 60) | |
16 | + m = (d[$1][1] + $3 + _m) % 60 | |
17 | + _h = int((d[$1][1] + $3 + _m) / 60) | |
18 | + d[$1][0] += $2 + _h | |
19 | + d[$1][1] = m | |
20 | + d[$1][2] = s | |
21 | + } | |
22 | + END { | |
23 | + for(i in d) | |
24 | + printf("%s:%d:%d:%d\n", i, d[i][0], d[i][1], d[i][2]) | |
25 | + }' | sort -t: -k1 | |
26 | +} | |
27 | + | |
28 | +function tasktimestotal() { | |
29 | + tasktimes $1 TOTAL | |
30 | +} | |
31 | + | |
32 | +function taskdescription() { | |
33 | + [[ $# -eq 0 ]] && return 1 | |
34 | + task $1 _unique description | |
35 | +} | |
36 | + | |
37 | +function taskproject() { | |
38 | + [[ $# -eq 0 ]] && return 1 | |
39 | + task $1 _unique project | |
40 | +} | |
41 | + | |
42 | +function taskurgency() { | |
43 | + [[ $# -eq 0 ]] && return 1 | |
44 | + task $1 _urgency | cut -d\ -f 4 | |
45 | +} | |
46 | + | |
47 | +function taskentry() { | |
48 | + [[ $# -eq 0 ]] && return 1 | |
49 | + task $1 _unique entry | |
50 | +} | |
51 | + | |
52 | +function taskend() { | |
53 | + [[ $# -eq 0 ]] && return 1 | |
54 | + task $1 _unique end | |
55 | +} | |
56 | + | |
57 | +function taskuuids() { | |
58 | + local UUID | |
59 | + | |
60 | + [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \) | |
61 | + for UUID in $(task $@ _uuid) | |
62 | + do | |
63 | + printf "%05.2f\037%s\037%s\n" \ | |
64 | + "$(taskurgency $UUID)" \ | |
65 | + "$(taskdescription $UUID)" \ | |
66 | + $UUID | |
67 | + done | sort -t$'\037' -k1nr,2 | cut -d$'\037' -f3 | |
68 | +} | |
69 | + | |
70 | +function pendinguuids() { | |
71 | + taskuuids +PENDING $@ | |
72 | +} | |
73 | + | |
74 | +function doneuuids() { | |
75 | + taskuuids +COMPLETED $@ | |
76 | +} | |
77 | + | |
78 | +function blockeduuids() { | |
79 | + taskuuids +BLOCKED $@ | |
80 | +} | |
81 | + | |
82 | +function blockinguuids() { | |
83 | + taskuuids +BLOCKING $@ | |
84 | +} | |
85 | + | |
86 | +function deleteduuids() { | |
87 | + taskuuids +DELETED $@ | |
88 | +} | |
89 | + | |
90 | +# vim: set et ts=4 sw=4: | ... | ... |
1 | 1 | #!/bin/zsh |
2 | 2 | |
3 | -function tasktimes() { | |
4 | - [[ $# -eq 0 ]] && return 1 | |
5 | - | |
6 | - local KEY=${2:-\\1} | |
7 | - local T | |
8 | - local D='([0-9]{4}-[0-9]{2}-[0-9]{2})' | |
9 | - local N='([0-9]+)' | |
10 | - local EXPR='s/'$D'.*PT('$N'H)?('$N'M)?('$N').*/'${KEY}':\3:\5:\7/;te;d;:e' | |
11 | - | |
12 | - task $1 info | sed -r ${EXPR} | awk -F: ' | |
13 | - { | |
14 | - s = (d[$1][2] + $4) % 60 | |
15 | - _m = int((d[$1][2] + $4) / 60) | |
16 | - m = (d[$1][1] + $3 + _m) % 60 | |
17 | - _h = int((d[$1][1] + $3 + _m) / 60) | |
18 | - d[$1][0] += $2 + _h | |
19 | - d[$1][1] = m | |
20 | - d[$1][2] = s | |
21 | - } | |
22 | - END { | |
23 | - for(i in d) | |
24 | - printf("%s:%d:%d:%d\n", i, d[i][0], d[i][1], d[i][2]) | |
25 | - }' | sort -t: -k1 | |
26 | -} | |
27 | - | |
28 | -function tasktimestotal() { | |
29 | - tasktimes $1 TOTAL | |
30 | -} | |
31 | - | |
32 | -function taskdescription() { | |
33 | - [[ $# -eq 0 ]] && return 1 | |
34 | - task $1 _unique description | |
35 | -} | |
36 | - | |
37 | -function taskproject() { | |
38 | - [[ $# -eq 0 ]] && return 1 | |
39 | - task $1 _unique project | |
40 | -} | |
41 | - | |
42 | -function taskurgency() { | |
43 | - [[ $# -eq 0 ]] && return 1 | |
44 | - task $1 _urgency | cut -d\ -f 4 | |
45 | -} | |
46 | - | |
47 | -function taskentry() { | |
48 | - [[ $# -eq 0 ]] && return 1 | |
49 | - task $1 _unique entry | |
50 | -} | |
51 | - | |
52 | -function taskend() { | |
53 | - [[ $# -eq 0 ]] && return 1 | |
54 | - task $1 _unique end | |
55 | -} | |
56 | - | |
57 | -function taskuuids() { | |
58 | - local UUID | |
59 | - | |
60 | - [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \) | |
61 | - for UUID in $(task $@ _uuid) | |
62 | - do | |
63 | - printf "%05.2f\037%s\037%s\n" \ | |
64 | - "$(taskurgency $UUID)" \ | |
65 | - "$(taskdescription $UUID)" \ | |
66 | - $UUID | |
67 | - done | sort -t$'\037' -k1nr,2 | cut -d$'\037' -f3 | |
68 | -} | |
69 | - | |
70 | -function pendinguuids() { | |
71 | - taskuuids +PENDING $@ | |
72 | -} | |
73 | - | |
74 | -function doneuuids() { | |
75 | - taskuuids +COMPLETED $@ | |
76 | -} | |
77 | - | |
78 | -function blockeduuids() { | |
79 | - taskuuids +BLOCKED $@ | |
80 | -} | |
81 | - | |
82 | -function blockinguuids() { | |
83 | - taskuuids +BLOCKING $@ | |
84 | -} | |
85 | - | |
86 | -function deleteduuids() { | |
87 | - taskuuids +DELETED $@ | |
88 | -} | |
89 | - | |
90 | -function underline() { | |
91 | - [[ $# -lt 2 ]] && return 1 | |
92 | - printf "\033[4m%${1}s\033[24m" "$2" | |
93 | -} | |
94 | - | |
95 | -function bold() { | |
96 | - [[ $# -lt 2 ]] && return 1 | |
97 | - printf "\033[1m%${1}s\033[22m" "$2" | |
98 | -} | |
99 | - | |
100 | -function tstodate() { | |
101 | - [[ $# -eq 0 ]] && return 1 | |
102 | - date -d @${1} +%Y-%m-%d | |
103 | -} | |
104 | - | |
105 | -function extracttime() { | |
106 | - [[ $# -eq 0 ]] && return 1 | |
107 | - | |
108 | - local OIFS=${IFS} | |
109 | - | |
110 | - if [[ -z $1 ]] | |
111 | - then | |
112 | - TIMEKEY="" | |
113 | - TIME="00:00:00" | |
114 | - else | |
115 | - IFS=: | |
116 | - set -- $(echo $1) | |
117 | - IFS=${OIFS} | |
118 | - TIMEKEY="$1" | |
119 | - TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4) | |
120 | - fi | |
121 | -} | |
3 | +source $0:A:h/datetimehelper.sh | |
4 | +source $0:A:h/stringhelper.sh | |
5 | +source $0:A:h/taskhelper.sh | |
6 | +source $0:A:h/ttyhelper.sh | |
122 | 7 | |
123 | 8 | function printtimes() { |
124 | 9 | local T |
125 | - for T in "$@" | |
10 | + for T in $@ | |
126 | 11 | do |
127 | - extracttime "$T" | |
12 | + extracttime $T | |
128 | 13 | printf "%37s%-4s%10s: %s\n" "spent - " "$(date -d "$TIMEKEY" +%a)" \ |
129 | - "$TIMEKEY" "$TIME" | |
14 | + $TIMEKEY $TIME | |
130 | 15 | done |
131 | 16 | } |
132 | 17 | |
133 | -function truncate() { | |
134 | - [[ $# -lt 2 ]] && return 1 | |
135 | - | |
136 | - local STRING=$1 | |
137 | - | |
138 | - [[ ${#STRING} -gt ${2} ]] && STRING="${STRING:0:$(($2-3))}..." | |
139 | - echo -n "${STRING}" | |
140 | -} | |
141 | - | |
142 | 18 | function showall() { |
143 | 19 | [[ $# -eq 0 ]] && return 1 |
144 | 20 | |
... | ... | @@ -151,9 +27,9 @@ function showall() { |
151 | 27 | "$(underline -10 completed)" \ |
152 | 28 | "$(underline -10 entered)" |
153 | 29 | |
154 | - for UUID in "$@" | |
30 | + for UUID in $@ | |
155 | 31 | do |
156 | - extracttime "$(tasktimes $UUID TOTAL)" | |
32 | + extracttime $(tasktimes $UUID TOTAL) | |
157 | 33 | printf "%-16s %-35s %-10s %-10s %-8s\n" \ |
158 | 34 | "$(truncate "$(taskproject $UUID)" 16)" \ |
159 | 35 | "$(truncate "$(taskdescription $UUID)" 35)" \ |
... | ... | @@ -225,21 +101,21 @@ NL=$'\n' |
225 | 101 | # |
226 | 102 | SHORTOPTS=?hf: |
227 | 103 | LONGOPTS=help,html,file |
228 | -ARGS=$(getopt -o "${SHORTOPTS}" --long "${LONGOPTS}" -n "timesheet" -- "$@") | |
104 | +ARGS=$(getopt -o ${SHORTOPTS} --long ${LONGOPTS} -n timesheet -- $@) | |
229 | 105 | if [ $? -ne 0 ] |
230 | 106 | then |
231 | - usage "$0" | |
107 | + usage $0 | |
232 | 108 | exit 1 |
233 | 109 | fi |
234 | -eval set -- "${ARGS}" | |
110 | +eval set -- ${=ARGS} | |
235 | 111 | unset ARGS |
236 | 112 | |
237 | 113 | while true |
238 | 114 | do |
239 | - case "$1" in | |
115 | + case $1 in | |
240 | 116 | '-?'|'--help') |
241 | 117 | shift |
242 | - usage "$0" | |
118 | + usage $0 | |
243 | 119 | exit 0 |
244 | 120 | ;; |
245 | 121 | '-h'|'--html') |
... | ... | @@ -263,7 +139,7 @@ do |
263 | 139 | esac |
264 | 140 | done |
265 | 141 | |
266 | -[[ $OUTFILE ]] && { | |
142 | +[[ -n $OUTFILE ]] && { | |
267 | 143 | if [[ ${DOHTML} -eq 1 ]] |
268 | 144 | then |
269 | 145 | exec 1> >(ansi2html >${OUTFILE}.html) | ... | ... |
Please
register
or
login
to post a comment