背景:我使用带双显示器的 mac。当我启动 Emacs 时,它总是在“主”监视器(我的 macbook pro 上的那个)中打开,这不是我想看的那个。是否有任何elisp功能可以在特定监视器中打开一个新框架,以便在emacs启动后我可以在两个监视器中都有框架?
或者,有没有办法让 Emacs 在外部监视器中启动(如果存在)?
顺便说一句,我的 Emacs 是来自 emacsforosx.com 的 24.1.1。
最佳答案
显示器上的可见区域具有连续的坐标空间。主显示屏(带有菜单栏的显示屏)的左上角是(0,0)。因此,在特定显示器上打开框架只是在特定位置打开框架的一种特殊情况。
首先将框架移动到所需的位置,然后使用(frame-parameters)
获取顶部/左侧的值。通常,(frame-parameters)
的结果是一个列表(成对列表),如下所示:
(... (top . 54) (left . 107) ...)
但是,如果您在主显示上方或左侧有显示,则该显示上的窗口的上/左值将为负。 Emacs的GUI支持最初来自X11,没有任何负坐标的概念。如果您尝试使用负值,则Emacs会将其解释为相对于主显示屏的底部/右侧-可能不是您想要的。
框架参数alist中有一个hack可以处理这种情况:存储负的top/left值时,对应的列表项是三个项的列表。例如:
(... (top + -51) (left + -1674) ...)
通常,您可以将这些项目直接提供给
make-frame
,但是它不理解此hack。相反,您可以制作框架并通过修改其参数立即移动它。例如,我左侧有一个1680x1050显示屏,略高于我的主显示屏,因此可以在该显示屏上显示一个新的帧:(modify-frame-parameters (make-frame) '((top + -51) (left + -1674)))
我个人只是使用Moom,因为它更易于使用且更灵活。我在Emacs中使用
C-x 5 2
创建了一个新框架,然后使用Moom键盘快捷键将其移动到另一个显示器或其他需要的位置。
关于macos - 在 mac 上,在特定监视器中打开 Emacs 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457317/