2012-07-12 37 views
4

背景:我使用雙顯示器的Mac。當我啓動Emacs時,它總是在「main」監視器(我的macbook pro上的那個)上打開,這不是我想看的那個。是否有任何elisp函數可以在特定的監視器中打開一個新幀,以便在emacs啓動之後可以在兩個監視器中顯示幀?在mac上,在特定的顯示器中打開Emacs框架?

或者,有什麼辦法讓Emacs在外部顯示器(如果存在)啓動?

順便說一句,我的Emacs是24.1.1從emacsforosx.com。

回答

5

顯示屏上的可見區域具有連續的座標空間。主顯示屏的左上角(帶有菜單欄的顯示屏)爲(0,0)。因此,在特定的顯示器上打開框架只是在特定位置打開框架的特殊情況。

首先在需要的位置移動框架,然後使用(frame-parameters)獲取頂部/左側值。通常的(frame-parameters)結果是ALIST(對列表),這樣的事情:

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

但如果你有顯示器上方或主顯示屏的左側,爲顯示窗口的頂部/左值將是負面的。 Emacs的GUI支持最初來自X11,它沒有任何負座標的概念。如果您嘗試使用負值,Emacs會將它們解釋爲相對於主顯示屏的底部/右側 - 可能不是您想要的。

在框架參數alist中存在一個黑客來處理這種情況:當存儲負的頂部/左側值時,相應的列表項目是一個三項目列表。例如:

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

通常可以直接向這些項目make-frame,但它不理解這個技巧。相反,您可以創建框架並立即通過修改其參數來移動框架。例如,我有一個1680×1050顯示屏的左側和略高於我的主顯示屏,所以此工程於該顯示器上顯示一個新的框架:

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

個人而言,我只是用Moom,因爲它更容易使用並且更加靈活。我在Emacs中創建了一個新框架C-x 5 2,然後使用Moom鍵盤快捷鍵將其移動到另一個顯示器或其他任何我想要的地方。

+0

'modify-frame-parameters' works!謝謝~~ – MetroWind 2012-07-12 21:17:06

+0

有什麼辦法可以判斷是否有第二臺顯示器?如果只有一個顯示器,我不希望在屏幕外有一個框架XD – MetroWind 2012-07-12 21:18:17

+1

您可以使用'(x-display-pixel-height)'和'(x-display-pixel-width)'來獲取寬度和顯示座標空間的高度。 – 2012-07-12 21:25:09

0

當我嘗試(frame-parameters)方法時,它創建了一個奇怪的事物:一個窗口在主顯示器上,另一個在輔助顯示器上。然而,他們是「相同」的窗口,因爲當我C-C C-C一個,另一個也會被殺死。

這是什麼對我有用。我把我的.emacs文件。不知道你是否必須設置寬度和高度,但它肯定是一個方便的方法來做到這一點:

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

你確定你第一次運行Emacs服務器嗎?如果沒有服務器,'C-x C-c' *會破壞所有的幀。 – phils 2013-11-13 04:50:06

相關問題