Support timestring.el
Quickly access strings that encode time is various formats. See the module docs in timestring.el for more information.
This commit is contained in:
		
							parent
							
								
									6fd9947ec8
								
							
						
					
					
						commit
						851aba8201
					
				
					 2 changed files with 72 additions and 0 deletions
				
			
		| 
						 | 
					@ -28,6 +28,7 @@
 | 
				
			||||||
;; TODO: Consider renaming entr.el.
 | 
					;; TODO: Consider renaming entr.el.
 | 
				
			||||||
(require 'entr)
 | 
					(require 'entr)
 | 
				
			||||||
(require 'scrot)
 | 
					(require 'scrot)
 | 
				
			||||||
 | 
					(require 'timestring)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
;; TODO: Remove path once published to MELPA.
 | 
					;; TODO: Remove path once published to MELPA.
 | 
				
			||||||
;; TODO: How can I package this using Nix?
 | 
					;; TODO: How can I package this using Nix?
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										71
									
								
								emacs/.emacs.d/wpc/timestring.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								emacs/.emacs.d/wpc/timestring.el
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,71 @@
 | 
				
			||||||
 | 
					;;; timestring.el --- Quickly access timestamps in different formats -*- lexical-binding: t -*-
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; Author: William Carroll <wpcarro@gmail.com>
 | 
				
			||||||
 | 
					;; Version: 0.0.1
 | 
				
			||||||
 | 
					;; Package-Requires: ((ts "0.2") (emacs "25.1"))
 | 
				
			||||||
 | 
					;; Homepage: https://user.git.corp.google.com/wpcarro/briefcase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; Commentary:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;; I was making some API calls where a URL needed a `since` parameter that of an
 | 
				
			||||||
 | 
					;; RFC 3339 encoded string.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Because I didn't know what a RFC 3339 encoded
 | 
				
			||||||
 | 
					;; string was at the time, and because I didn't know what its format was
 | 
				
			||||||
 | 
					;; according to strftime, and because I'm most likely to forget both of these
 | 
				
			||||||
 | 
					;; things by the next time that I need something similar, I decided to write
 | 
				
			||||||
 | 
					;; this package so that I can accumulate a list of common time encodings.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; Thank you, Emacs.
 | 
				
			||||||
 | 
					;;
 | 
				
			||||||
 | 
					;; p.s. - I may turn this into a proper module and publish it.  But not today.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;; Code:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
				
			||||||
 | 
					;; Dependencies
 | 
				
			||||||
 | 
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(require 'ts)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
				
			||||||
 | 
					;; Library
 | 
				
			||||||
 | 
					;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defcustom timestring-supported-encodings
 | 
				
			||||||
 | 
					  '(("RFC 3339" . "%Y-%m-%dT%H:%M:%SZ")
 | 
				
			||||||
 | 
					    ;; Does anyone recognize this format?
 | 
				
			||||||
 | 
					    ("IDK" . "%Y-%m-%d %H:%M:%S %z"))
 | 
				
			||||||
 | 
					  "Mapping of encoding names to their format strings.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defcustom timestring-supported-times
 | 
				
			||||||
 | 
					  '(("yesterday" . timestring--yesterday)
 | 
				
			||||||
 | 
					    ("now" . ts-now)
 | 
				
			||||||
 | 
					    ("tomorrow" . timestring--tomorrow))
 | 
				
			||||||
 | 
					  "Mapping of a labels to the functions that create those time objects.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun timestring--yesterday ()
 | 
				
			||||||
 | 
					  "Return a time object for yesterday."
 | 
				
			||||||
 | 
					  (ts-adjust 'day -1 (ts-now)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun timestring--tomorrow ()
 | 
				
			||||||
 | 
					  "Return a time object for yesterday."
 | 
				
			||||||
 | 
					  (ts-adjust 'day +1 (ts-now)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun timestring--completing-read (label xs)
 | 
				
			||||||
 | 
					  "Call `completing-read' with LABEL over the collection XS."
 | 
				
			||||||
 | 
					  (alist-get (completing-read label xs) xs nil nil #'equal))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun timestring-copy-encoded-time ()
 | 
				
			||||||
 | 
					  "Select a common time and then select an encoding.  The selected time will be
 | 
				
			||||||
 | 
					encoded using the selected encoding and copied onto your clipboard."
 | 
				
			||||||
 | 
					  (interactive)
 | 
				
			||||||
 | 
					  (let ((time (funcall (timestring--completing-read
 | 
				
			||||||
 | 
					                        "Time: " timestring-supported-times)))
 | 
				
			||||||
 | 
					        (fmt (timestring--completing-read
 | 
				
			||||||
 | 
					              "Encoding: " timestring-supported-encodings)))
 | 
				
			||||||
 | 
					    (kill-new (ts-format fmt time))
 | 
				
			||||||
 | 
					    (message "Copied!")))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(provide 'timestring)
 | 
				
			||||||
 | 
					;;; timestring.el ends here
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue