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