Unit files are now named systab_<6-char-hex> (e.g., systab_a1b2c3),
so the ID is derived from the filename — no more SYSTAB_ID comments
in unit files, no id-to-jobname mappings in edit mode. Removes
generate_job_name, get_job_id, get_job_by_id, ensure_job_id.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Parse crontab lines by splitting on the first two whitespace
boundaries via regex, so both spaces and tabs work as delimiters.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Shows common OnCalendar patterns (hourly, every 15 min, specific
times, day-of-week) so users know what formats are available.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Handle multiple "new" lines in edit mode by collecting them in an
array instead of an associative array (which collapsed duplicates)
- Use random hex suffix in job names instead of PID, avoiding
collisions when multiple jobs are created in the same second
- Fix trap variable scoping in edit_jobs()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
One-time timers now auto-unload from systemd after firing, so they
no longer linger as "elapsed" in list-timers. Unit files remain on
disk for ID/edit/status lookups; -C still cleans those up.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 6-char hex short IDs (SYSTAB_ID) embedded in unit files for
human-friendly job identification. The -E flag now opens a real
crontab-like editor where jobs can be created, updated, and deleted
by editing tab-separated ID/SCHEDULE/COMMAND lines. Legacy jobs
without IDs get one auto-assigned on first edit.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>