メインコンテンツまでスキップ

cygwin で w3m を使う

                                                     (2003/02/17) 渡邉勝之
knabe@sannet.ne.jp

Windows で w3m を動かすためには,Windows 上の UNIX互換環境である Cygwin が 必要です. Cygwin に関する情報は http://cygwin.com/ を参照してください.

ビルド

w3m-0.2 以降から cygwin 向けの修正パッチが取り込まれたため,cygwin-1.1.4 以降の環境であれば特に問題なくビルドできます.Net Release 前の B18, B19, B20あたりでもビルドできるはずですが,確認はされていません. (*) Cygwin B20.1 の環境では LOCAL_LIBRARIES に -luser32 をつける必要があります。

なお,termcap ないし ncurses パッケージは最新のものを使ってください.特 に termcap を使う場合,古いパッケージは /etc/termcap の cygwin のエント リにバグがあり,表示がおかしくなります.この問題は termcap-20001020-1 で 修正されているため,これ以降のバージョンを使用してください.

ビルドする際には, 必ず ./configure してから make してください.以下で説 明するマクロが定義されなくなるため,正常に動作しなくなります.また,正常 にビルドできない,正常に動作しない場合には,バグ報告をする前に以下の点を チェックしてください.

  • make veryclean してから再度 ./configure && make してみる.
  • gcc, binutils が正常にインストールされているかを確認する. cygwin の setup.exe に問題があり,パッケージファイルのダウンロード に失敗しても,エラーの報告をしないで正常終了してしまうことがあるよ うです.その場合には再度 setup をやりなおしてください.

また Win95/98/ME では,環境変数 CYGWIN に 'ntsec' もしくは 'ntea' が含ま れていると,シェルスクリプトに実行属性がつかなくなるため,configure に失 敗するようです.w3m に限らず,他にも問題が発生するという報告があるため, Win95/98/ME で Cygwin を使用する場合には,最初に cygwin1.dll をロードす る際の環境変数 CYGWIN から ntsec, ntea の記述を取り除いてください.

マクロ

config.h には,Cygwin 環境向けに以下のマクロを定義してあります.

  • USE_BINMODE_STREAM -dump, -dump_{head,source,both,extra} 時の stdout への出力をバイナリ モードで行います.cygwin-1.3.11 以降では不要になっているはずですが, 安全側に振っておくために残しています. Cygwin, EMX 環境で共通です.

  • SUPPORT_DOS_DRIVE_PREFIX 'C:', 'C:/', 'file://C:/', 'file://C|/' などのドライブレターを含むパ スを認識し,ファイル名として扱う機能を有効にします. Cygwin, EMX 環境で共通です.

  • SUPPORT_NETBIOS_SHARE '//NETBIOSHOST/SHARE/PATH', 'file://NETBIOSHOST/SHARE/PATH' 形式の NETBIOS 共有資源へのアクセスを ftp: スキーマではなく file: スキーマ として扱う機能を有効にします. Cygwin 環境に特有です.

  • SUPPORT_WIN9X_CONSOLE_MBCS Win9X 系の DOS プロンプトで,検索およびフォームへの一行エディタ入力 時に日本語 IME 経由の入力をサポートします. ただし,Win9X 系の DOS プロンプトの実装および Cygwin の tty レイヤー の問題により,ローカルコンソールで TERM=cygwin かつ環境変数 CYGWIN に 'tty' が含まれない場合のみ IME からの入力を許可しています. なお,NT 系ではこのマクロを無効にしても動作は変更されず,ローカルコ ンソールであれば IME による日本語入力が可能です. LANG=JA 指定時の Cygwin 環境に特有です.

Native Application との連携

Cygwin 環境でビルドした w3m から Win32 Native アプリケーションを起動する 場合,パスの記述形式の違いによって,ファイルが見つからないなどのエラーが 発生します.

  • ローカルCGI

