"Hash table" -> "Data structures", move task list and related functions

This commit is contained in:
contrapunctus 2021-02-09 00:35:29 +05:30
parent 6a96baccdc
commit 5cd9c9db47
2 changed files with 66 additions and 66 deletions

View File

@ -579,6 +579,34 @@ which span midnights. (see `chronometrist-events-clean')"
(defvar chronometrist-task-list nil
"List of tasks in `chronometrist-file'.")
(defun chronometrist-task-list ()
"Return a list of tasks from `chronometrist-file'."
(--> (chronometrist-loop-file for plist in chronometrist-file collect (plist-get plist :name))
(cl-remove-duplicates it :test #'equal)
(sort it #'string-lessp)))
(defun chronometrist-add-to-task-list (task)
(unless (cl-member task chronometrist-task-list :test #'equal)
(setq chronometrist-task-list
(sort (cons task chronometrist-task-list) #'string-lessp))))
(defun chronometrist-remove-from-task-list (task)
(let ((count (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
do (cl-loop for interval in intervals
do (cl-incf count))
finally return count))
(position (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
when (cl-loop for interval in intervals
do (cl-incf count)
when (equal task (plist-get interval :name))
return t)
return count)))
(when (and position (= position count))
;; The only interval for TASK is the last expression
(setq chronometrist-task-list (remove task chronometrist-task-list)))))
(defvar chronometrist--fs-watch nil
"Filesystem watch object.
Used to prevent more than one watch being added for the same
@ -1089,34 +1117,6 @@ Return
(forward-list)))))
:modify))))
(defun chronometrist-task-list ()
"Return a list of tasks from `chronometrist-file'."
(--> (chronometrist-loop-file for plist in chronometrist-file collect (plist-get plist :name))
(cl-remove-duplicates it :test #'equal)
(sort it #'string-lessp)))
(defun chronometrist-add-to-task-list (task)
(unless (cl-member task chronometrist-task-list :test #'equal)
(setq chronometrist-task-list
(sort (cons task chronometrist-task-list) #'string-lessp))))
(defun chronometrist-remove-from-task-list (task)
(let ((count (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
do (cl-loop for interval in intervals
do (cl-incf count))
finally return count))
(position (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
when (cl-loop for interval in intervals
do (cl-incf count)
when (equal task (plist-get interval :name))
return t)
return count)))
(when (and position (= position count))
;; The only interval for TASK is the last expression
(setq chronometrist-task-list (remove task chronometrist-task-list)))))
(defun chronometrist-refresh-file (fs-event)
"Re-read `chronometrist-file' and refresh the `chronometrist' buffer.
Argument _FS-EVENT is ignored."

View File

@ -522,8 +522,8 @@ file names respectively."
(chronometrist-migrate-timelog-file->sexp-file timeclock-file chronometrist-file)
(message "You can migrate later using `chronometrist-migrate-timelog-file->sexp-file'."))))
#+END_SRC
*** Hash Table
**** chronometrist-events :variable:
*** Data structures
**** chronometrist-events :variable:hash_table:
#+BEGIN_SRC emacs-lisp
(defvar chronometrist-events (make-hash-table :test #'equal)
"Each key is a date in the form (YEAR MONTH DAY).
@ -687,12 +687,46 @@ which span midnights. (see `chronometrist-events-clean')"
event)))
(seq-filter #'identity)))
#+END_SRC
*** Common
**** task-list :variable:
**** task-list :variable:list:
#+BEGIN_SRC emacs-lisp
(defvar chronometrist-task-list nil
"List of tasks in `chronometrist-file'.")
#+END_SRC
**** task-list :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-task-list ()
"Return a list of tasks from `chronometrist-file'."
(--> (chronometrist-loop-file for plist in chronometrist-file collect (plist-get plist :name))
(cl-remove-duplicates it :test #'equal)
(sort it #'string-lessp)))
#+END_SRC
**** add-to-task-list :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-add-to-task-list (task)
(unless (cl-member task chronometrist-task-list :test #'equal)
(setq chronometrist-task-list
(sort (cons task chronometrist-task-list) #'string-lessp))))
#+END_SRC
**** remove-from-task-list :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-remove-from-task-list (task)
(let ((count (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
do (cl-loop for interval in intervals
do (cl-incf count))
finally return count))
(position (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
when (cl-loop for interval in intervals
do (cl-incf count)
when (equal task (plist-get interval :name))
return t)
return count)))
(when (and position (= position count))
;; The only interval for TASK is the last expression
(setq chronometrist-task-list (remove task chronometrist-task-list)))))
#+END_SRC
*** Common
**** fs-watch :internal:variable:
#+BEGIN_SRC emacs-lisp
(defvar chronometrist--fs-watch nil
@ -1308,40 +1342,6 @@ Return
(forward-list)))))
:modify))))
#+END_SRC
***** task-list :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-task-list ()
"Return a list of tasks from `chronometrist-file'."
(--> (chronometrist-loop-file for plist in chronometrist-file collect (plist-get plist :name))
(cl-remove-duplicates it :test #'equal)
(sort it #'string-lessp)))
#+END_SRC
***** add-to-task-list :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-add-to-task-list (task)
(unless (cl-member task chronometrist-task-list :test #'equal)
(setq chronometrist-task-list
(sort (cons task chronometrist-task-list) #'string-lessp))))
#+END_SRC
***** remove-from-task-list :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-remove-from-task-list (task)
(let ((count (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
do (cl-loop for interval in intervals
do (cl-incf count))
finally return count))
(position (cl-loop with count = 0
for intervals being the hash-values of chronometrist-events
when (cl-loop for interval in intervals
do (cl-incf count)
when (equal task (plist-get interval :name))
return t)
return count)))
(when (and position (= position count))
;; The only interval for TASK is the last expression
(setq chronometrist-task-list (remove task chronometrist-task-list)))))
#+END_SRC
***** refresh-file :function:
#+BEGIN_SRC emacs-lisp
(defun chronometrist-refresh-file (fs-event)