Commit 5a966fc39145434519d4383eb21e8c68f8170d8d
1 parent
8f2fe2bb
fix missing newline and add option handling and file io
Showing
1 changed file
with
93 additions
and
12 deletions
| ... | ... | @@ -57,7 +57,7 @@ function taskend() { |
| 57 | 57 | function taskuuids() { |
| 58 | 58 | local UUID |
| 59 | 59 | |
| 60 | - [[ $# -eq 0 ]] && set \( +PENDING or +DONE \) | |
| 60 | + [[ $# -eq 0 ]] && set -- \( +PENDING or +DONE \) | |
| 61 | 61 | for UUID in $(task $@ _uuid) |
| 62 | 62 | do |
| 63 | 63 | printf "%05.2f\037%s\037%s\n" \ |
| ... | ... | @@ -113,7 +113,7 @@ function extracttime() { |
| 113 | 113 | TIME="00:00:00" |
| 114 | 114 | else |
| 115 | 115 | IFS=: |
| 116 | - set $(echo $1) | |
| 116 | + set -- $(echo $1) | |
| 117 | 117 | IFS=${OIFS} |
| 118 | 118 | TIMEKEY="$1" |
| 119 | 119 | TIME=$(printf "%02d:%02d:%02d" ${2:-0} ${3:-0} $4) |
| ... | ... | @@ -125,7 +125,7 @@ function printtimes() { |
| 125 | 125 | for T in "$@" |
| 126 | 126 | do |
| 127 | 127 | extracttime "$T" |
| 128 | - printf "%51s: %s\n" "spent - $TIMEKEY" $TIME | |
| 128 | + printf "%51s: %s\n" "spent - $TIMEKEY" "$TIME" | |
| 129 | 129 | done |
| 130 | 130 | } |
| 131 | 131 | |
| ... | ... | @@ -165,20 +165,29 @@ function showall() { |
| 165 | 165 | } |
| 166 | 166 | |
| 167 | 167 | function timesheet() { |
| 168 | - local phrase="1-week-ago" | |
| 169 | - local start="$(date +%Y-%m-%d -d ${phrase})" | |
| 170 | - local end="$(date +%Y-%m-%d)" | |
| 168 | + local PHRASE="1-week-ago" | |
| 169 | + local START="$(date +%Y-%m-%d -d ${PHRASE})" | |
| 170 | + | |
| 171 | + local DONE="$(showall $(doneuuids end.after:${START} $@))" | |
| 172 | + local UPCOMING="$(showall $(pendinguuids $@))" | |
| 173 | + local BLOCKED="$(showall $(blockeduuids $@))" | |
| 174 | + local BLOCKING="$(showall $(blockinguuids $@))" | |
| 175 | + | |
| 176 | + DONE="${DONE:+${DONE}${NL}}" | |
| 177 | + UPCOMING="${UPCOMING:+${UPCOMING}${NL}}" | |
| 178 | + BLOCKED="${BLOCKED:+${BLOCKED}${NL}}" | |
| 179 | + BLOCKING="${BLOCKING:+${BLOCKING}${NL}}" | |
| 171 | 180 | |
| 172 | 181 | printf " (generated at %s)\n\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n" \ |
| 173 | - "$(date)" \ | |
| 174 | - "$(bold "" "Tasks completed from $start to $end (back $phrase)")" \ | |
| 175 | - "$(showall $(doneuuids end.after:${start} $@))" \ | |
| 182 | + "${TODAY}" \ | |
| 183 | + "$(bold "" "Tasks completed from $START to $TODAY (back $PHRASE)")" \ | |
| 184 | + "${DONE}" \ | |
| 176 | 185 | "$(bold "" "Upcoming tasks")" \ |
| 177 | - "$(showall $(pendinguuids $@))" \ | |
| 186 | + "${UPCOMING}" \ | |
| 178 | 187 | "$(bold "" "Blocked tasks")" \ |
| 179 | - "$(showall $(blockeduuids $@))" \ | |
| 188 | + "${BLOCKED}" \ | |
| 180 | 189 | "$(bold "" "Blocking tasks")" \ |
| 181 | - "$(showall $(blockinguuids $@))" | |
| 190 | + "${BLOCKING}" | |
| 182 | 191 | |
| 183 | 192 | printf "%s%s\n\n%s%s\n%s\n\n%s\n\n%s\n" \ |
| 184 | 193 | "$(bold "" "Summary")" \ |
| ... | ... | @@ -190,6 +199,78 @@ function timesheet() { |
| 190 | 199 | "$(task rc._forcecolor=on $@ burndown 2>/dev/null)" |
| 191 | 200 | } |
| 192 | 201 | |
| 202 | +function usage() { | |
| 203 | + local USAGE=$(cat <<-USAGE | |
| 204 | + Usage: %s [OPTION]... [FILTER] | |
| 205 | + | |
| 206 | + OPTIONS: | |
| 207 | + -?, --help Show this help | |
| 208 | + -h, --html Create HTML form ANSI data. | |
| 209 | + -f, --file The file to write data to. Actually this specifies the | |
| 210 | + basename which will be postfixed by the creation date. | |
| 211 | + | |
| 212 | + FILTER can be additional taskwarriors filters to limit the result | |
| 213 | + any further. | |
| 214 | + USAGE | |
| 215 | + ) | |
| 216 | + /usr/bin/printf "${USAGE}\n" $0 | |
| 217 | +} | |
| 218 | + | |
| 219 | +TODAY="$(date +%Y-%m-%d)" | |
| 220 | +NL=$'\n' | |
| 221 | + | |
| 222 | +# | |
| 223 | +# parse command line arguments | |
| 224 | +# | |
| 225 | +SHORTOPTS=?hf: | |
| 226 | +LONGOPTS=help,html,file | |
| 227 | +ARGS=$(getopt -o "${SHORTOPTS}" --long "${LONGOPTS}" -n "timesheet" -- "$@") | |
| 228 | +if [ $? -ne 0 ] | |
| 229 | +then | |
| 230 | + usage "$0" | |
| 231 | + exit 1 | |
| 232 | +fi | |
| 233 | +eval set -- "${ARGS}" | |
| 234 | +unset ARGS | |
| 235 | + | |
| 236 | +while true | |
| 237 | +do | |
| 238 | + case "$1" in | |
| 239 | + '-?'|'--help') | |
| 240 | + shift | |
| 241 | + usage "$0" | |
| 242 | + exit 0 | |
| 243 | + ;; | |
| 244 | + '-h'|'--html') | |
| 245 | + DOHTML=1 | |
| 246 | + shift | |
| 247 | + continue | |
| 248 | + ;; | |
| 249 | + '-f'|'--file') | |
| 250 | + OUTFILE="${2}_$TODAY" | |
| 251 | + shift 2 | |
| 252 | + continue | |
| 253 | + ;; | |
| 254 | + '--') | |
| 255 | + shift | |
| 256 | + break | |
| 257 | + ;; | |
| 258 | + *) | |
| 259 | + echo 'Internal error!' >&2 | |
| 260 | + exit 1 | |
| 261 | + ;; | |
| 262 | + esac | |
| 263 | +done | |
| 264 | + | |
| 265 | +[[ $OUTFILE ]] && { | |
| 266 | + if [[ ${DOHTML} -eq 1 ]] | |
| 267 | + then | |
| 268 | + exec 1> >(ansi2html >${OUTFILE}.html) | |
| 269 | + else | |
| 270 | + exec 1> ${OUTFILE}.ansi | |
| 271 | + fi | |
| 272 | +} | |
| 273 | + | |
| 193 | 274 | timesheet $@ |
| 194 | 275 | |
| 195 | 276 | # vim: set et ts=4 sw=4: | ... | ... |
Please
register
or
login
to post a comment