parent
8d3f7e7b07
commit
531781abdd
@ -0,0 +1,81 @@
|
||||
#!/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
|
||||
if [[ $list == "" ]]; then
|
||||
clear=""
|
||||
fi
|
||||
|
||||
# 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
|
||||
completed_tasks="y"
|
||||
break
|
||||
fi
|
||||
i=$(($i + 1))
|
||||
done
|
||||
if [[ $completed_tasks == "n" ]]; then
|
||||
clear_completed=""
|
||||
fi
|
||||
|
||||
# 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
|
||||
if [[ $selection == $CLEAR ]]; then
|
||||
list_raw=""
|
||||
elif [[ $selection == $CLEAR_COMPLETED ]]; then
|
||||
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[*]}"
|
||||
elif [[ $selection == `printf "%q" "$FILLED_RAW"`* ]]; then
|
||||
replace="${selection}${NL}"
|
||||
list_raw=${list_raw//"$replace"/""}
|
||||
list_raw=${list_raw//"$selection"/""}
|
||||
elif [[ $selection == `printf "%q" "$EMPTY_RAW"`* ]]; then
|
||||
selection_filled=${selection//"$EMPTY_RAW"/"$FILLED_RAW"}
|
||||
list_raw=${list_raw//"$selection"/"$selection_filled"}
|
||||
elif [[ $selection != "" ]]; then
|
||||
if [[ $list_raw != "" ]]; then
|
||||
list_raw="${list_raw}${NL}"
|
||||
fi
|
||||
list_raw=`printf "%s%s %s\n" "$list_raw" "$EMPTY_RAW" "$selection"`
|
||||
fi
|
||||
|
||||
printf "%s\n" "$list_raw" >| $FILE
|
Reference in new issue