emacs で dired でディレクトリを移動してカレントディレクトリを変更する

function emacscd {
    export EMACS_DIR_FILE=$HOME/.emacs.dir.$$
    emacs .
    if [ -f $EMACS_DIR_FILE ]; then
        cd `cat $EMACS_DIR_FILE`
        rm -f $EMACS_DIR_FILE
    fi
}
(defun dired-set-current-dir-and-exit()
  "Set viewing directory to the current directory"
  (interactive)
  (write-region (expand-file-name dired-directory) nil (getenv "EMACS_DIR_FILE"))
  (save-buffers-kill-terminal))

(add-hook 'dired-mode-hook
          '(lambda()
	     (define-key dired-mode-map "\C-x\C-c" 'dired-set-current-dir-and-exit)))