私の.emacs
ファイル、グラフィカルモードでのみ意味のあるコマンドがあります((set-frame-size (selected-frame) 166 100)
)。これらをグラフィカルモードでのみ実行し、ターミナルモードでは実行しません(つまり、emacs -nw
)。
ありがとう!
window-system
変数は、Emacsが実行されているウィンドウシステムをLISPプログラムに伝えます。可能な値は次のとおりです。
ドキュメント から。
Edit:window-systemは廃止され、display-graphic-p
(ソース:emacs 23.3.1のC-h f window-system RET)。
(display-graphic-p &optional DISPLAY)
Return non-nil if DISPLAY is a graphic display.
Graphical displays are those which are capable of displaying several
frames and several different fonts at once. This is true for displays
that use a window system such as X, and false for text-only terminals.
DISPLAY can be a display name, a frame, or nil (meaning the selected
frame's display).
だからあなたがしたいことは:
(if (display-graphic-p)
(progn
;; if graphic
(your)
(code))
;; else (optional)
(your)
(code))
Else節がない場合は、次のことができます。
;; more readable :)
(when (display-graphic-p)
(your)
(code))
window-system
およびdisplay-graphic-p
に言及する回答は間違っていませんが、完全な状況を伝えているわけではありません。
実際には、単一のEmacsインスタンスは複数のフレームを持つことができ、その一部は端末上にあり、他はウィンドウシステム上にある可能性があります。つまり、単一のEmacsインスタンス内でもwindow-system
の異なる値を取得できます。
たとえば、ウィンドウシステムのEmacsを起動してから、ターミナルでemacsclient -t
を介して接続できます。結果の端末フレームには、window-system
のnil
の値が表示されます。同様に、デーモンモードでemacsを起動し、後でグラフィカルフレームを作成するように指示できます。
この結果、window-system
に依存するコードを.emacsに入れないでください。代わりに、set-frame-size
の例のようなコードを、フレームが作成された後に実行されるフック関数に入れます。
(add-hook 'after-make-frame-functions
(lambda ()
(if window-system
(set-frame-size (selected-frame) 166 100)))))
'after-make-frame-functions
フックは初期フレームでは実行されないため、上記のようなフレーム関連のフック関数も'after-init-hook
に追加する必要がある場合が多いことに注意してください。
window-systemは、「Cソースコード」で定義された変数です。その値はx
ドキュメント:選択したフレームが表示されるウィンドウシステムの名前。値はシンボルです。たとえば、Xウィンドウの場合は「x」です。選択したフレームがテキストのみの端末にある場合、値はnilです。
基本的には:
(if window-system
(progn
(something)
(something-else)))
Guiモードの場合、次のことが当てはまります。
(window-systemの場合)
私は、Emacsをどこでも、つまり端末から、グラフィックモードで、LinuxおよびMacOSで使用しているため、window-name機能をラップする追加の関数を定義しました。
(defun window-system-name()
(cond ((eq system-type 'gnu/linux) (if (display-graphic-p) "x" "nox"))
((eq system-type 'darwin) (if (display-graphic-p) "mac" "nox"))
(t (error "Unsupported window-system") nil)))
Windowsやシリアル端末が使用される古いシステムのような他のシステムをカバーするように拡張できます。しかし、私はそうする時間がありません;-)