blob: 0528688c256f9538f0b2aac9f8862d785eccddb4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
;;; custom-datetime.el --- Insert formatted date and time strings -*- coding: utf-8; lexical-binding: t; -*-
;;; Commentary:
;;
;; Layer: 2 (Core UX).
;; Category: L/C.
;; Load shape: eager.
;; Eager reason: registers its C-; d datetime submap at load. Currently eager by
;; init order; a deferral candidate for Phase 3/4 (command/autoload +
;; registration API).
;; Top-level side effects: defines cj/datetime-map, registers it under C-; d.
;; Runtime requires: keybindings.
;; Direct test load: yes (requires keybindings explicitly).
;;
;; 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.")
(cj/--define-datetime-inserter cj/insert-readable-date-time
readable-date-time-format "date and 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.")
(cj/--define-datetime-inserter cj/insert-sortable-date-time
sortable-date-time-format "date and 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.")
(cj/--define-datetime-inserter cj/insert-sortable-time
sortable-time-format "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.")
(cj/--define-datetime-inserter cj/insert-readable-time
readable-time-format "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.")
(cj/--define-datetime-inserter cj/insert-sortable-date
sortable-date-format "date")
;; ------------------------------- 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.")
(cj/--define-datetime-inserter cj/insert-readable-date
readable-date-format "date")
;; ------------------------------ Date Time Keymap -----------------------------
(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 )
(cj/register-prefix-map "d" cj/datetime-map)
(with-eval-after-load 'which-key
(which-key-add-key-based-replacements
"C-; d" "date/time insertion menu"
"C-; d r" "readable date-time"
"C-; d s" "sortable date-time"
"C-; d t" "sortable time"
"C-; d T" "readable time"
"C-; d d" "sortable date"
"C-; d D" "readable date"))
(provide 'custom-datetime)
;;; custom-datetime.el ends here.
|