cdeを改良
ターミナルの zsh と Emacs を風のように駆け抜ける! / マスタカの ChangeLog メモ
オリジナルでは ファイルに関連づいていないバッファ(diredバッファ等)で、
cdeしたとき default-directoryに移動していたんですが、default-directoryと
いうのが以前開いたファイルに設定されているケースがあったので、厳密に
今いるディレクトリにしてみた。あと .zshrcにいろいろ書くのもあれだったので
関数として切り出しました。
;; .emacs等設定ファイルに追加 ;; Improve at 2013年 9月 14日 (defun elscreen-get-current-directory (buf) (with-current-buffer buf (aif (buffer-file-name) (file-name-directory it) default-directory))) (defun non-elscreen-current-directory () (let* ((bufsinfo (cadr (cadr (current-frame-configuration)))) (bufname-list (assoc-default 'buffer-list bufsinfo))) (loop for buf in bufname-list for file = (or (buffer-file-name buf) (with-current-buffer buf (when (eq major-mode 'dired-mode) dired-directory))) when (buffer-file-name buf) return (file-name-directory it))))
.zshrcは以下のような具合
function cde () { EMACS_CWD=`emacsclient -e " (if (featurep 'elscreen) (elscreen-current-directory) (non-elscreen-current-directory))" | sed 's/^"\(.*\)"$/\1/'` echo "chdir to $EMACS_CWD" cd "$EMACS_CWD" }