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

Re: coding-system on ange-ftp



>>>>> meadow-users-jp の No. 574
>>>>> Message-Id: <199905121548.AAA06325@xxxxxxxxxx> で、
>>>>> "深川" == "T.Fukagawa" <fukagawa@xxxxxxxxxxxxx>さま曰く...

深川> ftp> ls "-al /kiwi/usr/bruce/coding/1\\222\\262\\363/." c:/tmp/ange-ftpa68761
深川>                                    ^^^^^^^^^^^^^^^^^^ ここの部分は、
深川> cs-alist で指定した coding-system とは関係しないのでしょうか。
深川> もし、ご存知でしたら、教えてください。

うーむ、 ange-ftp が `\' でエスケープしようとするのですね。
;; 詰めが甘くて済みません。 ^^;;;;
このとき Meadow 1.01 では文字単位ではなく byte 単位で判定されてしまうの
でこういうことになってしまうのでしょう。

GNU Emacs 20.4 系列ではこういうことは起きないのですが、"1\回" のようにや
はり余計な `\' が入ってしまいます。

ということで、昨日のものに加えてさらに ange-ftp-quote-string() を置き換
えてしまいます。
;; 例によって cs-list の内容はいじってください。

これで問題になることはめったにないと思いますが、もし、何らかの状況でおか
しくなることがあれば、 ange-ftp-quote-string() の再定義はやめるようにし
てください。
;; 本当は host ごとにエスケープするのかしないのかを制御する方が良いのか
;; もしれませんが、面倒なのでとりあえずパスします。 ^^;;;;

(eval-after-load "ange-ftp"
  '(progn
     (defun my-internal-ange-ftp-mode-hook ()
       (let* ((cs-alist '(("host1" . (euc-japan euc-japan))
			  ("host2" . (sjis sjis))))
	      (cs (assoc host cs-alist)))
	 (and cs (apply 'set-process-coding-system proc (cdr cs)))))
     (add-hook 'ange-ftp-process-startup-hook 'my-internal-ange-ftp-mode-hook)
     (defun ange-ftp-quote-string (string)
       "Quote any characters in STRING that may confuse the ftp process."
       (apply (function concat)
	      (mapcar (function
		       ;; This is said to be wrong; ftp is said to
		       ;; need quoting only for ", and that by doubling it.
		       ;; But experiment says this kind of quoting is correct
		       ;; when talking to ftp on GNU/Linux systems.
		       (lambda (char)
			 (if (or (<= char ? )
				 (= char ?\")
				 (= char ?\\))
			     (vector ?\\ char)
			   (vector char))))
		      string)))
     ))

-- 
鈴木圭一 / keiichi@xxxxxxxxx
PGP finger print (DH/DSS)
0B32 B37E 6DE9 3BC1 68A4  4089 7AAF 2B03 ECBD 614B