背景:我使用带有双显示器的mac。当我启动 Emacs 时,它总是在“主”监视器(我的 macbook pro 上的那个)中打开,这不是我想要查看的。是否有任何 elisp 功能可以在特定监视器中打开一个新框架,以便在 emacs 启动后我可以在两个监视器中都有框架?
或者,有什么方法可以让 Emacs 在外接显示器中启动(如果存在的话)?
顺便说一句,我的 Emacs 是来自 emacsforosx.com 的 24.1.1。
背景:我使用带有双显示器的mac。当我启动 Emacs 时,它总是在“主”监视器(我的 macbook pro 上的那个)中打开,这不是我想要查看的。是否有任何 elisp 功能可以在特定监视器中打开一个新框架,以便在 emacs 启动后我可以在两个监视器中都有框架?
或者,有什么方法可以让 Emacs 在外接显示器中启动(如果存在的话)?
顺便说一句,我的 Emacs 是来自 emacsforosx.com 的 24.1.1。
显示器上的可见区域具有连续的坐标空间。主显示屏(上面有菜单栏的那个)的左上角是 (0, 0)。因此,在特定显示器上打开框架只是在特定位置打开框架的一种特殊情况。
首先将框架移动到您想要的位置,然后用于(frame-parameters)
获取顶部/左侧值。通常,结果(frame-parameters)
是一个 alist(对列表),如下所示:
(... (top . 54) (left . 107) ...)
但是,如果您在主显示器的上方或左侧有显示器,则该显示器上窗口的顶部/左侧值将为负数。Emacs 的 GUI 支持,最初来自 X11,没有任何负坐标的概念。如果您尝试使用负值,Emacs 会将它们解释为相对于主显示屏的底部/右侧——可能不是您想要的。
框架参数 alist 中有一个 hack 来处理这种情况:当存储负的顶部/左侧值时,相应的列表项是三个项目的列表。例如:
(... (top + -51) (left + -1674) ...)
通常您可以将这些项目直接提供给make-frame
,但它不理解这个 hack。相反,您可以通过修改其参数来制作框架并立即移动它。例如,我的左侧有一个 1680x1050 显示器,略高于我的主显示器,所以这可以在该显示器上显示一个新框架:
(modify-frame-parameters (make-frame) '((top + -51) (left + -1674)))
我个人只使用Moom,因为它更易于使用且更灵活。我在 Emacs 中创建了一个新框架,C-x 5 2
然后使用 Moom 键盘快捷键将其移动到另一个显示器,或者我想要的任何其他地方。
当我尝试这种(frame-parameters)
方法时,它产生了一个奇怪的东西:主显示器上有一个窗口,辅助显示器上有一个窗口。但是,它们是“相同”的窗口,因为当我 Cx 抄送一个时,另一个也会被杀死。
这对我有用。我放入了我的 .emacs 文件。不确定是否必须设置宽度和高度,但这当然也是一种方便的方法:
(setq default-frame-alist
'((top + -550) (left + -1800) (width . 108) (height . 60)))