我在工作流程中使用了许多工作组(包workgroups
或workgroups2
)。如果我切换到某个工作组并尝试winner-undo
我从以前的工作组获得窗口配置。
我可以为每个工作组使用单独的winner-undo
历史记录吗?
答案 0 :(得分:3)
我刚刚在commit中推了workgroups2
现在winner-undo
,winner-redo
命令被重新映射到工作组'与winner
完全相同的命令,但对于每个工作组。
答案 1 :(得分:2)
UPD。当我上次测试workgroups2
撤消功能时,我犯了一个错误并且误解了wg-undo-wconfig-change
(wg-redo-wconfig-change
)的行为。因此,workgroups2
只能保存每个工作组的历史记录,例如winner-mode
。此解决方案仅可用于workgroups
包。
我写了这个:
(defvar wg-winner-vars nil)
(defvar wg-winner-hash nil)
(setq wg-winner-vars '(winner-ring-alist
winner-currents
winner-point-alist
winner-undone-data
winner-undo-counter
winner-pending-undo-ring))
(setq wg-winner-hash (make-hash-table :test 'equal))
(defun wg-winner-put (winner-name)
(let ((wg (ignore-errors (wg-name (wg-current-workgroup)))))
(if wg
(puthash (list wg winner-name) (eval winner-name) wg-winner-hash))))
(defun wg-winner-get (winner-name)
(let ((wg (ignore-errors (wg-name (wg-current-workgroup)))))
(if wg
(eval `(setq ,winner-name (gethash '(,wg ,winner-name) wg-winner-hash))))))
(defun wg-winner-save ()
(if winner-mode
(progn
(winner-mode -1)
(defun wg-winner-mode-restore ()
(winner-mode 1)))
(defun wg-winner-mode-restore ()))
(mapcar 'wg-winner-put wg-winner-vars))
(defun wg-winner-load ()
(mapcar 'wg-winner-get wg-winner-vars)
(wg-winner-mode-restore))
(defadvice wg-switch-to-workgroup (before wg-winner-before activate)
(wg-winner-save))
(defadvice wg-switch-to-workgroup (after wg-winner-after activate)
(wg-winner-load))
答案 2 :(得分:1)
如果您乐意写下elisp:
winner-ring-alist
是由框架键控的窗口配置环的列表(即每帧窗口配置环)。
我建议你定义一个由框架和工作组标识符(无论是什么)键入的新alist,在其中你可以存储每个框架的特定于工作组的获胜者配置环。
我想有一个“开关工作组”钩子,你可以用来将当前帧的配置环写入你的alist(对于你正在从切换的工作组),然后替换您正在将切换到的工作区的存储配置的当前帧。
可能没有更多的东西。只要获胜者看到它需要的数据,它就可能“只是工作”。
如果它运行良好,请考虑将代码贡献回工作组项目。