わさっきhb

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

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

テキストエディタといったらEmacsです.Linuxをインストールしたら,まずEmacsが使えるかチェックしますし,手元のいくつかのWindows環境ではMeadowを活用しています.ただし,起動に時間がかかりますので,Emacsと類似のキーストロークでより軽い,jedコマンドやxyzzyを使うときもあります*1
さて,年末年始に,EmacsMeadowの設定ファイルを一元管理しようと思い立ちました.これらのLispコードには互換性があります.ただしEmacsのバージョンに基づく微妙な違いもあったりします.
まずはざっとファイルを読み直し,コードを整理し,自分へのメモとしてコメントをつけました.
そんな中,欲しいと思ったのが,「ホスト名に基づいてファイル名を生成する」こと.例えば,ホスト名がabcなら,~/.emacs.abc を読み出し,ホスト名がxyzなら ~/.emacs.xyz を読み出すよう,~/.emacs の中に書いておきたいわけです.
あれこれ調べたのですが,Emacsの変数として持っているわけではなさそうです.となれば,OSの環境変数に当たりましょう.
ということでできたコード:

; ホスト名
(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"))

; 小文字に
(setq hostname (downcase hostname))

; ピリオド以下削除(ピリオドがなければ変更なし)
(setq hostname (car (split-string hostname "\\.")))

; ~/.emacs.ホスト名
(setq el (expand-file-name (concat "~/.emacs." hostname)))

; ~/.emacs.ホスト名 があれば読み出す
(if (file-exists-p el)
    (load-file el))

*1:ときどきvimも使います.