[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: direlist-cgi-program on more broken OS
白井@自分では、directory/file 名に 2byte 文字を使わない人間です。
そのため、その方面の思慮がまったく抜け落ちていて申し訳ない
です。ましてや半角カナは。。。
From: NAKAGAWA Takayuki <tknakaga@kanagawa.hitachi.co.jp> さん曰く
Subject: [emacs-w3m:00995] direlist-cgi-program on more broken OS
Message-ID: <200105300135.KAA21060@kanagw970.kanagawa.hitachi.co.jp>
Date: Wed, 30 May 2001 10:36:00 +0900 (JST)
中川> w3m-direlist-cgi-program 関連ですが、cgi の 出力は binary ではなく
中川> file-name-coding-system で 受けた方が良いと(安全であると)思います。
中川> (coding-system-for-{read,write} は無関係では)。さらに、環境変数
中川> QUERY_STRING も file-name-coding-system で encode しておく必要があるよ
中川> うです。
わかりました。中川さんのパッチを元にさせていただいて、考えます。
中川> ここまでやっても半角カナがファイル名/ディレクトリ名に使われて
中川> いると w3m(.exe) が全角に直してしまってアクセス不可になりますけど。w3m
中川> の設定で半角→全角変換を止められないのかな。
半角カナは考えたくないのだけど。。。
From: Hironori Sakamoto <h-saka@lsi.nec.co.jp> さん曰く
Subject: [emacs-w3m:00996] Re: direlist-cgi-program on more broken OS
Message-ID: <200105300222.LAA05327@udlew10.uldev.lsi.nec.co.jp>
Date: Wed, 30 May 2001 11:22:33 +0900 (JST)
坂本> w3m-m17n では、
坂本> * ファイル名はエンコーディングを変えずに 8bit 部分は必ず %XX に
坂本> エンコード
の方向で考えてみます。
# う〜〜〜ん、だけど、ちょっとだけ考えると、無理ぽいような。
中川> ついでに、dtree を使っていて気が付いたのですが、property で下線を引
中川> くと、右端一ドットが消されずに残るようで、スクロールすると微小な点々が
中川> 散乱します。これは X 版、Windows 版では起こらない PM (OS/2 の Window
中川> System) 固有のバグですよね。
これまた、X でも Win32 でも発生しません。
以下、またまた、emacs-w3m の話じゃないですが。。。
中川> MS-DOS の後継(file-coding-system が sjis で '/' と '\' の両方を
中川> directory-separator として取る)のみに関係する話だと思います。WinNT 系
中川> がファイル名の内部表現(ライブラリも含めて)をすべて Unicode 化してあ
中川> れば、無関係でいられるはず。
中川> Windows (9x, NT) 系でお使いの方、file-name-coding-system と
中川> default-file-name-coding-system の値がどうなっているかお教えいただけな
中川> いでしょうか。ひょっとして Meadow だと utf-8 だったりするのかな?
中川> ;; ms-dos は lisp/language/japan-util.el の
中川> ;; setup-japanese-environment で japanese-shift-jis に設定してあるので
中川> ;; すが、windows-nt は設定が見当たりません。
Meadow では、japan-util.el が↓こうなっています。
(defun setup-japanese-environment-internal ()
(cond ((eq system-type 'ms-dos)
(prefer-coding-system 'japanese-shift-jis))
((and
(featurep 'meadow)
(eq system-type 'windows-nt))
(set-clipboard-coding-system 'japanese-shift-jis-dos)
(set-w32-system-coding-system 'japanese-shift-jis-dos)
(set-default-coding-systems 'japanese-shift-jis-dos)
(setq default-file-name-coding-system 'japanese-shift-jis))
(t
(setq default-file-name-coding-system 'japanese-iso-8bit)))
(setq sentence-end-save sentence-end)
(setq sentence-end (concat sentence-end "\\|[。?!]")))
そのため、日本語環境では通常、
file-name-coding-system => nil
default-file-name-coding-system => japanese-shift-jis
です。
中川> 元の emacs 20.7 の dired.c の src/dired.c の file_name_completion 関
中川> 数に、decode してない生のファイル名に Ffile_name_as_directory 呼んでる
中川> 所があって、file-name-coding-system が sjis で IS_DIRECTORY_SEP が
中川> slash と backslash 両方取る OS (msdos, os2, ms-w32??) はアウトです
中川> (emacs 21 でも直ってません)。OS/2 は手を入れたけど、上記の通り
中川> default-file-name-coding-system を見てません。素直に ENCODE_FILE /
中川> DECODE_FILE マクロ使うように直さないと。
# Meadow-1.14 で直った問題かな?理解できていません。
# (let ((default-directory "c:/tmp/白井"))
# (start-process "ls" (current-buffer) "ls"))
# とかすると破綻する問題でしょうか?
# UNIX でもダメだったような。
Meadow 1.14 ではこうなりました。カナは半角です。
(expand-file-name "半角カナ.txt" "c:/tmp/白表")
"c:/tmp/白表/半角カナ.txt"
(expand-file-name "半角カナ.txt" "c:/tmp/白表井/半角カナ")
"c:/tmp/白表井/半角カナ/半角カナ.txt"
(expand-file-name "半角カナ.txt" "c:\\tmp\\白表")
"c:/tmp/白表/半角カナ.txt"
(expand-file-name "半角カナ.txt" "c:\\tmp\\白表a")
"c:/tmp/白表a/半角カナ.txt"
(expand-file-name "半角カナ.txt" "c:\\tmp\\白表い")
"c:/tmp/白表い/半角カナ.txt"
(expand-file-name "半角カナ.txt" "c:\\tmp\\表\\半角カナ")
"c:/tmp/表/半角カナ/半角カナ.txt"
(expand-file-name "半角カナ.txt" "c:\\tmp\\白表井\\半角カナ")
"c:/tmp/白表井\\半角カナ/半角カナ.txt"
## 最後だけおかしいけど、通常 elisp で '\' を path separator に
## することは無いので問題とおもうけど。
中川> ;; OS/2 でこの手の話(ファイル名の 2 バイト文字対応、本当は i18n の
中川> ;; はずだけど実体は l17n)をやってるのは私ともうニ人だけのような。GNU
中川> ;; *util の移植版はドイツだったかの人が作ってくれているのですが、SJIS
中川> ;; のファイル名なんて何も考えてない訳で(emx (OS/2 unix emulation
中川> ;; library) 本体はちゃんと考えてあります)。「ソ」「十」「表」とか 2
中川> ;; byte 目に '\' (backslash) が来る SJIS 文字がいくつかあるので、2
中川> ;; byte 目を directory separater だと思われると一巻の終わり。mkdir -p
中川> ;; とか cp -r, diff -r とか大概こけます。
## ご苦労がしのばれます。
中川> dtree は OS/2 でもちゃんと動くようです(上記半角カナファイル名問題を
中川> 除く)。emacs lisp 万歳、というより私は Perl がわからないだけ。
Emacsen 万歳、で良いかと :-)
--
白井秀行 (mailto:shirai@rdmg.mgcs.mei.co.jp)