activities.el icon indicating copy to clipboard operation
activities.el copied to clipboard

activities-list: resume and revert activity

Open jthaman opened this issue 3 months ago • 1 comments

Dear Adam, thank you for this awesome package!

I use activities-list as my "default" tab buffer. I would like a keybinding on the table that "resumes and reverts" an activity from the table. I tried to add this myself, but I couldn't make sense of the activities-list-command macro, and I can't tell if I can easily add my own keybindings to the vtable.

Do you know how I can add a keybinding to activities-list to resume and revert in one go?

Thanks, John

jthaman avatar Aug 31 '25 14:08 jthaman

Hi John,

Thanks, I'm glad it's useful to you. Setting that as the default tab sounds like a nice idea.

See if this code works. Note the new binding "S-RET".

(defun activities-resume-reverted (activity)
  (interactive)
  (activities-resume activity :resetp t))

(defun activities-list ()
  "List activities."
  (interactive)
  (unless activities-activities
    (user-error (substitute-command-keys "No activities defined (to define one, type \"\\[activities-new]\")")))
  (with-current-buffer (get-buffer-create "*Activities*")
    (let ((inhibit-read-only t))
      (read-only-mode)
      (erase-buffer)
      (make-vtable
       :columns
       `(( :name "Active" :primary descend
           :getter (lambda (object _table)
                     (if (activities-activity-active-p object)
                         "*" " ")))
         ( :name "Name"
           :getter (lambda (object _table)
                     (activities-activity-name object)))
         ( :name "Last saved"
           :getter (lambda (activity _table)
                     (pcase-let (((cl-struct activities-activity last) activity))
                       (when last
                         (map-elt (activities-activity-state-etc last) 'time))))
           :formatter activities-list--format-time)
         ( :name "Default saved"
           :getter (lambda (activity _table)
                     (pcase-let (((cl-struct activities-activity default) activity))
                       (when default
                         (map-elt (activities-activity-state-etc default) 'time))))
           :formatter activities-list--format-time))
       :objects-function (lambda ()
                           (map-values activities-activities))
       :sort-by '((2 . descend) (0 . descend))
       :actions `("q" (lambda (&rest _) (bury-buffer))
                  "n" (lambda (&rest _) (forward-line 1))
                  "p" (lambda (&rest _) (forward-line -1))
                  "RET" ,(activities-list-command activities-resume)
                  "S-RET" ,(activities-list-command activities-resume-reverted)
                  "k" ,(activities-list-command activities-kill)
                  "s" ,(activities-list-command activities-suspend)
                  "D" ,(activities-list-command activities-discard)))
      (pop-to-buffer (current-buffer)))))

alphapapa avatar Sep 30 '25 22:09 alphapapa