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.el61
1 files changed, 28 insertions, 33 deletions
diff --git a/modules/custom-datetime.el b/modules/custom-datetime.el
index 87b286de7..6bca494d8 100644
--- a/modules/custom-datetime.el
+++ b/modules/custom-datetime.el
@@ -22,15 +22,16 @@
;; - cj/insert-sortable-date
;; - cj/insert-readable-date
;;
-;; Each command uses a corresponding format variable:
+;; Each command is generated by `cj/--define-datetime-inserter' from 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.
+;; 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':
+;; 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
@@ -42,17 +43,26 @@
(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 +70,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 +79,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 +88,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 +97,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 +106,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 -----------------------------