diff options
| author | Craig Jennings <c@cjennings.net> | 2025-10-18 00:13:43 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2025-10-18 00:13:43 -0500 |
| commit | 00fe98bd7c67b111d62c14282ccda8021bea8083 (patch) | |
| tree | 013ea30e315dec1beba10b60c7289bbeac150435 | |
| parent | 4899d9c020d7c3fdadea6a7234818c2170aa5a07 (diff) | |
refactor: datetime: Enhance date/time insertion with keymap support
Replaced prefix command setup with defvar-keymap for maintainability.
Enhanced documentation to list interactive commands and customization options.
| -rw-r--r-- | modules/custom-datetime.el | 72 |
1 files changed, 50 insertions, 22 deletions
diff --git a/modules/custom-datetime.el b/modules/custom-datetime.el index 95d672c8..02c16dc1 100644 --- a/modules/custom-datetime.el +++ b/modules/custom-datetime.el @@ -1,93 +1,121 @@ ;;; custom-datetime.el --- -*- coding: utf-8; lexical-binding: t; -*- ;;; Commentary: +;; Utilities for inserting date/time stamps in multiple formats. +;; +;; Interactive commands: +;; - cj/insert-readable-date-time +;; - cj/insert-sortable-date-time +;; - cj/insert-sortable-time +;; - cj/insert-readable-time +;; - cj/insert-sortable-date +;; - cj/insert-readable-date +;; +;; Each command uses a corresponding format variable: +;; readable-date-time-format, sortable-date-time-format, +;; sortable-time-format, readable-time-format, +;; sortable-date-format, readable-date-format. +;; Customize these (see =format-time-string') to change output. +;; Some defaults include a trailing space for convenient typing. +;; +;; Key bindings: +;; A prefix map =cj/datetime-map' is installed on "d" under =cj/custom-keymap': +;; r → readable date+time +;; s → sortable date+time +;; t → sortable time +;; T → readable time +;; d → sortable date +;; D → readable date ;; - ;;; Code: +(eval-when-compile (require 'keybindings)) + +;; ----------------------------- Readable Date Time ---------------------------- (defvar readable-date-time-format "%A, %B %d, %Y at %I:%M:%S %p %Z " "Format string used by `cj/insert-readable-date-time'. - See `format-time-string' for possible replacements.") (defun cj/insert-readable-date-time () "Insert the current date and time into the current buffer. - Use `readable-date-time-format' for formatting." (interactive) (insert (format-time-string readable-date-time-format (current-time)))) +;; ----------------------------- Sortable Date Time ---------------------------- + (defvar sortable-date-time-format "%Y-%m-%d %a @ %H:%M:%S %z " "Format string used by `cj/insert-sortable-date-time'. - See `format-time-string' for possible replacements.") (defun cj/insert-sortable-date-time () "Insert the current date and time into the current buffer. - Use `sortable-date-time-format' for formatting." (interactive) (insert (format-time-string sortable-date-time-format (current-time)))) +;; ------------------------------- Sortable Time ------------------------------- + (defvar sortable-time-format "%I:%M:%S %p %Z " "Format string used by `cj/insert-sortable-time'. - See `format-time-string' for possible replacements.") (defun cj/insert-sortable-time () "Insert the current time into the current buffer. - Use `sortable-time-format' for formatting." (interactive) (insert (format-time-string sortable-time-format (current-time)))) +;; ------------------------------- Readable Time ------------------------------- + (defvar readable-time-format "%-I:%M %p " "Format string used by `cj/insert-readable-time'. - See `format-time-string' for possible replacements.") (defun cj/insert-readable-time () "Insert the current time into the current buffer. - Use `readable-time-format' for formatting." (interactive) (insert (format-time-string readable-time-format (current-time)))) +;; ------------------------------- Sortable Date ------------------------------- + (defvar sortable-date-format "%Y-%m-%d %a" "Format string used by `cj/insert-sortable-date'. - See `format-time-string' for possible replacements.") (defun cj/insert-sortable-date () "Insert the current date into the current buffer. - Use `sortable-date-format' for formatting." (interactive) (insert (format-time-string sortable-date-format (current-time)))) +;; ------------------------------- Readable Date ------------------------------- + (defvar readable-date-format "%A, %B %d, %Y" "Format string used by `cj/insert-readable-date'. - See `format-time-string' for possible replacements.") (defun cj/insert-readable-date () "Insert the current date into the current buffer. - Use `readable-date-format' for formatting." (interactive) (insert (format-time-string readable-date-format (current-time)))) +;; ------------------------------ Date Time Keymap ----------------------------- + ;; Date/time insertion prefix and keymap -(define-prefix-command 'cj/datetime-map nil - "Keymap for inserting various date/time formats.") -(define-key cj/custom-keymap "d" 'cj/datetime-map) -(define-key cj/datetime-map "r" 'cj/insert-readable-date-time) -(define-key cj/datetime-map "s" 'cj/insert-sortable-date-time) -(define-key cj/datetime-map "t" 'cj/insert-sortable-time) -(define-key cj/datetime-map "T" 'cj/insert-readable-time) -(define-key cj/datetime-map "d" 'cj/insert-sortable-date) -(define-key cj/datetime-map "D" 'cj/insert-readable-date) + +(defvar-keymap cj/datetime-map + :doc "Keymap for date/time insertions." + "r" #'cj/insert-readable-date-time + "s" #'cj/insert-sortable-date-time + "t" #'cj/insert-sortable-time + "T" #'cj/insert-readable-time + "d" #'cj/insert-sortable-date + "D" #'cj/insert-readable-date ) +(keymap-set cj/custom-keymap "d" cj/datetime-map) (provide 'custom-datetime) ;;; custom-datetime.el ends here. |
