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
環境ごとに設定を切り替えたい