如何组合胜利者和工作组?

时间:2014-05-07 01:34:34

标签: emacs window workflow

我在工作流程中使用了许多工作组(包workgroupsworkgroups2)。如果我切换到某个工作组并尝试winner-undo我从以前的工作组获得窗口配置。 我可以为每个工作组使用单独的winner-undo历史记录吗?

My workgroups

3 个答案:

答案 0 :(得分:3)

我刚刚在commit中推了workgroups2 现在winner-undowinner-redo命令被重新映射到工作组'与winner完全相同的命令,但对于每个工作组。

答案 1 :(得分:2)

UPD。当我上次测试workgroups2撤消功能时,我犯了一个错误并且误解了wg-undo-wconfig-changewg-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(对于你正在从切换的工作组),然后替换您正在将切换到的工作区的存储配置的当前帧。

可能没有更多的东西。只要获胜者看到它需要的数据,它就可能“只是工作”。

如果它运行良好,请考虑将代码贡献回工作组项目。