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)))
|
(chronometrist-run-transformers chronometrist-details-row-transformers it)))
|
||||||
do (cl-incf index)))
|
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"
|
(define-derived-mode chronometrist-details-mode tabulated-list-mode "Details"
|
||||||
"Major mode for `chronometrist-details'."
|
"Major mode for `chronometrist-details'."
|
||||||
(make-local-variable 'tabulated-list-format)
|
(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" chronometrist-events)
|
||||||
;; (chronometrist-details-intervals-for-range '("2021-06-01" . "2021-06-03") chronometrist-events)
|
;; (chronometrist-details-intervals-for-range '("2021-06-01" . "2021-06-03") chronometrist-events)
|
||||||
|
|
||||||
(defvar chronometrist-details-set-range ()
|
(defun chronometrist-details-set-range ()
|
||||||
"Prompt user for range for current `chronometrist-details' buffer.")
|
"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
|
(defvar chronometrist-details-filter nil
|
||||||
"Parameters to filter intervals displayed by `chronometrist-details'.
|
"Parameters to filter intervals displayed by `chronometrist-details'.
|
||||||
|
|
|
@ -2328,7 +2328,7 @@ refresh the `chronometrist' buffer."
|
||||||
(chronometrist-out))
|
(chronometrist-out))
|
||||||
t))
|
t))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-in :command:
|
**** chronometrist-in :command:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun chronometrist-in (task &optional _prefix)
|
(defun chronometrist-in (task &optional _prefix)
|
||||||
"Clock in to TASK; record current time in `chronometrist-file'.
|
"Clock in to TASK; record current time in `chronometrist-file'.
|
||||||
|
@ -2338,7 +2338,7 @@ TASK is the name of the task, a string. PREFIX is ignored."
|
||||||
(chronometrist-sexp-new plist)
|
(chronometrist-sexp-new plist)
|
||||||
(chronometrist-refresh)))
|
(chronometrist-refresh)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-out :command:
|
**** chronometrist-out :command:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun chronometrist-out (&optional _prefix)
|
(defun chronometrist-out (&optional _prefix)
|
||||||
"Record current moment as stop time to last s-exp in `chronometrist-file'.
|
"Record current moment as stop time to last s-exp in `chronometrist-file'.
|
||||||
|
@ -2363,7 +2363,7 @@ PREFIX is ignored."
|
||||||
(chronometrist-out)
|
(chronometrist-out)
|
||||||
(run-hook-with-args 'chronometrist-after-out-functions task)))
|
(run-hook-with-args 'chronometrist-after-out-functions task)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-mode-map :keymap:
|
**** chronometrist-mode-map :keymap:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar chronometrist-mode-map
|
(defvar chronometrist-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
|
@ -2381,7 +2381,7 @@ PREFIX is ignored."
|
||||||
map)
|
map)
|
||||||
"Keymap used by `chronometrist-mode'.")
|
"Keymap used by `chronometrist-mode'.")
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-menu :menu:
|
**** chronometrist-menu :menu:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(easy-menu-define chronometrist-menu chronometrist-mode-map
|
(easy-menu-define chronometrist-menu chronometrist-mode-map
|
||||||
"Chronometrist mode menu."
|
"Chronometrist mode menu."
|
||||||
|
@ -2400,7 +2400,7 @@ PREFIX is ignored."
|
||||||
["View/edit log file" chronometrist-open-log]
|
["View/edit log file" chronometrist-open-log]
|
||||||
["Reset state" chronometrist-reset]))
|
["Reset state" chronometrist-reset]))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-mode :major:mode:
|
**** chronometrist-mode :major:mode:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(define-derived-mode chronometrist-mode tabulated-list-mode "Chronometrist"
|
(define-derived-mode chronometrist-mode tabulated-list-mode "Chronometrist"
|
||||||
"Major mode for `chronometrist'."
|
"Major mode for `chronometrist'."
|
||||||
|
@ -2792,7 +2792,7 @@ Argument _FS-EVENT is ignored."
|
||||||
'(change)
|
'(change)
|
||||||
#'chronometrist-refresh-file))))
|
#'chronometrist-refresh-file))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-report :command:
|
**** chronometrist-report :command:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun chronometrist-report (&optional keep-date)
|
(defun chronometrist-report (&optional keep-date)
|
||||||
|
@ -3054,7 +3054,7 @@ value of `revert-buffer-function'."
|
||||||
'(change)
|
'(change)
|
||||||
#'chronometrist-refresh-file))))
|
#'chronometrist-refresh-file))))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** chronometrist-statistics :command:
|
**** chronometrist-statistics :command:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun chronometrist-statistics (&optional preserve-state)
|
(defun chronometrist-statistics (&optional preserve-state)
|
||||||
|
@ -3311,7 +3311,21 @@ Return value is a list as specified by `tabulated-list-entries'."
|
||||||
do (cl-incf index)))
|
do (cl-incf index)))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** chronometrist-details-mode :major:mode:
|
**** 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
|
#+BEGIN_SRC emacs-lisp
|
||||||
(define-derived-mode chronometrist-details-mode tabulated-list-mode "Details"
|
(define-derived-mode chronometrist-details-mode tabulated-list-mode "Details"
|
||||||
"Major mode for `chronometrist-details'."
|
"Major mode for `chronometrist-details'."
|
||||||
|
@ -3325,7 +3339,7 @@ Return value is a list as specified by `tabulated-list-entries'."
|
||||||
(run-hooks 'chronometrist-mode-hook))
|
(run-hooks 'chronometrist-mode-hook))
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
||||||
**** chronometrist-details :command:
|
**** chronometrist-details :command:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defun chronometrist-details ()
|
(defun chronometrist-details ()
|
||||||
(interactive)
|
(interactive)
|
||||||
|
@ -3391,8 +3405,27 @@ TABLE must be a hash table similar to `chronometrist-events'."
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
**** set-range :command:
|
**** set-range :command:
|
||||||
#+BEGIN_SRC emacs-lisp
|
#+BEGIN_SRC emacs-lisp
|
||||||
(defvar chronometrist-details-set-range ()
|
(defun chronometrist-details-set-range ()
|
||||||
"Prompt user for range for current `chronometrist-details' buffer.")
|
"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
|
#+END_SRC
|
||||||
**** filter :variable:
|
**** filter :variable:
|
||||||
|
|
Reference in New Issue