feat(emacs-pkgs): Check in separate dottime package
This package adds a toggle for displaying modeline time in dottime, as well as a function for formatting time as dottime generically.
This commit is contained in:
parent
02e2877193
commit
2bf2567284
2 changed files with 66 additions and 0 deletions
7
tools/emacs-pkgs/dottime/default.nix
Normal file
7
tools/emacs-pkgs/dottime/default.nix
Normal file
|
@ -0,0 +1,7 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
pkgs.third_party.emacsPackagesNg.trivialBuild rec {
|
||||
pname = "dottime";
|
||||
version = "1.0";
|
||||
src = ./dottime.el;
|
||||
}
|
59
tools/emacs-pkgs/dottime/dottime.el
Normal file
59
tools/emacs-pkgs/dottime/dottime.el
Normal file
|
@ -0,0 +1,59 @@
|
|||
;;; dottime.el --- use dottime in the modeline
|
||||
;;
|
||||
;; Copyright (C) 2019 Google Inc.
|
||||
;;
|
||||
;; Author: Vincent Ambo <tazjin@google.com>
|
||||
;; Version: 1.0
|
||||
;; Package-Requires: (cl-lib)
|
||||
;;
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; This package changes the display of time in the modeline to use
|
||||
;; dottime (see https://dotti.me/) instead of the standard time
|
||||
;; display.
|
||||
;;
|
||||
;; Modeline dottime display is enabled by calling
|
||||
;; `dottime-display-mode' and dottime can be used in Lisp code via
|
||||
;; `dottime-format'.
|
||||
|
||||
(require 'cl-lib)
|
||||
(require 'time)
|
||||
|
||||
(defun dottime--format-string ()
|
||||
"Creates the dottime format string for `format-time-string'
|
||||
based on the local timezone."
|
||||
|
||||
(let* ((offset-sec (car (current-time-zone)))
|
||||
(offset-hours (/ offset-sec 60 60)))
|
||||
(if (/= offset-hours 0)
|
||||
(concat "%m-%dT%H·%M" (format "%0+3d" offset-hours))
|
||||
"%m-%dT%H·%M")))
|
||||
|
||||
(defun dottime--display-time-update-advice (orig)
|
||||
"Function used as advice to `display-time-update' with a
|
||||
rebound definition of `format-time-string' that renders all
|
||||
timestamps as dottime."
|
||||
|
||||
(cl-letf* ((format-orig (symbol-function 'format-time-string))
|
||||
((symbol-function 'format-time-string)
|
||||
(lambda (&rest _)
|
||||
(funcall format-orig (dottime--format-string) nil t))))
|
||||
(funcall orig)))
|
||||
|
||||
(defun dottime-format (&optional time)
|
||||
"Format the given TIME in dottime. If TIME is nil, the current
|
||||
time will be used."
|
||||
|
||||
(format-time-string (dottime--format-string) time t))
|
||||
|
||||
(defun dottime-display-mode (arg)
|
||||
"Enable time display as dottime. Disables dottime if called
|
||||
with prefix 0 or nil."
|
||||
|
||||
(interactive "p")
|
||||
(if (or (eq arg 0) (eq arg nil))
|
||||
(advice-remove 'display-time-update #'dottime--display-time-update-advice)
|
||||
(advice-add 'display-time-update :around #'dottime--display-time-update-advice))
|
||||
(display-time-update))
|
||||
|
||||
(provide 'dottime)
|
Loading…
Reference in a new issue