OSDN Git Service

Add web mail viewer 'Maverick'. master
authorFurutanian <furutanian@gmail.com>
Mon, 20 Aug 2012 12:12:30 +0000 (21:12 +0900)
committerFurutanian <furutanian@gmail.com>
Mon, 20 Aug 2012 12:12:30 +0000 (21:12 +0900)
Add incremental search functions with romanized japanese stroke.
Add QDBM support for meta data store of mail.
Add legacy encoding mode for filename of attachment.
Add import address book function from ldap server.

80 files changed:
CHANGELOG
CHANGELOG.jp
MailManual.jp/00000001.eml
MailManual.jp/00000002.eml
MailManual.jp/00000003.eml
MailManual.jp/00000004.eml
MailManual.jp/00000005.eml
MailManual.jp/00000006.eml
MailManual.jp/00000007.eml
MailManual.jp/00000008.eml
MailManual.jp/00000009.eml
MailManual.jp/00000010.eml
MailManual.jp/00000011.eml
MailManual.jp/00000012.eml
MailManual.jp/00000013.eml
MailManual.jp/00000014.eml
MailManual.jp/00000015.eml
MailManual.jp/00000016.eml
MailManual.jp/00000017.eml
MailManual.jp/00000018.eml
MailManual.jp/00000019.eml
MailManual.jp/00000020.eml
MailManual.jp/00000021.eml
MailManual.jp/00000022.eml
MailManual.jp/00000023.eml
MailManual.jp/00000024.eml
MailManual.jp/00000025.eml
MailManual.jp/00000026.eml
MailManual.jp/00000027.eml
MailManual.jp/00000028.eml [new file with mode: 0644]
MailManual/00000001.eml
MailManual/00000002.eml
MailManual/00000003.eml
MailManual/00000004.eml
MailManual/00000005.eml
MailManual/00000006.eml
MailManual/00000007.eml
MailManual/00000008.eml
MailManual/00000009.eml
MailManual/00000010.eml
MailManual/00000011.eml
MailManual/00000012.eml
MailManual/00000013.eml
MailManual/00000014.eml
MailManual/00000015.eml
MailManual/00000016.eml
MailManual/00000017.eml
MailManual/00000018.eml
MailManual/00000019.eml
MailManual/00000020.eml
MailManual/00000021.eml
MailManual/00000022.eml
MailManual/00000023.eml
MailManual/00000024.eml
MailManual/00000025.eml
MailManual/00000026.eml
MailManual/00000027.eml
MailManual/00000028.eml [new file with mode: 0644]
README
README.jp
dot.htaccess [new file with mode: 0644]
dump_gdbm
favicon.png [new file with mode: 0644]
mave
mave-tokyo-utf8.pmo
mave.config.sample
mave.folderconfig.common
mave.keyconfig
mave.xcf [new file with mode: 0644]
mave_address.sample
mave_base.rb
mave_cat_mail
mave_controller.rb
mave_curses.rb
mave_fetch [new file with mode: 0755]
mave_models.rb
mave_update_ncal
maverick.rhtml [new file with mode: 0755]
ncal
xdbm.rb [new file with mode: 0644]

index 262d2a5..f120dd2 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,12 @@
 Changelog of Textbase Mailer 'Mave'
 
+Version 2.98
+       * Add web mail viewer 'Maverick'.
+       * Add incremental search functions with romanized japanese stroke.
+       * Add QDBM support for meta data store of mail.
+       * Add legacy encoding mode for filename of attachment.
+       * Add import address book function from ldap server.
+
 Version 2.97
        * Add clip(quote) and tagjump function.
        * Add full-text search function for mail by external engine.
index 445c021..00be6cf 100644 (file)
@@ -1,5 +1,12 @@
 テキストベースメーラ「Mave」の更新履歴
 
+・Version 2.98
+       * ウェブメールビューア「Maverick」を追加
+       * ローマ字入力によるインクリメンタル検索機能を追加
+       * メールのメタデータストアを QDBM に対応
+       * 添付ファイル名のレガシーエンコーディングモードを追加
+       * LDAP サーバからアドレス帳へのインポート機能を追加
+
 ・Version 2.97
        * クリップ(引用)機能、タグジャンプ機能を追加
        * 各種全文検索エンジンによるメール検索機能を追加
index d17ca10..5668d34 100644 (file)
@@ -1,9 +1,9 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?GyRCJUYlLSU5JUglWSE8JTklYSE8JWkhVhsoQk1hdmUbJEIhVyROO0gkJEp9GyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index b281c7d..bbf525e 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?GyRCSSxNVyRKJVElQyUxITwlOBsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.479186.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.495021.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -14,4 +14,4 @@ X-Mave-Attachments:
 X-Mave-Relations: \r
 \r
 \r
-  Ruby\e$B!"\e(Bcurses \e$B$*$h$S\e(B gdbm \e$B%i%$%V%i%j\e(B\r
+  Ruby\e$B!"\e(Bcurses \e$B$*$h$S\e(B qdbm/gdbm \e$B%i%$%V%i%j\e(B\r
index c10e079..dae7398 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MS4gGyRCJSIhPCUrJSQlViROPGhGQCRIRTgzKxsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.480483.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.495959.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -14,6 +14,6 @@ X-Mave-Attachments:
 X-Mave-Relations: \r
 \r
 \r
-  http://sourceforge.jp/projects/mave/downloads/44582/mave.tgz/ \e$B$K%"%/%;%9$9$k!#\e(B\r
-  $ tar xvfz mave.tgz\r
-  $ cd mave\r
+  http://sourceforge.jp/projects/mave/downloads/xxxxx/mave-2.98.tgz/ \e$B$K%"%/%;%9$9$k!#\e(B\r
+  $ tar xvfz mave-2.98.tgz\r
+  $ cd mave-2.98\r
index 3bffceb..9e2b327 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Mi4gGyRCJWYhPCU2QF9EahsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.481794.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.496906.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -18,7 +18,7 @@ X-Mave-Relations:
   $ vi mave.config\r
 \r
     'Main' \e$B%"%+%&%s%H$NItJ,$r!"$"$J$?$N@_Dj$K=q$-49$($F$/$@$5$$!#\e(B\r
