[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 メーリングリストの案内