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

Re: use 'dirlist.cgi' when local directory



中川@ OS/2 残党です。相変わらず特定 OS (OS/2 & Windows) 固有の話題で
申し訳ありません。Meadow も OS/2 と同種のバグを抱えてるようなので、と
りあえずこちらに報告しておきます。

  Unix only の方々のために改ページを入れておきます。


  Meadow ユーザの皆さま、こんにちは。始めて Meadow を使ってみました。
Unix や OS/2 で emacs が動くのには慣れっこになっていましたが、Win98SE
上で動いたのは何か妙に新鮮でした。

中川>   食わず嫌いを直して、ディスク整理して Meadow 入れた方が良いようですね。
白井> (^^)

  とりあえず Meadow を展開、インストールしてみました(2pre3 にするのは
さぼってます)。C ソースは src/fileio.c, src/dired.c 回りをちらっと眺
めただけですが、ほとんど元の Unix 版(のWINDOWS_NT 用コード)と変わっ
てないのですね。

  [emacs-w3m:01002] で書いた file-name-all-completions でディレクトリ
名の最後に "表" 等があると "/" が追加されない件を確認しました。OS/2 の
dired の出力(大体見当は付くと思いますが、全部サブディレクトリ)が以下
のディレクトリで、

	  j:/tmp/SJIStest/emx.h:
	  total 0
	  drwxrwx---        0 Apr 20 11:16 .
	  drwxrwx---        0 May 26  2000 ..
	  drwxrwx---        0 Apr 20 11:16 aaa十bbb
	  drwxrwx---        0 Apr 20 11:16 cccソ
	  drwxrwx---        0 Apr 20 11:16 ccmail
	  drwxrwx---        0 Apr 20 11:16 ddd表
	  drwxrwx---        0 Apr 20 11:16 eee
	  drwxrwx---        0 Apr 20 11:16 fff
	  drwxrwx---        0 Apr 20 11:17 jsawa

  (file-name-all-completions "" "j:/tmp/SJIStest/emx.h")
  -> ("jsawa/" "fff/" "eee/" "ddd表" "ccmail/" "cccソ" "aaa十bbb/" "../" "./")

  正しくは
  ("jsawa/" "fff/" "eee/" "ddd表/" "ccmail/" "cccソ/" "aaa十bbb/" "../" "./")
  となるべき。

;;   他に何も入れてないのに dired が動いてびっくり、と思ったら C-u i 
;; で switch に R を追加して -laR としても効かない。ひょっとして ls を
;; 自前で持ってます?

  OS/2 でも全部チェックしきれていませんが(環境変数 HOME, TMP 等の 
DECODE やってないのに昨日気付いた:そんなもんに日本語ファイル名使う方
が悪いけど)、生 (SJIS) のファイル名に IS_DIRECTORY_SEP を使っている所
(and file_name_as_directory を呼んでる所)は全て見直す必要があると思
います。

;;   さらに、生のファイル名に CORRECT_DIR_SEPS (dostounix_filename) 掛
;; けると文字化けが出ます(「表」の 2 byte 目の '\' が '/' に書き替え
;; られるため)。file_name_as_directory が CORRECT_DIR_SEPS 使っている
;; ので要注意。と思ったら OS/2 が引っ掛かった 
;; file-name-all-completions は化けませんでした。まだソースを追いきれ
;; ていないようです

From: Hideyuki SHIRAI (白井秀行) <shirai@rdmg.mgcs.mei.co.jp>
Subject: [emacs-w3m:01019] Re: use 'dirlist.cgi' when local directory
Date: Thu, 31 May 2001 12:01:59 +0900 (JST)
Message-ID: <20010531.120159.107992518.shirai@rdmg.mgcs.mei.co.jp>

中川>   ドライブの current directory を使うという仕様がこの場合問題になりそ
中川> うなのと(非 Meadow(元の GNU archive)の DOS_NT のコードをもらってき
中川> たので同じになると思いますが)、
中川> 	式			評価結果	OS/2	Meadow (1.0)
中川> 	------------------------------------------------------------
中川> 	(file-directory-p "e:") 		nil	t
中川> 	(expand-file-name "e:")			e:/TMP	e: ???
中川>   と挙動が違うのが問題かも。

白井> (file-directory-p "e:") t
白井> (expand-file-name "e:") "e:/"

  Meadow ではどのドライブ(c:, Meadow を置いたd:, HOME にした j: だけ
しかチェックしてませんが)でも常にそのドライブの "/" を返すようですね。

  例が悪かったようです(私は core を e:/tmp に吐かせるために e:/tmp を
current drive/directory として emacs を起動しています)。WinNT 用の 
getdefdir() がどこにあるのか見つけられなかったのですが、少なくとも 
MS-DOS 用のには DECODE_FILE 処理が入ってないので、場合によっては破綻す
ると思います。

  手元の OS/2 用の getdefdir には DECODE_FILE 処理を入れてあって(パッ
チを ML に流し忘れていたので野宮さんの所では再現しなかった)、それがバ
グってました(DECODE_FILE 結果を bcopy する際に、コピーするバイト数を
最後の '\0' 分の 1 増やしておくのを怠っていた)。現在では
	(expand-file-name "e:")		"e:/TMP"
	(file-directory-p "e:") 	t
	(file-name-directory "e:")	"e:/TMP/"
  となっています。Meadow に合わせて "e:/" にすべきか、DOS 〜 OS/2 のド
ライブごとの current directory の処理に合わせて e:/TMP のままにすべき
か。OS/2 も昔は / を返してたのですが。

白井> ついでに存在しない 'x' でやってみると、
白井> (file-directory-p "x:") nil
白井> (expand-file-name "x:") "x:/"

  これはこちらでも同じです。

ではでは。

--
  中川貴之  (株)日立製作所 エンタープライズサーバ事業部 Nセ2G