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

YAMAGUCHI, Shuhei yamagus at example.com
1998年 3月 3日 (火) 17:15:51 JST


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

>>> In article <19980303132445N.yamagus at example.com>,
>>>    "YAMAGUCHI, Shuhei" <yamagus at example.com> writes:

  himi> あのー、とってもいいにくいんですが、;_;
  himi> w32-get-true-file-link-count's value is 
  himi> 100
  yamagus> (snip)
  himi> すんません。というわけで、ディフォルトは100個までで、サボってます。;_;
  himi> w32-get-true-file-link-countをtにして、やってみてください。
  yamagus> リンクカウントが2よりも大きいかどうかのチェックにしかつかってないので、
  yamagus> 2以上の値さえ返れば問題ないと思うのですが、どうでしょう?

あー、これ、やっとわかりました。 ^^;
チェックするファイルの順番によっては、ディレクトリがカウントされない危
険性があるのですね。
#impathとmew-folder-listがつくった.foldersを比較してわかりました。
##これにすぐ気付けないとは…ぷろぐらまの素質ないなぁ、我ながら。 ^^;


>>> In article <19980303153625L.shirai at example.com>,
>>>    Hideyuki SHIRAI <Shirai at example.com> writes:

  Shirai> とりあえず、動くようにしたつもりです。確かめてみて下さい。

ありがとうございます。 :-)
しかし、mew-use-folders-file-pもmew-folder-listもtの場合、C-uZ時にリス
トが倍になるみたいです。

とういうわけで、以上2点を修正したものをお贈りします。
#何が「家に帰ってからやる」んだか…。 ^^;

でわでわ
-- 
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
(会社より)
#白井さんは総武線だったんですねぇ…。
#私は南部線です。
-------------- 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 17:00>
;;
;; 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, aka
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)
	(w32-get-true-file-link-count 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)
      (cond
       ((and (not updatep)
	     mew-use-folders-file-p
	     (file-readable-p file))
	(insert-file-contents file))
       (mew-use-folder-list-function
	(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))))
       (t
	(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 (< (point-min) (point-max))
	  (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 メーリングリストの案内