system-specific-settings 20140818.757(in MELPA)
Apply settings only on certain systems

概要

Emacs Lispプログラミングをしたり、複数のマシンで共通する設定を書くときには
ホスト名やOSごとの処理を記述する必要が出てきます。

そこで、system-specific-settings.elで提供されているマクロを使うと便利です。

  • when-system-name-match
  • when-system-type-match
  • if-system-name-match
  • if-system-type-match

これらのマクロはautoloadされるので、MELPA経由でインストールすれば
requireを書かなくても使えます。

使い方は通常のwhenやifと同じですが、条件の書き方が異なります。

  • 完全一致
  • '(not X) →X以外
  • '(X Y) →XまたはY
  • '(regexp . RE) →REにマッチする

ちなみに関数も指定できますが、使用例が思い付きませんでした(笑)

インストール

パッケージシステムを初めて使う人は
以下の設定を ~/.emacs.d/init.el の
先頭に加えてください。

(package-initialize)
(setq package-archives
      '(("gnu" . "http://elpa.gnu.org/packages/")
        ("melpa" . "http://melpa.org/packages/")
        ("org" . "http://orgmode.org/elpa/")))

初めてsystem-specific-settingsを使う方は
以下のコマンドを実行します。

M-x package-install system-specific-settings

アップグレードする方は、
以下のコマンドでアップグレードしてください。
そのためにはpackage-utilsパッケージが必要です。

M-x package-install package-utils (初めてアップグレードする場合のみ)
M-x package-utils-upgrade-by-name system-specific-settings

使用例 140819032304.system-specific-settings.el(以下のコードと同一)

;;; ホスト名で分岐
(let ((system-name "fuga01"))
  ;; string=で判定
  (when-system-name-match "fuga01"
    1)                                  ; => 1
  ;; 正規表現指定
  (when-system-name-match '(regexp . "fuga")
    1)                                  ; => 1
  )
;;; GNU/linuxならば…
(when-system-type-match 'gnu/linux
  'linux)                               ; => linux
;;; 非Windowsならば…
(when-system-type-match '(not windows-nt)
  'not-windows)                         ; => not-windows
(when-system-type-match '(gnu gnu/linux gnu/kfreebsd darwin cygwin)
  'unix)                                ; => unix


本日もお読みいただき、ありがとうございました。参考になれば嬉しいです。