[Date Prev][Date Next][Thread Prev][][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)