記事

Last Modified:

EmacsとShellの環境を共有する(NTEmacs対応) #Emacs

一時ファイル作成するよりパイプでつなぎたい派です。 パイプが無理でもコマンド置換や名前付きパイプでがんばりたい派です。

そんな私は環境変数のインポートを一時ファイルを作らずにEmacs内で完結するようにしています。

;; NTEmacsでCygwinを使っている場合はcygwin-mountを使う
(when (require 'cygwin-mount nil t)
  (setq cygwin-mount-cygwin-bin-directory "c:/cygwin/bin")
  (cygwin-mount-activate))

;; 環境変数のインポート
(let* ((output (with-output-to-string (call-process "/bin/sh" nil standard-output nil "--login" "-c" "env")))
       (lines (split-string output "\n" t))
       (pairs (mapcar (lambda (x) (split-string x "=")) lines)))
  (dolist (pair pairs)
    (setenv (pop pair) (mapconcat 'identity pair "="))))

;; HOMEとPATHの再構築
(when (eq system-type 'windows-nt)
  (setenv "HOME" (expand-file-name (getenv "HOME")))
  (setenv "PATH" (mapconcat 'expand-file-name (split-string (getenv "PATH") ":" t) path-separator)))

;; exec-pathの設定
(setq exec-path (append (split-string (getenv "PATH") path-separator) exec-path))

が、特に早い段階でやらないといけないわけじゃないので、この辺はafter-init-hookに入れるかもです