[Mew-Win32 00348] Re: mew-folder-list (Re: C-uZ)
YAMAGUCHI, Shuhei
yamagus at example.com
1998年 3月 3日 (火) 22:51:05 JST
やまぐち@ねっとらぴゅたの住人、です。
テストにお付き合いしてくださったみなさん、ありがとうございます。 :-)
>>> In article <19980303173220E.shirai at example.com>,
>>> Hideyuki SHIRAI <Shirai at example.com> writes:
山口> しかし、mew-use-folders-file-pもmew-folder-listもtの場合、C-uZ時にリス
山口> トが倍になるみたいです。
Shirai>
Shirai> ありゃ、ごめんなさい。
Shirai> 確認しようと思ったら、自分で改造したの上書きしちゃった。
あれ、おかしいなぁ、先のバージョンでも再現しますよ。 ;_;
#ごめんなさい、今度こそ直ったはずです…。 ^^;;;
Shirai> しかし、ということは……
Shirai>
Shirai> 山口> ##これにすぐ気付けないとは…ぷろぐらまの素質ないなぁ、我ながら。 ^^;
Shirai>
Shirai> これにすぐ気付けないとは…『まったく』ぷろぐらまの素質ないなぁ。^^;;;
Shirai>
Shirai> # ぷろぐらまが本業でなくて良かった、良かった。
#う…やばい、本業だ…。 ^^;
#「直したつもり」には気をつけましょう。 (自戒 ^^;;;)
さて、今回のバージョンですが、シンボリックリンクなフォルダもUNIX版の
impathと同様にしました。
また、この寄生形態では必要のないprovideも付けてみました。 ^^;
#これで予定していた機能は一応実装できたつもりなので、機能としてはこれ
#を最終形としたいと思います。
#もちろん、バグ報告は歓迎します。
##あ、稚拙なdoc-stringの添削は大大大歓迎です。 ^^;
UNIX版のimpathでは、
Mail/
foo/
hoge/ --> ../bar
bar/
honya/ --> ./bar
のような場合だと、+honyaもフォルダとして認識されますが、+foo/hogeはフォ
ルダとして認識されません。
これは、シンボリックリンクはリンクカウントに影響しないので、当然といえ
ば当然なのですが、なんとなく気持ち悪いです。
しかし、その気持ち悪さを抑え、忠実に(自然と)再現しました。
#まぁ、すべてのシンボリックリンクを追えば、リンクカウントの効能がなく
#なってしまいますから、気持ち悪いとはいえ、一番妥当だと思います。
##そうそう、+barのメールの整理先として「+bar,+honya」と指定しても、期
##待を裏切って(というか、きちんと ^^;)倍になりました。
ところで、機能としては最終形ですが、形態としては、この寄生型とパッチの
どちらがいいでしょう?
Win32という環境をメインに考えると、バージョンが上がるたびにパッチを充
てるのは面倒な気もしますが、いかがでしょう?
#予想以上に効果があったので、+imgに投げてみようかと思います。 :-)
#なので、パッチを一度は作成する予定ですから、パッチ作成自体はやぶさか
#ではありません。
Shirai> どうもどうも ^^;
Shirai> 後から聞いた話だと、私が総武線にのるのに後10分遅れたら、今度は山
Shirai> の手線が、品川駅の停電でとまったそうな。:-P
実は、私、品川での停電しかしらなかったです。 ^^;
いつも南部線の(上り方面で)一番後ろに乗るんですが、乗務員向けの振り替え
輸送アナウンスが聞こえました。
#私はとっても朝に弱い。 ^^;
でわでわ
--
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 Mew, then tune it up!
;;
;; "YAMAGUCHI, Shuhei" <yamagus at example.com>
;; Created: <03/03/1998>
;; Revised: Time-stamp: <03/03/1998 21:20>
;;
;; To use mew-parasite.el, put the following codes in your .emacs.
;; (eval-after-load "mew" '(load "mew-parasite"))
(defconst mew-parasite-version "Mew parasite version 1.00"
"Version string of mew-parasite.")
(defvar mew-use-folder-list-function t
"If t, Mew uses mew-folder-list function as a subsutitute for
'impath --list'.
You decide to use this package, this shall be t.")
(defvar mew-folder-list-use-file-attributes
(or (not (or (eq system-type 'windows-nt)
(memq system-type '(OS/2 emx))))
(fboundp 'Meadow-version))
"If t, 2nd element of a returned list from file-attributes, aka
LINK-COUNT, works.
Otherwise, mew-folder-list function 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 a file-name matches this pattern, mew-folder-list function never
consider it as a folder without checking it's file-type.
Default is \"^\\\\(\\\\.\\\\.?\\\\|^[0-9]+\\\\)$\", and it assumes
you never have numeric folders like \"+foo/199803\".
If you have such numeric folders, \"^\\\\.\\\\.?\" is a good selection,
but it is not good in sight of performance.
If numeric folders assume dates, folders like \"+foo/Mar-1998\" are
better solution other than like \"+foo/199803\".")
(defun mew-file-attributes (filename)
"Same as file-attributes, but chase it if FILENAME is a symbolic-link."
(let ((w32-get-true-file-link-count t) ; for Meadow
attr symlnk)
(while (stringp (setq symlnk (car (setq attr (file-attributes filename)))))
(setq filename
(expand-file-name symlnk (file-name-directory filename))))
attr))
(defun mew-folder-list (folder)
"List up subfolders of 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 (mew-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
(while folder
(insert (car folder) "\n")
(setq folder (cdr folder)))
; (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
)))
(provide 'mew-parasite)
Mew-win32 メーリングリストの案内