aboutsummaryrefslogtreecommitdiffhomepage
path: root/bin/task/context
diff options
context:
space:
mode:
Diffstat (limited to 'bin/task/context')
-rwxr-xr-xbin/task/context59
1 files changed, 53 insertions, 6 deletions
diff --git a/bin/task/context b/bin/task/context
index 30e465f..d0bb6c4 100755
--- a/bin/task/context
+++ b/bin/task/context
@@ -8,13 +8,32 @@ LOG_FILE=~/log/.context && touch $LOG_FILE
8context="$(cat ~/.task/context)" 8context="$(cat ~/.task/context)"
9time="$1" 9time="$1"
10 10
11# The unit of time display. For example:
12# If it is 900(seconds), then the minimal symbol of
13# time display is 15min
14UNIT=900
15BLOCK_CHAR=▊
16# This dictionary store the valid contexts and the time I plan to spend on
17declare -A PLAN
18
11# Get seconds from given string 19# Get seconds from given string
12_get_seconds() { 20_get_seconds() {
13 # Modify input to fit the format that `date` can read 21 # Modify input to fit the format that `date` can read
14 hour=$(grep -o '[0-9.]\+h' <<<"$1" | tr -d h) 22 hour=$(grep -o '[0-9.]\+h' <<<"$1" | tr -d '[:alpha:]')
15 min=$(grep -o '[0-9.]\+m' <<<"$1" | tr -d m) 23 min=$(grep -o '[0-9.]\+m' <<<"$1" | tr -d '[:alpha:]')
16 sec=$(grep -o '[0-9.]\+s' <<<"$1" | tr -d s) 24 sec=$(grep -o '[0-9.]\+s' <<<"$1" | tr -d '[:alpha:]')
17 echo "${hour:-0}*3600 + ${min:-0}*60 + ${sec:-0}" | bc 25 echo "${hour:-0}*3600 + ${min:-0}*60 + ${sec:-0}" | bc | xargs printf '%.0f\n'
26}
27
28_set_context_plan() {
29 while read line; do
30 [ -z "$line" ] && break
31
32 ctx=$(awk '{print $1}' <<<"$line")
33 time=$(awk '{print $2}' <<<"$line")
34
35 PLAN[$ctx]=$(_get_seconds $time)
36 done <~/log/plan.context.md
18} 37}
19 38
20# Update time of current context 39# Update time of current context
@@ -39,8 +58,36 @@ if [ -n "$1" ]; then
39 echo -e "$context\t${given_seconds}" >>$LOG_FILE 58 echo -e "$context\t${given_seconds}" >>$LOG_FILE
40# Print times for each context 59# Print times for each context
41else 60else
61 _set_context_plan
42 while read -r ctx sec; do 62 while read -r ctx sec; do
43 echo -ne "$ctx\t" 63 # Print context and time I spend
44 date -u -d @"$sec" +%H:%M 64 echo -ne "$ctx\t\t"
65 date -u -d @"$sec" +%H:%M | tr -d '\n'
66
67 number_of_spend=$(( $sec / $UNIT ))
68 # Print block of time spend (green)
69 echo -ne "\t\t\e[32m"
70 [ ! "$number_of_spend" = 0 ] && printf "%0.s$BLOCK_CHAR" $(seq $number_of_spend)
71 echo -en "\e[0m"
72
73 seconds_of_plan=${PLAN[$ctx]}
74 if [ -n "$seconds_of_plan" ]; then
75 number_of_plan=$(( ${seconds_of_plan} / $UNIT ))
76 [ "$(( $seconds_of_plan % $UNIT ))" = 0 ] || (( number_of_plan++ ))
77 number_of_remaining=$(( $number_of_plan - $number_of_spend ))
78
79 # Print block of remaining time (normal)
80 if (( "$number_of_remaining" > 0 )); then
81 printf "%0.s$BLOCK_CHAR" $(seq $number_of_remaining)
82 # Print block of exceed time (red)
83 elif (( "$number_of_remaining" < 0 )); then
84 number_of_exceed=${number_of_remaining#-}
85 printf "%0.s\b" $(seq $number_of_exceed)
86 echo -ne "\e[31m"
87 printf "%0.s$BLOCK_CHAR" $(seq $number_of_exceed)
88 echo -en "\e[0m"
89 fi
90 fi
91 echo
45 done <$LOG_FILE 92 done <$LOG_FILE
46fi 93fi