WindowsでEmacsを使ってるときに32bitか64bitかを見分ける方法

Windowsで32bitか64bitかを判別したいというときが、もしかしたらあるかもしれない。そんなときのための最近思いついたelispです。

この発想の元は、C:/Program Files (x86)があったらそれは64bitのWindowsじゃないかということだった。下のコードが発想を元に作ったもの。

(defvar run-windows
  (or (equal system-type 'windows-nt)
      (equal system-type 'ms-dos))))

(if run-windows
    (if (file-exists-p "C:/Program Files (x86)")
        (defvar run-windows-x64 t)
      (defvar run-windows-x64 nil)))

;;追記 2012.4.15
;;宣言の仕方がsetqだとバイトコンパイルのときにWarningが出るので,defvarに変更

file-exists-pは、名前と違って、ディレクトリでも、存在するかを判定できるという関数なんです。これには騙されました...。

;;ファイル
(file-exists-p "C:/Users/User/Desktop/test.el")
;=> t
(file-exists-p "C:/Users/User/Desktop/not_found.el")
;=> nil

;;ディレクトリ (Windows 64bitの場合)
(file-exists-p "C:/Program Files")
;=> t
(file-exists-p "C:/Program Files (x86)")
;=> nil

どんなときに32bitと64bitの処理を分けたいと思うかがわからないけれど、ふと思いつくのがkiwanamiさんの3D迷路で32bitだとエラーが出るらしいのでその分岐処理にでもどうでしょうと思ったり。

追記 2012/2/29

そういえばWindowsでmagitを使うために32bitか64bitの判定がほしかったのを忘れてたorz。

magitは、magit-git-executableという変数にgitを実行するためのパスを入れるようになってる。msysgitをインストールしてる場合、git.exeは、

32bitだと"C:/Program Files/Git/bin/git.exe"
64bitだと"C:/Program Files (x86)/Git/bin/git.exe"
に入るようになってる。

これを判定させるためにrun-windows-x64が使える。この場合のコードは、

(if run-windows-x64
    (setq magit-git-executable "C:/Program Files (x86)/Git/bin/git.exe")
  (setq magit-git-executable "C:/Program Files/Git/bin/git.exe"))

という風になる。

参考サイト

file-exists-p : @see GNU Emacs Lispリファレンスマニュアル: ファイル
sysytem-type : @see System Environment - GNU Emacs Lisp Reference Manual
window-system : @see Window Systems - GNU Emacs Lisp Reference Manual
環境ごとに設定を切り替えたい

@see [http
//d.hatena.ne.jp/tomoya/20090807/1249601308:title=]
@see [https
//github.com/murasesyuka/dotemacs/blob/master/.emacs:title=]