#! /bin/bash set -e # Used to set the base directory to query. Defaults to current directory MARKDONE_BASE_DIR=${MARKDONE_BASE_DIR:-.} function list_notes { echo "Notes" echo "****************" query="$@" if [ "$query" == "" ]; then query="." fi grep -l "$query" -R "$MARKDONE_BASE_DIR" } function list_tasks { echo "Tasks" echo "****************" scope=$1 query="" case "$scope" in all) inner_task=" xX" query="${@:2}" ;; 'done'|closed|complete) inner_task="xX" query="${@:2}" ;; open|incomplete) inner_task=" " query="${@:2}" ;; *) inner_task=" " query="$@" ;; esac query=".*$query" grep "^[[:blank:]]*[^[:blank:]-][[:blank:]]*[*]\?[[:blank:]]*\[[$inner_task]\?\]$query" -R "$MARKDONE_BASE_DIR" -h } function echo_help { if [ "$1" == "notes" ]; then cat << EOF usage: md.sh notes [query] query: regex to search for in notes. [defaults to .*] Tags are generally represented as !tagname EOF elif [ "$1" == "tasks" ]; then cat << EOF usage: md.sh tasks [scope] [query] scope: used to limit to completed or include all tasks open|incomplete: include only open or incomplete tasks [default] done|closed|complete: include only completed tasks all: include all tasks, regardless of status query: regex to search for in each task. [defaults to .*] Tags are generally represented as !tagname EOF else cat << EOF usage: md.sh type [args] type: the type of markdone object to query notes: list or query notes tasks: list or query tasks help: display this help text or help for a sub command EOF fi } function main { subcmd=$1 args=${@:2} case "$subcmd" in notes) list_notes $args ;; tasks) list_tasks $args ;; all): list_notes $args echo "" list_tasks $args ;; help) echo_help $args ;; *) echo "Unknown command: $subcmd" echo_help $args exit 1 ;; esac } main $@