環境変数を設定する elispの生成

Emacsにシェルで使っている環境変数を設定したい。
主に perlbrew関連なんですけど。シェルから Emacsを起動したらそれで
解決なんですけど、どうもシェルから起動すると意味もないのに
ミニバッファにフォーカスが移るということが多発しました。


なので 環境変数の設定を行う elisp
自動生成して、それを loadするという形にしました。

#!/usr/bin/env perl
use strict;
use warnings;

my $tmpl = qq{(setenv "#KEY#" "#VAL#")};

for my $key (@ARGV) {
    my $env = $tmpl;
    next unless exists $ENV{$key};

    my $val = $ENV{$key};
    $env =~ s{#KEY#}{$key};
    $env =~ s{#VAL#}{$val};

    print $env, "\n";
}

設定したい環境変数を引数に渡します。

  % perl emacsenv.pl PATH EDITOR
  (setenv "PATH" "/home/syohei/perl5/perlbrew/bin:/home/syohei/perl5/perlbrew/perls/current/bin:...)
  (setenv "EDITOR" "emacsclient")

みたいなのが出ます。

あとはこれを .zshrcあたり追加します。

    emacsenv.pl PATH (その他環境変数) > ~/.emacs.d/shellenv.el

最後に、.emacsに loadのための設定を書きます。

;; load environment value
(load-file (expand-file-name "~/.emacs.d/shellenv.el"))

これで目的が達成できました。