在Mac上,在特定显示器中打开Emacs框架?

时间:2012-07-12 17:28:56

标签: macos emacs multiple-monitors

背景:我使用带双显示器的mac。当我启动Emacs时,它总是在“主”监视器(我的macbook pro上的监视器)中打开,这不是我想看的那个。是否有任何elisp函数在特定的监视器中打开一个新帧,以便在emacs启动后我可以在两个监视器中都有帧?

或者,有没有办法让Emacs在外部监视器中启动(如果存在)?

BTW,我的Emacs是来自emacsforosx.com的24.1.1。

2 个答案:

答案 0 :(得分:6)

显示屏上的可见区域具有连续的坐标空间。主显示屏的左上角(带有菜单栏的那个)是(0,0)。因此,在特定显示器上打开一个框架只是在特定位置打开框架的特殊情况。

首先移动您想要的框架,然后使用(frame-parameters)获取顶部/左侧值。通常(frame-parameters)的结果是alist(对列表),如下所示:

(... (top . 54) (left . 107) ...)

但是如果您在主显示屏的上方或左侧显示,则该显示屏上窗口的顶部/左侧值将为负值。 Emacs的GUI支持,最初来自X11,没有任何负坐标的概念。如果您尝试使用负值,Emacs会将它们解释为相对于主显示屏的底部/右侧 - 可能不是您想要的。

框架参数alist中有一个hack来处理这种情况:当存储负的top / left值时,相应的列表项是三个项目的列表。例如:

(... (top + -51) (left + -1674) ...)

通常,您可以直接向make-frame提供这些项目,但它不了解此黑客行为。相反,您可以通过修改其参数来制作框架并立即移动它。例如,我的左侧有一个1680x1050的显示屏,略高于我的主显示屏,因此可以在该显示屏上显示一个新的框架:

(modify-frame-parameters (make-frame) '((top + -51) (left + -1674)))

就我个人而言,我只使用Moom,因为它更易于使用且更灵活。我在Emacs中使用C-x 5 2创建一个新框架,然后使用Moom键盘快捷键将其移动到另一个显示器,或者我想要的任何地方。

答案 1 :(得分:2)

当我尝试(frame-parameters)方法时,它创建了一个奇怪的东西:主显示屏上有一个窗口,辅助显示屏上有一个窗口。然而,它们是“相同的”窗口,因为当我使用C-x C-c时,另一个也会被杀死。

这对我有用。我输入了我的.emacs文件。不确定你是否必须设置宽度和高度,但它当然也是一种方便的方法:

(setq default-frame-alist
  '((top + -550) (left + -1800) (width . 108) (height . 60)))