You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

145 lines
3.7 KiB

#!/usr/bin/env bash
formatDate(){
date="$1"
if [[ "$date" = *"00" ]]; then
fixeddate="${date%-*}-01"
echo -e "$date\t$(date +"%B %Y" -d $fixeddate)"
else
echo -e "$date\t$(date +"%d %B %Y" -d $date)"
fi
}
export -f formatDate
listMonths(){
for i in {01..12}; do
date -d "2020-$i-01" +"%B"
done
}
MONTHS="$(listMonths)"
export MONTHS
# Gets a list of months to pipe into fzf
getMonthsList(){
typed="$1"
# For the current year, just get current and remaining months
currentMonth="$(date +"%m")"
currentYear="$(date +"%Y")"
if [[ -n "$typed" ]] && [[ "$typed" = *" "* ]]; then
if [[ "$typed" = "Next"* ]]; then
for i in {1..5}; do
echo "Next $i Weeks"
done
for i in {1..5}; do
echo "Next $i Months"
done
else
# If it contains a space
month=""
year=""
day=""
# Loop through each part and try to determine what it is
while read part; do
# totest will be 'a' if the first character is a letter
totest="$(echo -n "${part:0:1}" | tr '[a-zA-Z]' 'a')"
if [[ "$totest" = "a" ]]; then
# Assume if the first letter is a character, we have typed a month
month="$(echo "$MONTHS" | cat -n | grep -i "$part" | awk '{print $1}')"
else
# If we get here, it starts with a number so get rid of any letters
# Things like st, nd th
num="$(echo "$part" | tr -d '[a-zA-Z]')"
if [[ "$num" -lt 32 ]]; then
day="$num"
else
year="$num"
fi
fi
done <<<"$(echo "$typed" | tr ' ' '\n' )"
echo "Year: $year Month: $month Day: $day"
if [[ -n "$year" ]]; then
if [[ -n "$month" ]]; then
formatDate "$year-$month-00"
for day in {1..31}; do
date -d "$year-$month-$day" > /dev/null 2>&1 && formatDate "$year-$month-$day"
done
else
for month in $(seq 1 12); do
formatDate "$year-$month-00"
for day in {1..31}; do
date -d "$year-$month-$day" > /dev/null 2>&1 && formatDate "$year-$month-$day"
done
done
fi
else
for year in $(seq $((currentYear)) $((currentYear + 10)) ); do
if [[ -n "$month" ]]; then
formatDate "$year-$month-00"
for day in {1..31}; do
date -d "$year-$month-$day" > /dev/null 2>&1 && formatDate "$year-$month-$day"
done
else
for month in $(seq 1 12); do
formatDate "$year-$month-00"
for day in {1..31}; do
date -d "$year-$month-$day" > /dev/null 2>&1 && formatDate "$year-$month-$day"
done
done
fi
done
fi
fi
else
# Default
echo "Next 5 Weeks"
for month in $(seq $currentMonth 12); do
formatDate "$currentYear-$month-00"
done
for year in $(seq $((currentYear + 1)) $((currentYear + 10)) ); do
for month in $(seq 1 12); do
formatDate "$year-$month-00"
done
done
echo -e "Today\nTomorrow\nMonday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday"
echo -e "Next 1 Week\nNext 1 Month"
fi
}
export -f getMonthsList
preview(){
choice="$1"
# This manages things like "tomorow"
date -d "$choice" > /dev/null 2>&1 && choice="$(date -d "$choice" +"%Y-%m-%d")"
if [[ "$choice" = *"00" ]]; then
echo "option 1"
date="${choice%-*}-01"
rem -@ -w$FZF_PREVIEW_COLUMNS -c "$date"
elif [[ "$choice" = "Next"* ]]; then
echo "option 2"
num="$(echo "$choice" | tr -d '[a-zA-Z ]')"
echo "$choice"
case "${choice##* }" in
Week|Weeks)
rem -@ -w$FZF_PREVIEW_COLUMNS "-c+$num"
;;
Month|Months)
rem -@ -w$FZF_PREVIEW_COLUMNS "-c$num"
;;
esac
else
echo "option 3"
echo "$choice"
rem -@ -w$FZF_PREVIEW_COLUMNS "$choice"
fi
}
export -f preview
getMonthsList | fzf --delimiter "\t"\
--bind 'change:reload:bash -c "getMonthsList {q}" || true'\
--preview 'bash -c "preview {1}"'\
--preview-window="up:90%" --height="100%"