GNU EmacsのTips...
シェルを起動するとカレントディレクトリがおかしい時
(2000.09.11)

概要

 シェルを起動すると、シェルのカレントディレクトリとEmacsのそれ とがずれていることがある。

 このコードを.emacsに入れておくと直るかも知れない。

適用範囲

GNU Emacs 20.5.1 (Meadow)

解説

 Mule for Windowsでbashを使っていると、いろいろ困ったことがあり ました(Meadow + bashでも)。

  1. 半角スペースを含むようなパスを与えて cd したいとき、できなかっ たりする。
  2. そのせいなのか何なのか、シェル起動時、シェルが認識しているカ レントディレクトリとEmacsが認識しているそれが一致しない ことがある。

 半角スペースが入っていることが問題なのかも知れないし、bashと Mule for Windowsとで絶対パスの認知の仕方が異なるのも一因かも知れ ません。ともかく、自分の「ホームディレクトリ」がそういうディレク トリの下にあるので、けっこう難儀しました。

 UNIX版のEmacs/Muleではこんな苦労はまったくしていないから、 Windows版だけの問題なのだと思います。

 以前はbashを止めてtcshにして回避しましたが、あるとき仕事の都合 上bashしか使えないことになってしまいました。

 仕方がないので、

  1. .bashrc の中に、「初めて起動したとき(変数SHLVLが長さゼロか、 値が1以下の場合)は、『自分のホーム』に移動」というスク リプトを書いた。これで、「Emacsのシェルウィンドウ上でディ レクトリを移動する」手間を省いた。
  2. 次に .emacs (.meadow) に次のコードを入れた。

そうしたら、いちおう、凌げるようになりました。

コード

  1: (add-hook 'shell-mode-hook
  2:      (lambda ()
  3:       (cd "シェル起動時にいたいディレクトリ")))

補足

 「シェル起動時にいたいディレクトリ」は、その名の通り、シェルを 起動した時のカレントディレクトリであって欲しいディレクトリを記述 します。シェルの初期化ファイル(bashなら .bashrc)でも同じように 目的のディレクトリに移動しておく必要があります。

 そうでない場合で、かつ、このような問題が発生する時は、上でcdし ている部分を次のようにしてみてはいかが。

  1: (lambda ()
  2:  (let ((there (substring (pwd) 10)))
  3:   (cd there)))

 この、「その時のカレントディレクトリを取得して、そこにcdする」 というバージョンは、書いてみただけでぜんぜん試していません。うま く行かなくても悪しからず。

(2000.09.11)

GNU EmacsのTipsへ
参考図書へ
コンピューター言語研究所へ
トップページへ
(C) ©Copyright Noboru HIWAMATA (nulpleno). All rights reserved.