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

[BUG] msvc-process-argument-quoting



どうも argument editing のバグらしいので報告です。

デフォルトの、すなわち MSVC アプリケーション用の argument
editing で、引数に F:\ のように最後に \ がつく値を指定した場合、
"F:\" と quote されますが、これを MSVC アプリケーションは F:" と
解釈してしまう、というものです。

とりあえずの対処としては、以下に示す 
msvc-process-argument-quoting 関数を、 .emacs に記述して再定義す
るか、あるいは直接${MEADOW}/lisp/international/mw32misc.el 中の
定義を置き換えて、バイトコンパイル、ダンプし直せばよいと思います。

----8<--------8<--------8<--------8<--------8<--------8<----
(defun msvc-process-argument-quoting (arg)
  (mapcar (lambda (x)
	    (let ((start 0) (result "\"") pos end)
	      (while (string-match "\\\\*\"" x start)
		(setq pos (match-beginning 0)
		      end (match-end 0)
		      result (concat result
				     (substring x start pos)
				     (make-string (* (- end pos 1) 2) ?\\ )
				     "\\\"")
		      start end))
	      (concat result  
		      (if (string-match "\\\\*\\'" x start)
			  (concat (substring x start (match-beginning 0))
				  (make-string (* (- (match-end 0)
						     (match-beginning 0))
						  2) ?\\))
			(substring x start))
		      "\"")))
	  arg))
----8<--------8<--------8<--------8<--------8<--------8<----

これが具体的に問題になったのは、汎用辞書検索ツール Lookup[*1] で
eblook を使おうとしたときに、辞書の指定を F:\ のように指定する場
合です。以前はこおりやまさんのページ[*2]で紹介されているように

(define-process-argument-editing
  "/eblook\\.exe\\'"
  (lambda (x) (general-process-argument-editing-function x nil t)))

という設定をするのが解決法でしたが、これは必要なくなります。

[*1] http://www.ring.gr.jp/openlab/lookup/
[*2] http://www02.u-page.so-net.or.jp/ba2/kory/emacs/meadow.html

# しかし、MSVC アプリケーションって、なしてあんなケッタイな
# quoting 処理をするんだろう…
-- 
	Keisuke MORI / NTT Software Corp. California Branch
	E-Mail: ksk@xxxxxxxx