aboutsummaryrefslogblamecommitdiffstats
path: root/grepjournal_openbsd
blob: fbd72e89150733cee711bfb6086d7a95719d9187 (plain) (tree)

































































































































                                                                                                                               
#!/usr/local/bin/bash

# Search ~/Notes/journal for a term and return as a markdown list sorted by date.

# keep track of the last executed command
trap 'last_command=$current_command; current_command=$BASH_COMMAND' DEBUG
# echo an error message before exiting
trap 'echo "\"${last_command}\" command filed with exit code $?."' EXIT

function usage {
    echo
    echo "Usage: grepjournal [WORD] [-i (case insensitve)] [-h (display this help)]"
    echo "  Searches for WORD within all files within ~/Notes/journal. Displayed sorted by date."
}

if [[ $# -eq 0 ]]; then
    usage; exit 1
fi

while [[ $# -gt 0 ]]; do
    if [[ "$1" = "-i" ]]; then
        flag="-i"
        shift
    elif [[ "$1" = "-h" ]] || [[ "$1" = "--help" ]]; then
        usage
        exit
    else
        searchterm=$1
        shift
    fi
done

_get_weekday() {
    local monday="# (Monday)"
    local tuesday="# (Tuesday)"
    local wednesday="# (Wednesday)"
    local thursday="# (Thursday)"
    local friday="# (Friday)"
    local saturday="# (Saturday)"
    local sunday="# (Sunday)"
    while IFS= read -r fileline; do
	echo $fileline
        if [[ $fileline =~ $monday ]]; then
            echo "${BASH_REMATCH[1]}"
        elif [[ $fileline =~ $tuesday ]]; then
            echo "${BASH_REMATCH[1]}"
        elif [[ $fileline =~ $wednesday ]]; then
            echo "${BASH_REMATCH[1]}"
        elif [[ $fileline =~ $thursday ]]; then
            echo "${BASH_REMATCH[1]}"
        elif [[ $fileline =~ $friday ]]; then
            echo "${BASH_REMATCH[1]}"
        elif [[ $fileline =~ $saturday ]]; then
            echo "${BASH_REMATCH[1]}"
        elif [[ $fileline =~ $sunday ]]; then
            echo "${BASH_REMATCH[1]}"
        fi
    done < "$1"
}

colourWhite="\033[38;2;255;255;255m"
colourGreen="\033[38;2;0;255;0m"
colourLightGreen="\033[38;2;231;252;179m"
colourGray="\033[38;2;100;100;100m"
colourOrange="\033[38;2;249;130;44m"
colourCyan="\033[38;2;0;255;255m"
txBold="\033[1m"
txReset="\033[0m"

# Automatic cleanup
trap 'rm -f "$grepped_results"' EXIT
grepped_results=$(mktemp) || exit 1

trap 'rm -f "$output_file"' EXIT
output_file=$(mktemp) || exit 1

# nice line across the top
termsize=$(stty size| awk '{print $2}')
# DOESNT WORK IN BSD printf "${colourWhite}=%.0s" $(seq $termsize)
echo

# some confirmatory echoing
echo -e "${colourWhite}Search term: ${txBold}$searchterm${txReset}"
[[ -v flag ]] && echo "Flag: $flag"

if [[ $flag != "-i" ]]; then
    flag=""
fi

# do the business, starting with using grep to get the pertinent lines
echo "Starting to search"
echo -e "$(grep -R $flag "$searchterm" /home/"$USER"/Notes/journal/)" > "$grepped_results"

# more confirmatory text
echo "Command: 'grep -R $flag $searchterm /home/"$USER"/Notes/journal/'"

# DOESN'T WORK IN BSD printf "=%.0s" $(seq $termsize)
echo ""

# because I can't get the regex right, I am searching for http or https to indicate a link in a line
urlregex="https?"
re='(^/home/lemon/Notes/journal/([0-9]{4})-([0-9]{2})-([0-9]{2})\.md):-\s([0-9]{2}:[0-9]{2}):\s(.*)'
cat $grepped_results
while IFS=  read -r line; do
	    echo $line
    if [[ $line =~ $re ]]; then
        path=${BASH_REMATCH[1]}
        year=${BASH_REMATCH[2]}
        month=${BASH_REMATCH[3]}
        day=${BASH_REMATCH[4]}
        time=${BASH_REMATCH[5]}
        note=${BASH_REMATCH[6]}
    else
	    echo "Problem matching line from grepped_results"
	    exit 1
    fi
    output_day=$(_get_weekday "$path")
    out_line="${colourGreen} "$year"-"$month"-"$day"${colourGray}T${colourLightGreen}"$time": ${output_day} ${txReset} ${note}"
    if [[ $out_line =~ $urlregex ]]; then
        out_line=${out_line/${BASH_REMATCH[0]}/${colourCyan}${BASH_REMATCH[0]}${txReset}}
    fi
    if [[ $out_line =~ $searchterm ]]; then
        out_line=${out_line/$searchterm/"${colourOrange}${txBold}$searchterm${txReset}"}
    fi
    echo -e "$out_line" >> "$output_file" 
done < "$grepped_results"

# output
sort < "$output_file"