能否将Emacs的迷你缓冲区移动到屏幕顶部?

26
我已经开始在一台30英寸的显示器上编码了,想知道是否可以将 Emacs 中的 minibuffer 移动到屏幕顶部?我在谷歌搜索中没有找到任何信息。
祝好, Nimai Etheridge

4
有趣。我不确定我会使用它(对于我来说,迷你缓冲区在窗口底部已经超过20年了......),但是非常有趣的想法。 - dmckee --- ex-moderator kitten
4个回答

10
请查看default-minibuffer-frameinitial-frame-alist变量的文档。听起来你也许能够为你的minibuffer(你可以将其放置在屏幕顶部)拥有一个单独的frame,然后生成使用它的没有minibuffer的frames。
请注意,在initial-frame-alist中,它说明“如果该值调用了没有minibuffer的frame,并且您没有自己创建一个minibuffer frame,则根据minibuffer-frame-alist创建一个minibuffer frame”,这似乎正是所需的。
还有一些保存和还原frame配置的方法,因此,如果此方法有效,您可能可以在emacs启动时自动重新创建布局。
编辑:
下面是一个非常基本的示例/概念证明,可以使用该frame布局。minibuffer frame不能被删除,直到使用它的frames被删除。当您执行诸如最大化编辑器frame之类的操作时,当然会遇到问题,因此肯定需要进行一些工作,以使该系统以更无缝的方式工作。
(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的将modeline移动到顶部的方法相结合。

这可能可以在window-setup-hook中处理?

您还应该查看内置的frame.el和dframe.el库。像dframe-reposition-frame这样的函数可以提供一种方便的方式来保持minibuffer框架与活动编辑框架顶部'连接'。

变量minibuffer-auto-raise也可以配置为在激活minibuffer时提升minibuffer框架,这可能会减轻需要在其余时间内使其可见的需要。


谢谢,伙计。我今晚会研究一下,如果我找到有用的东西,我会告诉你。 - nimms

8

我相信你无法移动迷你缓冲区本身,但你可以将模式行“更或多或少”置于顶部:

(setq-default header-line-format mode-line-format) ; Copy mode-line
(setq-default mode-line-format nil) ; Remove mode-line

这将覆盖使用标题行的信息等内容,但这可能是在不修改C源代码的情况下最接近的方法。

3

1

在卡住这些问题一段时间后,我发现clemera's answer对于emacs 26+很有用:

对于Emacs 26及更高版本,您可以使用emacs-maple-minibufferivy-posframe(如果您正在使用ivy)。

这些软件包允许您配置弹出式迷你缓冲区框架的任何位置,包括当前窗口的顶部/底部。这些软件包的文档描述了如何设置它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接