对于emacs窗口管理包,大家有什么好的建议?

这几天我正在寻找窗口管理包,要求有快速恢复到某个窗口设置的功能,大家有什么好的建议

1 个赞

register?

winner-mode?

我现在准备用 burly + 防手贱命令

(global-set-key (kbd "C-x l") 'eh-window-lock-toggle)

(defvar eh-window-lock nil)
(defun eh-window-lock-toggle ()
  (interactive)
  (if eh-window-lock
      (progn
        (global-set-key (kbd "C-x 1") #'eh-window-lock)
        (global-set-key (kbd "C-x 2") #'eh-window-lock)
        (global-set-key (kbd "C-x 3") #'eh-window-lock)
        (global-set-key (kbd "C-x 0") #'eh-window-lock)
        (global-set-key (kbd "C-x k") #'eh-window-lock)
        (global-set-key (kbd "C-x b") #'eh-window-lock)
        (global-set-key (kbd "C-x C-b") #'eh-window-lock)
        (eh-window-lock))
    (global-set-key (kbd "C-x 1") #'switch-window-then-maximize)
    (global-set-key (kbd "C-x 2") #'switch-window-then-split-below)
    (global-set-key (kbd "C-x 3") #'switch-window-then-split-right)
    (global-set-key (kbd "C-x 0") #'switch-window-then-delete)
    (global-set-key (kbd "C-x k") #'kill-this-buffer)
    (global-set-key (kbd "C-x b") #'ivy-switch-buffer)
    (global-set-key (kbd "C-x C-b") #'ivy-switch-buffer)
    (message
     (substitute-command-keys
      "窗口已解锁!")))
  (setq eh-window-lock (not eh-window-lock)))

(defun eh-window-lock ()
  (interactive)
  (message
   (substitute-command-keys
    "窗口已经被锁定,请按 “\\[eh-window-lock-toggle]” 快捷键解锁。")))

(eh-window-lock-toggle)
1 个赞

@redguardtoo workgroup2 怎么样,值不值得投资?

我用了好多年了。功能很强大。目前我在维护。未来两年是没问题的。

wg2的问题是代码质量比较差,原作者炫技的macro用得太多。可读性比较差。代码量已到了4000多行。

另外一个是数据结构使用了cl-defstruct。对应的内部数据结构在emacs26时发生了改变(语法还是同样的语法),导致升级到26时部分功能不工作。虽然紧急修复了bug,但也只是workaround,不改数据结构下次Emacs再升级保不准还会有同样的问题。

所以我不知道2年后是否能坚持下去。

确实宏用的很多,读起来特别费劲, 我一开始准备用 burly,不过感觉 burly 的维护者太严谨,一个 pr 如果讨论不明白,他都不会合并,我英文不好,所以就跳到 workgroup2 了。

我看了 wconf, 好像只有几百行代码,但功能就少的可怜,作者也放弃了。

eyebrowse?

我也试过 workgroup2,Emacs 28 下 BUG 比较多,还是功能和代码量太多了,用到了很多 emacs 的东西,容易出现 API 不兼容,一不小心还把创建好的 workgroups 全搞丢了。

burly 就很简洁了,可以把它当做 bookmark 模块的扩展功能:将当前的窗口 buffer layout 做为一个整体保存到书签里。感觉非常称手,重启后还可以利用 bookmark 的功能把文件或Buffer自动恢复布局。

;; burly
(use-package burly
  :quelpa (burly :fetcher github :repo "alphapapa/burly.el")
  :custom
  (burly-bookmark-prefix " ")
  :bind
  ("C-x r w" . burly-bookmark-windows))
2 个赞

记得以前 alphapapa 会主动检索 GitHub 上用他程序的用户,有时候还会在 commit 提交历史中回答一些问题,超级贴心的。现在他好像很忙了。

burly 半年前用上,目前一直很顺心。主要是替代了 desktop 以及 desktop+。 配合 bookmark 非常好用的。burly 储存数据的格式 (url) 明文不是能看懂。

记得有一次有人提 eshell buffer 的保存,我就出过一次问题,当时目录文件全部内容丢失。所以记得备份 bookmarks.

wg2可以在恢复一些特殊的buffer,比如shell-mode可以记住默认的目录什么的。burly可以做到吗?

我是想让wg2使用普通的数据结构,但是这样又要破坏兼容性。如果加上自动转换数据的代码,工作量又太大。拖到现在了。

好像提供了机制,但没有相关实现代码

(defcustom burly-major-mode-alist
  (list (cons 'org-mode
              (list (cons 'make-url-fn #'burly--org-mode-buffer-url)
                    (cons 'follow-url-fn #'burly-follow-url-org-mode))))
  "Alist mapping major modes to the appropriate Burly functions."
  :type '(alist :key-type symbol
                :value-type (set (cons (const make-url-fn) (function :tag "Make-URL function"))
                                 (cons (const follow-url-fn) (function :tag "Follow-URL function")))))

mode-line显示group名字你觉得有用吗?我觉得没用。想删掉了。

我想到了一个更简单的方案 wconf+burly, 基本可以满足我的需要,今天折腾了一上午 workgroup2, 就如你说的,代码用的宏太多了,理解和调试难度很大,我发现 python buffer 无法回复,想修复一下,折腾了一中午,愣是找不到原因。。。。

给我报bug。不用自己修了。wg2代码要至少去掉一半才维护。

也不知道老一辈 lisper 都是类似这种理念,还是这个哥们比较夸张, 指代宏,宏套宏用的哗哗的。。。 :crazy_face: :rofl:

1 个赞

恩,你先删代码吧

我觉得perspective 蛮好用的