feat(details): create prompt, menu

This commit is contained in:
contrapunctus 2021-06-27 22:24:37 +05:30
parent c4b94be941
commit b774700450
2 changed files with 61 additions and 13 deletions

View File

@ -2080,6 +2080,11 @@ Return value is a list as specified by `tabulated-list-entries'."
(chronometrist-run-transformers chronometrist-details-row-transformers it)))
do (cl-incf index)))
(defvar chronometrist-details-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "R" 'chronometrist-details-set-range)
map))
(define-derived-mode chronometrist-details-mode tabulated-list-mode "Details"
"Major mode for `chronometrist-details'."
(make-local-variable 'tabulated-list-format)
@ -2141,8 +2146,18 @@ TABLE must be a hash table similar to `chronometrist-events'."
;; (chronometrist-details-intervals-for-range "2021-06-01" chronometrist-events)
;; (chronometrist-details-intervals-for-range '("2021-06-01" . "2021-06-03") chronometrist-events)
(defvar chronometrist-details-set-range ()
"Prompt user for range for current `chronometrist-details' buffer.")
(defun chronometrist-details-set-range ()
"Prompt user for range for current `chronometrist-details' buffer."
(interactive)
(let ((input (completing-read-multiple
(concat "Range (blank, ISO-8601 date, "
"or two ISO-8601 dates/timestamps): ")
(hash-table-keys chronometrist-events) nil nil chronometrist-details-range)))
(pcase input
("" (setq-local chronometrist-details-range nil))
((or string `(,begin . ,end))
(setq-local chronometrist-details-range (read input)))
(t (error "Unsupported range.")))))
(defvar chronometrist-details-filter nil
"Parameters to filter intervals displayed by `chronometrist-details'.

View File

@ -3311,6 +3311,20 @@ Return value is a list as specified by `tabulated-list-entries'."
do (cl-incf index)))
#+END_SRC
**** map :keymap:
#+BEGIN_SRC emacs-lisp
(defvar chronometrist-details-mode-map
(let ((map (make-sparse-keymap)))
(define-key map "R" 'chronometrist-details-set-range)
map))
#+END_SRC
**** menu
#+BEGIN_SRC emacs-lisp
(easy-menu-define chronometrist-details-menu chronometrist-details-mode-map
"Menu for `chronometrist-details'."
'("Details" ["Set date/time range" chronometrist-details-set-range]))
#+END_SRC
**** chronometrist-details-mode :major:mode:
#+BEGIN_SRC emacs-lisp
(define-derived-mode chronometrist-details-mode tabulated-list-mode "Details"
@ -3391,8 +3405,27 @@ TABLE must be a hash table similar to `chronometrist-events'."
#+END_SRC
**** set-range :command:
#+BEGIN_SRC emacs-lisp
(defvar chronometrist-details-set-range ()
"Prompt user for range for current `chronometrist-details' buffer.")
(defun chronometrist-details-set-range ()
"Prompt user for range for current `chronometrist-details' buffer."
(interactive)
(let ((input (completing-read-multiple
(concat "Range (blank, ISO-8601 date, "
"or two ISO-8601 dates/timestamps): ")
(hash-table-keys chronometrist-events) nil nil
(pcase chronometrist-details-range
('nil nil)
((pred stringp)
(format "%s" chronometrist-details-range))
(`(,begin . ,end)
(format "%s,%s" begin end))))))
(pcase input
('nil (setq-local chronometrist-details-range nil))
(`(,date)
(setq-local chronometrist-details-range date))
(`(,begin ,end)
(setq-local chronometrist-details-range (cons begin end)))
(_ (error "Unsupported range.")))
(tabulated-list-revert)))
#+END_SRC
**** filter :variable: