让 Emacs 状态栏可拖动到任何地方?

让 Emacs 状态栏可拖动到任何地方?

在 Emacs 中,如果我拆分框架 ( C-x 2),则每个窗口都有一个状态栏。以前,我可以拖动状态栏来调整它们的大小。

不幸的是,如今的 Emacs 只有几种模式(用于版本控制、行/列号、缩写、我的编程语言等),几乎整个栏已将鼠标 1 重新映射到其他东西,而不允许我拖动栏!

有什么方法可以将状态栏重新变成可以拖动的形式,而不会丢失所有模式?

答案1

您仍然可以拖动状态栏组件之间的空白,例如缓冲区名称前的 2 个空格。

您还可以使用键盘调整窗口大小:(C-x ^enlarge-window,前缀参数是需要添加的行数。

编辑:

每个模式行元素可能都有一个local-map属性,即单击该元素时应用的键映射。标准模式行元素的鼠标绑定在 中定义bindings.el。您可以循环遍历在其中找到的各种键映射;重新映射的键是[mode-line mouse-1]。您可能还必须处理向模式行添加其自身组件的模式。

具有本地键映射的模式行元素如下所示:。您可以迭代并检测和修改所有此类键映射。它的代码比我愿意在这个答案中写的要多,因为元素可以是符号(您必须遵循)和列表(如果它们正确,您必须递归到其中)。不幸的是,当元素嵌套时,看起来最深的属性适用,因此您不能通过将整个模式行包装在中来覆盖所有属性。同样,您必须单独处理添加自己组件的模式。(:propertize ELEMENT ... local-map (keymap ...) ...)mode-line-formatcar:propertizelocal-mappropertize

相关内容