[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/workroom 4c4fd7830c 34/74: Add Winner integration
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/workroom 4c4fd7830c 34/74: Add Winner integration |
Date: |
Sun, 27 Nov 2022 16:03:27 -0500 (EST) |
branch: elpa/workroom
commit 4c4fd7830c2757a1eb1998935c32d533b2562b24
Author: Akib Azmain Turja <akib@disroot.org>
Commit: Akib Azmain Turja <akib@disroot.org>
Add Winner integration
---
workroom.el | 87 +++++++++++++++++++++++++++++++++++++++++++++++++------------
1 file changed, 70 insertions(+), 17 deletions(-)
diff --git a/workroom.el b/workroom.el
index 28f0a6b899..b5c721c5df 100644
--- a/workroom.el
+++ b/workroom.el
@@ -115,7 +115,7 @@
Customizing this variable automatically takes effects. However, after
changing from Lisp program doesn't immediately take effect. Call
`workroom-rebind-command-map-prefix' for changes to take effect.
-Alternatively you can reenable Workroom-Mode which will do that for
+Alternatively you can reenable Workroom mode which will do that for
you."
:type 'key-sequence
:set (lambda (sym val)
@@ -128,7 +128,7 @@ you."
This workroom contains all live buffers of the current Emacs session.
-Workroom-Mode must be reenabled for changes to take effect, or the
+Workroom mode must be reenabled for changes to take effect, or the
name can be manually changed with `workroom-rename'."
:type 'string)
@@ -182,8 +182,16 @@ value can't restored."
The value is a mode line terminal like `mode-line-format'."
:type 'sexp)
+(defcustom workroom-mode-hook nil
+ "Normal hook run when toggling Workroom mode."
+ :type 'hook)
+
+(defcustom workroom-before-switch-hook nil
+ "Normal hook run before switching workroom or view."
+ :type 'hook)
+
(defcustom workroom-switch-hook nil
- "Normal hook run after switching room or view."
+ "Normal hook run after switching workroom or view."
:type 'hook)
(defvar workroom-command-map
@@ -207,7 +215,7 @@ The value is a mode line terminal like `mode-line-format'."
"Keymap containing all useful commands of Workroom.")
(defvar workroom-mode-map (make-sparse-keymap)
- "Keymap for Workroom-Mode.")
+ "Keymap for Workroom mode.")
(define-key workroom-mode-map workroom-command-map-prefix
workroom-command-map)
@@ -722,12 +730,12 @@ If WRITABLE, return a writable object."
(switch-to-buffer "*scratch*"))))
(defun workroom--barf-unless-enabled ()
- "Signal `user-error' unless Workroom-Mode is enabled."
+ "Signal `user-error' unless Workroom mode is enabled."
(unless workroom-mode
(user-error "Workroom mode is not enabled")))
(defmacro workroom--require-mode-enable (&rest body)
- "Execute BODY if Workroom-Mode is enabled, otherwise signal error."
+ "Execute BODY if Workroom mode is enabled, otherwise signal error."
(declare (indent 0))
`(progn
(workroom--barf-unless-enabled)
@@ -816,12 +824,13 @@ switch."
(when (and (not (eq view (workroom-current-view)))
(workroom-view-frame view))
(error "Cannot switch to a view already in use in another frame"))
- (unless (eq room (workroom-current-room))
- (when (and (not no-record) (workroom-current-room))
- (push (workroom-current-room)
- (frame-parameter nil 'workroom-previous-room-list)))
- (set-frame-parameter nil 'workroom-current-room room))
(unless (eq view (workroom-current-view))
+ (run-hooks 'workroom-before-switch-hook)
+ (unless (eq room (workroom-current-room))
+ (when (and (not no-record) (workroom-current-room))
+ (push (workroom-current-room)
+ (frame-parameter nil 'workroom-previous-room-list)))
+ (set-frame-parameter nil 'workroom-current-room room))
(when (workroom-current-view)
(setf (workroom--view-window-config (workroom-current-view))
(workroom--frame-window-config))
@@ -1169,7 +1178,7 @@ If ROOM is the default workroom, kill buffer."
(defun workroom-switch-to-buffer ()
"Like `switch-to-buffer' but restricted to current workroom.
-When prefix arg is given or Workroom-Mode is disabled, don't
+When prefix arg is given or Workroom mode is disabled, don't
restrict."
(declare (interactive-only "Use `switch-to-buffer' instead."))
(interactive)
@@ -1181,7 +1190,7 @@ restrict."
(defun workroom-kill-buffer ()
"Like `kill-buffer' but restricted to current workroom.
-When prefix arg is given or Workroom-Mode is disabled, don't
+When prefix arg is given or Workroom mode is disabled, don't
restrict."
(declare (interactive-only "Use `kill-buffer' instead."))
(interactive)
@@ -1294,7 +1303,7 @@ ACTION and ARGS are also described there."
(defun workroom-buffer-menu ()
"Like `buffer-menu' but restricted to current workroom.
-When prefix arg is given or Workroom-Mode is disabled, don't
+When prefix arg is given or Workroom mode is disabled, don't
restrict."
(interactive)
(if (or current-prefix-arg (not workroom-mode))
@@ -1304,7 +1313,7 @@ restrict."
(defun workroom-list-buffers ()
"Like `list-buffers' but restricted to current workroom.
-When prefix arg is given or Workroom-Mode is disabled, don't
+When prefix arg is given or Workroom mode is disabled, don't
restrict."
(interactive)
(if (or current-prefix-arg (not workroom-mode))
@@ -1317,7 +1326,7 @@ restrict."
(defun workroom-electric-buffer-list ()
"Like `electric-buffer-list' but restricted to current workroom.
-When prefix arg is given or Workroom-Mode is disabled, don't
+When prefix arg is given or Workroom mode is disabled, don't
restrict."
(interactive)
(if (or current-prefix-arg (not workroom-mode))
@@ -1372,7 +1381,7 @@ restrict."
(defun workroom-ibuffer ()
"Like `ibuffer' but restricted to current workroom.
-When prefix arg is given or Workroom-Mode is disabled, don't
+When prefix arg is given or Workroom mode is disabled, don't
restrict."
(interactive)
(let ((workroom--in-workroom-ibuffer
@@ -1853,6 +1862,7 @@ prefix argument is given."
(define-minor-mode workroom-auto-project-workroom-mode
"Toggle automatically creating project workrooms."
+ :lighter " WR-Project"
:global t
:require 'workroom
(if workroom-auto-project-workroom-mode
@@ -1861,5 +1871,48 @@ prefix argument is given."
(remove-hook 'find-file-hook
#'workroom--project-switch-to-appropiate-room)))
+
+;;;; Winner Integration.
+
+(defvar winner-ring-alist)
+(defvar winner-ring-size)
+
+(defvar workroom--winner-alist nil
+ "Alist of views and window configuration rings.")
+
+(defun workroom--winner-before-switch ()
+ "Save winner undo list."
+ (let ((entry (assq (selected-frame) winner-ring-alist)))
+ (when entry
+ (setf (alist-get (workroom-current-view) workroom--winner-alist)
+ (cdr entry))
+ ;; A window configuration change is going to happen shortly due
+ ;; to changing view. We don't wanna record that.
+ (setf (cdr entry) (make-ring 1)))))
+
+(defun workroom--winner-after-switch ()
+ "Restore save winner undo list."
+ (let ((entry (assq (selected-frame) winner-ring-alist)))
+ (when entry
+ (setf (cdr entry) (or (alist-get (workroom-current-view)
+ workroom--winner-alist)
+ (make-ring winner-ring-size))))))
+
+(define-minor-mode workroom-winner-mode
+ "Toggle Workroom Winner integration."
+ :lighter " WR-Winner"
+ :global t
+ :require 'workroom
+ (if workroom-winner-mode
+ (progn
+ (add-hook 'workroom-before-switch-hook
+ #'workroom--winner-before-switch)
+ (add-hook 'workroom-switch-hook
+ #'workroom--winner-after-switch))
+ (remove-hook 'workroom-before-switch-hook
+ #'workroom--winner-before-switch)
+ (remove-hook 'workroom-switch-hook
+ #'workroom--winner-after-switch)))
+
(provide 'workroom)
;;; workroom.el ends here
- [nongnu] elpa/workroom 895b77f7ce 62/74: Some refactoring, (continued)
- [nongnu] elpa/workroom 895b77f7ce 62/74: Some refactoring, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 4dbc8b5822 69/74: Fix code injection to desktop file, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 23ff6f463e 53/74: Don't fail to restore if the workroom project is non-existant, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom a1f5cc9754 52/74: Make the workroom custom group part of tools group, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 3b7b17e2cc 72/74: Bump version to 2.2.4, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom c50e7219a0 07/74: Make README Codeberg compatible, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 31eabf2547 21/74: Add some comments for explaining the code, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 64b465093e 20/74: Make line no more wide than 75 characters, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 6d159a5566 24/74: Use `string=' to compare workroom and view names, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom a4845ad57f 44/74: Don't switch room in workroom-switch if ROOM is current, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 4c4fd7830c 34/74: Add Winner integration,
ELPA Syncer <=
- [nongnu] elpa/workroom e7dc14236e 42/74: Fix out of sync documentation, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 3144324e33 39/74: Add an user manual, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 40acb8c7b8 45/74: O(n) switch-to-buffer instead of O(n^2) in project workrooms, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 13e648f3db 74/74: Add .dir-locals.el, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom add6fb080d 61/74: Bump version to 2.1.1, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 9974fb58a9 41/74: Add new command workroom-bookmark-multiple, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom a87110f435 56/74: Clone views correctly, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom f9d88f211c 68/74: Bump version to 2.2.2, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom eef13afbbf 66/74: Bump version to 2.2.1, ELPA Syncer, 2022/11/27
- [nongnu] elpa/workroom 1d4c134d60 26/74: Add new command workroom-switch-room, some refactoring, ELPA Syncer, 2022/11/27