summaryrefslogtreecommitdiff
path: root/bin/menuscripts/ddl
diff options
context:
space:
mode:
Diffstat (limited to 'bin/menuscripts/ddl')
-rwxr-xr-xbin/menuscripts/ddl88
1 files changed, 88 insertions, 0 deletions
diff --git a/bin/menuscripts/ddl b/bin/menuscripts/ddl
new file mode 100755
index 0000000..dd10af5
--- /dev/null
+++ b/bin/menuscripts/ddl
@@ -0,0 +1,88 @@
+#!/bin/sh
+
+# colors
+red="$(printf '\033[31m')"
+blue="$(printf '\033[34m')"
+cyan_light="$(printf '\033[36m')"
+yellow="$(printf '\033[33m')"
+green="$(printf '\033[32m')"
+italic="$(printf '\033[3m')"
+reset="$(printf '\033[0m')"
+
+deadlines="$HOME/docs/filios"/deadlines
+
+die() { >&2 printf '%s\n' "$*"; exit 1; }
+usage()
+{
+ cat <<EOF
+usage: ddl [COMMAND] [ARGUMENT]
+ ddl lists deadlines
+COMMANDS
+ new TEXT... add a new deadline
+ coming [NUM] show the nearest coming deadline(s)
+ delete NUM delete deadline by number
+ grep REGEX show deadlines matching regex
+ help show usage
+ edit edit file in \$EDITOR
+EOF
+ exit 1
+}
+wrong_usage() { >&2 printf 'Wrong usage!\n'; usage; }
+
+colorize()
+{
+ sed \
+ -e "s/^#.*/${red}&${reset}/" \
+ -e "s/^\s*[-?!*].*/${cyan_light}&${reset}/" \
+ -e "s/([^()]\+)/${yellow}${italic}&${reset}/" \
+ -e "s/^\s*#.*/${blue}${italic}&${reset}/"
+}
+list_deadlines() { cat "$deadlines"; }
+# list dates in chronological order
+list_dates()
+{
+ grep '^#' "$deadlines" |
+ sort -t '/' -k 3 -k 2 -k 1 -n |
+ uniq |
+ sed 's@/@.@g'
+}
+
+
+# shellcheck disable=SC2142
+
+### MAIN
+
+# Arguments without an option
+case "$1" in
+ h*) usage ;;
+
+ e*) $EDITOR "$deadlines" ;;
+
+ c*)
+ i=1
+ list_dates | head -n "${2:-1}" |
+ while read -r date
+ do
+ sed -n "/$date/,/^#\|^$/p" "$deadlines" |
+ colorize |
+ sed "1s/.*/& ($green$i$reset)/"
+ i=$((i+1))
+ done ;;
+
+ "") list_deadlines | colorize ;;
+
+ *) false ;;
+
+esac && exit
+
+arg="$1"
+shift
+[ "$1" ] || wrong_usage
+
+case "$arg" in
+
+ d*) sed -i "/$(list_dates | sed -n "${1}p")/,/^$/d" "$deadlines" ;;
+
+ *) wrong_usage ;;
+
+esac