[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

direlist-cgi-program on more broken OS



中川@ going my way です。

  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 は設定が見当たりません。

  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 
の設定で半角→全角変換を止められないのかな。

  default-file-name-coding-system と file-name-coding-system の使い分
けがわかってないので、このパッチでは不十分かも。
file-name-coding-system を全て
	(or file-name-coding-system
	    default-file-name-coding-system)
  に差し替えてやれば良いのかな。emacs for OS/2 はここの使い分けが出来
てないようです。default-file-name-coding-system 自体が 20.3 で追加になっ
たのを見落としていました。

  元の 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 マクロ使うように直さないと。

  ついでに、completion-ignored-extensions は ascii 以外取れません。誰
も文句言ってないみたいですが(私も困らない)。

  Meadow がどうなっているかは全くチェックしていません。ごめんなさい。

;;   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 がわからないだけ。

  ついでに、dtree を使っていて気が付いたのですが、property で下線を引
くと、右端一ドットが消されずに残るようで、スクロールすると微小な点々が
散乱します。これは X 版、Windows 版では起こらない PM (OS/2 の Window
System) 固有のバグですよね。

ではでは。

--
  中川貴之  (株)日立製作所 エンタープライズサーバ事業部 Nセ2G

cd j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010529/
diff -u -a "j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010529/w3m.el.ORG" "j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010529/w3m.el"
--- j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010529/w3m.el.ORG	Sat May 26 22:14:38 2001
+++ j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010529/w3m.el	Tue May 29 21:29:36 2001
@@ -1880,13 +1880,13 @@
   (w3m-message "Reading...")
   (if w3m-direlist-cgi-program
       (if (file-executable-p w3m-direlist-cgi-program)
-	  (let ((coding-system-for-read 'binary)
-		(coding-system-for-write w3m-terminal-coding-system)
-		(default-process-coding-system
-		  (cons 'binary w3m-terminal-coding-system))
+	  (let ((default-process-coding-system
+		  (or file-name-coding-system 'binary))
 		(process-environment process-environment)
 		file beg end)
-	    (setenv "QUERY_STRING" (w3m-url-to-file-name url))
+	    (setenv "QUERY_STRING"
+		    (encode-coding-string (w3m-url-to-file-name url)
+					  file-name-coding-system t))
 	    (call-process w3m-direlist-cgi-program nil t nil)
 	    (goto-char (point-min))
 	    (when (re-search-forward "^<html>" nil t)

Diff finished at Tue May 29 21:29:47