2012年11月20日火曜日

ターミナルとEmacsに関する風テク

唐突ですが風キッズのみんなに質問です.
みんなはemacsからターミナルに移動した時何をしますか?

たぶんいましがたemacsで編集してたファイルに関する処理をすると思います.
しかし!このときカレントディレクトリが常に今編集してたファイルのフォルダになってるほど人生は甘くないです.ー そう,甘くないんです.
だから私たち人間はこんなときcdとか打つのだと思います.

でもいちいちパス打って移動するのってめんどくさいです.なので今emacsが開いてるファイルのフォルダに一発でcdできるコマンドを紹介します.逆関数としてターミナルのカレントディレクトリをemacs上でdiredさせる方法も紹介します.

○ emacs側の設定
(server-start)
(defun non-elscreen-current-directory ()
  (let* (current-dir
         (current-buffer
          (nth 1 (assoc 'buffer-list
                        (nth 1 (nth 1 (current-frame-configuration))))))
         (active-file-name
          (with-current-buffer current-buffer
            (progn
              (setq current-dir (expand-file-name (cadr (split-string (pwd)))))
              (buffer-file-name)))))
    (if active-file-name
        (file-name-directory active-file-name)
      current-dir)))

○ shell側の設定
alias eclient="/Applications/Emacs.app/Contents/MacOS/bin/emacsclient"
function cde () {    
    EMACS_CWD=`eclient -e "
      (if (featurep 'elscreen)
          (elscreen-current-directory)
        (non-elscreen-current-directory))" | sed 's/^"\(.*\)"$/\1/'`

    echo "chdir to $EMACS_CWD"
    cd "$EMACS_CWD"
}
function dired () {
  eclient -e "(dired \"$PWD\")"
}

あとはターミナル上でcdeと打てばemacsで今開いてるバッファのフォルダに行くし,diredと打てばカレントディレクトリをemacs上でdiredしてくれます.完.

※注 これzshオンリーなテクかもしれません.bashでできるのか知らないです.


○ 参考サイト様


0 件のコメント :

コメントを投稿