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

Re: w3m-dtree falls into an infinite recursion (was: Re: Re: use 'dirlist.cgi' when local directory)



中川です。

  w3m-dtree を一応直してみました。"." と ".." の取り除き方が美しくない
ですけど。私のぐちゃぐちゃの home dir でちゃんと directory tree が表示
されました。

  やはり、深さ方向に制限がほしいのと、子ディレクトリがない時はファイル
一覧を見せて欲しいような。って元の dirlist.cgi が良いと言ってるのと余
り変わらないかも。

;;   手を入れると急に態度がでかくなります。

From: NAKAGAWA Takayuki <tknakaga@kanagawa.hitachi.co.jp>
Subject: [emacs-w3m:00941] w3m-dtree falls into an infinite recursion (was: Re:  Re: use 'dirlist.cgi' when local directory)
Date: Fri, 25 May 2001 17:28:35 +0900 (JST)
Message-ID: <200105250828.RAA07754@kanagw970.kanagawa.hitachi.co.jp>

中>   Unixen でも、たとえば www の mirror か何かを行って、foo さんの hoge
中> directory (~foo) の下に 
中> 	~foo/www.foo_site.com/~foo/
中>   なんていうファイル/ディレクトリができることは充分考えられる訳で、
中> OS/2 以外でもはまる可能性は多いにあると思います。

中>   で、解決策は w3m-dtree-create-sub で directory-files を呼ぶ時に full
中> path を返すようにして、expand-file-name を使うのをやめ、ファイル名が必
中> 要なら file-name-nondirectory を使って取り出す、ということになるのでは
中> ないかと。あと、現在の directory-files の第 3 引数のパターンでは "..." 
中> なんてディレクトリを作ると(普通は絶対やらないでしょうけど)無視されま
中> すね。

ではでは。

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


cd j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010525/
diff -u -a "j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010525/w3m-dtree.el.ORG" "j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010525/w3m-dtree.el"
--- j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010525/w3m-dtree.el.ORG	Thu May 24 09:58:04 2001
+++ j:/usr/local/emacs-20.x/site-lisp/emacs-w3m.010525/w3m-dtree.el	Fri May 25 17:37:06 2001
@@ -87,21 +87,24 @@
 	    (/= (nth 1 (file-attributes (, path))) 2)))))
 
 (defun w3m-dtree-create-sub (path allfiles dirprefix fileprefix indent)
-  (let ((files (directory-files path nil "[^.]"))
+  (let ((files (directory-files path t))
 	(indent-sub1 (aref w3m-dtree-indent-strings 0))
 	(indent-sub2 (aref w3m-dtree-indent-strings 2))
 	file fullpath tmp)
+    (setq files (delete (concat (file-name-as-directory path) ".")
+			(delete (concat (file-name-as-directory path) "..")
+				files)))
     (unless allfiles
       (setq tmp files)
       (while (setq file (car tmp))
-	(unless (file-directory-p (expand-file-name file path))
+	(unless (file-directory-p file)
 	  (setq files (delete file files)))
 	(setq tmp (cdr tmp))))
-    (while (setq file (car files))
+    (while (setq fullpath (car files))
       (when (= (length files) 1)
 	(setq indent-sub1 (aref w3m-dtree-indent-strings 1))
 	(setq indent-sub2 (aref w3m-dtree-indent-strings 3)))
-      (setq fullpath (expand-file-name file path))
+      (setq file (file-name-nondirectory fullpath))
       (cond
        ((or (not allfiles) (file-directory-p fullpath))
 	(insert (format "%s%s%s<A HREF=\"%s%s\">%s</A>\n"

Diff finished at Fri May 25 17:49:55