;;; redtick.el --- Smallest pomodoro timer (1 char) -*- lexical-binding: t -*- ;; Copyright (C) 2022 Sean Whitton ;; Simplified ver. of F. Febles's Unlicensed redtick.el. My work is GPL-3+. ;;; Code: (defconst redtick--ticks (let ((map (make-mode-line-mouse-map 'mouse-1 #'redtick))) (mapcar (pcase-lambda (`(,time ,char ,colour)) (cons time (concat (propertize char 'pointer 'hand 'local-map map 'face `(:inherit mode-line :foreground ,colour)) " "))) '((187.5 "█" "#ffff66") (187.5 "▇" "#ffcc66") (187.5 "▆" "#cc9966") (187.5 "▅" "#ff9966") (187.5 "▄" "#cc6666") (187.5 "▃" "#ff6666") (187.5 "▂" "#ff3366") (187.5 "▁" "#ff0066") (37.5 "█" "#00cc66") (37.5 "▇" "#33cc66") (37.5 "▆" "#66cc66") (37.5 "▅" "#00ff66") (37.5 "▄" "#33ff66") (37.5 "▃" "#66ff66") (37.5 "▂" "#99ff66") (37.5 "▁" "#ccff66") (nil "✓" "#cf6a4c"))))) (defvar redtick--tick) (defvar redtick--timer) (defun redtick--update-tick (ticks) (when (caar ticks) (setq redtick--timer (run-at-time (caar ticks) nil #'redtick--update-tick (cdr ticks)))) (setq redtick--tick (cdar ticks)) (force-mode-line-update t)) ;;;###autoload (define-minor-mode redtick-mode "Little Pomodoro timer in the mode line." :global t (setq redtick--timer nil redtick--tick (cdar (last redtick--ticks))) (when redtick-mode (let ((tick '(:eval (and redtick-mode (if (mode-line-window-selected-p) redtick--tick " ")))) (format (default-value 'mode-line-format))) (unless (member tick format) (catch 'done (while (setq format (cdr format)) (when (eq (cadr format) 'mode-line-buffer-identification) (throw 'done (push tick (cdr format)))))) (force-mode-line-update t))))) ;;;###autoload (defun redtick () (interactive) (redtick-mode 1) (redtick--update-tick redtick--ticks)) (provide 'redtick) ;;; redtick.el ends here