diff --git a/demo/editmode.tape b/demo/editmode.tape new file mode 100644 index 0000000..628d144 --- /dev/null +++ b/demo/editmode.tape @@ -0,0 +1,78 @@ +# systab — Edit Mode with Notification Flags +# Demonstrates the crontab-style editor with :flags syntax. + +Output demo/editmode.gif +Set Shell bash +Set Width 1200 +Set Height 600 +Set FontSize 16 + +Set TypingSpeed 50ms + +Sleep 1s + +# First create some jobs to edit +Type "# Create some jobs to work with" +Enter +Sleep 500ms +Type "systab -t 'every 5 minutes' -c 'echo ping'" +Enter +Sleep 2s +Type "systab -t daily -c '/home/user/backup.sh' -i" +Enter +Sleep 2s + +# Open edit mode with EDITOR=nano for visibility +Type "# Open edit mode — add notifications, create and modify jobs" +Enter +Sleep 1s +Type "EDITOR=nano systab -E" +Sleep 500ms +Enter +Sleep 3s + +# In nano: navigate to the end of the file +# Ctrl+V = page down in nano, then Down to reach last line +Ctrl+V +Sleep 500ms +Down 5 +Sleep 500ms + +# Add a new job line with notification flags +Type "new:i,e=admin@example.com | hourly | curl -s https://example.com/health" +Sleep 1s +Enter + +Sleep 1s + +# Save and exit nano +Ctrl+O +Sleep 500ms +Enter +Sleep 500ms +Ctrl+X +Sleep 3s + +# Show the result +Type "# See the changes applied" +Enter +Sleep 500ms +Type "systab -S" +Sleep 500ms +Enter +Sleep 4s + +# Re-open edit mode to show flags are persisted +Type "# Re-open edit mode — flags are persisted" +Enter +Sleep 1s +Type "EDITOR=nano systab -E" +Sleep 500ms +Enter +Sleep 3s + +# Just view and exit without changes +Ctrl+X +Sleep 2s + +Sleep 2s diff --git a/demo/notifications.tape b/demo/notifications.tape new file mode 100644 index 0000000..dd20496 --- /dev/null +++ b/demo/notifications.tape @@ -0,0 +1,62 @@ +# systab — Notifications +# Shows status-aware desktop and email notifications. + +Output demo/notifications.gif +Set Shell bash +Set Width 1200 +Set Height 600 +Set FontSize 16 + +Set TypingSpeed 50ms + +Sleep 1s + +# Desktop notification — success case +Type "# Desktop notification on success/failure" +Enter +Sleep 1s +Type "systab -t 'in 1 minute' -c 'echo success' -i" +Sleep 500ms +Enter +Sleep 2s + +# Desktop notification — failure case +Type "systab -t 'in 1 minute' -c 'exit 1' -i" +Sleep 500ms +Enter +Sleep 2s + +# Email notification +Type "# Email notification via sendmail" +Enter +Sleep 1s +Type "systab -t 'in 1 minute' -c 'echo test' -m user@example.com" +Sleep 500ms +Enter +Sleep 2s + +# Both notifications +Type "# Both desktop and email" +Enter +Sleep 1s +Type "systab -t 'every day at 9am' -c '/home/user/backup.sh' -i -m admin@example.com" +Sleep 500ms +Enter +Sleep 2s + +# Show the generated service file to see ExecStopPost lines +Type "# Inspect generated service file" +Enter +Sleep 1s +Type "cat ~/.config/systemd/user/systab_*.service | head -20" +Sleep 500ms +Enter +Sleep 4s + +# Check status +Type "systab -S" +Sleep 500ms +Enter +Sleep 3s + +Sleep 2s diff --git a/demo/quickstart.tape b/demo/quickstart.tape new file mode 100644 index 0000000..2ef1ac9 --- /dev/null +++ b/demo/quickstart.tape @@ -0,0 +1,62 @@ +# systab — Quick Start +# Creates a few jobs, checks status, views logs, then cleans up. + +Output demo/quickstart.gif +Set Shell bash +Set Width 1200 +Set Height 600 +Set FontSize 16 + +Set TypingSpeed 50ms + +Sleep 1s + +# Create a recurring job +Type "systab -t 'every 5 minutes' -c 'echo health check OK'" +Sleep 500ms +Enter +Sleep 2s + +# Create a one-time job +Type "systab -t 'in 30 minutes' -c 'echo reminder: meeting soon'" +Sleep 500ms +Enter +Sleep 2s + +# Check status of all jobs +Type "systab -S" +Sleep 500ms +Enter +Sleep 4s + +# View logs +Type "systab -L" +Sleep 500ms +Enter +Sleep 3s + +# Pause a job (uses the first job ID from status) +Type "systab -P $(systab -S 2>/dev/null | grep -m1 'Job:' | awk '{print $2}')" +Sleep 500ms +Enter +Sleep 2s + +# Show it's paused +Type "systab -S" +Sleep 500ms +Enter +Sleep 3s + +# Resume it +Type "systab -R $(systab -S 2>/dev/null | grep -m1 'Disabled' -B4 | grep 'Job:' | awk '{print $2}')" +Sleep 500ms +Enter +Sleep 2s + +# Clean up completed one-time jobs +Type "systab -C" +Sleep 500ms +Enter +Sleep 2s + +Sleep 2s diff --git a/systab b/systab index 3311de9..da51041 100755 --- a/systab +++ b/systab @@ -158,8 +158,11 @@ parse_time() { fi # Try to parse with date command (one-time specs) + # Strip "in " prefix for natural phrasing ("in 5 minutes" → "5 minutes") + local date_spec="$time_spec" + [[ "${date_spec,,}" == in\ * ]] && date_spec="${date_spec:3}" local parsed_date - if parsed_date=$(date -d "$time_spec" '+%Y-%m-%d %H:%M:%S' 2>/dev/null); then + if parsed_date=$(date -d "$date_spec" '+%Y-%m-%d %H:%M:%S' 2>/dev/null); then echo "$parsed_date" return fi