这几天我正在寻找窗口管理包,要求有快速恢复到某个窗口设置的功能,大家有什么好的建议
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)
我用了好多年了。功能很强大。目前我在维护。未来两年是没问题的。
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))
记得以前 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 都是类似这种理念,还是这个哥们比较夸张, 指代宏,宏套宏用的哗哗的。。。
恩,你先删代码吧
我觉得perspective 蛮好用的