[Mew-dist 17714] Re: mew-fancy-summary.el

Shun-ichi GOTO gotoh at example.com
2001年 6月 7日 (木) 19:45:56 JST


>>>>> at Thu, 7 Jun 2001 16:44:29 +0900
>>>>> jado == Shun-ichi TAHARA (田原 俊一) <jado at example.com> said,

> 白井秀行@統合の日は来るのでだろうか (^^)

jado> ぜひやりたいですね。

jado> cacheと仲よくすることを考えると、scanしたときに、
jado>   scanした行\rスレッド情報\r色情報(桁数とfaceの組?)
jado> みたいなのを返すようにして、invisibleするついでに塗っていけばいいのか
jado> なぁ…

一案として、.mew-cache をtext property つきで保存する、というものがあるかと
思います。
## それが良いかどうかは別として。(^^;

でもって、scan する際に各文字列にmew-scan-form のどのフィールドによって
生成した文字列かをproperty として与えておき、色の描画はそのproperty の内
容にしたがって塗っていく、と。

これだと、font-lock を含めたproperty が保存されるため、
goto-folder 後の初期色づけが不要になる特典もついてきます。
色づけに際しては、next-property-change<f> とその値による単純な色の選択
処理の繰返し処理になりますので、楽でしょう。

properety ごと保存する方法は実は以前から興味があったのでちょっとやってみ
ました。(色付け処理以外は)添付のパッチような感じで実現は出来ます。
## サンプルなので無闇に適用しないように > all

このやりかた、一気に復元できるという意味ではスピードはそれなりに速いかも
知れませんが出来上がる.mew-cache は通常の4 倍位のサイズになるため、その
分のアレがナニかな、と評価はしにくい。

ちなみに175 個のメッセージがあるフォルダで、通常の.mew-cache は 22,122
bytes で添付の方法だと 112,851 bytes です。

## ちなみにこのフォルダでのオイラ独自のデータベースは 34,388 bytes なの
## で以外とでかいな、と感じた。


jado> 色情報の抜き出し機構は fancy-summary のものを流用できるはずなので、あ
jado> とは invisible するところに色塗り処理をねじ込むだけですね。

これもありでしょう。けど、カラム値で記録しておかないといけませんから、正
確かも知れませんが、色づけは結構時間がかかるかも。

--- Regards,
 Shun-ichi Goto  <gotoh at example.com>
   R&D Group, TAIYO Corp., Tokyo, JAPAN
-------------- next part --------------
Index: mew-encode.el
===================================================================
RCS file: /usr/home/gotoh/Repository/mew-1.95/mew-encode.el,v
retrieving revision 1.1.1.17
diff -u -b -r1.1.1.17 mew-encode.el
--- mew-encode.el	2001/06/04 01:15:09	1.1.1.17
+++ mew-encode.el	2001/06/07 10:20:59
@@ -123,12 +123,13 @@
       (save-restriction
 	(goto-char (mew-header-end))
 	(if (not (bolp)) (insert "\n"))
-	(narrow-to-region (point-min) (1- (mew-header-end)))
+	(narrow-to-region (point-min) (mew-header-end))
 	(let (beg med)
 	  (mew-elet
 	   ;; removing null lines
 	   (goto-char (point-min))
-	   (while (re-search-forward "^$" nil t)
+	   (while (and (re-search-forward "^$" nil t)
+		       (not (eobp)))
 	     (delete-char 1))
 	   ;; removing fields which don't have value.
 	   (goto-char (point-min))
Index: mew-scan.el
===================================================================
RCS file: /usr/home/gotoh/Repository/mew-1.95/mew-scan.el,v
retrieving revision 1.1.1.28
diff -u -b -r1.1.1.28 mew-scan.el
--- mew-scan.el	2001/05/29 11:21:52	1.1.1.28
+++ mew-scan.el	2001/06/07 10:20:59
@@ -222,6 +222,7 @@
 	(if (not (fboundp func))
 	    ()
 	  (setq str (funcall func))
+	  (put-text-property 0 (length str) 'mew-scan-form func str)
 	  (if rightp
 	      (if (<= (length str) width)
 		  (format (format "%%%ds" width) str)
@@ -810,9 +811,14 @@
 	     (mew-summary-folder-cache-newp))
 	(mew-elet
 	 (mew-erase-buffer)
+	 (insert (with-temp-buffer
 	 (mew-frwlet
 	  mew-cs-m17n mew-cs-dummy
 	  (insert-file-contents cache))
+		   (goto-char 1)
+		   (if (looking-at "#(")
+		       (read (current-buffer))
+		     (buffer-string))))
 	 (mew-sinfo-set-cache-time (mew-file-get-time cache))
 	 (setq mew-summary-buffer-raw t)
 	 (mew-mark-undo-mark mew-mark-refile 'no-msg)
@@ -825,25 +831,18 @@
 	     (file-writable-p cache))
 	(save-restriction
 	  (widen)
-	  (if (mew-decode-syntax-p)
-	      (let ((cbuf (current-buffer))
-		    (min (point-min))
+	  (let* ((min (point-min))
 		    (max (point-max))
 		    (beg (mew-decode-syntax-begin))
 		    (end (mew-decode-syntax-end))
-		    (tmpbuf (generate-new-buffer mew-buffer-prefix)))
-		(set-buffer tmpbuf)
+		 (str (concat (buffer-substring min (or beg min))
+			      (buffer-substring (or end min) max))))
+	    (with-temp-buffer
 		(mew-erase-buffer)
-		(mew-insert-buffer-substring cbuf min beg)
-		(mew-insert-buffer-substring cbuf end max)
-		(mew-frwlet
-		 mew-cs-dummy mew-cs-m17n
-		 (write-region (point-min) (point-max) cache nil 'no-msg))
-		(set-buffer cbuf)
-		(mew-remove-buffer tmpbuf))
+	      (prin1 str (current-buffer))
 	    (mew-frwlet
 	     mew-cs-dummy mew-cs-m17n
-	     (write-region (point-min) (point-max) cache nil 'no-msg)))
+		(write-region (point-min) (point-max) cache nil 'no-msg))))
 	  (mew-sinfo-set-cache-time (mew-file-get-time cache))))))
 
 (provide 'mew-scan)


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