parent
a9df9c5bd7
commit
e99566de7f
1 changed files with 145 additions and 0 deletions
@ -0,0 +1,145 @@ |
||||
#!/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%" |
||||
|
Loading…
Reference in new issue