[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/tmr 6f3b096f2c 13/14: Greatly simplify tmr-tabulated, r
From: |
ELPA Syncer |
Subject: |
[elpa] externals/tmr 6f3b096f2c 13/14: Greatly simplify tmr-tabulated, reuse tmr--read-timer |
Date: |
Mon, 27 Jun 2022 12:58:05 -0400 (EDT) |
branch: externals/tmr
commit 6f3b096f2c37c7ccdcce1e0f528826394d111c77
Author: Daniel Mendler <mail@daniel-mendler.de>
Commit: Protesilaos Stavrou <info@protesilaos.com>
Greatly simplify tmr-tabulated, reuse tmr--read-timer
Introduce tmr--read-timer-hook
---
tmr-tabulated.el | 72 +++++++++++---------------------------------------------
tmr.el | 26 ++++++++++++--------
2 files changed, 30 insertions(+), 68 deletions(-)
diff --git a/tmr-tabulated.el b/tmr-tabulated.el
index 4f30eab513..82878ad90e 100644
--- a/tmr-tabulated.el
+++ b/tmr-tabulated.el
@@ -63,15 +63,15 @@
(defvar tmr-tabulated-mode-map
(let ((map (make-sparse-keymap)))
- (define-key map "k" #'tmr-tabulated-cancel)
+ (define-key map "k" #'tmr-cancel)
(define-key map "K" #'tmr-remove-finished)
(define-key map "+" #'tmr)
(define-key map "t" #'tmr)
(define-key map "*" #'tmr-with-description)
(define-key map "T" #'tmr-with-description)
- (define-key map "c" #'tmr-tabulated-clone)
- (define-key map "e" #'tmr-tabulated-edit-description)
- (define-key map "s" #'tmr-tabulated-reschedule)
+ (define-key map "c" #'tmr-clone)
+ (define-key map "e" #'tmr-edit-description)
+ (define-key map "s" #'tmr-reschedule)
map)
"Keybindings for `tmr-tabulated-mode-map'.")
@@ -85,68 +85,24 @@
(add-hook 'tabulated-list-revert-hook #'tmr-tabulated--set-entries nil t)
(tabulated-list-init-header))
-(defun tmr-tabulated-cancel (timer)
- "Stop TIMER and remove it from the list.
-Interactively, use the timer at point."
- (interactive (list (tmr-tabulated--get-timer-at-point)))
- (tmr-tabulated--move-point-to-closest-entry)
- (tmr-cancel timer))
-
-(defun tmr-tabulated-clone (timer)
- "Create a new timer by cloning TIMER.
-Interactively, use the timer at point."
- (interactive (list (tmr-tabulated--get-timer-at-point)))
- (tmr-clone timer))
-
-(defun tmr-tabulated-reschedule (timer)
- "Reschedule TIMER.
-This is the same as cloning it and cancelling the original one."
- (interactive (list (tmr-tabulated--get-timer-at-point)))
- (tmr-reschedule timer))
-
-(defun tmr-tabulated-edit-description (timer description)
- "Change TIMER description with that of DESCRIPTION."
- (interactive
- (list
- (tmr-tabulated--get-timer-at-point)
- (tmr--description-prompt)))
- (tmr-edit-description timer description))
-
-(defun tmr-tabulated--move-point-to-closest-entry ()
- "Move the point to the next entry if there is one or to the previous one.
-Point isn't moved if point is on the only entry."
- (if (tmr-tabulated--next-entry)
- (forward-line 1)
- (when (tmr-tabulated--previous-entry)
- (forward-line -1))))
-
-(defun tmr-tabulated--previous-entry ()
- "Return the entry on the line before point, nil if none."
- (save-excursion
- (setf (point) (line-beginning-position))
- (unless (bobp)
- (forward-line -1)
- (tabulated-list-get-id))))
-
-(defun tmr-tabulated--next-entry ()
- "Return the entry on the line after point, nil if none."
- (save-excursion
- (setf (point) (line-end-position))
- (unless (eobp)
- (forward-line 1)
- (tabulated-list-get-id))))
-
-(defun tmr-tabulated--get-timer-at-point ()
+(defun tmr-tabulated--timer-at-point ()
"Return the timer on the current line or nil."
- (cl-find (tabulated-list-get-id) tmr--timers :key
#'tmr--timer-creation-date))
+ (and (eq major-mode #'tmr-tabulated-mode)
+ (cl-find (tabulated-list-get-id) tmr--timers :key
#'tmr--timer-creation-date)))
(defun tmr-tabulated--refresh ()
"Refresh *tmr-tabulated-view* buffer if it exists."
(when-let (buf (get-buffer "*tmr-tabulated-view*"))
(with-current-buffer buf
- (revert-buffer))))
+ (let ((lines (line-number-at-pos)))
+ (revert-buffer)
+ (when (and (bobp) (> lines 1))
+ (forward-line (1- lines))
+ (unless (tabulated-list-get-id)
+ (forward-line -1)))))))
(add-hook 'tmr--update-hook #'tmr-tabulated--refresh)
+(add-hook 'tmr--read-timer-hook #'tmr-tabulated--timer-at-point)
(provide 'tmr-tabulated)
;;; tmr-tabulated.el ends here
diff --git a/tmr.el b/tmr.el
index 9860df9ec0..87bab5695a 100644
--- a/tmr.el
+++ b/tmr.el
@@ -233,6 +233,9 @@ cancelling the original one."
(setq tmr--timers (cl-delete-if #'tmr--timer-donep tmr--timers))
(run-hooks 'tmr--update-hook))
+(defvar tmr--read-timer-hook nil
+ "Hooks to execute to find current timer.")
+
(defun tmr--read-timer (&optional active description)
"Let the user choose a timer among all timers.
Return the selected timer. If there is a single timer, use that.
@@ -244,16 +247,19 @@ that are still running.
If optional DESCRIPTION is provided use it to format the
completion candidates."
- (pcase (if active
- (cl-remove-if #'tmr--timer-donep tmr--timers)
- tmr--timers)
- ('nil (user-error "No timers available"))
- (`(,timer) timer)
- (_
- (let* ((formatter (or description #'tmr--long-description))
- (timer-descriptions (mapcar formatter timers))
- (selection (completing-read "Timer: " timer-descriptions nil t)))
- (cl-find selection timers :test #'string= :key formatter)))))
+ (or
+ (run-hook-with-args-until-success 'tmr--read-timer-hook)
+ (pcase
+ (if active
+ (cl-remove-if #'tmr--timer-donep tmr--timers)
+ tmr--timers)
+ ('nil (user-error "No timers available"))
+ (`(,timer) timer)
+ (_
+ (let* ((formatter (or description #'tmr--long-description))
+ (timer-descriptions (mapcar formatter timers))
+ (selection (completing-read "Timer: " timer-descriptions nil t)))
+ (cl-find selection timers :test #'string= :key formatter))))))
;; NOTE 2022-04-21: Emacs has a `play-sound' function but it only
;; supports .wav and .au formats. Also, it does not work on all
- [elpa] externals/tmr updated (704242b6ba -> 907756ce8d), ELPA Syncer, 2022/06/27
- [elpa] externals/tmr bdd99767bb 03/14: Add tmr-tabulated--refresh, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 38c9089597 08/14: tmr-remove-finished: Add autoload, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 9f0dee563b 06/14: Move tmr-sound.el back into tmr.el, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr cfd798b066 11/14: Add tmr-reschedule and tmr-edit-description, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 907756ce8d 14/14: Acknowledge Daniel Mendler for the latest patches, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 448be30775 09/14: Improve tmr-clone: Only prompt for description if pressing C-u C-u, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 6f3b096f2c 13/14: Greatly simplify tmr-tabulated, reuse tmr--read-timer,
ELPA Syncer <=
- [elpa] externals/tmr 58d30c4896 12/14: Remove single line functions which were used only once, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 58224191d0 01/14: Rename struct tmr-timer to tmr--timer, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr e18496d187 07/14: Add tmr--update-hook, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr e9c6c8861f 02/14: Get rid of tmr-descriptions-list, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 9974a28933 04/14: Remove unnecessary declare-function, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr d6d5e4d22d 05/14: Warn if dbus is unavailable, ELPA Syncer, 2022/06/27
- [elpa] externals/tmr 92d6163dd0 10/14: Remove no-hooks argument, ELPA Syncer, 2022/06/27