Emacs 31 将原生支持窗口布局转置 (Native Frame Transposition)
Emacs 新窗口命令
目录
简介
大约在 2024 年 9 月左右,我也发现了一个用于 Emacs 窗口管理的实用包 transpose-frame.el。
大约在这个时候,我读了 Tobias 关于 doing things that scale 的文章。简而言之:与其自定义和维护自定义,不如尝试将更改推送到上游。
所以当然,作为一个改变了的人,我发了一封简单的电子邮件,要求将 transpose-frame.el
移到 Emacs 核心。但事实证明,该包的核心存在很多问题,如果不重写,根本无法修复。
基本上,transpose-frame.el
依赖于“复制粘贴”窗口状态(例如缓冲区、overlays 等),这是一种错误的方法。这封邮件 更详细地介绍了 transpose-frame.el
的问题。正确的方法需要在 Emacs 的 C-land 中编写新代码,以便在使用函数 split-window
时能够“复活”窗口对象。因此,仅仅更改 transpose-frame.el
中的代码是不够的。需要完全重写。
因此,在不知道有多少工作量的情况下,我同意了。经过大约 4 个月不频繁的、痛苦的工作,包括与 Martin Rudalics 的不断合作,他是 windows.c
和 windows.el
的维护者,负责 C-land 方面的所有代码。现在,Emacs 31 具有 transpose-frame.el
的所有功能,以及额外的功能。包含所有这些命令的文件是 window-x.el
。
命令
现在,我在以下图像中使用了简单的布局,只是因为我懒得制作更复杂的布局。请记住,这些命令可以用于您能想到的任何复杂的窗口布局。 我建议尝试一下,亲自体验一下,但如果您没有 Emacs 31,这是一个预览。
转置 (Transpose)
M-x transpose-window-layout
这个基本上是沿对角线镜像。
旋转布局 (Rotate layout)
M-x rotate-window-layout-clockwise
M-x rotate-window-layout-anticlockwise
翻转 (Flip)
M-x flip-window-layout-horizontally
M-x flip-window-layout-vertically
循环 (旋转窗口) Cycle (rotate windows)
这是我个人最喜欢的。
M-x rotate-windows
M-x rotate-windows-back