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
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%" |
|
|
|
|