blob: dd15daa0db2a153bcf7fb54af395f3ab5acae571 (
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
112
113
114
115
116
117
118
119
120
121
122
|
;;; 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:
;; cj/custom-keymap defined in keybindings.el
(eval-when-compile (defvar cj/custom-keymap))
;; ----------------------------- 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
(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.
|