Sunday, December 6, 2009

NTEmacs で FTP サイトにあるファイルを編集

Emacs は、FTP で接続した先にあるファイルを、ローカルにあるファイルと同じ感覚で編集できます。

古くは ange-ftp、現在では tramp という仕組みを使います。(実際のところ tramp で FTP を扱うときは、裏で ange-ftp が動いているみたいです)

Linux など UNIX 系 OS の Emacs では、OS のディストリビューションに含まれている /usr/bin/ftp など BSD 由来(たぶん?)の ftp が使われます。

Windows にも C:\WINDOWS\system32\ftp.exe がありますけれど、これは Emacs から使うことはできません。

そこで Emacs のお膝元で配布している BSD 由来の Windows 用 ftp を使います。
(追記参照のこと)

これの Release\ftp.exe を適当なディレクトリに置いて使います。ぼくは横着なので Emacs と同じディレクトリに置いてます。
ange-ftp にこの ftp.exe を使うように指示するには以下のようにします。

(setq ange-ftp-ftp-program-name "C:\\emacs\\23\\bin\\ftp.exe")

M-x customize-group RET ange-ftp で Ange Ftp Ftp Program Name を編集しても良いです。個人的には customize を使った方法が好みです(どうでもいい)。

これで、あとはいつも通り C-x C-f /ftp:user@ftpserver:/path/to/file こんな感じでファイルを開けるようになります。

/ftp:user@ftpserver: TAB とすれば補完も効きます。パスワードは一回入れたらあとは聞かれないです。保存するのはもちろん C-x C-s です。

だいたいのファイル操作を透過的に扱えるようになるのが tramp / ange-ftp の利点です。

FTP ではなくて SFTP とか SSH を使いたい人は tramp の info を読んでみてください。その場合、Windows では PuTTY の plink + pageant を使うのが楽です。

すごく雑な駆け足の説明ですが。(・∀・;)

file insight ftp-exe

上で紹介した ftp.exe を NIS2010 のファイルインサイトにかけたら「100人未満」とか言われちゃって…。
いくら FTP が使われなくなりつつあると言っても、まったく使わないわけでもないし、Emacs から直接ファイル編集できたら便利ですし、知られていなかったらもったいないので紹介してみました。

ftp.exe 使うよりもいい方法があるよ!って場合はぜひ教えてください。

追記@Tue Dec 15 07:17:04 2009

ftp-for-win32.zip に含まれる ftp.exe は Passive mode (PASV) がデフォルトになっているため、active mode でも ftp を使いたい場合にはデフォルトを変更する必要があります。ange-ftp の PASV 関連の設定を有効に使うためにもこちらを使うのが良さそうです。

$ diff -pu main.c~ main.c
--- main.c~     1999-07-19 17:06:00.000000000 +0900
+++ main.c      2009-12-15 07:07:18.739744200 +0900
@@ -215,7 +215,7 @@ int main(int argc, char *argv[])
                verbose++;
        cpend = 0;           /* no pending replies */
        proxy = 0;      /* proxy not active */
-    passivemode = 1; /* passive mode *is* active */
+       passivemode = 0; /* passive mode is *not* active */
        crflag = 1;    /* strip c.r. on ascii gets */
        /*
         * Set up the home directory in case we're globbing.

が、白井秀行さんが他のバグも含めて直してコンパイルしてくださったファイルがあるので、それを使うのがお手軽なようです。

ftp-for-win32.new.tar.gz の Release\ftp.exe で置き換えてそのまま使えます。

passive も使えるけど active じゃないとダメという環境がありまして、自分とこで VS2008 を使ってバイナリを作ってみたけど warning だらけの上にまともに動きませんでした。

ともあれ先達に感謝。

No comments:

Post a Comment