aboutsummaryrefslogtreecommitdiffstats
path: root/grepjournal_openbsd
blob: fbd72e89150733cee711bfb6086d7a95719d9187 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/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"