-    \e$B$H$j$"$($:\e(B Mave \e$B$r;n$7$F$_$?$$>l9g!"$3$3$+$i\e(B 3. \e$B$K?J$s$G$b7k9=$G$9!#\e(B\r
+    \e$B$H$j$"$($:\e(B Mave \e$B$r;n$7$F$_$?$$>l9g!"0J9_$rHt$P$7$F\e(B 3. \e$B$K?J$s$G$b7k9=$G$9!#\e(B\r
 \r
     \e$B9%$_$N%(%G%#%?4D6-$r@_Dj$7$F$/$@$5$$!#\e(B\r
 \r
index 7aa776d..b05ec9b 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?My4gGyRCJWEhPCVrJHJDX0BRJDkkayVHJSMlbCUvJUglaiROOm5ALhsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.484265.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.498588.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 18b8d9b..2cbdd51 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NC4gTWF2ZSAbJEIkTjxCOVQbKEI=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.486495.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.499725.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index f720004..505d4b4 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NS4gGyRCJWEhPCVrJE48aEZAGyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.488010.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.500685.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index f6c94f6..8ed1cd2 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ni4gGyRCJWEhPCVrJHIxXE13JDkkaxsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.489558.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.501926.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -23,7 +23,7 @@ X-Mave-Relations:
   ||  |   \e$BAw?.85\e(B / \e$BAw?.@h\e(B  \e$BAw?.F|\e(B      \e$B%5%$%:\e(B || |  \e$B7oL>\e(B\r
   ||  +-\e$B:G?7\e(B 0 <=> 999 \e$B8E$$\e(B                   || +-\e$B?F\e(B(+) / \e$B;R\e(B(-) / \e$B@^$j>v$_Cf\e(B(#/=)\r
   |+-\e$B%U%i%0\e(B(F) / \e$BCm0U\e(B(#)                      |+-\e$B%^%k%A%Q!<%H%a!<%k\e(B(@)(\e$BE:IU$"$j\e(B)\r
-  +-\e$BL$FI\e(B(x)                                   +-To \e$B$"$J$?\e(B(w) / Cc \e$B$"$J$?\e(B(v) \e$B"(L$<BAu\e(B\r
+  +-\e$BL$FI\e(B(x)                                   +-To \e$B$"$J$?\e(B(w) / Cc \e$B$"$J$?\e(B(v)\r
 \r
   \e$B0J2<$NI=<(>uBV$NA`:n$,$G$-$^$9!#\e(B\r
 \r
index 0dcf847..9f704a4 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ny4gGyRCJSQlcyUvJWolYSVzJT8lazghOncbKEI=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.491516.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.503385.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -19,3 +19,8 @@ X-Mave-Relations:
   \e$B8!:w8l$,8+$D$+$C$?>uBV$G!"\e(BCtrl + s \e$B$r2!$9$H!"<!$r8!:w$7$^$9!#\e(B\r
   \e$B8!:w$rCfCG$7$?$j!"8!:w%@%$%"%m%0$rJD$8$k$K$O!"\e(BCtrl + g \e$B$r2!$7$^$9!#\e(B\r
   Ctrl + r \e$B$r2!$9$H!"5UJ}8~$K8!:w$7$^$9!#\e(B\r
+\r
+  \e$BJLES!"4A;z$+$JJQ49%(%s%8%s\e(B KAKASI \e$B$H!"$=$N\e(B Ruby \e$B%P%$%s%G%#%s%0$rF3F~$9$k$3$H$K$h$j!"\e(B\r
+  \e$B%a!<%k0lMw%S%e!<$G!"%m!<%^;z%-!<F~NO$K$h$k%$%s%/%j%a%s%?%k8!:w$,2DG=$K$J$j$^$9!#\e(B\r
+  \e$BK\5!G=$O!"F|K\8l$r%m!<%^;zJQ49$7!"$=$l$r%-%c%C%7%e$9$k$3$H$K$h$j<BAu$5$l$F$$$^$9!#\e(B\r
+  \e$B%-%c%C%7%e$NFbMF$O!"\e(BESC\e$B!"\e(BShift + q \e$B$r2!$9$3$H$K$h$j3NG'$G$-$^$9!#\e(B\r
index d793af9..d53470a 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OC4gGyRCJWEhPCVrJHI6bkAuGyhCLxskQkpUPTgkOSRrGyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.492953.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.504739.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 05fd8b3..ecf9b6d 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OS4gGyRCJVUlKSVrJUA1IUc9GyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.494880.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.506219.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 1cbdcd7..9a0a268 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTAuIBskQiVhITwlayROMFxGMCEiJTMlVCE8ISI6bz18GyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.497257.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.525652.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index e83382d..047b9b2 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTEuIBskQiVhITwlayROQXc/LhsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.498827.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.527316.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 8224d8d..d74c700 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTIuIBskQiVhITwlayROJSQlcyVdITwlSBsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.500265.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.529015.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 8057e64..20e8a8e 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTMuIBskQiVhITwlayROJV4hPCUvGyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.502081.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.530928.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 26a9c8e..4dba30a 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTQuIBskQiU5JWwlQyVJQWA6bhsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.503731.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.532742.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 4e081d3..dea26f3 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTUuIBskQiUiJUklbCU5RCIkTjpuQC4bKEI=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.505176.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.534166.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 190c3de..3125baf 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTYuIBskQkU6SVUlVSUhJSQlayROQWA6bhsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.507787.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.535989.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 665158c..52fc5ea 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTcuIBskQiUvJWolQyVXGyhCKBskQjB6TVEbKEIpGyRCISIlPyUwJTglYyVzJVcbKEI=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.510081.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.538063.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 6389787..29c1a71 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTguIBskQkE0Sjg4ITp3GyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.523560.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.539988.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index f2fb2fc..a7bf6c1 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTkuIBskQiU3JSclayUzJV4lcyVJJE48QjlUISI3azJMJE48aCRqOX4kXxsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.525614.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.541527.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index d79ec37..17656b8 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MjAuIBskQkU6SVVLOiRsS0k7XzUhRz0hIkF3Py5EPkEwIT9EPjhlJE4lOSUvJWolVyVIPEI5VBsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.528128.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.542781.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 383ebe2..53ed6db 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MjEuIBskQj0qTjskOSRrGyhC?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.529541.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.543986.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 44bf458..7bfaa8c 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?GyRCJD0kbCRHJE8hIxsoQg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.530799.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?MjIuIBskQiUmJSclViVhITwlayVTJWUhPCUiIVYbKEJNYXZlcmljaxskQiFXGyhC?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.545228.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,3 +13,9 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
+  \r
+  \e$B!V\e(BMaverick\e$B!W$O!"%&%'%V7PM3$G%a!<%k$r1\Mw$9$k$3$H$,$G$-$k\e(B cgi \e$B%9%/%j%W%H$G$9!#\e(B\r
+  \e$B%a!<%k%G!<%?!"$*$h$S!"A4J88!:w%$%s%G%C%/%9$O40A4$K\e(B mave \e$B$H6&MQ$G$9!#\e(B\r
+  \e$BJLES!"\e(BApache \e$B$H\e(B eRuby \e$B$rF3F~$7!"\e(Bmave \e$B$N%G%#%l%/%H%j$r\e(B public_html \e$B$N2<$K0\F0!"\e(B\r
+  dot.htaccess \e$B$r;29M$K%"%/%;%98"8B$rE,@Z$K@_Dj$7$F2<$5$$!#\e(B\r
+  \e$BE:IU$N\e(B mave_fetch \e$B$r\e(B crontab \e$BEy$K$h$j<~4|E*$K<B9T$9$k$3$H$G!"\e(BGmail \e$B$C$]$/;H$($^$9!#\e(B\r
index 7f911cb..5c2df1d 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?GyRCJWElYhsoQjo=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.531957.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?GyRCJD0kbCRHJE8hIxsoQg==?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.546476.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,21 +13,3 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
-  \e$B$R$i$,$J$d4A;z$J$I$,2=$1$F$7$^$&$N$O!"\e(B\r
-  Ruby \e$B$NI8=`\e(B curses \e$B%i%$%V%i%j$,\e(B UTF-8 \e$B$KBP1~$7$F$$$J$$$N$,860x$G$9!#\e(B\r
-  \e$B0J2<$N%5%$%H$N5-:\$r;29M$K!"%Q%C%A$rEv$F$F!"\e(Bncursesw \e$B%i%$%V%i%j$KBP1~$7$F$/$@$5$$!#\e(B\r
-\r
-  http://www.itline.jp/~svx/diary/?date=20091022\r
-\r
-  \e$B8=:_!";n83E*$K\e(B EUC-JP \e$B$NC<Kv4D6-$X$bBP1~2DG=$G$9!#\e(B\r
-  \e$B$3$N>l9g!">e5-$N%Q%C%A$rEv$F$kI,MW$O$"$j$^$;$s!#\e(B\r
-  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B EUC-JP \e$B$r%;%C%H$7!"\e(Bmave_base.rb \e$B$r0lItJQ99$7$F$/$@$5$$!#\e(B\r
-  \e$BC<Kv$+$i!V\e(Bexport LANG=ja_JP.eucjp\e$B!W$r<B9T$9$kI,MW$b$"$k$+$b$7$l$^$;$s!#\e(B\r
-\r
-  117     def enspc\r
-  118 #       return(self)                                            # UTF-8 \e$B0J30$J$i%3%a%s%H$r@8$+$9\e(B\r
-  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 \e$B$$!<$+$2$s\e(B\r
-      +-\e$B$3$N!V\e(B#\e$B!W$r>C$9\e(B\r
-\r
-  \e$B$^$?!";n83E*$K\e(B SHIFT_JIS \e$B$G$N\e(B Windows \e$B%3%s%=!<%k4D6-$X$NBP1~$b?J$a$F$$$^$9!#\e(B\r
-  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B SHIFT_JIS \e$B$r%;%C%H$9$k$J$I$r$*;n$72<$5$$!#\e(B\r
index febae01..ee8244f 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?TWF2ZSAbJEIlVyVtJTglJyUvJUglKiVVJSMlNyVjJWslWiE8JTgbKEI6?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.534086.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?GyRCJWElYhsoQjo=?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.547439.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,4 +13,21 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
-  http://sourceforge.jp/projects/mave/\r
+  \e$B$R$i$,$J$d4A;z$J$I$,2=$1$F$7$^$&$N$O!"\e(B\r
+  Ruby \e$B$NI8=`\e(B curses \e$B%i%$%V%i%j$,\e(B UTF-8 \e$B$KBP1~$7$F$$$J$$$N$,860x$G$9!#\e(B\r
+  \e$B0J2<$N%5%$%H$N5-:\$r;29M$K!"%Q%C%A$rEv$F$F!"\e(Bncursesw \e$B%i%$%V%i%j$KBP1~$7$F$/$@$5$$!#\e(B\r
+\r
+  http://www.itline.jp/~svx/diary/?date=20091022\r
+\r
+  \e$B8=:_!";n83E*$K\e(B EUC-JP \e$B$NC<Kv4D6-$X$bBP1~2DG=$G$9!#\e(B\r
+  \e$B$3$N>l9g!">e5-$N%Q%C%A$rEv$F$kI,MW$O$"$j$^$;$s!#\e(B\r
+  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B EUC-JP \e$B$r%;%C%H$7!"\e(Bmave_base.rb \e$B$r0lItJQ99$7$F$/$@$5$$!#\e(B\r
+  \e$BC<Kv$+$i!V\e(Bexport LANG=ja_JP.eucjp\e$B!W$r<B9T$9$kI,MW$b$"$k$+$b$7$l$^$;$s!#\e(B\r
+\r
+  117     def enspc\r
+  118 #       return(self)                                            # UTF-8 \e$B0J30$J$i%3%a%s%H$r@8$+$9\e(B\r
+  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 \e$B$$!<$+$2$s\e(B\r
+      +-\e$B$3$N!V\e(B#\e$B!W$r>C$9\e(B\r
+\r
+  \e$B$^$?!";n83E*$K\e(B SHIFT_JIS \e$B$G$N\e(B Windows \e$B%3%s%=!<%k4D6-$X$NBP1~$b?J$a$F$$$^$9!#\e(B\r
+  mave.config \e$B$N!V\e(B:TERMINAL_CHARSET\e$B!W$K\e(B SHIFT_JIS \e$B$r%;%C%H$9$k$J$I$r$*;n$72<$5$$!#\e(B\r
index 4f0f96f..329f379 100644 (file)
@@ -1,11 +1,11 @@
 From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
 To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.535292.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.477648.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?TWF2ZSAbJEIlVyVtJTglJyUvJUglKiVVJSMlNyVjJWslWiE8JTgbKEI6?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.549138.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,3 +13,4 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
+  http://sourceforge.jp/projects/mave/\r
diff --git a/MailManual.jp/00000028.eml b/MailManual.jp/00000028.eml
new file mode 100644 (file)
index 0000000..b45379c
--- /dev/null
@@ -0,0 +1,15 @@
+From: =?ISO-2022-JP?B?GyRCMytILzxUGyhC?= <furutanian@gmail.com>\r
+To: =?ISO-2022-JP?B?GyRCJWElJCV0JWYhPCU2GyhC?= <mave_user@example.com>\r
+Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.550126.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.493885.8eaa550b@mave.gradius.itline.jp>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=ISO-2022-JP\r
+Content-Transfer-Encoding: 7bit\r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
+\r
index e766551..59edcde 100644 (file)
@@ -1,9 +1,9 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?SG93IHRvIHVzZSAnTWF2ZScgdGV4dGJhc2UgbWFpbGVyLg==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index c83e2d3..0337fbb 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?UmVxdWlyZW1lbnQ=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.424914.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.447335.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -14,4 +14,4 @@ X-Mave-Attachments:
 X-Mave-Relations: \r
 \r
 \r
-  Ruby, curses and gdbm library.\r
+  Ruby, curses and qdbm/gdbm library.\r
index 9c1c0c7..1d95592 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MS4gR2V0IGFyY2hpdmUgYW5kIEV4dHJhY3Q=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.426969.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.456847.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -14,6 +14,6 @@ X-Mave-Attachments:
 X-Mave-Relations: \r
 \r
 \r
-  Access http://sourceforge.jp/projects/mave/downloads/44582/mave.tgz/\r
-  $ tar xvfz mave.tgz\r
-  $ cd mave\r
+  Access http://sourceforge.jp/projects/mave/downloads/xxxxx/mave-2.98.tgz/\r
+  $ tar xvfz mave-2.98.tgz\r
+  $ cd mave-2.98\r
index 36567f3..b2e5fb7 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Mi4gQnVpbGQgeW91ciBjb25maWc=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.428173.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.458405.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index fbba3ce..1787dc0 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?My4gTWFrZSBkaXJlY3RvcnkgZm9yIHN0b3JlIG1haWwgZmlsZXM=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.440442.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.466897.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index c24d517..ec80b84 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NC4gRXhlY3V0ZSBNYXZl?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.442066.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.467790.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index a0c09d7..5a645cc 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?NS4gRmV0Y2ggbWFpbHM=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.443221.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.468648.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index b9d8745..4e54d3c 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ni4gRXhwbG9yZSBtYWlscw==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.444549.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.469581.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -23,7 +23,7 @@ X-Mave-Relations:
   ||  |   Mail from / to   Sent date        size || |  Subject\r
   ||  +-Recent 0 <=> 999 Old                     || +-Parent(+) / Child(-) / Folded(#/=)\r
   |+-Flag(F) / Notice mark(#)                    |+-Multipart mail(@)(Has attachment)\r
-  +-Unread mark(x)                               +-To you(w) / Cc you(v) *not provided yet\r
+  +-Unread mark(x)                               +-To you(w) / Cc you(v)\r
 \r
   You can change summary looking.\r
 \r
index 0264ae6..a551659 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?Ny4gSW5jcmVtZW50YWwgc2VhcmNo?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.447145.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.470990.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -19,3 +19,8 @@ X-Mave-Relations:
   Press Ctrl + s key to search next when word found.\r
   Press Ctrl + g key to abort search or close search dialog.\r
   Press Ctrl + r key to search backward.\r
+\r
+  You can incremental search with romanized japanese key stroke at summary view,\r
+  by installing the kanji kana simple inverter KAKASI and its ruby bindings.\r
+  This function is build by convert to romanized japanese and its caching.\r
+  Press ESC, Shift + q key to see the cache data.\r
index e5f4e3f..1a134e6 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OC4gQ3JlYXRlL0VkaXQgbWFpbCBtZXNzYWdl?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.448394.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.472282.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 041afe8..b114249 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?OS4gTWFpbCBGb2xkZXJz?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.451182.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.473877.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 6fae013..4fe216a 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTAuIE1vdmUsIENvcHkgYW5kIERlbGV0ZSBtYWlscy4=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.453172.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.475605.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 5b23fab..13191cc 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTEuIFNlbmQgbWFpbHM=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.454544.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.476549.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index f8beb55..1ab0315 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTIuIEltcG9ydCBtYWlscw==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.455822.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.477442.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 39e2d2f..2a33a6c 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTMuIE1hcmsgbWFpbHM=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.457406.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.478622.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 99ac093..98458c6 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTQuIEFycmFuZ2UgbWFpbCB0aHJlYWRz?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.458872.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.479724.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 1b138b6..854b81b 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTUuIEJ1aWxkIHlvdXIgYWRkcmVzc2Jvb2s=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.460283.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.480859.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -24,6 +24,6 @@ X-Mave-Relations:
     entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny',      }\r
     entries << { :MAIL => 'linus-z@abc.co.jp',                      :ID => 'linus@ABC',     :SEND => 'Mr. Zorvalds',}\r
 \r
-  Entries ware registered to the address book DB by the execute script of address book.\r
+  Entries were registered to the address book DB by the execute script of address book.\r
 \r
   $ ./mave_address\r
index d19f505..ae2df23 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTYuIEF0dGFjaCBmaWxlIHRvIG1haWw=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.461859.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.482026.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 17a06c8..6eaee7c 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTcuIENsaXAocXVvdGUpIGFuZCBUYWdqdW1w?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.463804.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.483484.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 86d7448..a2daad6 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTguIEZ1bGwtdGV4dCBzZWFyY2g=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.467291.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.485206.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 5bdf4a0..7c86697 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MTkuIEV4ZWN1dGUgc2hlbGwgY29tbWFuZCBhbmQgaW1wb3J0IHJlc3VsdA==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.468997.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.486665.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 3145cc5..40c94c5 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MjAuIFByZXZlbnQgdG8gZm9yZ2V0IHRvIGF0dGFjaCB0byBtYWlsLiBQcmUtc2VudCBhbmQgcG9zdC1zZW5kIHNjcmlwdC4=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.470528.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.487751.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -16,4 +16,4 @@ X-Mave-Relations:
 \r
   You can execute the script when just before and after send mail.\r
   This function used for prevent to forgot to attach to mail by word checking in mail body when just before send mail.\r
-  See the pre-send/post-send method in mave.folderconfig.common for the example of scripting.\r
+  See the presend method in mave.folderconfig.common for the example of scripting.\r
index 49b5c21..01fb60e 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
 Subject: =?ISO-2022-JP?B?MjEuIFF1aXQ=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.471703.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.488658.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
index 5da6295..7d070e4 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?RW5qb3khIQ==?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.472767.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?MjIuIFdlYiBtYWlsIHZpZXdlciAnTWF2ZXJpY2sn?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.489442.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,3 +13,9 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
+  \r
+  The 'Maverick' is cgi script of mail viewer for mail reading with web browser.\r
+  Mail data and index of full-text search are completely shared with mave.\r
+  To use, install Apache and eRuby, move mave directory under public_html.\r
+  Don't forget to set access permittion properly refer dot.htaccess.\r
+  You can use like Gmail by cyclic execute mave_fetch script that attached.\r
index 82350b8..2efe557 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?Tm90ZTo=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.473758.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?RW5qb3khIQ==?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.490393.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,21 +13,3 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
-  When multibyte character is troubled.\r
-  Standard curses library of Ruby doesn't correspond to UTF-8.\r
-  Please apply the patch to correspond to ncursesw referring to the following sites.\r
-\r
-  http://www.itline.jp/~svx/diary/?date=20091022\r
-\r
-  In experimentally, Mave corresponds terminal environment of EUC-JP now.\r
-  In this case, you do not need to apply above patch.\r
-  Set EUC-JP to ':TERMINAL_CHARSET' in mave.config, and change mave_base.rb a bit.\r
-  "export LANG=ja_JP.eucjp" might execute from the terminal.\r
-\r
-  117     def enspc\r
-  118 #       return(self)                                            # comment out without UTF-8\r
-  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 temporally\r
-      +-remove this '#'\r
-\r
-  And in experimentally, Mave is corresponding Windows console environment with SHIFT_JIS.\r
-  Set SHIFT_JIS to ':TERMINAL_CHARSET' in mave.config, and try and error.\r
index d266380..a5d8dcd 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?TWF2ZSBwcm9qZWN0IG9mZmljaWFsIHBhZ2U6?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.475450.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?Tm90ZTo=?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.491134.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,4 +13,21 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
-  http://sourceforge.jp/projects/mave/\r
+  When multibyte character is troubled.\r
+  Standard curses library of Ruby doesn't correspond to UTF-8.\r
+  Please apply the patch to correspond to ncursesw referring to the following sites.\r
+\r
+  http://www.itline.jp/~svx/diary/?date=20091022\r
+\r
+  In experimentally, Mave corresponds terminal environment of EUC-JP now.\r
+  In this case, you do not need to apply above patch.\r
+  Set EUC-JP to ':TERMINAL_CHARSET' in mave.config, and change mave_base.rb a bit.\r
+  "export LANG=ja_JP.eucjp" might execute from the terminal.\r
+\r
+  117     def enspc\r
+  118 #       return(self)                                            # comment out without UTF-8\r
+  119 ^       self.gsub(/[\xC0-\xE2][\x80-\xBF]+/) {|c|               #### for UTF8 temporally\r
+      +-remove this '#'\r
+\r
+  And in experimentally, Mave is corresponding Windows console environment with SHIFT_JIS.\r
+  Set SHIFT_JIS to ':TERMINAL_CHARSET' in mave.config, and try and error.\r
index 9f707be..3abc4c5 100644 (file)
@@ -1,11 +1,11 @@
 From: Developer <furutanian@gmail.com>\r
 To: Mave user <mave_user@example.com>\r
-Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
-Date: Mon, 22 Mar 2010 20:49:02 +0900\r
-X-Mailer: Mave version 2.97 (suzaku.itline.jp 2.6.31.5-127.fc12.i686.PAE GNU/Linux)\r
-Message-ID: <1269258542.476539.8eaa550b@mave.suzaku.itline.jp>\r
-In-Reply-To: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
-References: <1269258542.423384.8eaa550b@mave.suzaku.itline.jp>\r
+Subject: =?ISO-2022-JP?B?TWF2ZSBwcm9qZWN0IG9mZmljaWFsIHBhZ2U6?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.492319.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
 MIME-Version: 1.0\r
 Content-Type: text/plain; charset=ISO-2022-JP\r
 Content-Transfer-Encoding: 7bit\r
@@ -13,3 +13,4 @@ X-Mave-Extract-Targets:
 X-Mave-Attachments: \r
 X-Mave-Relations: \r
 \r
+  http://sourceforge.jp/projects/mave/\r
diff --git a/MailManual/00000028.eml b/MailManual/00000028.eml
new file mode 100644 (file)
index 0000000..feb6a14
--- /dev/null
@@ -0,0 +1,15 @@
+From: Developer <furutanian@gmail.com>\r
+To: Mave user <mave_user@example.com>\r
+Subject: =?ISO-2022-JP?B?W0VPRl0=?=\r
+Date: Mon, 20 Aug 2012 21:04:18 +0900\r
+X-Mailer: Mave version 2.98 (gradius.itline.jp 3.3.0-4.fc16.x86_64 GNU/Linux)\r
+Message-ID: <1345464258.493071.8eaa550b@mave.gradius.itline.jp>\r
+In-Reply-To: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+References: <1345464258.446131.8eaa550b@mave.gradius.itline.jp>\r
+MIME-Version: 1.0\r
+Content-Type: text/plain; charset=ISO-2022-JP\r
+Content-Transfer-Encoding: 7bit\r
+X-Mave-Extract-Targets: \r
+X-Mave-Attachments: \r
+X-Mave-Relations: \r
+\r
diff --git a/README b/README
index 951b80a..c633ec9 100644 (file)
--- a/README
+++ b/README
@@ -2,13 +2,13 @@ How to use 'Mave' textbase mailer.
 
 Requirement
 
-  Ruby, curses and gdbm library.
+  Ruby, curses and qdbm/gdbm library.
 
 1. Get archive and Extract
 
-  Access http://sourceforge.jp/projects/mave/downloads/44582/mave.tgz/
-  $ tar xvfz mave.tgz
-  $ cd mave
+  Access http://sourceforge.jp/projects/mave/downloads/xxxxx/mave-2.98.tgz/
+  $ tar xvfz mave-2.98.tgz
+  $ cd mave-2.98
 
 2. Build your config
 
@@ -80,7 +80,7 @@ Requirement
   ||  |   Mail from / to   Sent date        size || |  Subject
   ||  +-Recent 0 <=> 999 Old                     || +-Parent(+) / Child(-) / Folded(#/=)
   |+-Flag(F) / Notice mark(#)                    |+-Multipart mail(@)(Has attachment)
-  +-Unread mark(x)                               +-To you(w) / Cc you(v) *not provided yet
+  +-Unread mark(x)                               +-To you(w) / Cc you(v)
 
   You can change summary looking.
 
@@ -97,6 +97,11 @@ Requirement
   Press Ctrl + g key to abort search or close search dialog.
   Press Ctrl + r key to search backward.
 
+  You can incremental search with romanized japanese key stroke at summary view,
+  by installing the kanji kana simple inverter KAKASI and its ruby bindings.
+  This function is build by convert to romanized japanese and its caching.
+  Press ESC, Shift + q key to see the cache data.
+
 8. Create/Edit mail message
 
   Press Ctrl + x, n key to create new mail message.
@@ -216,7 +221,7 @@ Requirement
     entries << { :MAIL => 'john-y@yahoo.co.jp',                     :ID => 'john@private',  :SEND => 'johnny',      }
     entries << { :MAIL => 'linus-z@abc.co.jp',                      :ID => 'linus@ABC',     :SEND => 'Mr. Zorvalds',}
 
-  Entries ware registered to the address book DB by the execute script of address book.
+  Entries were registered to the address book DB by the execute script of address book.
 
   $ ./mave_address
 
@@ -292,12 +297,20 @@ Requirement
 
   You can execute the script when just before and after send mail.
   This function used for prevent to forgot to attach to mail by word checking in mail body when just before send mail.
-  See the pre-send/post-send method in mave.folderconfig.common for the example of scripting.
+  See the presend method in mave.folderconfig.common for the example of scripting.
 
 21. Quit
 
   Press Ctrl + x, c key to kill mave.
 
+22. Web mail viewer 'Maverick'
+  
+  The 'Maverick' is cgi script of mail viewer for mail reading with web browser.
+  Mail data and index of full-text search are completely shared with mave.
+  To use, install Apache and eRuby, move mave directory under public_html.
+  Don't forget to set access permittion properly refer dot.htaccess.
+  You can use like Gmail by cyclic execute mave_fetch script that attached.
+
 Enjoy!!
 
 Note:
index efe9d44..84eaeb2 100644 (file)
--- a/README.jp
+++ b/README.jp
@@ -2,13 +2,13 @@
 
 必要なパッケージ
 
-  Ruby、curses および gdbm ライブラリ
+  Ruby、curses および qdbm/gdbm ライブラリ
 
 1. アーカイブの取得と展開
 
-  http://sourceforge.jp/projects/mave/downloads/44582/mave.tgz/ にアクセスする。
-  $ tar xvfz mave.tgz
-  $ cd mave
+  http://sourceforge.jp/projects/mave/downloads/xxxxx/mave-2.98.tgz/ にアクセスする。
+  $ tar xvfz mave-2.98.tgz
+  $ cd mave-2.98
 
 2. ユーザ設定
 
@@ -16,7 +16,7 @@
   $ vi mave.config
 
     'Main' アカウントの部分を、あなたの設定に書き換えてください。
-    とりあえず Mave を試してみたい場合、ここから 3. に進んでも結構です。
+    とりあえず Mave を試してみたい場合、以降を飛ばして 3. に進んでも結構です。
 
     好みのエディタ環境を設定してください。
 
@@ -80,7 +80,7 @@
   ||  |   送信元 / 送信先  送信日      サイズ || |  件名
   ||  +-最新 0 <=> 999 古い                   || +-親(+) / 子(-) / 折り畳み中(#/=)
   |+-フラグ(F) / 注意(#)                      |+-マルチパートメール(@)(添付あり)
-  +-未読(x)                                   +-To あなた(w) / Cc あなた(v) ※未実装
+  +-未読(x)                                   +-To あなた(w) / Cc あなた(v)
 
   以下の表示状態の操作ができます。
 
   検索を中断したり、検索ダイアログを閉じるには、Ctrl + g を押します。
   Ctrl + r を押すと、逆方向に検索します。
 
+  別途、漢字かな変換エンジン KAKASI と、その Ruby バインディングを導入することにより、
+  メール一覧ビューで、ローマ字キー入力によるインクリメンタル検索が可能になります。
+  本機能は、日本語をローマ字変換し、それをキャッシュすることにより実装されています。
+  キャッシュの内容は、ESC、Shift + q を押すことにより確認できます。
+
 8. メールを作成/編集する
 
   Ctrl + x、n と、キーを押すと、新規メールを作成します。
 
   Ctrl + x、c と、キーを押すと、Mave は終了します。
 
+22. ウェブメールビューア「Maverick」
+  
+  「Maverick」は、ウェブ経由でメールを閲覧することができる cgi スクリプトです。
+  メールデータ、および、全文検索インデックスは完全に mave と共用です。
+  別途、Apache と eRuby を導入し、mave のディレクトリを public_html の下に移動、
+  dot.htaccess を参考にアクセス権限を適切に設定して下さい。
+  添付の mave_fetch を crontab 等により周期的に実行することで、Gmail っぽく使えます。
+
 それでは。
 
 メモ:
diff --git a/dot.htaccess b/dot.htaccess
new file mode 100644 (file)
index 0000000..e012525
--- /dev/null
@@ -0,0 +1,21 @@
+AddHandler             cgi-script .rhtml
+DirectoryIndex maverick.rhtml
+Options                        +ExecCGI -Indexes
+
+#RewriteEngine On
+#RewriteCond   %{HTTPS} off
+#RewriteRule   (.*) https://www.example.com/~t-yamada/maverick/$1 [R]
+
+AuthType               Digest
+AuthName               "Maverick"
+AuthUserFile   /home/t-yamada/.digest_pw
+Require                        valid-user
+
+#Order                 allow,deny
+#Allow from            127.0.0.1
+#Allow from            192.168.0
+
+#Satisfy               Any
+
+# https://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html
+# $ htdigest -c ~/.digest_pw "Maverick" t-yamada
index 9a95b31..69a66af 100755 (executable)
--- a/dump_gdbm
+++ b/dump_gdbm
@@ -1,9 +1,9 @@
 #!/usr/bin/env ruby
 
-require 'gdbm'
+require 'xdbm'
 
 ARGV.each {|file|
-       GDBM.open(file).each {|key, value|
+       XDBM.new(file, 0600, XDBM::NOLOCK | XDBM::READER).each {|key, value|
                print "#{key}: <#{value}>\n"
        }
 }
diff --git a/favicon.png b/favicon.png
new file mode 100644 (file)
index 0000000..f4d786d
Binary files /dev/null and b/favicon.png differ
diff --git a/mave b/mave
index b8bb0fb..7e6d213 100755 (executable)
--- a/mave
+++ b/mave
@@ -3,7 +3,7 @@
 =begin
 
        Mave - textbase mailer
-       Copyright (C) 2007-2010 Furutanian
+       Copyright (C) 2007-2012 Furutanian
 
        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
index 3f41361..a96dd29 100644 (file)
@@ -44,6 +44,8 @@ class Intl
                        = 'メールのインポートに失敗しました。ファイル=[%s] 理由=[%s]'
        @@catalog['%1$s mail%2$s imported.'] \
                        = '%1$s 通のメールをインポートしました。'
+       @@catalog['no mails imported.'] \
+                       = '対象メールはありませんでした。'
 
        @@catalog["Account '%1$s' connecting POP server '%2$s'..."] \
                        = 'POP サーバ %2$s に、アカウント %1$s で接続しています……'
@@ -53,8 +55,10 @@ class Intl
                        = '受信中 (%1$d/%2$d) [%3$s] から [%4$s]'
        @@catalog['Failed to pop mail. reason=[%s]'] \
                        = 'メールの受信に失敗しました。理由=[%s]'
-       @@catalog['%1$s mail%2$s popped.'] \
-                       = '%1$s 通のメールを受信しました。'
+       @@catalog['%1$s mail%2$s popped.(%3$s)'] \
+                       = '%1$s 通のメールを受信しました(%3$s)。'
+       @@catalog['no mails popped.(%3$s)'] \
+                       = 'メールはありませんでした(%3$s)。'
 
        @@catalog["Account '%1$s' connecting SMTP server '%2$s'..."] \
                        = 'SMTP サーバ %2$s に、アカウント %1$s で接続しています……'
@@ -62,8 +66,10 @@ class Intl
                        = '送信中 (%1$d/%2$d) [%3$s] [%4$s] へ [%5$s]'
        @@catalog['Failed to send mail. reason=[%s]'] \
                        = 'メールの送信に失敗しました。理由=[%s]'
-       @@catalog['%1$s mail%2$s sent.'] \
-                       = '%1$s 通のメールを送信しました。'
+       @@catalog['%1$s mail%2$s sent.(%3$s)'] \
+                       = '%1$s 通のメールを送信しました(%3$s)。'
+       @@catalog['no mails sent.(%3$s)'] \
+                       = '送るメールはありませんでした(%3$s)。'
 
        @@catalog['Mail Identification'] \
                        = 'メール情報'
@@ -144,11 +150,11 @@ class Intl
                        = 'フォルダの設定を編集します。'
        @@catalog['Failed to editing folder configs. reason=[%s]'] \
                        = 'フォルダの設定の編集に失敗しました。理由=[%s]'
-       @@catalog['Folder configs ware overwrited.'] \
+       @@catalog['Folder configs were overwrited.'] \
                        = '既存のフォルダの設定を上書きしました'
-       @@catalog['Folder configs ware discarded (edit collision was detected).'] \
+       @@catalog['Folder configs were discarded (edit collision was detected).'] \
                        = 'フォルダの設定を破棄しました(編集の衝突が検出されました)。'
-       @@catalog['Folder configs ware discarded.'] \
+       @@catalog['Folder configs were discarded.'] \
                        = '未編集のフォルダの設定を破棄しました。'
        @@catalog['The file was discarded (unexpected type).'] \
                        = 'ファイルを破棄しました(未知のファイル)。'
@@ -202,6 +208,17 @@ class Intl
        @@catalog['Shell command was executed. Result was dropped.'] \
                        = 'シェルコマンドを実行しました。結果は破棄しました。'
 
+       @@catalog['Target tag was not found.'] \
+                       = '目的のタグは見つかりません。'
+       @@catalog['Target file was not found.'] \
+                       = '目的のファイルは見つかりません。'
+       @@catalog['Target mail format was not correct.'] \
+                       = '目的のメールのフォーマットが正しくありません。'
+       @@catalog['Tag was not found.'] \
+                       = 'タグが見つかりませんでした。'
+       @@catalog['Tagstack was empty.'] \
+                       = 'タグスタックが空です。'
+
        @@catalog['Full-text search was executed. Result was stored in the [%s] folder.'] \
                        = '全文検索を実行しました。結果は [%s] フォルダに格納しました。'
        @@catalog['Full-text search was executed. Result was dropped.'] \
index 4b8e0e0..07c6b6a 100644 (file)
@@ -66,6 +66,8 @@ account[:POP_PORT]                    = 995
 account[:POP_ACCOUNT]          = 'taro-yamada'                                         #  受信アカウント
 account[:POP_PASSWORD]         = 'password'                                            #  受信パスワード
 account[:POP_OVER_SSL]         = true                                                          #  SSL を使う
+#account[:POP_SSL_VERIFY]      = OpenSSL::SSL::VERIFY_PEER                     #  証明書を検証する
+#account[:POP_SSL_CERTS]       = '/etc/pki/tls/certs/ca-bundle.crt'
 
 account[:SMTP_SERVER]          = 'smtp.gmail.com'                                      # メール送信(SMTP)サーバ
 account[:SMTP_PORT]                    = 587                                                           #  25? / 465? / 587?
@@ -73,6 +75,8 @@ account[:SMTP_ACCOUNT]                = account[:POP_ACCOUNT]
 account[:SMTP_PASSWORD]                = account[:POP_PASSWORD]
 account[:SMTP_AUTHTYPE]                = :plain
 account[:SMTP_OVER_TLS]                = true                                                          #  TLS を使う
+#account[:SMTP_TLS_VERIFY]     = OpenSSL::SSL::VERIFY_PEER                     #  証明書を検証する
+#account[:SMTP_TLS_CERTS]      = '/etc/pki/tls/certs/ca-bundle.crt'
 
 @configs[:ACCOUNTS] << account
 
@@ -132,11 +136,13 @@ account[:INBOX_FOLDER]            = 'Manual'
 #
 #      その他の設定
 #
-@configs[:ROOT_DIRECTORY]              = "#{ENV['HOME']}/mave.mails"
+(it = ENV['HOME']) and home_directory = it
+ENV['SCRIPT_NAME'] =~ %r|~([^/]+)| and home_directory = '/home/%s' % $1
+@configs[:ROOT_DIRECTORY]              = "#{home_directory}/mave.mails"
 #@configs[:ROOT_DIRECTORY]             = 'c:/Documents and Settings/username/My Documents/mails'
 @configs[:POP_DIRECTORY]               = @configs[:ROOT_DIRECTORY] + '/_pop'
 
-revision                                               = '$Revision: 3.97 $' =~ /:\s+(\d+)(\.\d+)/
+revision                                               = '$Revision: 3.98 $' =~ /:\s+(\d+)(\.\d+)/
 version                                                        = ($1.to_i - 1).to_s + $2
 sys_sig                                                        = (it = RUBY_PLATFORM) =~ /i.86-mswin32/ ? it : `uname -n -r -o`.chomp
 @configs[:MAILER]                              = "Mave version #{version} (#{$?.to_i == 0 ? sys_sig : 'unknown'})"
@@ -199,8 +205,8 @@ class Time
                @@mystrftime_len || @@mystrftime_len = self.now.mystrftime.size
        end
 
-       def mystrftime
-               case(Time.now.yday - yday)
+       def mystrftime(rel = true)
+               case(rel ? Time.now.yday - yday : -1)
                when(0);        '      Today %2d:%02d' % [hour, min]
                when(1);        '  Yesterday %2d:%02d' % [hour, min]
                else
@@ -211,8 +217,8 @@ class Time
                end
        end
 
-#      def mystrftime
-#              case(Time.now.yday - yday)
+#      def mystrftime(rel = true)
+#              case(rel ? Time.now.yday - yday : -1)
 #              when(0);        '       今日 %2d:%02d' % [hour, min]
 #              when(1);        '       昨日 %2d:%02d' % [hour, min]
 #              else
@@ -221,6 +227,10 @@ class Time
 #                      ]
 #              end
 #      end
+
+       def myexectime
+               '%02d:%02d:%02d' % [hour, min, sec]
+       end
 end
 
 __END__
index 2ca80a9..22d10fe 100644 (file)
@@ -87,38 +87,50 @@ end
 #
 #      全文検索設定
 #
-def fulltext_search(query)
+def fulltext_search(params)
+
+       query = params[:QUERY] || ''
+       skip = (params[:SKIP] || '0').to_i
+       max  = (params[:MAX] || '10').to_i
 
        #-----------------------------------------------------------
        #
        #       Hyper Estraier 設定例
        #
        #               定期的なインデックス更新のための crontab の設定例
-       #               15 * * * * cd ~/mave.mails/Inbox; find . -type f -name "*eml" | /usr/local/bin/estcmd gather -cl -fm -cm casket -
+       #               15 * * * * cd ~/mave.mails/Inbox; find . -type f -name "*eml" | /usr/bin/estcmd gather -cl -fm -cm casket -
        #
        `which estcmd >/dev/null 2>&1`
        if($?.exitstatus == 0 and File.directory?(index_path = '%s/casket' % path))
-               IO.popen("estcmd search -vh -ord '@mdate NUMD' -max 10 %s '%s' 2>&1" % [index_path, query]) {|stdout|
-                       class <<stdout
-                               def insert_header(query)
-                                       @buf = [
-                                               "X-Mave-Store-Folder: H-Est_Results\n",
-                                               "Subject: Search Result: '%s'\n" % query,
-                                               "\n", ]
+               results = {}; results[:ITEMS] = []; item = nil
+               IO.popen("estcmd search -vh -ord '@mdate NUMD' -max %d -sk %d %s '%s' 2>&1" % [max, skip, index_path, query]) {|stdout|
+                       n = 0; stdout.each {|line|
+                               if(line =~ /^-{8}\[.+\]-{8}/)                                   # Hyper Estraier の検索結果を解析
+                                       n > 1 and results[:ITEMS] << item
+                                       item = {} and item[:SNIPPET] = '' and n += 1 and next
                                end
-                               def each
-                                       while(it = @buf.shift)
-                                               yield(it)
+                               if(n < 2)
+                                       line =~ /^(.+)\t(.*)/ and results[('_' + $1).upcase.to_sym] = $2
+                               else
+                                       line =~ /^$/ and next
+                                       item[:N] = skip + n - 1
+                                       if(line =~ %r|file://(/\S+)|)
+                                               mailfile = File.new($1) rescue raise('Target file was not found.')
+                                               message_id = MaveMail.new({:FILE => mailfile}).message_id rescue raise('Target mail format was not correct.')
+                                               item[:SQ] = get_sq_by_message_id(message_id)
                                        end
-                                       super {|line|
-                                               yield(line)
-                                       }
+                                       line =~ /^(URI|Title):\s+(.+)/ and item[$1.upcase.to_sym] = $2 and next
+                                       item[:SNIPPET] << line.chomp
                                end
-                       end
-                       stdout.insert_header(query)
-                       yield(stdout)
+                       }
                }
-               return(true)
+               results[:QUERY] = query
+               results[:HIT] = results[:_HIT].to_i
+               results[:TARGET_FOLDER] = self.name
+               results[:STORE_FOLDER] = 'H-Est_Results'
+               results[:MESSAGE_ID] = '<%017.6f.%s@mave.%s>' % [Time.now.to_f, 'hest.results', @configs[:HOSTNAME]]
+               results[:NEXT_SKIP] = skip + max
+               return(results)
        end
 
        #-----------------------------------------------------------
@@ -130,28 +142,32 @@ def fulltext_search(query)
        #
        `which namazu >/dev/null 2>&1`
        if($?.exitstatus == 0 and File.directory?(index_path = '%s/nmzidx' % path))
-               IO.popen("LANG=ja_JP.EUC-JP namazu --max 10 --late '%s' %s 2>&1" % [query.kconv(Kconv::EUC, Kconv::UTF8), index_path]) {|stdout|
-                       class <<stdout
-                               def insert_header(query)
-                                       @buf = [
-                                               "X-Mave-Store-Folder: Namazu_Results\n",
-                                               "Subject: Search Result: '%s'\n" % query,
-                                               "\n", ]
+               results = {}; results[:ITEMS] = []; item = nil; buffer = []
+               IO.popen("unset QUERY_STRING; LANG=ja_JP.EUC-JP namazu --max %d --whence %d --late '%s' %s 2>&1" % [max, skip, query.kconv(Kconv::EUC, Kconv::UTF8), index_path]) {|stdout|
+                       n = 0; stdout.each {|line0|
+                               line0 =~ /^\s*$/ and item = {} and buffer.clear
+                               line = line0.chomp.kconv(Kconv::UTF8, Kconv::EUC)       # Namazu の検索結果を解析
+                               n == 0 and line =~ /マッチする\s*(\d+)\s*個の文書/ and results[:_HIT] = $1.to_i
+                               buffer << line
+                               if(line =~ %r|(^/\S+)\s+.+\d+ bytes\)$|)
+                                       item[:N] = skip + (n += 1)
+                                       mailfile = File.new($1) rescue raise('Target file was not found.')
+                                       message_id = MaveMail.new({:FILE => mailfile}).message_id rescue raise('Target mail format was not correct.')
+                                       item[:SQ] = get_sq_by_message_id(message_id)
+                                       item[:TITLE] = buffer[-5].gsub(/^\d+\.\s+/, '')
+                                       item[:SNIPPET] = buffer[-2]
+                                       item[:URI] = 'file://' + buffer[-1]
+                                       results[:ITEMS] << item
                                end
-                               def each
-                                       while(it = @buf.shift)
-                                               yield(it)
-                                       end
-                                       super {|line|
-                                               line.gsub!(%r|^/.+\.eml.+bytes\)$|) { "file://" + $& }
-                                               yield(line.kconv(Kconv::UTF8, Kconv::EUC))
-                                       }
-                               end
-                       end
-                       stdout.insert_header(query)
-                       yield(stdout)
+                       }
                }
-               return(true)
+               results[:QUERY] = query
+               results[:HIT] = results[:_HIT].to_i
+               results[:TARGET_FOLDER] = self.name
+               results[:STORE_FOLDER] = 'Namazu_Results'
+               results[:MESSAGE_ID] = '<%017.6f.%s@mave.%s>' % [Time.now.to_f, 'namazu.results', @configs[:HOSTNAME]]
+               results[:NEXT_SKIP] = skip + max
+               return(results)
        end
 
        # 全文検索エンジン見つからず
@@ -186,5 +202,18 @@ end
 def postsend(mail)
 end
 
+#---------------------------------------------------------------
+#
+#      文字列の読み(ローマ字)表記への変換関数
+#
+def phoneticize(string)
+       begin
+               require 'kakasi'                                                                                # http://www.notwork.org/~gotoken/ruby/p/kakasi/
+               Kakasi.kakasi('-Ha -Ka -Ja -Ea -ka -ieuc', string.kconv(Kconv::EUC, Kconv::UTF8)).downcase.tr('^', '-')
+       rescue StandardError, ScriptError
+               false
+       end
+end
+
 __END__
 
index 9441cad..33a2377 100644 (file)
@@ -78,6 +78,7 @@ keymap[                                                                       key['q']                ] = :mk_global_kill_mave
 keymap[                        (key['C-x'] <<  8) +    key['C-c']              ] = :mk_global_kill_mave
 
 keymap[                        (key['ESC'] <<  8) +    key['K']                ] = :mk_global_toggle_what_key
+keymap[                        (key['ESC'] <<  8) +    key['Q']                ] = :mk_global_toggle_what_scache
 keymap[                        (key['ESC'] <<  8) +    key['C']                ] = :mk_global_toggle_what_charset
 
 keymap[                        (key['ESC']     << 16) +
@@ -99,7 +100,7 @@ keymap[                      (key['ESC']     << 16) +
 keymap[                                                                        key['~']                ] = :mk_global_dummy
 
 keymap[                        (key['ESC'] <<  8) +    key['P']                ] = :mi_pickup_file                                     # 内部通信用
-keymap[                        (key['ESC'] <<  8) +    key['C-p']              ] = :mk_pickup_file_force
+keymap[                        (key['ESC'] <<  8) +    key['C-f']              ] = :mk_pickup_file_force
 
 prefix_keymap[                                                 key['C-x']              ] = :mk_global_Control_X_prefix
 prefix_keymap[                                                 key['ESC']              ] = :mk_global_ESC_prefix
@@ -155,6 +156,7 @@ keymap[                     (key['ESC'] <<  8) +    key['j']                ] = :mk_rejoin
 keymap[                        (key['C-x'] <<  8) +    key['x']                ] = :mk_extract_attachments
 keymap[                        (key['C-x'] <<  8) +    key['a']                ] = :mi_enclose_attachments                     # 内部通信用
 
+keymap[                                                                        key['C-t']              ] = :mk_pop_tag_mark
 keymap[                        (key['ESC'] <<  8) +    key['s']                ] = :mk_fulltext_search
 keymap[                        (key['ESC'] <<  8) +    key['S']                ] = :mk_fulltext_search_all
 
diff --git a/mave.xcf b/mave.xcf
new file mode 100644 (file)
index 0000000..f9c9b98
Binary files /dev/null and b/mave.xcf differ
index 2c420c8..cce79f9 100755 (executable)
@@ -47,8 +47,33 @@ entries << { :MAIL => 'z-suzuki@abc.co.jp',                                          :ID => '鈴木@ABC',            :SEND =>
 entries << { :MAIL => 'furutanian@gmail.com',                                  :ID => '開発者',                                                             }
 entries << { :MAIL => 'mave_user@example.com',                                 :ID => 'メイヴユーザ',                                                    }
 
+# ldap サーバからエントリをインポートする
+if(false)
+       require 'ldap'
+       ldap = LDAP::Conn.new('ldap.example.com')                                       # server
+       ldap.set_option(LDAP::LDAP_OPT_PROTOCOL_VERSION, 3)
+       results = ldap.search2(
+               'ou=People,dc=example,dc=com',                                                  # base
+               LDAP::LDAP_SCOPE_ONELEVEL,                                                              # scope
+               '(objectclass=*)'                                                                               # filter
+       )
+       mails = {}; ids = {}                                                                            # 無指定/重複チェック用
+       entries.each {|e|
+               mails[e[:MAIL]] = true; ids[e[:ID]] = true;
+       }
+       results.each {|result|
+               print "dn: %s\n" % result['dn']
+               entry = {}
+               mails[entry[:MAIL] = result['mail'][0]] and next
+               ids[entry[:ID] = (result['maveid'] || result['displayName'])[0]] and next
+               print "\t%s / %s\n" % [entry[:ID], entry[:MAIL]]
+               entries << entry
+       }
+       abort                                                                                                           # 確認用
+end
+
 # DB への登録
-address_db = GDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address', 0600)
+address_db = XDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address', 0600)
 
 mails = {}; ids = {}                                                                                   # 無指定/重複チェック用
 entries.each {|e|
@@ -75,5 +100,7 @@ print address_db['DISP:' + mail], $/
 print address_db['SEND:' + mail], $/
 print address_db['ETC:' + mail].gsub(/\t/, "\n"), $/
 
+address_db.close
+
 __END__
 
index 728167f..b19108d 100644 (file)
@@ -97,8 +97,14 @@ class String
        def self.set_encode_charset(charset)
                @@current_encode_charset = charset
        end
-
-       def encode_mh                                                                                           # encode message header #### 暫定
+       def encode_mh_multi(field_name)                                                         # encode message header multi line
+               begin           
+                       (it = @@encoders[('<%s><%s><%s>' % ['MULTI', @@current_encode_charset, @@current_encode_encoding]).upcase]) ? it.call(self, field_name, Proc.new) : raise
+               rescue
+                       field_name + ': ' + self.encode_mh
+               end
+       end
+       def encode_mh                                                                                           # encode message header
                "=?%s?%s?%s?=" % [@@current_encode_charset, @@current_encode_encoding,
                        self.encode_cs(@@current_encode_charset, 'UTF-8').encode_ec(@@current_encode_encoding).chomp]
        end
@@ -122,7 +128,8 @@ class String
        #               http://tools.ietf.org/html/rfc2231
        #
        @@rfc2231_encoders = {}
-       @@current_rfc2231_encode_charset = 'UTF-8'
+#      @@current_rfc2231_encode_charset = 'UTF-8'
+       @@current_rfc2231_encode_charset = '<LEGACY><ISO-2022-JP><B>'
 
        def self.bind_rfc2231_encoder(code)
                @@rfc2231_encoders[code.upcase] = Proc.new
@@ -195,8 +202,8 @@ class String
                @@centerer[@@current_snip_charset].call(self, n, padding)
        end
 
-       def snip(n)
-               @@snippers[@@current_snip_charset].call(self, n)
+       def snip(n, charset = @@current_snip_charset)
+               @@snippers[charset].call(self, n)
        end
 
        def each_snip(n, max = 9999)
@@ -320,6 +327,40 @@ String.bind_decoder('Q') {|str|                                                                    # Quoted Printable decoder
 String.bind_encoder('Q') {|str|                                                                        # Quoted Printable encoder
        [str].pack('M999')
 }
+String.bind_encoder('<MULTI><ISO-2022-JP><B>') {|str, field_name, proc|        # encode message header multi line
+       src = str + ' '; single_max = (max_length = 76) - (line = field_name + ': ').length
+       while(src.length > 1)
+               multi_max = ((single_max - 18) / 4 * 3 - 6) / 2
+               if(single_max > 0 and src =~ /^([\x20-\x7E]{1,#{single_max}})[\x20\xC0-\xFD]/)
+                       line += src.slice!(0, $1.length)
+                       single_max -= $1.length
+               elsif(multi_max > 0 and src =~ /^(([\xC0-\xFD][\x80-\xBF]+){1,#{multi_max}})/)
+                       line += (line0 = src.slice!(0, $1.length).encode_mh)
+                       single_max -= line0.length
+               else
+                       line == '' and raise
+                       proc.call(line.gsub(/^\t\s/, "\s")); line = "\t"; single_max = max_length
+               end
+       end
+       proc.call(line.gsub(/^\t\s/, "\s"))
+}
+String.bind_encoder('<MULTI><UTF-8><B>') {|str, field_name, proc|      # encode message header multi line
+       src = str + ' '; single_max = (max_length = 76) - (line = field_name + ': ').length
+       while(src.length > 1)
+               multi_max = (single_max - 12) / 4 * 3
+               if(single_max > 0 and src =~ /^([\x20-\x7E]{1,#{single_max}})[\x20\xC0-\xFD]/)
+                       line += src.slice!(0, $1.length)
+                       single_max -= $1.length
+               elsif(multi_max > 0 and src =~ /^([\x80-\xFD]{1,#{multi_max}})[\x20-\x7E\xC0-\xFD]/)
+                       line += (line0 = src.slice!(0, $1.length).encode_mh)
+                       single_max -= line0.length
+               else
+                       line == '' and raise
+                       proc.call(line.gsub(/^\t\s/, "\s")); line = "\t"; single_max = max_length
+               end
+       end
+       proc.call(line.gsub(/^\t\s/, "\s"))
+}
 String.bind_decoder('US-ASCII') {|str, out_code|                               # us-ascii decoder
        str
 }
@@ -395,10 +436,24 @@ String.bind_rfc2231_encoder('UTF-8') {|str, attr, n, proc|                # RFC 2231 拡張表
        proc.call("\t%s%s%s=%s%s" % [attr, nth == -1 ? '' : "*#{(nth += 1).to_s}", multi ? '*': '', head, multi ? el : nl.value_encode])
 }
 
+String.bind_rfc2231_encoder('<LEGACY><ISO-2022-JP><B>') {|str, attr, n, proc|  # RFC 違反だが B encoding でエンコードして返す(添付ファイル名指定用)
+       proc.call("\t%s=\"=?%s?%s?%s?=\"" % [attr, 'ISO-2022-JP', 'B', str.encode_cs('ISO-2022-JP', 'UTF-8').encode_ec('B').chomp])
+}
+
 #     漢字: 0xA1-0xFE 0xA1-0xFE
 # 半角カナ: 0x8E 0xA1-0xDF 
 # 補助漢字: 0x8F 0xA1-0xFE 0xA1-0xFE
 
+String.bind_wsizer('EUC-JP') {|str|                                                            # 表示幅を得る
+       str.gsub(/[\xA1-\xFE][\xA1-\xFE]/, "\xFF\xFF").length
+}
+
+String.bind_centerer('EUC-JP') {|str, n, padding|                              # センタリングする
+       w = n - str.wsize
+       w = 0 if(w < 0)
+       (padding * (w >> 1) + str + padding * w).snip(n)
+}
+
 String.bind_snipper('EUC-JP') {|str, n|                                                        #### 指定の長さに切り詰める
        ws = str[0, n * 2].gsub(/[\xA1-\xFE][\xA1-\xFE]/, "\xFF\xFF")[0, n]
        wc = ws.count("\xFF")
index 22480ea..d60cecd 100755 (executable)
@@ -12,8 +12,9 @@ Example: $ ./mave_catmail \\<1234567.89ab@example.com\\>
 USAGE
        exit
 end
+message_id = '<%s>' % message_id unless(message_id =~ /^</)
 
-@configs[:GDBM_FLAGS] = GDBM::NOLOCK | GDBM::READER
+@configs[:XDBM_FLAGS] = XDBM::NOLOCK | XDBM::READER
 folders = MaveFolders.new({:CONFIGS => @configs})
 
 mail = nil
index 991e819..095124d 100644 (file)
@@ -61,6 +61,7 @@ class MaveController
                        :mk_global_import_mail                  => method(:import_mail),
                        :mk_global_fetch_mail_pop               => method(:fetch_mail_pop),
                        :mk_global_send_mail_smtp               => method(:send_mail_smtp),
+                       :mk_global_toggle_what_scache   => method(:toggle_what_scache),
                        :mk_global_toggle_what_charset  => method(:toggle_what_charset),
                        :mk_global_kill_mave                    => method(:kill_mave),
 
@@ -138,7 +139,9 @@ class MaveController
 
                                                @models[:FOLDERS].each(:BIND_PRIORITY) {|folder|
                                                        if(folder.bind?(mail, account))
-                                                               folder.add_mail(mail)
+                                                               sq = folder.add_mail(mail)
+                                                               (it = mail.cc) and it.index(account.mail_from) and folder.ccyou(sq)
+                                                               (it = mail.to) and it.index(account.mail_from) and folder.toyou(sq)
                                                                @models[:FOLDERS].unred(folder)
                                                                break
                                                        end
@@ -153,7 +156,8 @@ class MaveController
                                @models[:STATUS].log([_('Failed to imported mail. file=[%s] reason=[%s]'), target, $!.message.split(/\r?\n/)[0]])
                        end
                }
-               @models[:STATUS].log([_('%1$s mail%2$s imported.'), (it = m_mail) == 0 ? 'no' : it.to_s, it == 1 ? '' : 's'])
+               result_message = (it = m_mail) != 0 ? '%1$s mail%2$s imported.' : 'no mails imported.'
+               @models[:STATUS].log([_(result_message), it.to_s, it == 1 ? '' : 's'])
                @models[:FOLDERS].dirty                                                                 # メール数の再表示
        end
 
@@ -182,9 +186,11 @@ class MaveController
 
                                        debug('Subject: %s' % mail.subject.decode_mh) if(debug = false) # 振り分けのデバッグ
                                        @models[:FOLDERS].each(:BIND_PRIORITY) {|folder|
-                                               debug('  %5s %3d: %s' % [folder.bind?(mail, account), folder.configs[:BIND_PRIORITY], folder.name]) if(debug)
+                                               debug('  %5s %3d: [%s] %s [%s]' % [folder.bind?(mail, account), folder.configs[:BIND_PRIORITY], mail.binding, folder.name, account[:TRASH_FOLDER]]) if(debug)
                                                if(folder.bind?(mail, account))
-                                                       folder.add_mail(mail)
+                                                       sq = folder.add_mail(mail)
+                                                       (it = mail.cc) and it.index(account.mail_from) and folder.ccyou(sq)
+                                                       (it = mail.to) and it.index(account.mail_from) and folder.toyou(sq)
                                                        @models[:FOLDERS].unred(folder)
                                                        @pop_directory.delete(halfname) unless(RUBY_PLATFORM =~ /i.86-mswin32/) ####
                                                        break
@@ -198,7 +204,8 @@ class MaveController
                                @models[:STATUS].log([_('Failed to pop mail. reason=[%s]'), $!.message.split(/\r?\n/)[0]])
                        end
                }
-               @models[:STATUS].log([_('%1$s mail%2$s popped.'), (it = m_mail) == 0 ? 'no' : it.to_s, it == 1 ? '' : 's'])
+               result_message = (it = m_mail) != 0 ? '%1$s mail%2$s popped.(%3$s)' : 'no mails popped.(%3$s)'
+               @models[:STATUS].log([_(result_message), it.to_s, it == 1 ? '' : 's', Time.now.myexectime])
                @models[:FOLDERS].dirty                                                                 # メール数の再表示
        end
 
@@ -208,8 +215,8 @@ class MaveController
        #
        def send_mail_smtp
                m_mail = 0
-               @models[:ACCOUNTS].each {|account|
-                       next unless(account.smtp_server)
+               account = @models[:ACCOUNTS].regular
+               if(account.smtp_server)
                        begin
                                n_mail = 0; max_n_mail = 9999
                                outbox_folder = @models[:FOLDERS].open_folder(account[:OUTBOX_FOLDER])
@@ -263,8 +270,9 @@ class MaveController
                        rescue
                                @models[:STATUS].log([_('Failed to send mail. reason=[%s]'), $!.message.split(/\r?\n/)[0]])
                        end
-               }
-               @models[:STATUS].log([_('%1$s mail%2$s sent.'), (it = m_mail) == 0 ? 'no' : it.to_s, it == 1 ? '' : 's'])
+               end
+               result_message = (it = m_mail) != 0 ? '%1$s mail%2$s sent.(%3$s)' : 'no mails sent.(%3$s)'
+               @models[:STATUS].log([_(result_message), it.to_s, it == 1 ? '' : 's', Time.now.myexectime])
                @models[:FOLDERS].dirty                                                                 # メール数の再表示
        end
 
@@ -403,6 +411,7 @@ class MaveController
                        unless(@configs[:VIEWER_TYPE] == 'forkexec')            # 一旦 Curse を閉じて、ビューアアプリを起動する場合
                                @views.close
                                system(@configs[:VIEWER] % (@pop_directory.path + '/' + params[:HALFNAME]))
+#                              pickup_file_force
                                @pop_directory.delete(params[:HALFNAME]) unless(RUBY_PLATFORM =~ /i.86-mswin32/)        ####
                                @views.reopen
                        else                                                                                            # 別途ウィンドウで、ビューアアプリを起動する場合
@@ -488,6 +497,7 @@ class MaveController
                                                create_new_relations(mail, editfile[:MAIL].folder)              # 新規関連ファイル作成処理
                                                extract_attachments(mail, editfile[:MAIL].folder)               # 添付ファイル展開処理
                                                editfile[:MAIL].folder.overwrite_mail(mail, editfile[:MAIL])
+                                               editfile[:MAIL].folder.delete_abstract(editfile[:MAIL].sq)
                                                @models[:STATUS].log([_('The message was overwrited.')])
                                        else
                                                create_new_relations(mail, editfile[:MAIL].folder)              # 新規関連ファイル作成処理
@@ -499,21 +509,24 @@ class MaveController
                                end
                        elsif(editfile[:FOLDER])
                                if(editfile[:SOURCEHASH] == editfile[:FOLDER].md5)                              # (編集前 == 現在)?
-                                       @models[:FOLDERS].overwrite_folder_configs(editfile[:FOLDER], File.new(@pop_directory.path + '/' + editfile[:HALFNAME]))
-                                       @models[:STATUS].log([_('Folder configs ware overwrited.')])
+                                       folder = @models[:FOLDERS].overwrite_folder_configs(editfile[:FOLDER], File.new(@pop_directory.path + '/' + editfile[:HALFNAME]))
+                                       @views[:SUMMARY].tie(folder)
+                                       @views[:FOLDERLIST].list_items; @views[:FOLDERLIST].target_cursor(folder)
+                                       @models[:STATUS].log([_('Folder configs were overwrited.')])
                                else
 #                                      editfile[:FOLDER].folder.add_mail(mail)                                         #### 別名で保存しておく
-                                       @models[:STATUS].log([_('Folder configs ware discarded (edit collision was detected).')])
+                                       @models[:STATUS].log([_('Folder configs were discarded (edit collision was detected).')])
                                end
                        else
                                @models[:STATUS].log([_('The file was discarded (unexpected type).')])
                        end
                else
                        @models[:STATUS].log([_('The message was discarded.')])         if(editfile[:MAIL])
-                       @models[:STATUS].log([_('Folder configs ware discarded.')])     if(editfile[:FOLDER])
+                       @models[:STATUS].log([_('Folder configs were discarded.')])     if(editfile[:FOLDER])
                end
                @pop_directory.delete(editfile[:HALFNAME]) unless(RUBY_PLATFORM =~ /i.86-mswin32/)      ####
                @models[:FOLDERS].dirty                                                                 # メール数の再表示
+               @views[:PREVIEW].untie
        end
 
        #-----------------------------------------------------------
@@ -581,6 +594,7 @@ class MaveController
                                unless(@configs[:FILE_MANAGER_TYPE] == 'forkexec')
                                        @views.close
                                        system(@configs[:FILE_MANAGER] % target_dir)
+#                                      pickup_file_force
                                        @views.reopen
                                else
                                        pid = fork {
@@ -595,6 +609,16 @@ class MaveController
 
        #-----------------------------------------------------------
        #
+       #       メールの概要キャッシュ(インクリメンタルサーチ用)表示、切り替え
+       #
+       def toggle_what_scache
+               state = MaveFolder.toggle_what_scache
+               @models[:STATUS].log(['what search cache: %s', state.to_s])
+               @views[:SUMMARY].list_items
+       end
+
+       #-----------------------------------------------------------
+       #
        #       キャラクタセット情報の表示、切り替え(デバッグ用)
        #
        def toggle_what_charset
@@ -611,7 +635,10 @@ class MaveController
                        @models[:STATUS].log([_('%1$d editor%2$s alive.'), it, it == 1 ? ' is' : 's are'])
                        @force_kill = true
                else
+                       @models[:FOLDERS].close
                        @models[:ACCOUNTS].close
+                       @models[:ADDRESS_BOOK].close
+                       @pop_directory.close if(@pop_directory)
                        raise 'Full stop.'
                end
        end
index 96cfa59..06e17c9 100644 (file)
@@ -13,6 +13,7 @@ class MaveViews < Hash
                @controller     = params[:CONTROLLER]
                @models         = params[:MODELS]
                @charset        = params[:CHARSET]
+               String.set_snip_charset(@charset)
 
                open
 
@@ -376,6 +377,7 @@ end
 #
 class MaveSelectView < MaveBaseView
 
+       attr_reader :items
        attr_reader :current
 
        def initialize(params)
@@ -451,7 +453,7 @@ class MaveSelectView < MaveBaseView
                @items.each {|item|
                        break if(y == @window_y_size)
                        standout if(y == @nth)
-                       setpos(0, y); addstr(item[:LABEL].snip(@window_x_size).decode_cs(@views.charset, 'UTF-8').enspc)
+                       setpos(0, y); addstr(item[:LABEL].decode_cs(@views.charset, 'UTF-8').snip(@window_x_size).enspc)
                        standend
                        y += 1
                }
@@ -533,12 +535,11 @@ class MaveFolderListView < MaveSelectView
        end
 
        def steal_key(code)
-               (it = @folders.shortcuts[code]) and @current = it and execute
+               (it = @folders.shortcuts[code]) ? (@current = it and execute) : nil
        end
 
        def action(command)
-               (it = @actions[command]) ? it.call : steal_key(@views.key)
-               nil                                                                                                             # コマンド/キーを受け取っていないふり
+               (it = @actions[command]) ? it.call : (command ? nil : steal_key(@views.key))
        end
 end
 
@@ -596,6 +597,7 @@ class MaveSummaryView < MaveSelectView
                        :mk_extract_attachments                 => method(:extract_attachments),
                        :mi_enclose_attachments                 => method(:enclose_attachments),
 
+                       :mk_pop_tag_mark                                => method(:pop_tag_mark),
                        :mk_fulltext_search                             => method(:fulltext_search),
                        :mk_fulltext_search_all                 => method(:fulltext_search_all),
 
@@ -607,7 +609,7 @@ class MaveSummaryView < MaveSelectView
                @topsq = nil
                @folder = folder_model                                                                  # ビューにモデルを関連づける
                @folder.tie(self, :SUMMARY) if(@folder)                                 # 表示担当モデルに自分を通知する
-               set_title((_(@name.to_s.downcase) + ': ' + folder_model.configs[:LIST_NAME]).decode_cs(@views.charset, 'UTF-8').enspc)
+               set_title((_(@name.to_s.downcase) + ': ' + folder_model.configs[:LIST_NAME]).enspc)
                list_items
        end
 
@@ -626,8 +628,9 @@ class MaveSummaryView < MaveSelectView
        end
 
        def target_cursor(value = @current, key = :INSTANCE, missing = 0)       # カーソル位置を指定のアイテムに移動
-               super
+               instance = super
                @views[:PREVIEW].tie(@current)
+               instance
        end
 
        def previous                                                                                            # 上方に移動
@@ -813,15 +816,14 @@ class MaveSummaryView < MaveSelectView
 
        #-------------------------------------- MaveSummaryView ----
        #
-       #       メール一覧に対する、実際の前方/後方検索処理                                #### とりあえず冗長に書いておく
+       #       メール一覧に対する、実際の前方/後方検索処理
        #
        def search_forward(str, skip = 0)
                found_sq = nil; progress = 0
                @folder.each_sq(@items[@nth][:SQ]) {|sq, level|                 # 検索
                        next if((skip -= 1) > -1)
                        yield(progress.to_s) if((progress += 1) % 10 == 0)
-                       mail = @folder.get_mail(sq)
-                       found_sq = sq and break if(@folder.abstract_of_mail(sq, mail).downcase.index(str.downcase))     # mail) =~ /#{str}/i)
+                       found_sq = sq and break if(@folder.abstract_of_mail_for_search(sq).downcase.index(str.downcase))
                }
                if(found_sq and !target_cursor(found_sq, :SQ, nil))             # (カーソル/画面)移動
                        @topsq = found_sq
@@ -836,8 +838,7 @@ class MaveSummaryView < MaveSelectView
                @folder.reverse_each_sq(@items[@nth][:SQ]) {|sq, level| # 検索
                        next if((skip -= 1) > -1)
                        yield(progress.to_s) if((progress += 1) % 10 == 0)
-                       mail = @folder.get_mail(sq)
-                       found_sq = sq and break if(@folder.abstract_of_mail(sq, mail).downcase.index(str.downcase))     # mail) =~ /#{str}/i)
+                       found_sq = sq and break if(@folder.abstract_of_mail_for_search(sq).downcase.index(str.downcase))
                }
                if(found_sq and !target_cursor(found_sq, :SQ, nil))             # (カーソル/画面)移動
                        @topsq = found_sq
@@ -994,13 +995,22 @@ class MaveSummaryView < MaveSelectView
 
        #-------------------------------------- MaveSummaryView ----
        #
+       #       タグジャンプから戻る
+       #
+       def pop_tag_mark
+               @views[:PREVIEW].pop_tag_mark
+       end
+
+       #-------------------------------------- MaveSummaryView ----
+       #
        #       全文検索ビュー、起動処理
        #
        def fulltext_search(all = false)
                callback = Proc.new {|mail|
                        mail.folder.red(mail.sq)
                        @views.activate(:PREVIEW)
-                       @views[:PREVIEW].tagjump({:MESSAGE_ID => mail.message_id, :LINE => nil})        #### summary に戻りたい
+                       @views[:PREVIEW].tagjump({:VIEW => :PREVIEW, :MESSAGE_ID => mail.message_id, :LINE => nil},
+                               {:VIEW => :SUMMARY, :SUMMARY_TOP => @items[0][:INSTANCE].message_id, :MESSAGE_ID => @current.message_id, :LINE => @views[:PREVIEW].current_line + 1})
                }
                (it = @views[:FTEXT_SEARCH]).set_title(it.name.to_s.downcase + (all ? ' all' : ''))
                it.set_callback(callback)
@@ -1116,10 +1126,18 @@ class MavePreviewView < MaveBaseView
                end
        end
 
+       def untie
+               @mail = nil
+       end
+
        def current
                @mail
        end
 
+       def current_line
+               @topline + @cur_pos
+       end
+
        def previous                                                                                            # 上方に移動
                @topline -= 1 if(@mail and @topline > -@cur_pos)
        end
@@ -1284,19 +1302,21 @@ class MavePreviewView < MaveBaseView
        #
        def tagjump(to, from = nil)
                if(mail = @views.get_mail_by_message_id(to[:MESSAGE_ID]))
-                       @tagstack << from if(from)                                                              # 現地点をタグスタックに積む
+                       top_mail = @views.get_mail_by_message_id(to[:SUMMARY_TOP]) || mail
+                       @tagstack << from if(from)                                                      # 現地点をタグスタックに積む
                        @views[:SUMMARY].unmark_all
                        @views[:SUMMARY].tie(mail.folder)
-                       mail.folder.unfold_parents(mail.sq)                                             # 対象メールの折りたたみ状態を解除
-                       @views[:SUMMARY].jump(mail.sq)                                                  # タグジャンプ
+                       mail.folder.unfold_parents(mail.sq)                                     # 対象メールの折りたたみ状態を解除
+                       @views[:SUMMARY].jump(top_mail.sq)                                      # タグジャンプ
                        @views[:SUMMARY].list_items
-                       @views[:SUMMARY].target_cursor(nil)
+                       @views[:SUMMARY].target_cursor(mail.sq, :SQ)
                        if(it = to[:LINE])
                                @topline = it.to_i - @cur_pos - 1
-                               (0..@topline).each {|n| @mail[n] }                                      #### なぜか、事前になめる必要あり
+                               (0..@topline).each {|n| @mail[n] }                              #### なぜか、事前になめる必要あり
                        end
+                       @views.activate(to[:VIEW])
                else
-                       @status.log([_('Tag not found.')])
+                       @status.log([_('Target tag was not found.')])
                end
        end
 
@@ -1315,7 +1335,8 @@ class MavePreviewView < MaveBaseView
                        @status.log([_($!.message)]); return
                end
                if(message_id)
-                       tagjump({:MESSAGE_ID => message_id, :LINE => (sup =~ /line:(\d+)/) ? $1.to_i : nil}, {:MESSAGE_ID => @mail.message_id, :LINE => @topline + @cur_pos + 1})
+                       tagjump({:VIEW => :PREVIEW, :MESSAGE_ID => message_id, :LINE => (sup =~ /line:(\d+)/) ? $1.to_i : nil}, # current_line
+                               {:VIEW => :PREVIEW, :SUMMARY_TOP => @views[:SUMMARY].items[0][:INSTANCE].message_id, :MESSAGE_ID => @mail.message_id, :LINE => @topline + @cur_pos + 1})
                else
                        @status.log([_('Tag was not found.')])
                end
@@ -1334,14 +1355,28 @@ class MavePreviewView < MaveBaseView
        #       全文検索ビュー、起動処理
        #
        def fulltext_search(all = false)
-               callback = Proc.new {|mail|
-                       mail.folder.red(mail.sq)
-                       @views[:PREVIEW].tagjump({:MESSAGE_ID => mail.message_id, :LINE => nil}, {:MESSAGE_ID => @mail.message_id, :LINE => @topline + @cur_pos + 1})
-               }
-               (it = @views[:FTEXT_SEARCH]).set_title(it.name.to_s.downcase + (all ? ' all' : ''))
-               it.set_callback(callback)
-               it.set_target_folder(all ? :ALL : @mail.folder)
-               @views.activate(:FTEXT_SEARCH)
+               tag = @mail[@topline + @cur_pos]
+               unless(tag =~ /^fulltext_search\s+/)                                    # 初回検索
+                       callback = Proc.new {|mail|
+                               mail.folder.red(mail.sq)
+                               @views[:PREVIEW].tagjump({:VIEW => :PREVIEW, :MESSAGE_ID => mail.message_id, :LINE => nil},     #### summary に戻ってしまう
+                                       {:VIEW => :PREVIEW, :SUMMARY_TOP => @views[:SUMMARY].items[0][:INSTANCE].message_id, :MESSAGE_ID => @mail.message_id, :LINE => @topline + @cur_pos + 1})
+                       }
+                       (it = @views[:FTEXT_SEARCH]).set_title(it.name.to_s.downcase + (all ? ' all' : ''))
+                       it.set_callback(callback)
+                       it.set_target_folder(all ? :ALL : @mail.folder)
+                       @views.activate(:FTEXT_SEARCH)
+               else                                                                                                    # 次検索
+                       callback = Proc.new {|mail|
+                               mail.folder.red(mail.sq)
+                               @views[:PREVIEW].tagjump({:VIEW => :PREVIEW, :MESSAGE_ID => mail.message_id, :LINE => nil})
+                       }
+                       params = {}; tag.scan(/(\S+)=(['"])(.+?)\2/) {|p| params[p[0].to_sym] = p[2] }
+                       it = @views[:FTEXT_SEARCH]
+                       it.set_callback(callback)
+                       it.set_target_folder(all ? :ALL : @views.folders.open_folder(params[:FOLDER], false))
+                       it.execute(params)
+               end
        end
        def fulltext_search_all
                fulltext_search(true)
@@ -1375,9 +1410,9 @@ class MavePreviewView < MaveBaseView
 
                d0 = Proc.new {|line, on_cursor|                                                # カーソル行をハイライト
                        standout if(on_cursor)
-                       line.each_snip(@window_x_size, max_fold) {|line0|
+                       line.decode_cs(@views.charset, 'UTF-8').each_snip(@window_x_size, max_fold) {|line0|
                                break unless(y < @window_y_size)
-                               setpos(0, y); addstr(line0.decode_cs(@views.charset, 'UTF-8').enspc)
+                               setpos(0, y); addstr(line0.enspc)
                                y += 1
                        }
                        standend
@@ -1386,9 +1421,9 @@ class MavePreviewView < MaveBaseView
 
                d1 = Proc.new {|line, on_cursor|                                                # カーソル行の左に「]」マーク
                        mark = on_cursor ? ']' : ' '
-                       line.each_snip(@window_x_size - 1, max_fold) {|line0|
+                       line.decode_cs(@views.charset, 'UTF-8').each_snip(@window_x_size - 1, max_fold) {|line0|
                                break unless(y < @window_y_size)
-                               setpos(0, y); addstr(mark + line0.decode_cs(@views.charset, 'UTF-8').enspc)
+                               setpos(0, y); addstr(mark + line0.enspc)
                                y += 1
                        }
                        y < @window_y_size
@@ -1454,7 +1489,7 @@ class MaveTextBoxView < MaveBaseView
 
        def update
                super
-               setpos(0, 0); addstr((l = @prompt + @textbox.text).snip(@window_x_size).decode_cs(@views.charset, 'UTF-8').enspc)
+               setpos(0, 0); addstr((l = (@prompt + @textbox.text).decode_cs(@views.charset, 'UTF-8')).snip(@window_x_size).enspc)
                setpos(l.wsize, 0)
        end
 
@@ -1561,7 +1596,7 @@ class MaveIncrementalSearchView < MaveTextBoxView
        def isearch(func, skip, ps)
                begin
                        (@last_hit ? @textbox.set_text(@last_hit) : raise('no target')) if(@textbox.text.size == 0)
-                       found = func.call(@textbox.text, skip) {|progress|
+                       found = func.call(@textbox.utf8_text, skip) {|progress| #### 暫定
                                @views[:INC_SEARCH].set_prompt(_('Searching...%s: ') % progress); update
                                @views.check_interrupt(:INTERRUPT).each {|code|
                                        raise('abort') if(code == :mk_global_quit)
@@ -1624,17 +1659,29 @@ class MaveFulltextSearchQueryView < MaveTextBoxView
                @target_folder = folder
        end
 
-       def execute
+       def execute(params = {})
                sq = nil
                begin
                        @target_folder == :ALL and raise('not provided')
                        @target_folder.methods.include?('fulltext_search') or raise('no method')
                        folder = nil
-                       @target_folder.fulltext_search(@textbox.text) {|stdout|
-                               results = MaveMail.new({:FILE => stdout})               # ヘッダを MaveMail に解析させる
-                               it = results.header['X-mave-store-folder'] and folder = (it != '%%drop%%') ? @views.folders.open_folder(it) : false
-                               sq = folder.create_mail_shell_command(results.header, results.heads, stdout) if(folder)
-                       } or raise('disabled')
+                       params[:QUERY] ||= @textbox.text
+                       results = @target_folder.fulltext_search(params) or raise('disabled')   # 検索実行
+                       def results.each
+                               self[:ITEMS].each {|item|
+                                       yield('■%d. %s' % [item[:N], item[:TITLE]]);  yield('')
+                                       yield(item[:SNIPPET]);                                                  yield('')       #### 字下げ&改行を入れたい
+                                       yield(item[:URI]);                                                              yield('');      yield('')
+                               }
+                               yield("fulltext_search FOLDER='%s' QUERY='%s' SKIP='%d' MESSAGE_ID='%s'" % [self[:TARGET_FOLDER], self[:QUERY], self[:NEXT_SKIP], self[:MESSAGE_ID]])
+                       end
+                       it = results[:STORE_FOLDER] and folder = (it != '%%drop%%') ? @views.folders.open_folder(it) : false
+                       header = {}
+                       from = to = 0 and (it = results[:ITEMS]).size > 0 and from = it.first[:N] and to = it.last[:N]
+                       header['Subject'] = "Search Result: %d - %d of %d for '%s'" % [from, to, results[:HIT], params[:QUERY]]
+                       header['Message-id'] = results[:MESSAGE_ID]
+                       header['In-reply-to'] = params[:MESSAGE_ID]
+                       sq = folder.create_mail_shell_command(header, [], results) if(folder)
                        folder  ? @status.log([_('Full-text search was executed. Result was stored in the [%s] folder.'), folder.name]) \
                                        : @status.log([_('Full-text search was executed. Result was dropped.')])
                rescue
@@ -1698,7 +1745,7 @@ class MaveStatusView < MaveBaseView
 
        def update
                y = -1; @status.recent_each(@window_y_size, @back) {|line|
-                       setpos(0, y += 1); addstr((line || '~').snip(@window_x_size).decode_cs(@views.charset, 'UTF-8').enspc)
+                       setpos(0, y += 1); addstr((line || '~').decode_cs(@views.charset, 'UTF-8').snip(@window_x_size).enspc)
                }
                super
                setpos(2, @window_y_size) & addstr(' vvv ') unless(@back == 0)
diff --git a/mave_fetch b/mave_fetch
new file mode 100755 (executable)
index 0000000..b51be8f
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/env ruby
+
+require 'mave_base'
+require 'mave_controller'
+require 'mave_models'
+
+load 'mave.config'
+
+#      周期的なメールフェッチのための crontab の設定例
+#
+#      */10 * * * * cd ~/public_html/maverick; ./mave_fetch
+
+class MaveViews
+
+       def initialize(*dummy)
+       end
+end
+
+class MaveStatus
+
+       def initialize(*dummy)
+       end
+
+       def log(log)
+               print(sprintf(*log) + $/)
+               true
+       end
+
+       def update_lastlog(log)
+               log(log)
+       end
+end
+
+mave = MaveController.new({:CONFIGS => @configs})
+mave.fetch_mail_pop
+#mave.import_mail                                                                                              # import させることも
+mave.kill_mave rescue print($!.message + $/)
+
+__END__
+
index 40b116c..9c8d53c 100644 (file)
@@ -1,4 +1,4 @@
-require 'gdbm'
+require 'xdbm'
 require 'time'
 require 'net/pop'
 require 'net/smtp'
@@ -35,9 +35,9 @@ end
 
 #===============================================================================
 #
-#      連番処理付き GDBM クラス
+#      連番処理付き XDBM クラス
 #
-class SqGDBM < GDBM
+class SqXDBM < XDBM
 
        @@start = 100
        @@sym = '#last#'
@@ -66,9 +66,9 @@ end
 
 #===============================================================================
 #
-#      フラグ処理/メール総数管理用 GDBM クラス
+#      フラグ処理/メール総数管理用 XDBM クラス
 #
-class FlagGDBM < GDBM
+class FlagXDBM < XDBM
 
        @@n_mail_sym = '#n_mail#'                                                                       # メール総数
 
@@ -211,11 +211,12 @@ class MaveAccount < MaveBaseModel
                @smtp_password  = @account[:SMTP_PASSWORD]
                @smtp_authtype  = @account[:SMTP_AUTHTYPE]
                @smtp_over_tls  = @account[:SMTP_OVER_TLS]
+               @smtp_tls_certs = @account[:SMTP_TLS_CERTS]
 
                @import_command = @account[:IMPORT_COMMAND]
 
                @hash_id                = Digest::MD5.hexdigest(@account[:USER_ADDRESS])[0, 8]
-               @pop_uids               =     GDBM.new(@configs[:ROOT_DIRECTORY] + "/pop_uids_#{name}", 0600)
+               @pop_uids               =     XDBM.new(@configs[:ROOT_DIRECTORY] + "/pop_uids_#{name}", 0600)
        end
 
        #-----------------------------------------------------------
@@ -270,7 +271,7 @@ class MaveAccount < MaveBaseModel
        #
        def smtp
                begin
-                       Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE) if(@smtp_over_tls)
+                       Net::SMTP.enable_tls(@smtp_over_tls, @smtp_tls_certs) if(@smtp_over_tls)
                        Net::SMTP.start(@smtp_server, @smtp_port, @smtp_helo, @smtp_account, @smtp_password, @smtp_authtype) {|smtp|
                                yield(_('Connected.'))
                                yield(smtp)
@@ -283,7 +284,7 @@ class MaveAccount < MaveBaseModel
        end
 
        def close
-               @pop_uids.reorganize
+               @pop_uids.reorganize;           @pop_uids.close
        end
 end
 
@@ -310,11 +311,11 @@ class MaveAccounts < MaveBaseModel
 
        #-----------------------------------------------------------
        #
-       #       メールアカウントを順に渡す(有効なアカウントのみ)
+       #       メールアカウントを順に渡す
        #
-       def each                                                                                                        #### 適切な順序で返すようにする
+       def each(all = false)                                                                           #### 適切な順序で返すようにする
                @accounts.each {|name, account|
-                       yield(account) if(account.enable)
+                       yield(account) if(account.enable or all)
                }
        end
 
@@ -349,7 +350,7 @@ class MaveAccounts < MaveBaseModel
        end
 
        def close
-               each {|account| account.close }
+               each(all = true) {|account| account.close }
        end
 end
 
@@ -381,8 +382,8 @@ class MaveDirectory < MaveBaseModel
                }
                @cluster_paths << '' if(@cluster_paths.empty?)
 
-               gdbm_flags              = params[:CONFIGS][:GDBM_FLAGS]
-               @filename_sq    =   SqGDBM.new(@path + '/filename_sq',  0600, gdbm_flags)       # ベースファイル名<-メール連番
+               xdbm_flags              = params[:CONFIGS][:XDBM_FLAGS]
+               @filename_sq    =   SqXDBM.new(@path + '/filename_sq',  0600, xdbm_flags)       # ベースファイル名<-メール連番
        end
 
        #---------------------------------------- MaveDirectory ----
@@ -517,23 +518,34 @@ class MaveFolder < MaveDirectory
        attr_reader :name                                                                                       # フォルダの名前
        attr_reader     :flags_sq
 
+       @@debug_what_scache = false
+
+       #--------------------------------------------- MaveFolder ----
+       #
+       #       メールの概要キャッシュ(インクリメンタルサーチ用)表示、切り替え(デバッグ用)
+       #
+       def self.toggle_what_scache
+               @@debug_what_scache = !@@debug_what_scache
+       end
+
        def initialize(params)
                params[:PATH]   = params[:CONFIGS][:ROOT_DIRECTORY] + '/' + params[:NAME]
                super
                @name                   = params[:NAME]
 
-               gdbm_flags              = params[:CONFIGS][:GDBM_FLAGS]
-               @sq_rootsq              =   SqGDBM.new(@path + '/sq_rootsq',    0600, gdbm_flags)       # メール連番<-最新順ルート連番
+               xdbm_flags              = params[:CONFIGS][:XDBM_FLAGS]
+               @sq_rootsq              =   SqXDBM.new(@path + '/sq_rootsq',    0600, xdbm_flags)       # メール連番<-最新順ルート連番
 
-               @messageid_sq   =     GDBM.new(@path + '/messageid_sq', 0600, gdbm_flags)       # メッセージID<-メール連番
-               @sq_messageid   =     GDBM.new(@path + '/sq_messageid', 0600, gdbm_flags)       # メール連番<-メッセージID
+               @messageid_sq   =     XDBM.new(@path + '/messageid_sq', 0600, xdbm_flags)       # メッセージID<-メール連番
+               @sq_messageid   =     XDBM.new(@path + '/sq_messageid', 0600, xdbm_flags)       # メール連番<-メッセージID
 
-               @rootsq_sq              =     GDBM.new(@path + '/rootsq_sq',    0600, gdbm_flags)       # ルートメール連番<-メール連番
-               @parentsq_sq    =     GDBM.new(@path + '/parentsq_sq',  0600, gdbm_flags)       # 親メール連番<-メール連番
-               @childsqs_sq    =     GDBM.new(@path + '/childsqs_sq',  0600, gdbm_flags)       # 子メール連番群<-メール連番        #### 統合不可?
+               @rootsq_sq              =     XDBM.new(@path + '/rootsq_sq',    0600, xdbm_flags)       # ルートメール連番<-メール連番
+               @parentsq_sq    =     XDBM.new(@path + '/parentsq_sq',  0600, xdbm_flags)       # 親メール連番<-メール連番
+               @childsqs_sq    =     XDBM.new(@path + '/childsqs_sq',  0600, xdbm_flags)       # 子メール連番群<-メール連番        #### 統合不可?
 
-               @flags_sq               = FlagGDBM.new(@path + '/flags_sq',             0600, gdbm_flags)       # 各種フラグ群<-メール連番
-               [:RED, :FLAG, :NOTICE, :FOLD].each {|flag|
+               @abstract_sq    =     XDBM.new(@path + '/abstract_sq',  0600, xdbm_flags)       # メール概要<-メール連番
+               @flags_sq               = FlagXDBM.new(@path + '/flags_sq',             0600, xdbm_flags)       # 各種フラグ群<-メール連番
+               [:RED, :FLAG, :NOTICE, :FOLD, :TOYOU].each {|flag|
                        @flags_sq.alloc_flag(flag)
                }
                @flags_sq.get_n                         || @flags_sq.reset_n                            # メール総数
@@ -579,25 +591,37 @@ class MaveFolder < MaveDirectory
                sq ? MaveMail.new({:CONFIGS => @configs, :FILE => File.new(@path + '/' + @filename_sq[sq]), :FOLDER => self, :SQ => sq}) : nil
        end
        def get_mail_by_message_id(message_id)
-               get_mail(@sq_messageid[message_id])
+               message_id and get_mail(@sq_messageid[message_id])
+       end
+
+       #------------------------------------------- MaveFolder ----
+       #
+       #       関連するメール連番を返す
+       #
+       def get_sq_by_message_id(message_id)
+               @sq_messageid[message_id]
+       end
+       def get_rootsq_by_sq(sq)
+               @rootsq_sq[sq]
        end
+
        #------------------------------------------- MaveFolder ----
        #
-       #       メールの概要を返す
+       #       メールの概要を内部コーディング(UTF-8)で返す
        #
        def abstract_of_mail(sq, mail, marks = {}, padding = '')
+               @@debug_what_scache and @abstract_sq[sq] and return(abstract_of_mail_for_search(sq, nil, marks))
                '%s%c%c %3d %-*s %*s %4s %c%s %s%c%s' % [
                        marks.size == 0 ? '' : (marks[sq] ? 'M ' : '- '),
                        red?(sq) ? ?. : ?x,
                        notice?(sq) ? ?# : (flag?(sq) ? ?F : ?.),
                        (it = last_sq.to_i - sq.to_i) < 1000 ? it : 999,
                        fw = 16,
-                       @folder_configs[:SEND_VIEW] ? mail.pseudo_to.snip(fw) : mail.pseudo_from.snip(fw),
+                       @folder_configs[:SEND_VIEW] ? mail.pseudo_to.snip(fw, 'UTF-8') : mail.pseudo_from.snip(fw, 'UTF-8'),
                        dw = Time.mystrftime_len,
                        mail.date ? mail.date.mystrftime : '-' * dw,
                        mail.size.to_h,
-                       ?.,             #### '.vw'[toyou?],
+                       '.vw'[toyou?(sq)],
                        mail.multipart? ? '@' : '.',
                        padding,
                        '#+=-'[(padding == '' ? 0 : 2) + (fold?(sq) ? 0 : 1)],
@@ -607,6 +631,34 @@ class MaveFolder < MaveDirectory
 
        #------------------------------------------- MaveFolder ----
        #
+       #       メールの概要キャッシュ(インクリメンタルサーチ用)を返す
+       #
+       def abstract_of_mail_for_search(sq, dummy = nil, marks = {})
+               '%s%c%c %3d %s' % [
+                       marks.size == 0 ? '' : (marks[sq] ? 'M ' : '- '),
+                       red?(sq) ? ?. : ?x,
+                       notice?(sq) ? ?# : (flag?(sq) ? ?F : ?.),
+                       (it = last_sq.to_i - sq.to_i) < 1000 ? it : 999,
+                       @abstract_sq[sq] || (@abstract_sq[sq] = abstract_of_mail_for_search_cache(sq, get_mail(sq))),
+               ]
+       end
+       def abstract_of_mail_for_search_cache(sq, mail)
+               pseudo = @folder_configs[:SEND_VIEW] ? mail.pseudo_to : mail.pseudo_from
+               '%s %s %c%s %s %s' % [
+                       mail.date ? mail.date.mystrftime(false) : '-',          #### 日付を数字で持っておく手もある
+                       mail.size.to_h,
+                       '.vw'[toyou?(sq)],
+                       mail.multipart? ? '@' : '.',
+                       (it = phoneticize('%s %s' % [pseudo, mail.subject.decode_mh])) ? it : '',       # 文字列の読み(ローマ字)表記
+                       mail.subject.decode_mh,
+               ]
+       end
+       def delete_abstract(sq)
+               @abstract_sq.delete(sq)                                                                 # メール概要を消す
+       end
+
+       #------------------------------------------- MaveFolder ----
+       #
        #       メール DB のリンク構造
        #
        #                                               (@sq_rootsq)
@@ -640,6 +692,11 @@ class MaveFolder < MaveDirectory
        #               #### マークした折り畳み中のスレッドを結合する場合の扱い
        #
        def join_mail(sq, parent_sq)
+               (pp_sq = parent_sq) == sq and return(false)                             # 自分や自分の子には結合不可
+               while(pp_sq != @rootsq_sq[pp_sq])
+                       (pp_sq = @parentsq_sq[pp_sq]) == sq and return(false)
+               end
+
                unjoin_mail(sq) unless(@rootsq_sq[sq] == sq)                    # 自分がルート以外の場合
 
 #              @sq_rootsq.delete(x) == sq                                                              # 逆は表示時に消す
@@ -711,6 +768,7 @@ class MaveFolder < MaveDirectory
                @filename_sq[sq = @filename_sq.last_sq] = filename
                @messageid_sq[sq] = mail.message_id
                @sq_messageid[mail.message_id] = sq
+#              @abstract_sq[sq] = abstract_of_mail_for_search_cache(sq, mail)  # メール概要登録
 
                # 直近の親を捜す
                parent_sqi = 0; it = nil
@@ -800,6 +858,7 @@ class MaveFolder < MaveDirectory
                @flags_sq.dec_n                                                                                 # メール総数カウントダウン
 
                @flags_sq.delete(sq)
+               @abstract_sq.delete(sq)                                                                 # メール概要を消す
                delete(@filename_sq.delete(sq))                                                 # ファイル本体を消す
 
                @dirty += 1
@@ -950,6 +1009,18 @@ class MaveFolder < MaveDirectory
                @dirty += 1
        end
 
+       def toyou(sq)
+               @flags_sq.set_flag(sq, :TOYOU, ?T)
+               @dirty += 1
+       end
+       def ccyou(sq)
+               @flags_sq.set_flag(sq, :TOYOU, ?C)
+               @dirty += 1
+       end
+       def toyou?(sq)
+               '-CT'.index(@flags_sq.get_flag(sq, :TOYOU)) || 0
+       end
+
        #------------------------------------------- MaveFolder ----
        #
        #       メールの添付ファイルを展開する
@@ -975,8 +1046,8 @@ class MaveFolder < MaveDirectory
                                fh.write(line + "\n")
                        }
                }
-               mail = MavePseudoMail.new({:CONFIGS => @configs, :FILE => File.new(path + '/' + halfname)})
-               overwrite_mail(mail, source_mail)
+               mail = MavePseudoMail.new({:CONFIGS => @configs, :FILE => (xmail = File.new(path + '/' + halfname))})
+               overwrite_mail(xmail, source_mail)
                delete(halfname) unless(RUBY_PLATFORM =~ /i.86-mswin32/)        ####
                @dirty += 1     ####
        end
@@ -1034,6 +1105,7 @@ class MaveFolder < MaveDirectory
                @rootsq_sq.reorganize;          @rootsq_sq.close
                @parentsq_sq.reorganize;        @parentsq_sq.close
                @childsqs_sq.reorganize;        @childsqs_sq.close
+               @abstract_sq.reorganize;        @abstract_sq.close
                @flags_sq.reorganize;           @flags_sq.close
                super
        end
@@ -1138,6 +1210,10 @@ class MaveFolders < MaveBaseModel
                File.open(folder.config_filename, 'w', 0600) {|fw| fw.write(new_configs.read) }
                close_folder(folder.name); open_folder(folder.name)
        end
+
+       def close
+               each {|folder| folder.close }
+       end
 end
 
 #===============================================================================
@@ -1178,6 +1254,7 @@ class MaveMail < MaveBaseModel
                @boundary               = params[:BOUNDARY]
                @folder                 = params[:FOLDER]
                @sq                             = params[:SQ]
+               @size                   = 0; size
 
                parse_header
                parse_body if(@file.is_a?(File))
@@ -1445,7 +1522,7 @@ class MaveMail < MaveBaseModel
        #       メールのサイズを返す
        #
        def size
-               @file.lstat.size
+               @size = @file.lstat.size rescue @size
        end
 
        #--------------------------------------------- MaveMail ----
@@ -1489,6 +1566,7 @@ class MaveMail < MaveBaseModel
        #       メール情報を返す
        #
        def identify
+               yield([_('  Message-Sq: %s'), sq])
                yield([_('  Message-ID: %s'), message_id])
                yield([_('    FilePath: %s'), path])
                yield([_('    FileSize: %d'), size])
@@ -1567,7 +1645,7 @@ class MavePseudoMail < MaveMail
                                        elsif(header == 'bcc')
                                                yield("Bcc: #{ @@address_book.encode(bcc,  'SEND:')}\n")
                                        elsif(header == 'subject')
-                                               yield("Subject: #{subject.encode_mh}\n")
+                                               subject.encode_mh_multi('Subject') {|mhline| yield(mhline + "\n") }
                                        elsif(header == 'date')
                                                yield("Date: #{Time.now.rfc2822}\n")    # Date は現時刻に変更
                                        elsif(header == 'x-mave-extract-targets')
@@ -1585,7 +1663,7 @@ class MavePseudoMail < MaveMail
                                        raise("Mail format error '#{line.inspect}'")
                                end
                        else
-                               yield((line + "\n").tojis)                                              #### ボディを仲介(現状は JIS 固定)
+                               yield(NKF.nkf('-jWm0', line) + "\n")                    #### ボディを仲介(現状は JIS 固定)
                        end
                }
        end
@@ -1959,8 +2037,8 @@ class MaveAddressBook < MaveBaseModel
 
        def initialize(params)
                super
-               gdbm_flags              = params[:CONFIGS][:GDBM_FLAGS]
-               @address_db             =     GDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address',     0600, gdbm_flags)
+               xdbm_flags              = params[:CONFIGS][:XDBM_FLAGS]
+               @address_db             =     XDBM.new(@configs[:ROOT_DIRECTORY] + '/mave.address',     0600, xdbm_flags)
        end
 
        #-------------------------------------- MaveAddressBook ----
@@ -2008,6 +2086,10 @@ class MaveAddressBook < MaveBaseModel
                }
                mailboxes.join(', ')
        end
+
+       def close
+               @address_db.reorganize;         @address_db.close
+       end
 end
 
 #===============================================================================
@@ -2070,6 +2152,14 @@ class MaveTextBox < MaveBaseModel
                @text = text
                @dirty += 1
        end
+
+       #------------------------------------------ MaveTextBox ----
+       #
+       #       文字列を内部エンコーディングで返す
+       #
+       def utf8_text
+               @text.decode_cs('UTF-8', @configs[:TERMINAL_CHARSET])
+       end
 end
 
 #===============================================================================
index b389887..563fe69 100755 (executable)
@@ -5,7 +5,7 @@ require 'mave_models'
 
 load 'mave.config'
 
-#@configs[:GDBM_FLAGS] = GDBM::NOLOCK | GDBM::READER
+#@configs[:XDBM_FLAGS] = XDBM::NOLOCK | XDBM::READER
 folders = MaveFolders.new({:CONFIGS => @configs})
 
 address_book = MaveAddressBook.new({:CONFIGS => @configs})
diff --git a/maverick.rhtml b/maverick.rhtml
new file mode 100755 (executable)
index 0000000..76bd5c7
--- /dev/null
@@ -0,0 +1,174 @@
+#!/usr/bin/eruby -C 'UTF-8' -d
+<HTML><% head =<<HEAD
+       <HEAD>
+       <META http-equiv='Content-Type' content='text/html; charset=UTF-8'>
+       <TITLE>Maverick%s</TITLE>
+       <LINK rel='shortcut icon' href='favicon.ico' type='image/vnd.microsoft.icon'>
+       <LINK rel='icon' href='favicon.png' type='image/png'>
+       <STYLE type='text/css'><!--
+               A { text-decoration: none; }
+               A:link { color: gray; }
+               A:visited { color: black; }
+               A:hover { color: red; }
+       --></STYLE>
+       </HEAD>
+HEAD
+       require 'cgi'
+       cgi = CGI.new
+
+       require 'mave_base'
+       require 'mave_models'
+
+       load 'mave.config'
+
+       class Maverick
+
+               attr_reader :script
+               attr_reader :folders
+
+               def initialize(params)
+                       @configs = params[:CONFIGS]
+                       @script = File.basename(ENV['SCRIPT_NAME'])
+                       @configs[:XDBM_FLAGS] = XDBM::NOLOCK | XDBM::READER
+                       @folders = MaveFolders.new({:CONFIGS => @configs})
+                       MaveMail.set_address_book(MaveAddressBook.new({:CONFIGS => @configs}))
+                       @separator = '=' * 80
+               end
+
+               def each_folder
+                       @folders.each {|folder|
+                               yield({
+                                       :NAME           => folder.name,
+                                       :LIST_NAME      => folder.configs[:LIST_NAME],
+                                       :N                      => folder.flags_sq.get_n,
+                               })
+                       }
+               end
+
+               def each_mail(folder_name, startsq = nil, n_max = 20)
+                       folder = @folders.open_folder(folder_name)
+                       sqs = []; n = n_max; folder.each_sq(startsq) {|sq, level|
+                               sqs << sq
+                               (n -= 1) < 0 and break
+                               mail = folder.get_mail(sq)
+                               yield({
+                                       :SQ                     => sq,
+                                       :ABSTRACT       => folder.abstract_of_mail(sq, mail, {}, ' ' * level)
+                               })
+                       }
+                       n = n_max; folder.reverse_each_sq(sqs.shift) {|sq, level|
+                               sqs.unshift(sq)
+                               (n -= 1) < 0 and break
+                       }
+                       sqs.unshift(sqs[0]) while((n -= 1) > -2)
+                       sqs
+               end
+
+               def each_mail_line(folder_name, sq, n_max = 9999)
+                       folder = @folders.open_folder(folder_name)
+                       mail = folder.get_mail(sq)
+                       it = mail.pseudo_from           and yield(_('   From: ') + it)
+                       it = mail.pseudo_to                     and yield(_('     To: ') + it)
+                       it = mail.pseudo_cc                     and yield(_('     Cc: ') + it)
+                       it = mail.subject.decode_mh     and yield(_('Subject: ') + it)
+                       yield(@separator)
+                       (0..n_max).each {|nth|
+                               line = mail[nth] or break
+                               yield(line.chomp)
+                       } if(mail)
+               end
+
+               def get_rootsq_by_sq(folder_name, sq)
+                       folder = @folders.open_folder(folder_name)
+                       folder.get_rootsq_by_sq(sq)
+               end
+
+               def fulltext_search(folder_name, query, max, skip)
+                       folder = @folders.open_folder(folder_name)
+                       folder.methods.include?('fulltext_search') or raise('no method')
+                       folder.fulltext_search({:QUERY => query, :SKIP => skip, :MAX => max})
+               end
+       end
+
+       maverick = Maverick.new({:CONFIGS => @configs})
+
+       search_form =<<SEARCH_FORM
+       <FORM name='search' method='get' action='%s'>
+               <INPUT type='hidden' name='view' value='search'>
+               <INPUT type='hidden' name='folder' value='%s'>
+               <INPUT type='text' name='query' value='%s'>
+               <INPUT type='submit' name='send' value='Search'>
+       </FORM>
+SEARCH_FORM
+
+       #===========================================================================
+       #
+       #       一覧画面
+       #
+       if(!cgi.params['view'][0] or cgi.params['view'][0] == 'summary') %>
+<%=    head % ''
+%>     <BODY>
+       <H1>Maverick</H1>
+       <HR>
+<%     maverick.each_folder {|folder|
+%>             <A href='<%= maverick.script %>?folder=<%= folder[:NAME] %>'>[<%= CGI.escapeHTML(folder[:LIST_NAME]) %>(<%= folder[:N] %>)]</A>
+<%     }
+%>     <HR>
+       <PRE><TT><%
+       sqs = maverick.each_mail(folder = cgi.params['folder'][0] || 'Inbox', cgi.params['startsq'][0], n_max = 30) {|mail|
+               %><A href='<%= maverick.script %>?view=mail;folder=<%= folder %>;sq=<%= mail[:SQ] %>'><%= CGI.escapeHTML(mail[:ABSTRACT]) %></A>
+<%     }
+       %></TT></PRE>
+       <A href='<%= maverick.script %>?folder=<%= folder %>'>[Top]</A>
+       <A href='<%= maverick.script %>?folder=<%= folder %>;startsq=<%= sqs[ 2] %>'>[↑PagePrev]</A>
+       <A href='<%= maverick.script %>?folder=<%= folder %>;startsq=<%= sqs[-3] %>'>[↓PageNext]</A>
+       <HR>
+<%=    search_form % [maverick.script, folder, '']
+%>     <HR>
+       </BODY>
+<%
+       #===========================================================================
+       #
+       #       メール閲覧画面
+       #
+       elsif(cgi.params['view'][0] == 'mail') %>
+<%=    head % ' mail'
+%>     <BODY>
+       <H1>Maverick mail</H1>
+       <HR>
+<%     rootsq = maverick.get_rootsq_by_sq(folder = cgi.params['folder'][0], sq = cgi.params['sq'][0])
+%>     <A href='<%= maverick.script %>?folder=<%= folder %>;startsq=<%= rootsq %>'>[↑Root]</A>
+       <A href='<%= maverick.script %>?folder=<%= folder %>;startsq=<%= sq %>'>[←Summary]</A>
+       <PRE><TT><% maverick.each_mail_line(folder, sq) {|line|
+%><%= CGI.escapeHTML(line) %>
+<%     } %></TT></PRE>
+       <A href='<%= maverick.script %>?folder=<%= folder %>;startsq=<%= rootsq %>'>[↑Root]</A>
+       <A href='<%= maverick.script %>?folder=<%= folder %>;startsq=<%= sq %>'>[←Summary]</A>
+       <HR>
+       </BODY>
+<%
+       #===========================================================================
+       #
+       #       メール検索結果画面
+       #
+       elsif(cgi.params['view'][0] == 'search') %>
+<%=    head % ' search'
+%>     <BODY>
+       <H1>Maverick search</H1>
+       <HR>
+<%     results = maverick.fulltext_search(folder = cgi.params['folder'][0], query = cgi.params['query'][0], max = (cgi.params['max'][0] || '10').to_i, skip = (cgi.params['skip'][0] || '0').to_i)
+%><%=  search_form % [maverick.script, folder, CGI.escapeHTML(query)]
+%><%=  from = to = 0 and (it = results[:ITEMS]).size > 0 and from = it.first[:N] and to = it.last[:N]
+               '%d - %d of %d results for "%s"' % [from, to, results[:HIT], query]
+%>     <HR>
+<%     n = skip; results[:ITEMS].each {|item|
+%>             <H4><A href='<%= maverick.script %>?view=mail;folder=<%= folder %>;sq=<%= item[:SQ] %>'><%= '%d. %s' % [n += 1, CGI.escapeHTML(item[:TITLE])] %></A></H4>
+               <BLOCKQUOTE><%= CGI.escapeHTML(item[:SNIPPET]) %></BLOCKQUOTE>
+<%     }
+%>     <A href='<%= maverick.script %>?folder=<%= folder %>'>[Top]</A>
+       <A href='<%= maverick.script %>?view=search;folder=<%= folder %>;query=<%= CGI.escape(query) %>;max=<%= max %>;skip=<%= skip - max %>'>[↑SearchPrev]</A>
+       <A href='<%= maverick.script %>?view=search;folder=<%= folder %>;query=<%= CGI.escape(query) %>;max=<%= max %>;skip=<%= skip + max %>'>[↓SearchNext]</A>
+       <HR>
+       </BODY>
+<%     end
+%></HTML>
diff --git a/ncal b/ncal
index a2b22e1..b1dbe4d 100755 (executable)
--- a/ncal
+++ b/ncal
@@ -21,12 +21,51 @@ class Time
                '1103' => '文化の日',
                '1123' => '勤労感謝の日',
                '1223' => '天皇誕生日',
-#              '1225' => '!休日出勤',
                '0101' => '元日',                                                                             # 2011年
                '0110' => '成人の日',
                '0211' => '建国記念の日',
                '0321' => '春分の日',
        }
+       @@my_holidays['2011'] = {                                                                       # 2011年度
+               '0429' => '昭和の日',
+               '0503' => '憲法記念日',
+               '0504' => 'みどりの日',
+               '0505' => 'こどもの日',
+               '0718' => '海の日',
+               '0919' => '敬老の日',
+               '0923' => '秋分の日',
+               '1010' => '体育の日',
+               '1103' => '文化の日',
+               '1123' => '勤労感謝の日',
+               '1223' => '天皇誕生日',
+               '0101' => '元旦',                                                                             # 2012年
+               '0102' => '振替休日',
+               '0109' => '成人の日',
+               '0211' => '建国記念日',
+               '0320' => '春分の日',
+       }
+       @@my_holidays['2012'] = {                                                                       # 2012年度
+               '0429' => '昭和の日',
+               '0430' => '振替休日',
+               '0503' => '憲法記念日',
+               '0504' => 'みどりの日',
+               '0505' => 'こどもの日',
+               '0716' => '海の日',
+               '0917' => '敬老の日',
+               '0921' => '振替休日',
+               '0922' => '秋分の日',
+               '1008' => '体育の日',
+               '1102' => '振替休日',
+               '1103' => '文化の日',
+               '1123' => '勤労感謝の日',
+#              '1222' => '!休日出勤',
+               '1223' => '天皇誕生日',
+               '1224' => '振替休日',
+               '0101' => '元旦',                                                                             # 2013年
+               '0114' => '成人の日',
+               '0211' => '建国記念の日',
+               '0320' => '春分の日',
+       }
        def my_holiday?
                it = @@my_holidays[(year - (month < 4 ? 1 : 0)).to_s] || {}
                it = it['%02d%02d' % [month, day]] and return(it =~ /^!/ ? false : it)
diff --git a/xdbm.rb b/xdbm.rb
new file mode 100644 (file)
index 0000000..c647381
--- /dev/null
+++ b/xdbm.rb
@@ -0,0 +1,42 @@
+begin
+
+       require 'depot'
+
+       class XDBM < Depot
+
+               NOLOCK = Depot::ONOLCK
+               READER = Depot::OREADER
+
+               def initialize(name, mode = 0666, flags = Depot::OWRITER | Depot::OCREAT)
+                       flags ||= (Depot::OWRITER | Depot::OCREAT)
+                       super(name + '.qdb', flags | Depot::OLCKNB)
+                       File.chmod(mode & ~File.umask, name + '.qdb')
+               end
+
+               def delete(key)
+                       value = self[key] and super
+                       value
+               end
+
+               def reorganize
+#                      optimize
+               end
+       end
+
+rescue LoadError
+
+       require 'gdbm'
+
+       class XDBM < GDBM
+
+               NOLOCK = GDBM::NOLOCK
+               READER = GDBM::READER
+
+               def initialize(name, mode = 0666, flags = GDBM::WRCREAT)
+                       super(name + '.gdb', mode, flags)
+               end
+       end
+end
+
+__END__
+