[Mew-Win32 00336] Re: mew-folder-list (Re: C-uZ)

YAMAGUCHI, Shuhei yamagus at example.com
1998年 3月 3日 (火) 13:23:20 JST


やまぐち@ねっとらぴゅたの住人、です。

>>> In article <uk9ac6ezr.fsf at example.com>,
>>>    Miyashita Hisashi(宮下 尚:HIMI) <himi at example.com> writes:

  himi> あのー、とってもいいにくいんですが、;_;
  himi> w32-get-true-file-link-count's value is 
  himi> 100
(snip)
  himi> すんません。というわけで、ディフォルトは100個までで、サボってます。;_;
  himi> w32-get-true-file-link-countをtにして、やってみてください。

リンクカウントが2よりも大きいかどうかのチェックにしかつかってないので、
2以上の値さえ返れば問題ないと思うのですが、どうでしょう?
tよりもむしろ、3なんて値を設定しちゃえば、さらに速くなるような気もする
のですが、そういうことじゃないのでしょうか?
#私のところでは、デフォルトのままでも、1000ぐらいのメールを含むフォル
#ダの下に、さらにフォルダがあるようなものもリストにのぼっています。
##ハードディスク上ですけど。

なにはともあれ、家で実験してみます。 ^^;


>>> In article <19980303034530B.shuuic-k at example.com>,
>>>    Shuichi Kitaguchi <shuuic-k at example.com> writes:

  shuuic-k> でも、数字のディレクトリ名ってなるべくしない方がいいでしょうね。
  shuuic-k> 昔、"+FreeBSD-users-jp/9610" という感じで整理しようとして、メールを
  shuuic-k> 大量に失いました(一万通越えてたので重なりまくったらしい)。

幸いこれでロストしたことはないのです、が…。
昔、普段は+ml/FreeBSD-users-jpに整理して、月初めに前月分を
+ml/FreeBSD-users-jp/199803に整理する、とういことをしていたら、Mewから
+ml/FreeBSD-users-jpを覗いた時に、変な挙動をしました。 ^^;
今でも同様なのかわかりませんが、数字フォルダはやめた方がいいでしょうね。
#そう考えると、このmew-folder-listもOS/2でも充分有効そうだし、Mew-dist
#やimgに出してみる価値も少しぐらいあるかなぁ…。
##とりあえず、今こんなことをしてるってことぐらいは出しておこうかなぁ。

とまぁ、ずらずら書きましたが、今度はMewに寄生する形式のコードです。
まだパッチじゃないですが、今回のはMewの起動を速くすることができます。
#題して、mew-parasite.el ^^;

pathの通ったところに置いて、.emacsに以下を追加するだけでいいと思います。
(eval-after-load "mew" '(load "mew-parasite"))
なお、絶対にmew-init-hookの中に入れることはしないでください。
#まぁ、効果が出ないだけですけど。 ;p

私はmew-use-folders-file-pをtにしたことがない(^^;)ので、どなたかtの状
態で試してみてくれるとうれしいです。

でわでわ
-- 
yamagus at example.com / 山口 修平
  yamagus at example.com / やまぐち@ねっとらぴゅたの住人
PGP-Fingerprint: 25 0F 6F E1 57 AD 56 08  3A BC D0 9B 48 AF 31 7A
(会社より)
#w32-get-true-file-link-countとmew-use-folders-file-p、および、UNIX上
#でのシンボリックリンクなフォルダに対する、現行のimpathの振る舞いを調
#査して、それらを実装した時点で完成形にしたいと思います。
-------------- next part --------------
;; -*- emacs-lisp -*-
;; mew-parasite.el --- Parasitic on, tune up your Mew!
;;
;;                       "YAMAGUCHI, Shuhei" <yamagus at example.com>
;;                                            Created: <03/03/1998>
;;                                Revised: Time-stamp: <03/03/1998 12:47>
;;
;; To use mew-parasite.el, put the following codes in your .emacs.
;; (eval-after-load "mew" '(load "mew-parasite"))

(defvar mew-use-folder-list-function t
  "If t, Mew uses mew-folder-list function as a subsutitute for
'impath --list'.")

(defvar mew-folder-list-use-file-attributes
  (or (not (eq system-type 'windows-nt))
      (fboundp 'Meadow-version))
  "If t, 2nd element of a returned list from file-attribute,
as known to be LINK COUNT, works.
Otherwise, never use file-attributes for checking existence of
subfolders, and any system can make list safety, but too slow.

For Mule for Win32 and OS/2 Mule users:
This might be set to nil.")

(defvar mew-folder-list-skip-pattern "^\\(\\.\\.?\\|^[0-9]+\\)$"
  "If file-name matches this pattern, mew-folder-list never consider
it as folder without checking file-type.

Default is \"^\\\\(\\\\.\\\\.?\\\\|^[0-9]+\\\\)$\", and it assumes
you never have numeric folders like \"+foo/199803\".")

(defun mew-folder-list (folder)
  (let ((case-fold-search t)
	folders curdir dirent relpath abspath attr
	subprefix subfolder)
    (setq curdir (mew-expand-folder folder))
    (if (string-match "^[+=]$" folder)
	(setq subprefix folder)
      (setq subprefix (concat folder "/")))
    (setq dirent (directory-files curdir))
    (while dirent
      (setq relpath (car dirent))
      (setq dirent (cdr dirent))
      (setq abspath (expand-file-name relpath curdir))
      (and
       (not (string-match mew-folder-list-skip-pattern relpath))
       (eq (nth 0 (setq attr (file-attributes abspath))) t)
       (setq subfolder (concat subprefix relpath))
       (setq folders (nconc folders (list subfolder)))
       (or
	(and
	 mew-folder-list-use-file-attributes
	 (>= 2 (nth 1 attr)))
	(setq folders (nconc folders (mew-folder-list subfolder))))))
    folders))


(defun mew-folder-make-list (updatep)
  (save-excursion
    (let ((case-fold-search t)
	  (folders ())
	  (folder nil)
	  (start nil)
	  (file (expand-file-name mew-folders-file mew-mail-path)))
      (mew-set-buffer-tmp)
      (if (and (not updatep)
	       mew-use-folders-file-p
	       (file-readable-p file))
	  (insert-file-contents file)
	(if mew-use-folder-list-function
	    (progn
	      (setq folders (nconc (mew-folder-list "+")
				   (mew-folder-list "=")))
	      (if mew-use-folders-file-p
		  (progn
		    (mapcar
		     (lambda (folder)
		       (insert folder "\n"))
		     folders)
		    (write-region (point-min) (point-max) file nil 'no-msg))))
	  (mew-im-call-process nil mew-prog-impath "--list=yes" "--src=+")
	  (mew-im-call-process nil mew-prog-impath "--list=yes" "--src==")
	  (if mew-use-folders-file-p
	      (write-region (point-min) (point-max) file nil 'no-msg))
	  ))
      (if (not mew-use-folder-list-function)
	  (progn
	    (goto-char (point-min))
	    (while (not (eobp))
	      (setq start (point))
	      (if (not (looking-at "[+=]"))
		  (forward-line)
		(forward-line)
		(setq folder (mew-buffer-substring start (1- (point))))
		(if (and (car folders)
			 (string-match (concat "^" (regexp-quote 
						    (file-name-as-directory
						     (car folders))))
				       folder))
		    ;; regexp-quote is not necessary since not "+".
		    (setq folders 
			  (cons folder 
				(cons (file-name-as-directory (car folders))
				      (cdr folders))))
		  (setq folders (cons folder folders))))
	      )))
      folders ;; return value
      )))


Mew-win32 メーリングリストの案内