zsh で大変お世話になっていたコマンド、dired と cde を fish に移植した。
- ターミナルの zsh と Emacs を風のように駆け抜ける! / マスタカの ChangeLog メモ
- cde を改良 - syohex ’ s diary
- cde と elscreen-separate-buffer-list の相性が悪い - Qiita
dired
ターミナル上の fish で dired とタイプすると、 現在のディレクトリを Emacs の dired で開いてくれる。
function dired
emacsclient -e "(dired \"$PWD\")"
end
cde
ターミナル上で cde とタイプすると、 Emacs の現在のバッファに対応するディレクトリをターミナル上の fish で開いてくれる。
function cde
emacsclient -e "(return-current-working-directory-to-shell)" | sed 's/^"\(.*\)"$/\1/' | read EMACS_CWD
echo "chdir to $EMACS_CWD"
cd "$EMACS_CWD"
end
以下は、init.el に定義。
(defun return-current-working-directory-to-shell ()
(expand-file-name
(with-current-buffer
(if (featurep 'elscreen)
(let* ((frame-confs (elscreen-get-frame-confs (selected-frame)))
(num (nth 1 (assoc 'screen-history frame-confs)))
(cur-window-conf
(assoc 'window-configuration
(assoc num (assoc 'screen-property frame-confs))))
(marker (nth 2 cur-window-conf)))
(marker-buffer marker))
(nth 1
(assoc 'buffer-list
(nth 1 (nth 1 (current-frame-configuration))))))
default-directory)))