Want to contribute? Fork me on Codeberg.org!
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.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

78 lines
2.1 KiB

3 years ago
#!/bin/bash
# Setup constants
NL=$'\n'
FILE=~/.rofi-checklist
EMPTY=
EMPTY_RAW="- [ ]"
FILLED=
FILLED_RAW="- [x]"
CLEAR=" Clear all"
clear="${CLEAR}${NL}"
CLEAR_COMPLETED=" Clear completed"
clear_completed="${CLEAR_COMPLETED}${NL}"
# Read checlist file
touch $FILE
list_raw=`cat $FILE`
IFS=$'\n' # split by newlines instead of spaces
list_raw_array=($list_raw)
# Format checklist for display in rofi
list=$list_raw
list=${list//"$EMPTY_RAW"/"$EMPTY"} # empty checkboxes
list=${list//"$FILLED_RAW"/"$FILLED"} # filled checkboxes
# Don't show clear all option if task list is empty
[[ -z $list ]] && clear=""
3 years ago
# Don't show clear completed option if there are no completed tasks
count=${#list_raw_array[*]}
i=0
completed_tasks="n"
while [ $i -lt $count ]; do
# %q escapes string, otherwise there are issues with square brackets
if [[ ${list_raw_array[$i]} = `printf "%q" "$FILLED_RAW"`* ]]; then
3 years ago
completed_tasks="y"
break
fi
i=$(($i + 1))
done
[[ $completed_tasks = "n" ]] && clear_completed=""
3 years ago
# Run rofi, replace display checkmarks with raw syntax
selection=`printf "%s%s%s\n" "$clear" "$clear_completed" "$list" | rofi -dmenu -i -selected-row 2 -p " Task:"`
selection=${selection//"$EMPTY"/"$EMPTY_RAW"}
selection=${selection//"$FILLED"/"$FILLED_RAW"}
# Selection logic
case $selection in
$CLEAR) list_raw="" ;;
$CLEAR_COMPLETED)
list_raw_array=($list_raw)
count=${#list_raw_array[*]}
i=0
while [ $i -lt $count ]
do
if [[ ${list_raw_array[$i]} = `printf "%q" "$FILLED_RAW"`* ]]; then
unset 'list_raw_array[$i]'
fi
i=$(($i + 1))
done
list_raw="${list_raw_array[*]}" ;;
`printf "%q" "$FILLED_RAW"`*)
replace="${selection}${NL}"
list_raw=${list_raw//"$replace"/""}
list_raw=${list_raw//"$selection"/""} ;;
`printf "%q" "$EMPTY_RAW"`*)
selection_filled=${selection//"$EMPTY_RAW"/"$FILLED_RAW"}
list_raw=${list_raw//"$selection"/"$selection_filled"} ;;
*)
if [[ -n $selection ]]; then
[[ -n $list_raw ]] && list_raw="${list_raw}${NL}"
list_raw=`printf "%s%s %s\n" "$list_raw" "$EMPTY_RAW" "$selection"`
fi ;;
esac
3 years ago
printf "%s\n" "$list_raw" >| $FILE