2012-04-17 62 views
2

如果當前emacs幀是X窗口還是終端,是否可以從elisp函數內檢查?檢查當前幀是否爲X窗口的函數

我有一個最大化窗口的函數,它被設置爲在創建新框架時運行。但是,當我打開僅終端會話時,每當創建新框架時都會收到錯誤消息。

我希望函數檢查它是否是X窗口,否則不做任何事情。那可能嗎?

爲了記錄在案,這裏是當前功能:

(defun fullscreen (&optional f)  
    (interactive)      ;if called interactively, use current frame 
    (if f (select-frame f))   ;if called as hook, use new frame 
    (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 
        '(2 "_NET_WM_STATE_MAXIMIZED_VERT" 0)) 
    (x-send-client-message nil 0 nil "_NET_WM_STATE" 32 
        '(2 "_NET_WM_STATE_MAXIMIZED_HORZ" 0)) 
) 

回答

3

您可能看window-system功能。它接受一個幀可選參數(默認爲當前幀)。或者,display-graphic-p更新(根據文檔),並允許檢查包含多個幀的整個顯示。在你的榜樣,你可以這樣寫:

(if (display-graphic-p) ...) 
0

您還可以使用framep' since its return value is defined (according to C-H˚Fframep`)爲:

Return non-nil if OBJECT is a frame. 
Value is: 
    t for a termcap frame (a character-only terminal), 
'x' for an Emacs frame that is really an X window, 
'w32' for an Emacs frame that is a window on MS-Windows display, 
'ns' for an Emacs frame on a GNUstep or Macintosh Cocoa display, 
'pc' for a direct-write MS-DOS frame. 
See also `frame-live-p'.