+#!/bin/sh -eu
+
+# ACTION: initialize from ./
+ test -L "$0" && tool="$(readlink -e "$0")" || tool=$0
+ tool=$(readlink -e "${tool%/*}"/.)
+ root=$(readlink -e "${root:-"${0%/*}"/.}")
+
+TIMELOG=${TIMELOG:-"$root"/time.log}
+
+rule_edit () {
+ touch "$TIMELOG"
+ ${EDITOR:-vim} "$@" "$TIMELOG"
+ }
+rule_in () {
+ date=$(date '+%Y-%m-%d %H:%M:%S')
+ touch "$TIMELOG"
+ {
+ last=$(tail -n 1 "$TIMELOG")
+ if test ! "$last" = "${last#i}"
+ then printf 'o %s %s\n' "$date"
+ fi
+ printf 'i %s %s\n' "$date" "$*"
+ } | tee /dev/stderr >>"$TIMELOG"
+ }
+rule_help () {
+ cat >&2 <<-EOF
+ Syntax:
+ ${0##*/} [e|edit]
+ ${0##*/} [i|in] Path:To:Task Comment
+ ${0##*/} [s|server]
+ ${0##*/} [o|out]
+ ${0##*/} \$hledger_command
+ EOF
+ }
+rule_hledger () {
+ set -x
+ hledger ${HLEDGER_FLAGS-} -f "$TIMELOG" "$@"
+ }
+rule_server () {
+ cd "$root"
+ set -x
+ hledger-web --server ${HLEDGER_WEB_FLAGS-} -f "$TIMELOG" "$@"
+ }
+rule_out () {
+ last=$(tail -n 1 "$TIMELOG")
+ if test "$last" = "${last#o}"
+ then
+ date=$(date '+%Y-%m-%d %H:%M:%S')
+ {
+ printf 'o %s %s\n' "$date" "$*"
+ } | tee /dev/stderr >>"$TIMELOG"
+ fi
+ }
+
+rule=${1:-help}
+test $# = 0 || shift
+case $rule in
+ (i|'in') rule_in "$@";;
+ (o|out) rule_out "$@";;
+ (e|edit) rule_edit "$@";;
+ (s|server) rule_server "$@";;
+ (h|help|-h|--help|'') rule_help $rule "$@";;
+ (*) rule_hledger $rule "$@";;
+ esac