Cygwin 環境でビルドすると,$LIB (通常は /usr/local/lib/w3m/cgi-bin) 以下 にインストールされるローカル CGI は cygwin の /usr/bin/perl を使うように 設定されます.これに対し,Native アプリケーションの ActivePerl などを使 用する場合,以下のようなラッパースクリプトを用意し,$LIB 以下の各スクリ プトを修正してください.

/usr/local/bin/winperl
#!/bin/sh
# wrapper script for Win32 Native Perl
PERL=/cygdrive/c/Perl/bin/perl.exe
case $1 in
-*)
;;
*)
SCRIPT=`cygpath -w $1`
shift
;;
esac
exec "$PERL" "$SCRIPT" $@

※PERL= には Cygwin 環境の内部から見た Native Perl のパスを記述してくだ さい.cygpath ユーティリティは cygwin パッケージに入っています.

なお,ディレクトリリストだけであれば,オプション設定で「ディレクトリリス トに外部コマンドを使う」を NO にすれば,ローカル CGI を使わずにディレク トリのブラウズを行います.

  • エディタ

w3m はテキストエリアの内容編集などに外部エディタを使用しますが,外部エデ ィタに Win32 Native アプリケーションを使う場合,以下のスクリプトを外部エ ディタに指定してください.

/usr/local/lib/w3m/winedit
#!/bin/sh
EDITOR='/cygdrive/c/Program Files/sakura/sakura.exe'
FILE=`cygpath -a -w $1`
exec "$EDITOR" "$FILE"

※EDITOR= には Cygwin 環境の内側から見た Native アプリケーションのパスを 記述してください.

なお,NT 系で inetd をサービスとして動かしていて,localhost に telnet で 接続している場合には,「デスクトップとの対話をサービスに許可」を ON にし ておかなければ window が表示されません.

既知のバグ

以下は,Cygwin 環境で w3m を動かした場合の問題点です.

  • -dump, -dump-source 時に LF -> CR+LF の変換が行われることがある.

    コンパイル時にマクロ USE_BINMODE_STREAM が define されていない可能性が あります. きちんと configure したうえでコンパイルしなおすか,環境変数 CYGWIN に binmode を設定してください.

  • Win9X 系の DOS プロンプトで IME 経由の入力ができない.

    環境変数 CYGWIN に 'tty' が含まれているときには,Cygwin の tty レイヤ の問題を回避するために IME 経由の入力を禁止しています.環境変数 CYGWIN から 'tty' を削除してください.

  • Win9X 系の DOS プロンプトで IME が ON になっているとカーソルが効かない.

    Win9X の DOS プロンプトと Cygwin の tty レイヤーの実装の問題です. 代わりに C-f, C-b, C-p, C-n を使ってください.

  • NT 系のコマンドプロンプトで画面制御がおかしくなる.

    「レイアウト」タブで画面バッファのサイズとウィンドウのサイズを違う値に してバックスクロールができるように設定していると,画面制御がおかしくな ることがあるようです.

  • DOS プロンプト,コマンドプロンプトでマウスが使えない.

    DOS プロンプト「編集オプション」/コマンドプロンプトの「オプション」で 「簡易編集モード」が ON になっていると,マウスイベントが w3m に渡され ません.OFF に設定してください.

  • DOS プロンプト,コマンドプロンプトでマウスボタンに対する反応がおかしい.

    cygwin-1.3.15 までの環境では,マウスの右と中央ボタンのエスケープシー ケンスが入れ替わっていました.これは cygwin-1.3.16-1 で修正されていま すが,w3m 側のバージョン判定が完全ではないため,使用する環境でビルド するようにしてください.

その他

Cygwin 環境では,DOS プロンプト/コマンドプロンプトを使うよりも,inetd を あげて,ローカルに TeraTerm, PuTTY などの telnet クライアント経由でログ インする,ないしは rxvt, cygterm を使用するほうが快適です.