aboutsummaryrefslogtreecommitdiff
path: root/event
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2023-12-15 20:00:00 +0100
committerSebastiano Tronto <sebastiano@tronto.net>2023-12-19 09:03:14 +0100
commitb55d1f0a3ec1d59e67f74de6173abec20cbb78ac (patch)
tree2f90c21b47723b1d7825164c7ed1546e187c4b35 /event
parentc898a516b835e655f432df3336ade6b470c973df (diff)
downloadscripts-b55d1f0a3ec1d59e67f74de6173abec20cbb78ac.tar.gz
scripts-b55d1f0a3ec1d59e67f74de6173abec20cbb78ac.zip
Added event, replacement for sdep
Diffstat (limited to '')
-rwxr-xr-xevent152
1 files changed, 152 insertions, 0 deletions
diff --git a/event b/event
new file mode 100755
index 0000000..754caa9
--- /dev/null
+++ b/event
@@ -0,0 +1,152 @@
1#!/bin/sh
2
3# Manage events (replacement for https://git.tronto.net/sdep)
4
5# Usage: event [command [argument]]
6# See usage() for details
7
8file="$HOME/box/events" # Change to $XDG_DATA_HOME/events or whatever
9editor=${EDITOR:-vi}
10
11usage() {
12 echo "Usage: event [command]"
13 echo "Commands:"
14 echo " add [day] Add a new event (default date: none)"
15 echo " day: today, t; tomorrow, tm"
16 echo " clear Sort and cleanup event file"
17 echo " edit Open event file in $editor"
18 echo " list [date] List all events on date (default: all events)"
19 echo " date: now, n; today, t; tomorrow, tm;"
20 echo " week, w; nextweek, nw;"
21 echo " future, f; past, p"
22}
23
24secondstoday() {
25 if [ "$(uname)" = "Linux" ]; then
26 date -d @$1 +'%Y-%m-%d'
27 else # Assume BSD date
28 date -r $1 +'%Y-%m-%d'
29 fi
30}
31
32secondstomin() {
33 if [ "$(uname)" = "Linux" ]; then
34 date -d @$1 +'%Y-%m-%d %H:%M'
35 else # Assume BSD date
36 date -r $1 +'%Y-%m-%d %H:%M'
37 fi
38}
39
40datetoseconds() {
41 # Read date in YYYY-MM-DD HH:MM format
42 if [ "$(uname)" = "Linux" ]; then
43 date -d "$1 $2" +'%s'
44 else # Assume BSD date
45 date -f '%Y-%m-%d %H:%M' -j "$1 $2" +'%s'
46 fi
47}
48
49dayplus() {
50 d="$1"
51 n="$(datetoseconds today)"
52 echo "$((n+d*60*60*24))"
53}
54monday() { d="$(date +%u)"; dayplus "$((1-d))"; }
55monday1() { d="$(date +%u)"; dayplus "$((8-d))"; }
56monday2() { d="$(date +%u)"; dayplus "$((15-d))"; }
57daydiff() {
58 ar="$1"
59 d="$(date +%u)"
60 case "$ar" in
61 mon|monday)
62 w=1
63 ;;
64 tue|tuesday)
65 w=2
66 ;;
67 wed|wednesday)
68 w=3
69 ;;
70 thu|thursday)
71 w=4
72 ;;
73 fri|friday)
74 w=5
75 ;;
76 sat|saturday)
77 w=6
78 ;;
79 sun|sunday)
80 w=7
81 ;;
82 *)
83 w=0
84 ;;
85 esac
86 [ "$w" = "0" ] && echo "" || echo "$(((w-d+7) % 7))"
87}
88
89secondsline() {
90 # TODO: this function is not needed, need similar one with weekday
91 line="$(cat)"
92 s="$(datetoseconds $line)"
93 t="$(echo "$line" | sed -E 's/....-..-.. .{1,2}:.. //g')"
94 echo "$s $t"
95}
96
97filterlines() {
98 while read -r line; do
99 s="$(datetoseconds $line)"
100 [ "$s" -ge "$1" ] && [ "$s" -lt "$2" ] && echo "$line"
101 done
102}
103
104list() {
105 if [ -z "$1" ]; then
106 cat
107 elif [ "$1" = "now" ] || [ "$1" = "n" ]; then
108 grep "$(date +'%Y-%m-%d %H:%M')"
109 elif [ "$1" = "today" ] || [ "$1" = "t" ]; then
110 grep "$(date +'%Y-%m-%d')"
111 elif [ "$1" = "tomorrow" ] || [ "$1" = "tm" ]; then
112 grep "$(secondstoday $(dayplus 1))"
113 elif [ "$1" = "week" ] || [ "$1" = "w" ]; then
114 filterlines "$(monday)" "$(monday1)"
115 elif [ "$1" = "nextweek" ] || [ "$1" = "nw" ]; then
116 filterlines "$(monday1)" "$(monday2)"
117 elif [ "$1" = "future" ] || [ "$1" = "f" ]; then
118 filterlines "$(date +%s)" "9999999999"
119 elif [ "$1" = "past" ] || [ "$1" = "p" ]; then
120 filterlines "0" "$(date +%s)"
121 fi
122}
123
124case "$1" in
125 add)
126 if [ "$2" = "today" ] || [ "$2" = "t" ]; then
127 d="$(date +'%Y-%m-%d')"
128 elif [ "$2" = "tomorrow" ] || [ "$2" = "tm" ]; then
129 d="$(secondstoday $(dayplus 1))"
130 elif [ -n "$2" ]; then
131 d="$(secondstoday $(dayplus $(daydiff $2)))"
132 fi
133 [ -n "$d" ] && printf '%s ' "$d"
134 read -r line
135 [ -n "$d" ] && line="$d $line"
136 echo "$line" >> "$file"
137 ;;
138 clear)
139 tmp=$(mktemp)
140 cat "$file" | list future | sort > "$tmp"
141 mv "$tmp" "$file"
142 ;;
143 edit)
144 "$editor" "$file"
145 ;;
146 list)
147 cat "$file" | list $2 | sort
148 ;;
149 *)
150 usage
151 ;;
152esac

Generated with cgit - Back to sebastiano.tronto.net