From 14a3837707b3e057a68f05360eea470cdc772ecc Mon Sep 17 00:00:00 2001 From: Brady McDonough Date: Sat, 18 Feb 2023 17:04:14 -0700 Subject: [PATCH] Working with timestamps and some minor beautification --- tacc.el | 64 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/tacc.el b/tacc.el index 3490085..48666b3 100644 --- a/tacc.el +++ b/tacc.el @@ -1,3 +1,4 @@ +;;; -*- lexical-binding: t -*- ;;; tacc.el --- A pomidoro timer supporting tags and customizable export ;; Author: Brady McDonough @@ -47,16 +48,13 @@ ;; 10 Provides ;;; Code: -;;; -*- lexical-binding: t -*- ;; TODOS: -;; ERROR: mapconcat doesn't seem to respect lexical binding which leaves me unable to use a closure for a ticker -;; For now the code which relies on this will be noop'd -;; BUG : Countdown was ??? because 0 doesn't default to zero but "now". -;; That does leave an edgecase in the countdown display I'll need to explicitly check for ;; ERROR: timer shutdown seems to leave things in a wrong state and buffer doesn't die properly ;; Check on the logic of push-current, needs predicates rather than lazy if conditions ;; I'm not calling anything to destroy the buffer on desched +;; BUG: The buffer is immortal? +;; ;; Optional (require 'icicles nil t) @@ -209,19 +207,17 @@ Each function must have no required arguments and return a list of strings" :group 'tacc-behavior) (defun tacc-play-sound-file-emacs (file) - "Play some file using an asynchronous subprocess" + "Play some file in a child emacs process" (if (fboundp 'play-sound-internal) (start-process "tacc-play-sound" - tacc-buffer-name + nil (car command-line-args) - "-Q" "--batch" "--eval" (format "(play-sound-file \"%s\")" file)) (warn "Emacs lacks builtin sound support"))) (defcustom tacc-play-sound-file #'tacc-play-sound-file-emacs - "Function used to play sounds. Set to nil to disable sound. -It's best to use something asynchronous (like spawning a child emacs process)" + "Asyncronous function to play sounds. Set to nil to disable sound" :type '(choice (const nil) function) :group 'tacc-behavior) @@ -284,13 +280,17 @@ registered" sym-name) ;; (cond ((eq state 'break) (setq ticker (1+ ticker))) ;; ( 't ticker))))) -(defvar tacc-info `((history . ()) - (cycle . 0) - (work-ts . nil) - (break-ts . nil) - (end-ts . nil) - (state . work) - (tag . "")) +(defun tacc-info-initial () + "Returns the initial state of tacc-info" + `((history . ()) + (cycle . 0) + (work-ts . nil) + (break-ts . nil) + (end-ts . nil) + (state . stop) + (tag . ""))) + +(defvar tacc-info (tacc-info-initial) "State information related to the timer") (defvar tacc-timer nil @@ -391,7 +391,7 @@ Note, if there is no tacc-buffer then you shouldn't be touching tacc-info" (if work-ts (push `((ts . ,work-ts) (end . ,(if (cdr break-ts) - (cdr break-ts) + (time-seconds (cdr break-ts)) (cdr end-ts))) (state . work) (tag . ,tag)) @@ -549,20 +549,20 @@ float" (tacc-insert-between .graph-start .graph-end (let-alist tacc-info - (tacc-tag-render .tag) - (let* ((start-s (time-to-seconds start-ts)) - (est-s (time-to-seconds est-ts)) - (count-s (time-to-seconds countdown)) - (now-s (time-to-seconds now)) - (end-s (if (< est-s now-s) now-s est-s)) - (work-s (time-to-seconds .work-ts)) - (break-s (time-to-seconds .break-ts)) - - (total (- end-s work-s)) - (work-prop (/ (- (if (numberp break-s) break-s now-s) work-s) total)) - (break-prop (/ (if (numberp break-s) (- now-s break-s) 0) total)) - (void-prop (- 1 (+ work-prop break-prop)))) - (tacc-graph-bar-render width work-prop break-prop void-prop)))))) + (concat (tacc-tag-render .tag) + (let* ((start-s (time-to-seconds start-ts)) + (est-s (time-to-seconds est-ts)) + (count-s (time-to-seconds countdown)) + (now-s (time-to-seconds now)) + (end-s (if (< est-s now-s) now-s est-s)) + (work-s (time-to-seconds .work-ts)) + (break-s (time-to-seconds .break-ts)) + + (total (- end-s work-s)) + (work-prop (/ (- (if (numberp break-s) break-s now-s) work-s) total)) + (break-prop (/ (if (numberp break-s) (- now-s break-s) 0) total)) + (void-prop (- 1 (+ work-prop break-prop)))) + (tacc-graph-bar-render width work-prop break-prop void-prop))))))) (defun tacc-new-graph-bar-render () (tacc-render-with-buffer