Emacs の初期化用ファイル・環境編

これは .emacs*1を Org Mode で文芸的プログラミングとして書こうという試みの中で、Org Mode は Markdown も出力することができると知って出力してみただけの記事です。
後に元の文章を更新することがあるかもしれませんが、ここは更新しないかもしれません。

環境判別用変数を定義したりする

世の中には様々な環境*2が存在します。
それぞれに設定ファイルを作成するのは大変面倒です。
なので、現在 Emacs が動いている環境がどのようなものなのか分かれば、同じテーマの設定ファイルをいくつも作らなくて済みますよね。

ここではそのような環境を判別するための変数を定義します。

Emacs 判別用

例えば、以下は XEmacs であれば t を返します*3

(setq xemacsp (equal (featurep 'xemacs) 'xemacs))

これだけでは心もとないので、同名の関数を作成*4し:

(defun xemacsp ()
  (equal (featurep 'xemacs) 'xemacs))

それを評価した後の値を設定します。

(setq xemacsp (xemacsp))
    
(setq xemacs-no-mule-p (and (not (featurep 'mule))
                       xemacsp))

同じ様に、Emacs のメジャー・バージョン毎に定義します。

(defun emacs-major-version-p (major-version)
  (equal emacs-major-version major-version))
    
(setq emacs20-p (and (emacs-major-version-p 20)
                     (null xemacsp))
      emacs21-p (and (emacs-major-version-p 21)
                     (null xemacsp))
      emacs22-p (and (emacs-major-version-p 22)
                     (null xemacsp))
      emacs23-p (and (emacs-major-version-p 23)
                     (null xemacsp))
      emacs24-p (and (emacs-major-version-p 24)
                     (null xemacsp)))

Meadow 用の環境判別用変数ですが…、Windows 用の本家 Emacs がちゃんと動くようになったのであんまり必要ないかもしれません。

(defun meadowp ()
  (featurep 'meadow))
    
(setq meadowp (meadowp))
    
(setq meadow1-p (and meadowp emacs20-p)
      meadow2-p (and meadowp emacs21-p)
      meadow3-p (and meadowp emacs22-p))

OS 判別用

次は OS を判別する変数を定義します。
system-configuration を使えばよいのですが、めんどくさいので system-type を使っています。

(defun system-type-p (system-symbol)
      (equal system-type system-name))
    
(setq linuxp       (system-type-p 'gnu/linux)
      darwinp      (system-type-p 'darwin)
      usg-unix-v-p (system-type-p 'usg-unix-v)
      windows-nt-p (system-type-p 'windows-nt)
      ms-dos-p     (system-type-p 'ms-dos))

ウィンドウ・システム判別用

(defun window-system-p (ws)
  (equal window-system ws))
    
(setq x-window-system-p          (window-system-p 'x)
      ms-windows-gui-p           (window-system-p 'w32)
      nextstep-interface-p       (window-system-p 'ns))

ウィンドウ・システムを使っていない場合は character-based-terminal-pt になります。
Linux においてはデスクトップ環境の不具合などで EmacsCUI 上で動かすことがあるかもしれません。

(defun character-based-terminal-p ()
  (null window-system))
    
(setq character-based-terminal-p (character-based-terminal-p))

文字コード設定編に続く。

*1:Emacs の初期化ファイルの意

*2:プラットフォームとも。要するに OS のこと。とはいえ、一口に環境と云っても OS なのか、Emacs 本体のバージョンやその他の emacsen なのか、はたまたデスクトップ環境なのかで色々と違ってくる。

*3:おそらく。XEmacs をつこおてないので分からない。

*4:そんなことする必要はないという説も。