2

現在のemacsフレームがXウィンドウまたは端末であるかどうかをelisp関数内から確認することは可能ですか?

ウィンドウを最大化する関数があり、新しいフレームが作成されるたびに実行するように設定されています。ただし、ターミナルのみのセッションを開くと、新しいフレームが作成されるたびにエラー メッセージが表示されます。

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))
  )
4

2 に答える 2

3

関数を見ることができますwindow-system。フレームのオプションの引数を受け入れます (デフォルトは現在のフレーム)。または、display-graphic-p(ドキュメントに従って)より最近のもので、複数のフレームを含むディスプレイ全体をチェックできます。あなたの例では、次のように書くことができます:

(if (display-graphic-p) ...)
于 2012-04-17T17:01:17.353 に答える
0

framep' since its return value is defined (according toCh f framep`) を次のように使用することもできます。

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'.
于 2012-04-21T03:00:52.390 に答える