feat(details): create prompt, menu
This commit is contained in:
parent
c4b94be941
commit
b774700450
|
@ -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'.
|
||||
|
|
|
@ -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:
|
||||
|
|
Reference in New Issue