New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Emacsにシェルの環境変数を取り込む #18
Comments
私は .zshrcに以下のようなコードを仕込んで、.zshrcをロードする度に環境変数を設定する ## create emacs env file
perl -wle \
'do { print qq/(setenv "$_" "$ENV{$_}")/ if exists $ENV{$_} } for @ARGV' \
PATH VIRTUAL_ENV > ~/.emacs.d/shellenv.el そうすると、以下のようなものが出てくるので、
init.elで以下のように読み込んでいます。 ;; load environment value
(load-file (expand-file-name "~/.emacs.d/shellenv.el"))
(dolist (path (reverse (split-string (getenv "PATH") ":")))
(add-to-list 'exec-path path)) 以下は昔書いたブログエントリです。 |
�$B$O$8$a$^$7$F!":YLn1QJ~$H?=$7$^$9!#�(B �$B;w$FHs$J$kG:$_$NOC$G$O$"$j$^$9$,!"�(B 2013/2/18 Syohei YOSHIDA notifications@github.com
�$B:YLn�(B �$B1QJ~�(B (HOSONO Hidetomo), CISSP |
@h12o メールから返信する際は UTF-8で encodingしないと文字化けするそうです。 |
なんと! 失礼しました。以下改めて。 はじめまして、細野英朋と申します。 似て非なる悩みの話ではありますが、 2013/2/18 Syohei YOSHIDA notifications@github.com
細野 英朋 (HOSONO Hidetomo), CISSP |
環境変数のうち、non-interactive な環境でも必要なものは .environ に記述して (defun sync-env ()
"シェルの環境変数をEmacsの環境変数を同期させる。"
(interactive)
(let ((env (shell-command-to-string "source ~/.zshenv; env")))
(parse-env env))) と、 (defun parse-env (env)
"'env'命令の実行結果ENVの内容をEmacsに反映させる。"
(dolist (env (split-string env "\n"))
(when (string-match "^\\([A-Z][_A-Za-z0-9]+\\)=\\(.+\\)" env)
(let* ((env-name (match-string 1 env))
(env-val (match-string 2 env))
(old-val (getenv env-name)))
(unless (or (equal env "SHLVL") ; 例外
(equal env "TERM") ; 例外
(equal env-val old-val))
(message "%s (%s) is updated to %s" env-name old-val env-val)
(pcase env
("PATH" (dolist (path (reverse (split-string env-val ":")))
(add-to-list 'exec-path path)))
("INFOPATH" (dolist (path (reverse (split-string env-val ":")))
(add-to-list 'Info-directory-list path))))
(setenv env-name env-val)))))) の組み合わせで取り込んでいます。 |
僕の場合は、少し @syohex さんに似てますが、単純に shell-command-to-string で echo $PATH を叩いているだけです。 ;;; ターミナルコマンドの実行パスを追加
;; exec-pathリストにパスを追加する
(loop for x in (reverse
(split-string (substring (shell-command-to-string "echo $PATH") 0 -1) ":"))
do (add-to-list 'exec-path x)) |
この話題って,https://github.com/purcell/exec-path-from-shell 使えばOKでOKでしたっけ? |
はい、そうです |
通りがかっておいてなんですが,Close したい...w |
NTEmacs で、かつ shell-file-name が、msys/cygwin の "bash.exe" または "zsh.exe" の場合は、 |
purcell/exec-path-from-shell: Make Emacs use the $PATH set up by the user's shellを使いましょう。
「こんな拡張書いたけど、見て欲しい」な宣伝なのですが ヾ(〃><)ノ゙☆zonuexe/shellenv-el · GitHub他の方は Emacs で、たとへば
PATH
環境変数やexec-path
などをどう管理してるのか、も気になります。The text was updated successfully, but these errors were encountered: