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.
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.
テキストベースメーラ「Mave」の更新履歴
+・Version 2.98
+ * ウェブメールビューア「Maverick」を追加
+ * ローマ字入力によるインクリメンタル検索機能を追加
+ * メールのメタデータストアを QDBM に対応
+ * 添付ファイル名のレガシーエンコーディングモードを追加
+ * LDAP サーバからアドレス帳へのインポート機能を追加
+
・Version 2.97
* クリップ(引用)機能、タグジャンプ機能を追加
* 各種全文検索エンジンによるメール検索機能を追加
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
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
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
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
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
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
$ 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
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
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
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
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
|| | \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
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
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
X-Mave-Attachments: \r
X-Mave-Relations: \r
\r
+ http://sourceforge.jp/projects/mave/\r
--- /dev/null
+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
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
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
X-Mave-Relations: \r
\r
\r
- Ruby, curses and gdbm library.\r
+ Ruby, curses and qdbm/gdbm library.\r
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
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
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
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
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
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
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
|| | 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
\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
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
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
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
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
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
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
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
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
X-Mave-Attachments: \r
X-Mave-Relations: \r
\r
+ http://sourceforge.jp/projects/mave/\r
--- /dev/null
+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
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
|| | 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.
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.
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
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:
必要なパッケージ
- 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. ユーザ設定
$ vi mave.config
'Main' アカウントの部分を、あなたの設定に書き換えてください。
- とりあえず Mave を試してみたい場合、ここから 3. に進んでも結構です。
+ とりあえず Mave を試してみたい場合、以降を飛ばして 3. に進んでも結構です。
好みのエディタ環境を設定してください。
|| | 送信元 / 送信先 送信日 サイズ || | 件名
|| +-最新 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 っぽく使えます。
+
それでは。
メモ:
--- /dev/null
+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
#!/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"
}
}
=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
= 'メールのインポートに失敗しました。ファイル=[%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 で接続しています……'
= '受信中 (%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 で接続しています……'
= '送信中 (%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'] \
= 'メール情報'
= 'フォルダの設定を編集します。'
@@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).'] \
= 'ファイルを破棄しました(未知のファイル)。'
@@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.'] \
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?
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
#
# その他の設定
#
-@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'})"
@@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
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
# ]
# end
# end
+
+ def myexectime
+ '%02d:%02d:%02d' % [hour, min, sec]
+ end
end
__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
#-----------------------------------------------------------
#
`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
# 全文検索エンジン見つからず
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__
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) +
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
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
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|
print address_db['SEND:' + mail], $/
print address_db['ETC:' + mail].gsub(/\t/, "\n"), $/
+address_db.close
+
__END__
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
# 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
@@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)
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
}
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")
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
: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),
@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
@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
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
@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
#
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])
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
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 # 別途ウィンドウで、ビューアアプリを起動する場合
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) # 新規関連ファイル作成処理
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
#-----------------------------------------------------------
unless(@configs[:FILE_MANAGER_TYPE] == 'forkexec')
@views.close
system(@configs[:FILE_MANAGER] % target_dir)
+# pickup_file_force
@views.reopen
else
pid = fork {
#-----------------------------------------------------------
#
+ # メールの概要キャッシュ(インクリメンタルサーチ用)表示、切り替え
+ #
+ 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
@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
@controller = params[:CONTROLLER]
@models = params[:MODELS]
@charset = params[:CHARSET]
+ String.set_snip_charset(@charset)
open
#
class MaveSelectView < MaveBaseView
+ attr_reader :items
attr_reader :current
def initialize(params)
@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
}
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
: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),
@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
end
def target_cursor(value = @current, key = :INSTANCE, missing = 0) # カーソル位置を指定のアイテムに移動
- super
+ instance = super
@views[:PREVIEW].tie(@current)
+ instance
end
def previous # 上方に移動
#-------------------------------------- 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
@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
#-------------------------------------- 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)
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
#
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
@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
# 全文検索ビュー、起動処理
#
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)
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
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
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
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)
@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
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)
--- /dev/null
+#!/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__
+
-require 'gdbm'
+require 'xdbm'
require 'time'
require 'net/pop'
require 'net/smtp'
#===============================================================================
#
-# 連番処理付き GDBM クラス
+# 連番処理付き XDBM クラス
#
-class SqGDBM < GDBM
+class SqXDBM < XDBM
@@start = 100
@@sym = '#last#'
#===============================================================================
#
-# フラグ処理/メール総数管理用 GDBM クラス
+# フラグ処理/メール総数管理用 XDBM クラス
#
-class FlagGDBM < GDBM
+class FlagXDBM < XDBM
@@n_mail_sym = '#n_mail#' # メール総数
@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
#-----------------------------------------------------------
#
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)
end
def close
- @pop_uids.reorganize
+ @pop_uids.reorganize; @pop_uids.close
end
end
#-----------------------------------------------------------
#
- # メールアカウントを順に渡す(有効なアカウントのみ)
+ # メールアカウントを順に渡す
#
- def each #### 適切な順序で返すようにする
+ def each(all = false) #### 適切な順序で返すようにする
@accounts.each {|name, account|
- yield(account) if(account.enable)
+ yield(account) if(account.enable or all)
}
end
end
def close
- each {|account| account.close }
+ each(all = true) {|account| account.close }
end
end
}
@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 ----
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 # メール総数
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)],
#------------------------------------------- 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)
# #### マークした折り畳み中のスレッドを結合する場合の扱い
#
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 # 逆は表示時に消す
@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
@flags_sq.dec_n # メール総数カウントダウン
@flags_sq.delete(sq)
+ @abstract_sq.delete(sq) # メール概要を消す
delete(@filename_sq.delete(sq)) # ファイル本体を消す
@dirty += 1
@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 ----
#
# メールの添付ファイルを展開する
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
@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
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
#===============================================================================
@boundary = params[:BOUNDARY]
@folder = params[:FOLDER]
@sq = params[:SQ]
+ @size = 0; size
parse_header
parse_body if(@file.is_a?(File))
# メールのサイズを返す
#
def size
- @file.lstat.size
+ @size = @file.lstat.size rescue @size
end
#--------------------------------------------- MaveMail ----
# メール情報を返す
#
def identify
+ yield([_(' Message-Sq: %s'), sq])
yield([_(' Message-ID: %s'), message_id])
yield([_(' FilePath: %s'), path])
yield([_(' FileSize: %d'), size])
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')
raise("Mail format error '#{line.inspect}'")
end
else
- yield((line + "\n").tojis) #### ボディを仲介(現状は JIS 固定)
+ yield(NKF.nkf('-jWm0', line) + "\n") #### ボディを仲介(現状は JIS 固定)
end
}
end
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 ----
}
mailboxes.join(', ')
end
+
+ def close
+ @address_db.reorganize; @address_db.close
+ end
end
#===============================================================================
@text = text
@dirty += 1
end
+
+ #------------------------------------------ MaveTextBox ----
+ #
+ # 文字列を内部エンコーディングで返す
+ #
+ def utf8_text
+ @text.decode_cs('UTF-8', @configs[:TERMINAL_CHARSET])
+ end
end
#===============================================================================
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})
--- /dev/null
+#!/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>
'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)
--- /dev/null
+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__
+