[Mew-dist 10100] Re: mew-dups.el: marking duplicate messages in a folder
SAKAI Kiyotaka
ksakai at example.com
1999年 8月 16日 (月) 17:47:54 JST
>> In article <19990816164326Z.1000 at example.com>, sen at example.com writes:
> folder 内の重複したメッセージを mark するコードを書いてみました。
> imls の機能をそのまま使用させていただきました。 thank you img at example.com!
> インストール方法は mew-dups.el を load-path 上におき、.emacs に
> (add-hook 'mew-init-hook (lambda () (require 'mew-dups)))
> と記述するだけです。
> `mew-summary-mark-dups' というコマンドを提供してくれます。
> ちょっとしかテストしてませんが、いまのところ使えています。
うーむ。
実は imgrep を拡張して
% imgrep -D +inbox ...
で重複するメッセージを pick できるパッチを作っていたところだったりしま
す。
これで pick のパターンに特定の文字列を指定すると、mew から imgrep を
--dupchecktarget を指定して起動できるようになれば、pick のインターフェー
スで処理できるので、便利ではないかと思います。
--
酒井 清隆 (E-mail: ksakai at example.com)
-------------- next part --------------
Index: imgrep.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-120/imgrep.in,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 imgrep.in
--- imgrep.in 1999/08/16 08:18:46 1.1.1.1
+++ imgrep.in 1999/08/16 08:39:20
@@ -29,7 +29,7 @@
use strict;
use vars qw($Prog $EXPLANATION @OptConfig
$opt_format @opt_src $opt_casefold $opt_expression
- $opt_delimiter $opt_verbose $opt_debug
+ $opt_delimiter $opt_dupchecktarget $opt_verbose $opt_debug
$opt_quiet $opt_help);
##
@@ -76,6 +76,7 @@
"\n\t\t\tbody Entire body".
"\n\t\t\tall Entire message",
'delimiter;s;\n\n|\n----\n;' => 'Mail header delimiter',
+ 'dupchecktarget,D;s;none;' => 'Duplicate Check Target',
'quiet;b;;' => 'Suppress informational messages.',
'verbose;b;;' => 'With diagnostic messages.',
'debug;d;;' => 'With debug messages.',
@@ -140,7 +141,8 @@
$folder_dir = expand_path($folder);
- @messages = grep_folder($folder_dir, $eval_string, @ranges);
+ @messages = grep_folder($folder_dir, $eval_string,
+ $opt_dupchecktarget, @ranges);
if ( @messages ) {
$matched += @messages;
foreach ( @messages ) {
Index: IM/Config.pm.in
===================================================================
RCS file: /home/ksakai/cvsroot/im-120/IM/Config.pm.in,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 Config.pm.in
--- Config.pm.in 1999/08/16 08:18:47 1.1.1.1
+++ Config.pm.in 1999/08/16 08:31:02
@@ -1001,6 +1001,7 @@
Indent=2 # indent step for threading
DupCheckTarget=message-id # Duplicate Check Target
# 'message-id' or 'message-id+subject'
+ImGrep.DupCheckTarget=none
# servers
Smtpservers=localhost # default server for SMTP
NntpServers=localhost # default server for NNTP
Index: IM/Grep.pm
===================================================================
RCS file: /home/ksakai/cvsroot/im-120/IM/Grep.pm,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 Grep.pm
--- Grep.pm 1999/08/16 08:18:47 1.1.1.1
+++ Grep.pm 1999/08/16 08:40:42
@@ -21,7 +21,7 @@
use IM::EncDec qw(mime_decode_string);
use integer;
use strict;
-use vars qw(@ISA @EXPORT);
+use vars qw(@ISA @EXPORT %MESSAGE_ID_HASH);
@ISA = qw(Exporter);
@EXPORT = qw(parse_expression grep_folder sortuniq);
@@ -54,8 +54,10 @@
# end of header in draft message
my $draft_delimiter = "\n----\n";
-sub grep_folder ($$@) {
- my ($folder, $eval_string, @ranges) = @_;
+%MESSAGE_ID_HASH = ();
+
+sub grep_folder ($$$@) {
+ my ($folder, $eval_string, $dup_check, @ranges) = @_;
my $folder_dir;
my @src_msgs = ();
my @messages = ();
@@ -142,8 +144,27 @@
close(MES);
- if (eval $eval_string) {
- push(@messages, $m);
+ if ($eval_string || $dup_check eq 'none') {
+ if (eval $eval_string) {
+ push(@messages, $m);
+ }
+ } else {
+ # check dupulicate message-id
+ $head =~ m/Message-id:\s*<(.*)>/i;
+ my $msgid = $1;
+ $head =~ m/Subject:\s*(.*)/i;
+ my $subject = $1;
+
+ if ($dup_check eq "" || $dup_check eq "message-id") {
+ if ($MESSAGE_ID_HASH{$msgid}++) {
+ push(@messages, $m);
+ }
+ } elsif ($dup_check eq "message-id+subject") {
+ my $t = join(";", $msgid, $subject);
+ if ($t ne ";" and $MESSAGE_ID_HASH{$t}++) {
+ push(@messages, $m);
+ }
+ }
}
}
Mew-dist メーリングリストの案内