1. ホーム
  2. emacs

[解決済み] emacsがターミナルモードであることを検出する方法は?

2023-06-26 22:59:26

質問

私の .emacs ファイルには、グラフィカルモードでのみ意味をなすコマンドがあります (たとえば (set-frame-size (selected-frame) 166 100) ). これらをターミナルモードではなく、グラフィカルモードでのみ実行するにはどうすればよいでしょうか (すなわち emacs -nw ).

ありがとうございます。

どのように解決するのですか?

この window-system 変数は Emacs がどのウィンドウシステムで動作しているかを Lisp プログラムに伝えます。指定できる値は

x
EmacsはXを使用してフレームを表示しています。
w32
Emacs は MS-Windows ネイティブ GUI を使用してフレームを表示しています。
ns
EmacsはNextstepインターフェース(GNUstepとMac OS Xで使用)を使用してフレームを表示しています。
pc
EmacsはMS-DOSのdirect screen writesを使ってフレームを表示しています。
Emacsは文字ベースの端末にフレームを表示しています。

から ドキュメント .

Edit : どうやら window-system は非推奨で、代わりに display-graphic-p に変更されたようです (source: C-h f window-system RET on emacs 23.3.1)。

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