aboutsummaryrefslogtreecommitdiff
path: root/modules/custom-datetime.el
diff options
context:
space:
mode:
Diffstat (limited to 'modules/custom-datetime.el')
-rw-r--r--modules/custom-datetime.el83
1 files changed, 27 insertions, 56 deletions
diff --git a/modules/custom-datetime.el b/modules/custom-datetime.el
index 87b286de7..0528688c2 100644
--- a/modules/custom-datetime.el
+++ b/modules/custom-datetime.el
@@ -1,4 +1,4 @@
-;;; custom-datetime.el --- -*- coding: utf-8; lexical-binding: t; -*-
+;;; custom-datetime.el --- Insert formatted date and time strings -*- coding: utf-8; lexical-binding: t; -*-
;;; Commentary:
;;
@@ -12,47 +12,33 @@
;; Runtime requires: keybindings.
;; Direct test load: yes (requires keybindings explicitly).
;;
-;; 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
+;; Date/time insertion commands under C-; d. Each command is generated from a
+;; customizable format variable and inserts format-time-string output at point.
;;
;;; Code:
(require 'keybindings) ;; provides cj/custom-keymap
+(defmacro cj/--define-datetime-inserter (name format-var thing)
+ "Define interactive command NAME inserting the current THING at point.
+THING is a short noun phrase (\"date and time\", \"time\", \"date\") used in
+the docstring. The inserted text is `format-time-string' applied to
+FORMAT-VAR's value, so customizing FORMAT-VAR changes the output."
+ (declare (indent defun))
+ `(defun ,name ()
+ ,(format "Insert the current %s into the current buffer.\nUse `%s' for formatting."
+ thing format-var)
+ (interactive)
+ (insert (format-time-string ,format-var (current-time)))))
+
;; ----------------------------- 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))))
+(cj/--define-datetime-inserter cj/insert-readable-date-time
+ readable-date-time-format "date and time")
;; ----------------------------- Sortable Date Time ----------------------------
@@ -60,11 +46,8 @@ Use `readable-date-time-format' for formatting."
"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))))
+(cj/--define-datetime-inserter cj/insert-sortable-date-time
+ sortable-date-time-format "date and time")
;; ------------------------------- Sortable Time -------------------------------
@@ -72,11 +55,8 @@ Use `sortable-date-time-format' for formatting."
"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))))
+(cj/--define-datetime-inserter cj/insert-sortable-time
+ sortable-time-format "time")
;; ------------------------------- Readable Time -------------------------------
@@ -84,11 +64,8 @@ Use `sortable-time-format' for formatting."
"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))))
+(cj/--define-datetime-inserter cj/insert-readable-time
+ readable-time-format "time")
;; ------------------------------- Sortable Date -------------------------------
@@ -96,11 +73,8 @@ Use `readable-time-format' for formatting."
"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))))
+(cj/--define-datetime-inserter cj/insert-sortable-date
+ sortable-date-format "date")
;; ------------------------------- Readable Date -------------------------------
@@ -108,11 +82,8 @@ Use `sortable-date-format' for formatting."
"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))))
+(cj/--define-datetime-inserter cj/insert-readable-date
+ readable-date-format "date")
;; ------------------------------ Date Time Keymap -----------------------------