Compare commits
9 Commits
v1.9
...
1a0ad68ad2
Author | SHA1 | Date | |
---|---|---|---|
1a0ad68ad2 | |||
556b8cb7d8 | |||
563e0277aa | |||
4e00211c02 | |||
e61d0394c3 | |||
af77a60355 | |||
80cb28dc10 | |||
2968bbe325 | |||
15bf470616 |
@ -26,6 +26,7 @@ An uppercase I looks like a 1, 3 from i3, and 8 because the song [We Are 138](ht
|
||||
- pamixer: for the mute-unmute script
|
||||
- playerctl: music controls
|
||||
- python-i3ipc: for sounds etc.
|
||||
- remind: [optional] for reminder notifications, Requires notify-daemon and notify-send for automatic reminders.
|
||||
- sgtk-menu: for applications menu
|
||||
- sox: for sounds.
|
||||
- transfersh: [optional] for file sharing GUI
|
||||
|
7
i38.sh
7
i38.sh
@ -536,6 +536,10 @@ $(if command -v mumble &> /dev/null ; then
|
||||
echo "# Mumble bound to m"
|
||||
echo "bindsym m exec $(command -v mumble), mode \"default\""
|
||||
fi)
|
||||
$(if command -v remind &> /dev/null ; then
|
||||
echo "# Reminders bound to r"
|
||||
echo "bindsym r exec --no-startup-id ${i3Path}/scripts/reminder.sh, mode \"default\""
|
||||
fi)
|
||||
$(if command -v ocrdesktop &> /dev/null ; then
|
||||
echo "# OCR desktop bound to print screen alternative \$mod+r"
|
||||
echo "bindsym Print exec $(command -v ocrdesktop) -b, mode \"default\""
|
||||
@ -614,6 +618,9 @@ fi
|
||||
if [[ -x "/usr/libexec/notification-daemon" ]]; then
|
||||
echo 'exec_always --no-startup-id /usr/libexec/notification-daemon -r'
|
||||
fi
|
||||
if command -v remind &> /dev/null && command -v notify-send &> /dev/null ; then
|
||||
echo "exec_always --no-startup-id $(command -v remind) -z '-k:${HOME}/.config/i3/scripts/reminder.sh %s &' ${HOME}/.reminders < /dev/null > /dev/null 2>&1"
|
||||
fi
|
||||
if [[ $dex -eq 0 ]]; then
|
||||
echo '# Start XDG autostart .desktop files using dex. See also'
|
||||
echo '# https://wiki.archlinux.org/index.php/XDG_Autostart'
|
||||
|
184
scripts/reminder.sh
Executable file
184
scripts/reminder.sh
Executable file
@ -0,0 +1,184 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
error() {
|
||||
yad --form --selectable-labels --title "I38 - Reminder Error" --field="${*}":lbl --button="Close!gtk-ok":0
|
||||
}
|
||||
|
||||
message() {
|
||||
yad --form --selectable-labels --title "I38 - Reminder" --field="${*}":lbl --button="Close!gtk-ok":0
|
||||
}
|
||||
|
||||
add_custom_reminder() {
|
||||
info="$(yad --form --selectable-labels \
|
||||
--title "I38 - New Custom Reminder" \
|
||||
--field="Comment for ~/.reminders file":lbl "" \
|
||||
--field="Reminder Comment" "" \
|
||||
--field="Reminder entry. Remember for notifications, it must ccontain the +5 after the time and the %2. at the end of the MSG.":lbl "" \
|
||||
--field="Reminder" "REM at +5 MSG %2.")"
|
||||
if [[ $? -eq 1 || $? -eq 252 ]]; then
|
||||
return
|
||||
fi
|
||||
while [[ $info =~ \|\| ]]; do
|
||||
info="${info//||/|}"
|
||||
done
|
||||
info="${info#|#}"
|
||||
# Get information for reminder into an array
|
||||
IFS='|' read -a reminder <<< $info
|
||||
if [[ "${reminder[0]}" != "# " ]]; then
|
||||
echo "# ${reminder[0]}" >> ~/.reminders
|
||||
fi
|
||||
if [[ "${reminder[1]}" != "REM at +5 MSG %2." ]]; then
|
||||
echo "${reminder[1]}" >> ~/.reminders
|
||||
message "Custom reminder added."
|
||||
else
|
||||
error "No reminder text entered, No action taken."
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
add_weekly_reminder() {
|
||||
info="$(yad --form --selectable-labels \
|
||||
--title "I38 - New Weekly Reminder" \
|
||||
--field="Reminder Text" "" \
|
||||
--field="Select Days":lbl "" \
|
||||
--field="Sunday":chk "FALSE" \
|
||||
--field="Monday":chk "FALSE" \
|
||||
--field="Tuesday":chk "FALSE" \
|
||||
--field="Wednesday":chk "FALSE" \
|
||||
--field="Thursday":chk "FALSE" \
|
||||
--field="Friday":chk "FALSE" \
|
||||
--field="Saturday":chk "FALSE" \
|
||||
--field="Select Hour:":num '1!1..12' \
|
||||
--field="Select Minute:":num '0!0..59' \
|
||||
--field="Select AM or PM":cb 'AM!PM' \
|
||||
--button="Cancel:1" \
|
||||
--button="Create Reminder:0")"
|
||||
|
||||
# Get information for reminder into an array
|
||||
IFS='|' read -a reminder <<< $info
|
||||
|
||||
# Change checked days into their name.
|
||||
reminder[2]="${reminder[2]/TRUE/Sun}"
|
||||
reminder[3]="${reminder[3]/TRUE/Mon}"
|
||||
reminder[4]="${reminder[4]/TRUE/Tue}"
|
||||
reminder[5]="${reminder[5]/TRUE/Wed}"
|
||||
reminder[6]="${reminder[6]/TRUE/Thu}"
|
||||
reminder[7]="${reminder[7]/TRUE/Fri}"
|
||||
reminder[8]="${reminder[8]/TRUE/Sat}"
|
||||
|
||||
# Make sure we have reminder text
|
||||
if [[ ${#reminder[0]} -lt 3 ]]; then
|
||||
error "No reminder text given, addition canceled."
|
||||
return
|
||||
fi
|
||||
reminderEntry="REM "
|
||||
noDays=1
|
||||
for ((i=2;i<=8;i++)) ; do
|
||||
if [[ "${reminder[i]}" != "FALSE" ]]; then
|
||||
reminderEntry+="${reminder[i]} "
|
||||
noDays=0
|
||||
fi
|
||||
done
|
||||
if [[ $noDays -eq 1 ]]; then
|
||||
error "No days were selected for the reminder. Nothing changed."
|
||||
return
|
||||
fi
|
||||
reminderEntry+="AT ${reminder[9]}:${reminder[10]}${reminder[11]} +5 REPEAT weekly MSG ${reminder[0]} %2."
|
||||
echo "# Added by I38." >> ~/.reminders
|
||||
echo "$reminderEntry" >> ~/.reminders
|
||||
if [[ -N ~/.reminders ]]; then
|
||||
message "Reminder added."
|
||||
else
|
||||
error "Something went wrong. The reminder was not added."
|
||||
fi
|
||||
}
|
||||
|
||||
view_reminders() {
|
||||
if ! [[ -r ~/.reminders ]]; then
|
||||
error "No reminders found."
|
||||
return
|
||||
fi
|
||||
|
||||
mapfile -t lines < ~/.reminders
|
||||
# Create an empty array to store cleaned-up reminders
|
||||
yadMenu=()
|
||||
|
||||
# Iterate through the reminder lines and clean them up
|
||||
for i in "${lines[@]}"; do
|
||||
# Remove the "REM" prefix and leading/trailing spaces
|
||||
formattedLine="${i#*REM }"
|
||||
# Remove MSG from the output.
|
||||
formattedLine="${formattedLine/MSG /}"
|
||||
# remove the usually %2. from the end of the line, but accept any digit in case someone changes it.
|
||||
formattedLine="${formattedLine% %[[:digit:]].}"
|
||||
|
||||
# Add to the menu
|
||||
yadMenu+=("$formattedLine")
|
||||
done
|
||||
|
||||
# Display the reminders
|
||||
reminder="$(yad --list --title "I38 - Reminders" --text "Current reminders:" \
|
||||
--column "Reminder" "${yadMenu[@]}" \
|
||||
--button="Close:1" --button="Delete:0" --response=1)"
|
||||
if [[ $? -ne 0 ]]; then
|
||||
return
|
||||
fi
|
||||
if [[ "${reminder:0:1}" == "#" ]]; then
|
||||
error "Please select the actual reminder to be deleted, anything starting with # is only a comment. Nothing changed."
|
||||
return
|
||||
fi
|
||||
# Remove the | from the end of reminder
|
||||
reminder="${reminder%|}"
|
||||
# Find the index to remove from lines.
|
||||
for i in "${!yadMenu[@]}" ; do
|
||||
if [[ "${yadMenu[i]}" == "${reminder}" ]]; then
|
||||
# Delete selected reminder and possible preceeding comment.
|
||||
commentIndex=$((i - 1))
|
||||
if [[ "${lines[commentIndex]:0:1}" == "#" ]]; then
|
||||
unset lines[$commentIndex]
|
||||
fi
|
||||
unset lines[$i]
|
||||
message "Reminder deleted."
|
||||
printf "%s\n" "${lines[@]}" > ~/.reminders
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
if ! command -v remind &> /dev/null ; then
|
||||
error "Please install remind. For notifications, please make sure to have notification-daemon and notify-send as well. Run i38.sh to regenerate your i3 config after the needed components are installed."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ $# -ne 0 ]]; then
|
||||
sox -ndqV0 synth .1 tri 600 norm -9 pad .05 repeat
|
||||
notify-send "$*"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
while : ; do
|
||||
action=$(yad --title "I38 - Reminders" --form \
|
||||
--button="_Add Reminder!gtk-ok":0 \
|
||||
--button="_View Reminders!gtk-info":2 \
|
||||
--button="Add Custom Reminder!gtk-edit":3 \
|
||||
--button="Close!gtk-cancel":1 \
|
||||
--separator="")
|
||||
|
||||
case $? in
|
||||
0)
|
||||
# Handle "Add Weekly Reminder" button click
|
||||
add_weekly_reminder
|
||||
;;
|
||||
1|252)
|
||||
# Handle "Close" button click and escape.
|
||||
exit 0
|
||||
;;
|
||||
2)
|
||||
# View reminders
|
||||
view_reminders
|
||||
;;
|
||||
3)
|
||||
# Handle "Add Custom Reminder" button click
|
||||
add_custom_reminder
|
||||
;;
|
||||
esac
|
||||
done
|
@ -12,6 +12,9 @@ i3 = i3ipc.Connection()
|
||||
def on_new_window(self,i3):
|
||||
system('play -n synth .25 sin 440:880 sin 480:920 remix - norm -3 pitch -500 &')
|
||||
|
||||
def on_close_window(self,i3):
|
||||
system('play -n synth .25 sin 880:440 sin 920:480 remix - norm -3 pitch -500 &')
|
||||
|
||||
def on_mode(self,event):
|
||||
mode= event.change
|
||||
if mode == 'ratpoison':
|
||||
@ -42,6 +45,7 @@ def on_fullscreen(self,i3):
|
||||
i3 = i3ipc.Connection()
|
||||
|
||||
i3.on('window::new', on_new_window)
|
||||
i3.on('window::close', on_close_window)
|
||||
i3.on(Event.MODE, on_mode)
|
||||
i3.on('workspace::focus', on_workspace_focus)
|
||||
i3.on('window::move', on_workspace_move)
|
||||
|
Reference in New Issue
Block a user