Keychain and Carbon Emacs
Carbon Emacs は NeXTStep 的アプリ (*.app) なので、いまのシェルの環境変数なぞ何も引き継いでくれない。~/.profile といったあたりのファイルも何もナメてくれない。これだとkeychain (OS X の Keychain じゃなくて、gentoo 起源の、すでに動いている ssh-agent の環境を拾ってくれるkeychain) が使えず、Emacs 上の Mew からいちいち ssh passphrase を聞かれたりして面倒なので、自力で ~/.keychain/$HOSTNAME-sh とかをナメないといけない。
(save-current-buffer
(let
(
(buffer (set-buffer (generate-new-buffer "*keychain*")))
(eval-sh-export
(lambda (name)
(progn
(goto-char (point-min))
(setenv name
(buffer-substring
(search-forward (concat name "="))
(- (search-forward ";") 1)))))))
(insert-file-contents
(concat
(expand-file-name "~/.keychain/")
(car (split-string (system-name) "\\."))
"-sh"))
(funcall eval-sh-export "SSH_AUTH_SOCK")
(funcall eval-sh-export "SSH_AGENT_PID")
(kill-buffer buffer)))lambda がどうも上手につかえない。