[Mew-dist 10749] immknmz for mew-nmz.el.

Shuichi KITAGUCHI ( 北口修一 ) kit at example.com
1999年 9月 25日 (土) 23:35:38 JST


北口です。

mew-nmz.el は便利なのですが、mew-nmz-mknmz-all-folders をすると、

・長時間 Emacs を占有される
・(会社の Win98 では)動作が怪しい

という問題があったので、mew-nmz-mknmz-all-folders と(たぶん)同じことを
する簡単な Perl Script(immknmz) を書いてみました。

つかいかた:
  ・immknmz の先頭の方を見て、必要だったらいじる
  ・immknmz を実行させる

なお、エラーチェックはほとんどしていませんのでご注意下さい(普通の
環境なら動くでしょうし、おかしくなっても致命的ではないと思いますが)。


--
Shuichi Kitaguchi <kit at example.com>
-------------- next part --------------
#!/usr/local/bin/perl

#
# "mew-nmz-mknmz-all-folders" (in mew-nmz.el)
#
#             Copyright (C) 1999 Shuichi Kitaguchi <kit at example.com>
#
# Created: Sep 23, 1999
# $Id: immknmz,v 1.2 1999/09/25 13:44:23 kit Exp $
#

###
### Modify these variables if you need.
###
my $nmzdir        = "Namazu";	# "~/$nmzdir"
my $mknmz_args    = "-uUhPq";	# mknmz argument
my $mknmz_include = "mknmz-inc.pl"; # mknmz -I <file>
my @ignorefolders = ( "draft", "trash", "schedule", "queue", );


# Code:

my $VERSION = "immknmz version 0.1.2";

$Prog = 'immknmz';

use IM::Config;
use IM::Util;
use IM::Folder;
use strict;
use vars qw($Prog $EXPLANATION @OptConfig $opt_help);

$EXPLANATION = "$Prog :: mew-nmz-mknmz-all-folders";
@OptConfig = ( 'help;b;;'  => "Show this message.", );

init_opt(\@OptConfig);
read_cfg();
read_opt(\@ARGV);
help($EXPLANATION) && exit $EXIT_SUCCESS if $opt_help;

my $mailpath = mail_path()."/";
my $namazupath = home_dir()."/$nmzdir/".mail_dir()."/";
my $incfile = home_dir()."/$nmzdir/$mknmz_include";
if ( ! -f $incfile ){
    $incfile = "";
}
my $folderspath = $mailpath."/.folders";
my $msgfolder;
my $flag;
my $nmzfolder;
my $ret;
my @filelist;
my $tempfile;
if ( $ENV{'TEMP'} eq "" ){
    if ( $ENV{'TMP'} eq "" ){
	$tempfile = "/tmp"; # UNIX system, may be.
    } else {
	$tempfile = $ENV{'TMP'};
    }
} else {
    $tempfile = $ENV{'TEMP'};
}
$tempfile =~ s:\\:/:g;
$tempfile =~ s/\/$//;
$tempfile = "$tempfile/immknmz_temporary_file";

open( FILE, "<$folderspath" );
while ( <FILE> ){
    chomp;
    $msgfolder = $_;
    $flag = 0;
    foreach ( @ignorefolders ){
	if ( $msgfolder !~ /^\+/ ){		# ! local folder
	    print "$_\n";
	    $flag=1;
	    last;
	} elsif ( $msgfolder =~ /^\+$_/ ){	# == @ignorefolders
	    $flag=1;
	    last;
	}
    }
    if ( $flag != 0 ){
	print "skipping $msgfolder...\n";
    } else {
	$nmzfolder = $msgfolder;
	$msgfolder =~ s/^\+/$mailpath/g;
	$nmzfolder =~ s/^\+/$namazupath/g;

	create_folder($nmzfolder);

	opendir(DIR,$msgfolder);
	@filelist = grep(/^[0-9]*$/ && -f "$msgfolder/$_",readdir(DIR));
	closedir(DIR);

	if ( scalar(@filelist) > 0 ){
	    open(TEMPFILE,">$tempfile");
	    foreach ( @filelist ){
		print TEMPFILE "$msgfolder/$_\n";
	    }
	    close(TEMPFILE);
	    
	    print "$Prog: processing $msgfolder ...\n";
	    if ( $incfile eq "" ){
#		print "mknmz $mknmz_args -O $nmzfolder -F $tempfile $msgfolder\n";
		$ret = system "mknmz $mknmz_args -O $nmzfolder -F $tempfile $msgfolder";
	    } else {
#		print "mknmz $mknmz_args -O $nmzfolder -F $tempfile -I $incfile $msgfolder\n";
		$ret = system "mknmz $mknmz_args -O $nmzfolder -F $tempfile -I $incfile $msgfolder";
	    }
	    unlink $tempfile;
	    if ( $ret == 2 ){
		print "$Prog: abort.\n";
		last;
	    }
	}
    }
}
close(FILE);

# immknmz ends here.


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