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

Re: r4200 で ange-ftp 不可



From: 小関 吉則 (KOSEKI Yoshinori) <kose@xxxxxxxxxxx> さん曰く
Subject: Re: r4200 で ange-ftp 不可
Message-ID: <20070508m2y7jz7pjs.00kose@xxxxxxxxxx>
Date: Tue, 08 May 2007 16:16:55 +0900

> 水口> Netinstall した Meadow-3.00-dev を r4200-1 にバージョンアップしたら、
> 水口> ange-ftp が動かなくなってしまいました。
> 
> [...]
> 
> 水口> (setq ange-ftp-ftp-program-name "c:/usr/cygwin/bin/ftp.exe")

> この設定をしないで default (ange-ftp-ftp-program-name が
> "ftp") のままでは動きますか?

いや、水口さんっていうぐらい ^^;;; だから

>> (setq ange-ftp-try-passive-mode t)

なので、その ftp.exe はだめでしょう。どうにかしないと思いつつ早
数年。

## そんなのばっかりなんだけど。。。

水口さんの使われた r4177 => r4200 間での変更はよくわかりませんが、
ange-ftp の ange-ftp-start-process() を読むとこんなことが起こっ
ているようです。

;; Meadow3 (r4204) で実行

;; (1)
(let (proc)
  (modify-coding-system-alist 'process "cat" '(shift_jis-unix . shift_jis-unix))
  (setq proc (start-process "hoge" (current-buffer) "cat" "-"))
  ;; (set-process-coding-system proc 'shift_jis-unix)
  (process-send-string proc "hoge1\n")
  (accept-process-output proc)
  (process-send-string proc "hoge2\n")
  (accept-process-output proc)
  (process-send-eof proc))
hoge1
hoge2

;; (2)
(let (proc)
  (modify-coding-system-alist 'process "cat" '(shift_jis-unix . shift_jis-unix))
  (setq proc (start-process "hoge" (current-buffer) "cat" "-"))
  (set-process-coding-system proc 'shift_jis-unix)
  (process-send-string proc "hoge1\n")
  (accept-process-output proc)
  (process-send-string proc "hoge2\n")
  (accept-process-output proc)
  (process-send-eof proc))
hoge1^M
hoge2^M

(2) では set-process-coding-system で decode だけ変えているので
すが、 出力に ^M がつくということは、set-process-coding-system()
で encode 側も default-coding-system に変わっちゃったんだと思わ
れます。または、SYSTEM-EOL-TYPE か?

Meadow だけじゃなくて、SYSTEM-EOL が LF な UNIX マシンでも

(let (proc)
  (modify-coding-system-alist 'process "cat" '(shift_jis-dos . shift_jis-dos))
  (setq proc (start-process "hoge" (current-buffer) "cat" "-"))
  (set-process-coding-system proc 'shift_jis-unix 'shift_jis-dos)
  (process-send-string proc "hoge1\n")
  (accept-process-output proc)
  (process-send-string proc "hoge2\n")
  (accept-process-output proc)
  (process-send-eof proc))

と

(let (proc)
  (modify-coding-system-alist 'process "cat" '(shift_jis-dos . shift_jis-dos))
  (setq proc (start-process "hoge" (current-buffer) "cat" "-"))
  (set-process-coding-system proc 'shift_jis-unix)
  (process-send-string proc "hoge1\n")
  (accept-process-output proc)
  (process-send-string proc "hoge2\n")
  (accept-process-output proc)
  (process-send-eof proc))

で挙動が違うので、そういうもの(あるいは Emacs のバグ?)なのだと
思います。

じゃ、ange-ftp はどうするかというと、動作未確認ですが、

(defadvice ange-ftp-start-process (after set-encode activate)
  "Fix process-coding-system for Windows"
  (let ((proc ad-return-value))
    (set-process-coding-system proc 'raw-text-dos 'shift_jis-unix)))
                                     ~~~~~~~~~~~~ これで良いのかはわかりません
でどうかしら?

ところで cygwin の FTP の入力って LF じゃないとダメなんですか?

-- 
白井秀行 (mailto:shirai@xxxxxxxxxxx)