2011-02-02 11 views
11

私はmake-shellsコマンドをemacsで持っていて、それぞれが独自の作業ディレクトリを持ったいくつかのemacs-shellバッファを開くでしょう。私が取り組んでいるプロジェクトごとに、そのプロジェクトのディレクトリから始まるシェルがあるので、簡単に切り替えることができます。与えられた作業ディレクトリを持つemacsでシェルを開く

現在、私はこのコードを持っている:

(defun shell-dir (name dir) 
    (interactive "sShell name: \nDDirectory: ") 
    (shell name) 
    (switch-to-buffer name) 
    (comint-send-string (current-buffer) (concat "cd " dir "\r")) 
    (sleep-for 0 10) 
    (dirs)) 

(defun make-shells() 
    (interactive) 
    (shell-dir "project1" "~/proj/project1") 
    (shell-dir "project2" "~/proj/project2") 
    (shell-dir "project3" "~/proj/project3") 
    (delete-window)) 

これはしかし、かなり醜いです、と私はそれを手動で再実行するまでの半分の時間(dirs)はタブ補完ブレークので、正しいパスをピックアップしていません。 Emacsシェルの現在の作業ディレクトリを設定する組み込みの方法はありますか?あるいは、CEDET(シェルとemacsモードの依存度が低い)のようなものがこれにはるかに良い解決策になるでしょうか?

答えて

10

私はEmacsが提供している現在のディレクトリトラッキングと同様の問題を経験しました。だから私は問題を一度も永遠に解決するものを書きました。

hereを確認してください。

これは、現在のディレクトリへのフルパスを含むようにシェルプロンプトを変更して(Emacs内で実行している場合のみ)、Emacsシェルバッファがそれを使用するようにしています。

これは、M-xディレクトリを再度実行する必要がないことを意味します。

同じことをするパッケージdirtrack(Emacsに同梱)もあります。

プロンプトからパスを削除するので、私のバージョンが気に入っています。私の現在のディレクトリはしばしば非常に長いので、私はプロンプトでパス全体を見たくない。あなたは上記の二つのソリューションのいずれかを使用すると

、あなたがあることをごshell-dirルーチンを簡素化することができます:

(defun shell-dir (name dir) 
    (interactive "sShell name: \nDDirectory: ") 
    (let ((default-directory dir)) 
    (shell name))) 
1

もう一つの答えは...私はEmacsのフィギュアを作るために(Linuxの場合)の方法があったました/ procファイルシステムを使用して、現在のディレクトリを適切に削除します。

http://www.emacswiki.org/emacs/ShellDirtrackByProcfs

そのように、あなただけのどんなディレクトリにシェルを起動する必要があるとEmacsは右のそれを自動的に把握し、その他タブ補完を取得します。

+0

魅力的な作品です! – dfri

関連する問題