tarch-configs/configs/bspwm/rofi/bin/calendar
Andrey Zimin 1b1b70daed add nvim
2024-03-10 13:30:59 +03:00

98 lines
2.2 KiB
Bash
Executable File

#!/usr/bin/env bash
DIR=$(dirname $PWD)
current_day=$(date +"%e")
current_month=$(date +"%m")
current_year=$(date +"%Y")
month=$(date +"%-m")
year=$(date +"%Y")
previous_month="◀"
next_month="▶"
last_selected_option=""
format_calendar () {
echo "$1" \
| sed -E 's/([[:alpha:]])__/\1\n/g' \
| sed -E 's/___([[:digit:]])/.\n\1/g' \
| sed -e 's/___/\n./g' \
| sed -e 's/__/\n/g' \
| sed -e 's/_/\n/g'
}
print_month() {
calendar="$(cal --monday -v -- $1 $2 | tail -n +2 | sed -e 's/ /_/g')"
echo "$(format_calendar "$calendar")"
}
find_day_index() {
index=0
while IFS=' ' read -ra arr; do
for i in "${arr[@]}"; do
if [[ "$i" == "$2" ]]; then
echo "$index"
break
fi
((index++))
done
done <<< "$1"
}
calendar_menu() {
calendar_header=$(cal -v -- $month $year | head -n 1)
month_page="$(print_month $month $year)"
calendar_body="\n\n\n$previous_month\n\n\n\n$month_page\n\n\n\n$next_month\n\n\n"
previous_month_index="3"
next_month_index="59"
calendar_body_column="7"
urgent="-u $previous_month_index,$next_month_index"
active=""
selected_row=""
if [[ "$(echo $current_month | bc) $current_year" == "$(echo $month | bc) $year" ]]; then
current_day_index=$(($(find_day_index "$month_page" $current_day) + $calendar_body_column))
active="-a $current_day_index"
selected_row="-selected-row $current_day_index"
fi
if [[ $last_selected_option == $previous_month ]]; then
selected_row="-selected-row $previous_month_index"
fi
if [[ $last_selected_option == $next_month ]]; then
selected_row="-selected-row $next_month_index"
fi
echo -e "$calendar_body" | rofi -dmenu \
-theme /home/chatlanin/.config/bspwm/rofi/themes/calendar.rasi\
-p "$calendar_header" $urgent $active $selected_row
}
while [[ true ]]; do
selected=$(calendar_menu)
last_selected_option="$selected"
case $selected in
$previous_month)
((month--))
if [[ $month -lt 1 ]]; then
month=12
((year--))
fi
;;
$next_month)
((month++))
if [[ $month -gt 12 ]]; then
month=1
((year++))
fi
;;
*)
break
;;
esac
done