わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

続・Emacs Lispでホスト名を知りたい

そんな中,欲しいと思ったのが,「ホスト名に基づいてファイル名を生成する」こと.例えば,ホスト名がabcなら,~/.emacs.abc を読み出し,ホスト名がxyzなら ~/.emacs.xyz を読み出すよう,~/.emacs の中に書いておきたいわけです.
あれこれ調べたのですが,Emacsの変数として持っているわけではなさそうです.となれば,OSの環境変数に当たりましょう.

Emacs Lispでホスト名を知りたい - わさっき

Etch + Emacs22の環境で,うまく読み出せませんでした.変数hostnameの値がno_hostになっています.
原因は,HOSTNAMEやHOSTが環境変数ではなくシェル変数になっているためのようです.
じゃあ環境変数になるように,~/.bashrcに「export HOSTNAME=$HOSTNAME」とか書けばいいのかと考えたのですが,GUIログイン時にこのファイルは読まれないので,デスクトップ画面からEmacsを立ち上げる際には,使えません.
もう少し調べたところ,ホスト名を得るための関数として,system-nameを見つけました(参照: マシン毎に設定を切り替える).Meadowでも使えました(ホスト名は大文字になりますがalthough that prints the host name in capital letters).
ということで,

; ホスト名
(setq hostname (getenv "HOSTNAME"))
(if (null hostname)
    (setq hostname (getenv "HOST")))
(if (null hostname)
    (setq hostname (getenv "COMPUTERNAME")))
(if (null hostname)
    (setq hostname "no_host"))
Emacs Lispでホスト名を知りたい - わさっき

(setq hostname (system-name))
(if (null hostname)
    (setq hostname "no_host"))

まで減りました.その後の,小文字への変換,ピリオド以下削除は,必要なので残しています.