window-system毎のファイルを用意する場合の読み込み方について

(cond
 ((eq window-system 'w32)
  (load "~/.emacs.d/init-windows"))
 ((or (eq window-system 'ns) (eq window-system 'mac))
  (load "~/.emacs.d/init-macos")))

こういうのは何となく嫌なので

(load (concat "~/.emacs.d/init-" (prin1-to-string window-system)))
;; 実際にはこんな風にしてる
;; (unless (boundp 'user-emacs-directory)
;;   (defvar user-emacs-directory (expand-file-name "~/.emacs.d/")))
;; (load (concat user-emacs-directory (prin1-to-string window-system)))

と書き換える。window-systemは排他的だからね。
(system-typeの場合も同じようにやればいいと思う)



window-systemはsymbolなので、(concat "~/.emacs.d/init-" window-system ".el") とはできない。

;; 型はtype-ofで調べられる。
(type-of window-system) => symbol
(eq (type-of window-system) 'symbol) => t
(symbolp window-system) => t

なのでprin1-to-stringを使ってsymbolをstringに変換すればOK。
(prin1ってどういうつもりで付けた名前なんだろう?)

おや…。locate-user-emacs-fileというのができてるな。
(load (locate-user-emacs-file (prin1-to-string window-system)))
でいいか。