diff options
Diffstat (limited to 'bin/menuscripts/ddl')
| -rwxr-xr-x | bin/menuscripts/ddl | 88 | 
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  | 
