[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: about pcl-cvs



>>>>> <wk1z70ujwj.wl@xxxxxxxxxxxxxxxxxx> にて、
>>>>> "菅原" = <taiki.s@xxxxxxxxxxxxxxxxxx> さんは書きました:

菅原> pcl-cvs-parse.el のすべての場所でこのように変更するということ
菅原> ですよね?

失礼しました、そのとおりです。

自分としても興味があるところなので、もう少し調べてみました。

誤った、認識をしているようならご指摘下さい。


(1)エラーの原因
Meadow はプロセスを起動するときに、デフォルトではコマンド名をクォー
トします。

cvs は、自分を起動したコマンド名を argv[0] から求めます。ただし、
クォートを想定していないので、次のような切り出しミスをします。

"C:/usr/local/bin/cvs.exe" -> cvs.exe"

その結果、cvs は、次のようなメッセージを出力します。

cvs.exe" update: Updating .

pcl-cvs は、cvs[.ex]* にマッチするコマンドからの出力を正当と判断
します。従って、上記メッセージはエラーとなります。


(2)対策
色々方法がありそうですが、簡単な方法として、次の2つを思いつきまし
た。

(2-A).emacs の設定

process-argument-editing として msvc, cygnus を選んだ場合には、コ
マンド名がクォートされるので、上記エラーとなります。逆に、msvc,
cygnus 以外を選んだ場合には、上記エラーは回避できますが、コマンド
引数が正しく子プロセスに渡せません。

解決法の一つとして、process-argument-editing として cygnus を選ぶが、
コマンド名だけはクォートしないように設定する方法があります。

例えば、次の設定を .emacs に加えるとうまくいくと思います。ただし、
コマンド名はクォートされないので、cvs.exe の絶対パス名にスペース
を含まれる場合には、コマンドを起動できないという副作用があります
(多分)。

(define-process-argument-editing
  "/cvs\\.exe\\'"
  (lambda (x)
    (let ((command (car x))
	  (argument (cddr x)))
      (setq argument (cygnus-process-argument-quoting argument))
      (concat
       (unix-to-dos-filename command) " "
       (unix-to-dos-argument (mapconcat (function concat) argument " ")
			     nil nil nil nil)))))

process-argument-editing については、README.Meadow.ja と 
international/mw32misc.el を参考にしてください。

(2-B)CVS 
cvs に自分の起動コマンド名は、cvs だと強制的に判定させる方法もあ
ります。

ARGV0_NOT_PROGRAM_NAME を define して、cvs をコンパイルすると、
argv[0] の値が何であれ、起動コマンド名を cvs と判定するようになり
ます。

当然、実行形式のファイル名を変更しても、常にcvs という名前で起動
されたと判定されることになります。それ以外の副作用はなさそうです。


以上、ご参考まで。
--
三好 雅則 mailto:miyoshi@xxxxxxxxx
          http://www.ask.ne.jp/~miyoshi/ (Meadow のページ作成中)