Ajout : rangement.
[tool/hledger.git] / script / timelog
diff --git a/script/timelog b/script/timelog
new file mode 100755 (executable)
index 0000000..58e519b
--- /dev/null
@@ -0,0 +1,64 @@
+#!/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