【发布时间】:2011-03-04 06:17:44
【问题描述】:
我已经开始在 30 英寸显示器上编码,我想知道是否可以在 emacs 中将 minibuffer 移动到屏幕顶部?谷歌搜索没有显示任何内容。
干杯 尼迈埃瑟里奇
【问题讨论】:
-
有趣。我不确定我是否会使用它(minibuffer 在我的窗口底部已经存在了 20 多年......),但非常有趣的想法。
标签: emacs
我已经开始在 30 英寸显示器上编码,我想知道是否可以在 emacs 中将 minibuffer 移动到屏幕顶部?谷歌搜索没有显示任何内容。
干杯 尼迈埃瑟里奇
【问题讨论】:
标签: emacs
查看default-minibuffer-frame 和initial-frame-alist 变量的文档。听起来您可以为您的小缓冲区(您可以将其放置在屏幕顶部)设置一个单独的帧,然后生成使用它的无小缓冲区帧。
请注意,在initial-frame-alist 中它声明“如果该值调用一个没有 minibuffer 的帧,并且您还没有自己创建 minibuffer 帧,则根据minibuffer-frame-alist 创建一个 minibuffer 帧”,听起来就像需要什么一样。
有一些方法可以保存和恢复框架配置,所以如果这可行,您可能会在 emacs 启动时自动重新创建布局。
编辑:
下面是使用这种框架布置的非常基本的示例/概念验证。在删除使用它的帧之前,不能删除 minibuffer 帧。当然,当您执行最大化编辑器框架之类的操作时,您会遇到麻烦,因此肯定需要做一些工作来尝试使该系统以更无缝的方式工作。
(setq default-minibuffer-frame
(make-frame
'((name . "minibuffer")
(width . 80)
(height . 1)
(minibuffer . only)
(top . 0)
(left . 0)
)))
(setq new-frame
(make-frame
'((name . "editor")
(width . 80)
(height . 30)
(minibuffer . nil)
(top . 50)
(left . 0)
)))
当然,您也可以将此与 scottfrazer 将模式行移至顶部的方法结合使用。
这可能在window-setup-hook 中处理?
您还应该查看内置的 frame.el 和 dframe.el 库。像dframe-reposition-frame 这样的函数可以提供一种方便的方式来保持迷你缓冲区帧“附加”到活动编辑帧的顶部。
变量minibuffer-auto-raise 也可以配置为在激活minibuffer 时提升minibuffer 帧,这样可以减少在其余时间让它可见的需要。
【讨论】:
我很确定你不能移动 minibuffer 本身,但你可以让模式行在顶部:
(setq-default header-line-format mode-line-format) ; Copy mode-line
(setq-default mode-line-format nil) ; Remove mode-line
这将覆盖使用标题行的诸如 Info 之类的内容,但它可能与您在不破解 C 源代码的情况下获得的一样接近。
【讨论】:
使用独立的 minibuffer 帧。这显示了如何:
http://www.emacswiki.org/emacs/Dedicated_Minibuffer_Frame
http://www.emacswiki.org/emacs/oneonone.el
要么查看该代码以获得想法,要么直接使用它。您只需要自定义 minibuffer 帧位置设置:
1on1-minibuffer-frame-left -- minibuffer 帧左边缘的位置,以像素为单位。
1on1-minibuffer-frame-top/bottom -- minibuffer 帧的顶部(或底部)位置,以像素为单位。
【讨论】:
在这些答案停留了很长一段时间后,我发现 clemera's answer 对 emacs 26+ 很有用:
对于 Emacs 26 及更高版本,如果您使用的是 ivy,则可以使用 emacs-maple-minibuffer 或 ivy-posframe。
这些包允许您配置在任何位置弹出一个迷你缓冲区帧,包括当前窗口顶部/底部。这些包的文档描述了如何设置它们。
【讨论】: