zsh で大変お世話になっていたコマンド、dired と cde を fish に移植した。

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)))