[mew-dist 25971] Mew 3 のマークを Mew 4 へ変換

Isao Harada harada at example.com
2005年 1月 23日 (日) 19:37:11 JST


原田と申します。

  Mew 4 も 4.2rc1 となりましたので、ぼちぼち Mew 3.3 から移行しようと
試していたのですが、Mew 3.3 のサマリのマークが Mew 4 のサマリに反映さ
れないので、とても残念でした。
  ちょっと調べて見ると、.mew-sinfo というファイルにマークが保存されて
いることがわかったので、添付の perl スクリプトを作って変換できましたが、
これも残念ながら、一度 Mew 4 でスキャンしたフォルダにしか使えませんで
した。
  より良い方法がありましたら、教えていただけると幸いです。

  なお、添付のスクリプトは、引数としてディレクトリを指定するもので、下
記のコマンドで変換するつもりでした。

	% find ~/Mail -type d -exec msm3to4 {} \;

  以上よろしくお願い致します。
-------------- next part --------------
#!/usr/local/bin/perl
#
#	msm3to4: Mew 3 のサマリーのマークを Mew 4 に変換
#
#		-c を指定された場合は * マークを $ マークに変換
#
# $Id: msm3to4,v 1.1 2005/01/23 08:32:31 harada Exp $

require "getopts.pl";
&Getopts('c');
&usage() unless ($#ARGV == 0);
&usage() unless (-d $ARGV[0]);

$DIR = $ARGV[0];
$MEW3 = '.mew-cache';
$MEW4 = '.mew-sinfo';

my(@r) = &readSummary("$DIR/$MEW3");
&convertMark("$DIR/$MEW4", @r) unless ($#r == -1);

exit 0;


#
# 利用方法
#
sub usage {
	die "Usage: msm3to4 [-c] directory";
}

#
# サマリファイルの読み込み
#
sub readSummary {
	my($f) = @_;
	my(@r) = ();

	exit 0 unless (-f $f);

	open(IN, $f);
	while (<IN>){
		next unless (/^\s*\d+[D@*o]/);
		my($n, $t) = $_ =~ m,^\s*(\d+)(\S),;
		push(@r, "$n $t");
	}
	close(IN);

	return @r;
}

#
# マークファイルの生成
#
sub convertMark {
	my($f, @r) = @_;

	if (-f $f){
		my($new) = "${f}~";
		print STDERR "backuped: $new\n";
		rename($f, $new);
	}

	print STDERR "converted: $f\n";
	open(OUT, "> $f");
	print OUT "[nil (\n";
	foreach (@r){
		@_ = split(/ /, $_);
		$_[1] = '$' if (defined $opt_c && ($_[1] eq '*'));
		printf OUT "(\"%d\" %d)\n", $_[0], ord($_[1]);
	}
	print OUT "     )]\n";
	close(OUT);
}


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