diff options
Diffstat (limited to '')
| -rw-r--r-- | Makefile | 1 | ||||
| -rwxr-xr-x | event | 152 | ||||
| -rwxr-xr-x | status | 2 |
3 files changed, 154 insertions, 1 deletions
| @@ -14,6 +14,7 @@ SCRIPTS = addressgrep \ | |||
| 14 | dmenu-unmount \ | 14 | dmenu-unmount \ |
| 15 | dmenu-urlselect \ | 15 | dmenu-urlselect \ |
| 16 | dmenu-websearch \ | 16 | dmenu-websearch \ |
| 17 | event \ | ||
| 17 | feed \ | 18 | feed \ |
| 18 | ffmpeg-screenrecord \ | 19 | ffmpeg-screenrecord \ |
| 19 | ffmpeg-facecam \ | 20 | ffmpeg-facecam \ |
| @@ -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 | |||
| 8 | file="$HOME/box/events" # Change to $XDG_DATA_HOME/events or whatever | ||
| 9 | editor=${EDITOR:-vi} | ||
| 10 | |||
| 11 | usage() { | ||
| 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 | |||
| 24 | secondstoday() { | ||
| 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 | |||
| 32 | secondstomin() { | ||
| 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 | |||
| 40 | datetoseconds() { | ||
| 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 | |||
| 49 | dayplus() { | ||
| 50 | d="$1" | ||
| 51 | n="$(datetoseconds today)" | ||
| 52 | echo "$((n+d*60*60*24))" | ||
| 53 | } | ||
| 54 | monday() { d="$(date +%u)"; dayplus "$((1-d))"; } | ||
| 55 | monday1() { d="$(date +%u)"; dayplus "$((8-d))"; } | ||
| 56 | monday2() { d="$(date +%u)"; dayplus "$((15-d))"; } | ||
| 57 | daydiff() { | ||
| 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 | |||
| 89 | secondsline() { | ||
| 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 | |||
| 97 | filterlines() { | ||
| 98 | while read -r line; do | ||
| 99 | s="$(datetoseconds $line)" | ||
| 100 | [ "$s" -ge "$1" ] && [ "$s" -lt "$2" ] && echo "$line" | ||
| 101 | done | ||
| 102 | } | ||
| 103 | |||
| 104 | list() { | ||
| 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 | |||
| 124 | case "$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 | ;; | ||
| 152 | esac | ||
| @@ -4,7 +4,7 @@ | |||
| 4 | # - date and time | 4 | # - date and time |
| 5 | # - battery | 5 | # - battery |
| 6 | # - wifi (requires nmcli) | 6 | # - wifi (requires nmcli) |
| 7 | # - past reminders, if any (requires sdep and sdep-list) | 7 | # - past notifications (requires notify) |
| 8 | 8 | ||
| 9 | # Usage: status [separator] | 9 | # Usage: status [separator] |
| 10 | 10 | ||
