[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals-release/activities 990f3ac98d 013/103: WIP
From: |
ELPA Syncer |
Subject: |
[elpa] externals-release/activities 990f3ac98d 013/103: WIP |
Date: |
Tue, 30 Jan 2024 03:57:46 -0500 (EST) |
branch: externals-release/activities
commit 990f3ac98d05ebd533801f5a3e9e289af4128a10
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
WIP
---
activity-tabs.el | 16 ++++++++++++++--
activity.el | 45 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 59 insertions(+), 2 deletions(-)
diff --git a/activity-tabs.el b/activity-tabs.el
index b9cb52c3b9..e47e9b9902 100644
--- a/activity-tabs.el
+++ b/activity-tabs.el
@@ -58,11 +58,23 @@ accordingly."
(if activity-tabs-mode
(progn
(tab-bar-mode 1)
- (advice-add #'activity-resume :before #'activity-tabs-before-resume))
- (advice-remove #'activity-resume #'activity-tabs-before-resume)))
+ (advice-add #'activity-resume :before #'activity-tabs-before-resume)
+ (advice-add #'activity-active-p :override
#'activity-tabs-activity-active-p))
+ (advice-remove #'activity-resume #'activity-tabs-before-resume)
+ (advice-remove #'activity-active-p #'activity-tabs-activity-active-p)))
;;;; Functions
+(defun activity-tabs-activity-active-p (activity)
+ "Return non-nil if ACTIVITY is active.
+That is, if any tabs have an `activity' parameter whose
+activity's name is NAME."
+ (pcase-let (((cl-struct activity name) activity))
+ (cl-some (lambda (tab)
+ (when-let ((activity (alist-get 'activity tab)))
+ (equal name (activity-name activity))))
+ (funcall tab-bar-tabs-function))))
+
(defun activity-tabs-before-resume (activity &rest _)
"Called before resuming ACTIVITY."
(run-hook-with-args 'activity-tabs-before-resume-functions activity))
diff --git a/activity.el b/activity.el
index 37fdfc7f25..55bfcda9e5 100644
--- a/activity.el
+++ b/activity.el
@@ -260,6 +260,41 @@ If DEFAULTP, save its default state; if LASTP, its last."
(activity-last activity)
last))))))
(bookmark-store name record nil)))
+(defun activity-save-all ()
+ "Save all active activities' last states."
+ (interactive)
+ (dolist (activity (cl-remove-if-not #'activity-active-p
(activity-activities)))
+ (activity-save activity :lastp t)))
+
+;;;; Activity mode
+
+;; This mode automatically saves active activities.
+
+(defvar activity-mode-timer nil
+ "Automatically saves activities according to
`activity-mode-idle-frequency'.")
+
+(defgroup activity-mode nil
+ "Automatically save activities."
+ :group 'activity)
+
+(defcustom activity-mode-idle-frequency 5
+ "Automatically save activities when Emacs has been idle this many seconds."
+ :type 'natnum)
+
+;;;###autoload
+(define-minor-mode activity-mode
+ "Automatically remember activities' state.
+accordingly."
+ :global t
+ :group 'activity
+ (if activity-mode
+ (progn
+ (setf activity-mode-timer (run-at-time activity-mode-idle-frequency
activity-mode-idle-frequency
+ #'activity-save-all)))
+ (when (timerp activity-mode-timer)
+ (cancel-timer activity-mode-timer)
+ (setf activity-mode-timer nil))))
+
;;;; Functions
(defun activity-state ()
@@ -267,6 +302,16 @@ If DEFAULTP, save its default state; if LASTP, its last."
(make-activity-state
:window-state (activity--window-state (selected-frame))))
+(defun activity-active-p (activity)
+ "Return non-nil if ACTIVITY is active.
+That is, if any frames have an `activity' parameter whose
+activity's name is NAME."
+ (pcase-let (((cl-struct activity name) activity))
+ (cl-some (lambda (frame)
+ (when-let ((activity (frame-parameter frame 'activity)))
+ (equal name (activity-name activity))))
+ (frame-list))))
+
(defun activity--window-state (frame)
"Return FRAME's window state."
(with-selected-frame frame
- [elpa] branch externals-release/activities created (now ee788599ba), ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 20fbdc2b4f 005/103: Meta: Shorten summary, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 710076a36f 008/103: WIP, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities e3b8df2f34 009/103: It lives!, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities c58c4b5182 006/103: WIP, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 990f3ac98d 013/103: WIP,
ELPA Syncer <=
- [elpa] externals-release/activities 10783f474f 012/103: WIP, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 11bf7557c8 034/103: Notes: Add, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 4707587d15 037/103: Docs: Update readme, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities ab283c95ad 038/103: Update: Readme, commentary, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 29d96dc378 050/103: Fix, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities ee287a1986 015/103: WIP, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities a45ca6dd3a 021/103: WIP: Use multisession, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 552704ed45 004/103: Meta: makem.sh, .gitignore, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities d8b3264b95 017/103: Add README, ELPA Syncer, 2024/01/30
- [elpa] externals-release/activities 03427b803c 016/103: Reasonably functional, ELPA Syncer, 2024/01/30