[Mew-dist 1781] Re: Delete Mail in +trash

Shinji Kawakami kawakami at example.com
1997年 8月 29日 (金) 12:47:16 JST


In article <19970829113309Z.kazu at example.com> Mew-dist 1772,
	   [Kazu Yamamoto (山本和彦) <Kazu at example.com>] writes:
> > ぐっとくるかどうかは分かりませんが…
> > mew-mark.elを眺めていたら +trash folderだったら Deleteしないような
> > 記述がありました。だったら、+trash folderだったら本当に削除してしまえば
> > いいのではと思い以下のようにしてみました。
> 
> 削除に関して、みなさんこれでいいですか?

miya at example.com さんのコードだと、trash folder の中身がすべて、
D mark してないにも関らず消えてしまいませんか?

私が、1.85がでてすぐに出した、[Mew-dist 1211]の案はいかがでしょう?
つまり trash folder で、D mark したものだけを本当に消すという案です。

指定のファイルだけ unlink する IM (MHでいうところの、rmm)をを作って
呼び出す形にするとか…。
# 勝手に、imrmm と命名して作っちゃいました。(^-^;
# 元は、imrm か immv だったと思う…。

そのパッチです。

# あと、imrm を呼び出す関数が欲しいな…。

-- 
河上眞二               JEOL System Technology Co.,Ltd.
Shinji Kawakami       Semiconductor Engineering Group
kawakami at example.com, include at example.com(Private)


-------------- next part --------------
*** mew-mark.el.ORIG	Tue Aug 26 09:56:51 1997
--- mew-mark.el	Fri Aug 29 12:37:50 1997
***************
*** 497,508 ****
  	;;
  	;; delete at once
  	;;
! 	(if (and dels (not (equal src mew-trash-folder)))
! 	    (apply (function call-process)
! 		   mew-prog-immv nil nil nil
! 		   (format "--src=%s" src)
! 		   mew-trash-folder
! 		   dels))
  	;;
  	;; ending...
  	;;
--- 497,514 ----
  	;;
  	;; delete at once
  	;;
! 	(if dels
! 	    (if (equal src mew-trash-folder)
! 		(apply (function call-process)
! 		       mew-prog-imrmm nil nil nil
! 		       (format "--src=%s" src)
! 		       dels)
! 	      ;; else (src folder is not trash folder)
! 	      (apply (function call-process)
! 		     mew-prog-immv nil nil nil
! 		     (format "--src=%s" src)
! 		     mew-trash-folder
! 		     dels)))
  	;;
  	;; ending...
  	;;
-------------- next part --------------
*** mew.el.ORIG	Tue Aug 26 09:59:26 1997
--- mew.el	Fri Aug 29 12:37:12 1997
***************
*** 407,412 ****
--- 407,413 ----
  (defvar mew-prog-impath      "impath")
  (defvar mew-prog-impack      "impack")
  (defvar mew-prog-immv        "immv")
+ (defvar mew-prog-imrmm       "imrmm")
  (defvar mew-prog-imput       "imput")
  (defvar mew-prog-imsort      "imsort")
  (defvar mew-prog-imgrep      "imgrep")
-------------- next part --------------
#! /usr/local/bin/perl
################################################################
###
###				imrmm
###
###	      Copyright (C) 1997  Internet Message Group
### 
###		     This Perl5 library conforms
###		GNU GENERAL PUBLIC LICENSE Version 2.
###
###
### Author:  Internet Message Group <img at example.com>
### Created: Apr 23, 1997
### Revised: Jul  1, 1997
### 

my $VERSION = "imrmm version 970701";

$Prog = 'imrmm';

##
## Require packages
##

use IM::Config;
use IM::Folder;

##
## Environments
##

#$DEBUG    = 1;
%NewMsgCache = ();

$EXPLANATION = "
$Prog :: Internet Message Remove Message
$VERSION

Usage: $Prog [options] msgs...
";

@OptConfig = (
    'noharm;b;;' => "Display the commands but do not actually execute them.",
    'src;F;;'    => "Set source folder.",
    'help;b;;'   => "Show this message.",
    );

##
## Profile and option processing
##

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

##
## Main
##

@ARGV    || im_die "no message specified.\n";

@msgs  = @ARGV;
$msgs  = \@msgs;

imrmm($opt_src, $msgs);
exit $EXIT_SUCCESS;

##################################################
##
## Work horse
##
sub imrmm
{
    my ($src, $msgs) = @_;
    my @msg_paths;

    chk_folder_existance($src);             # not return in case false.
    chk_msg_existance($src, @{$msgs});      # not return in case false.
    
    @msg_paths = impath($src, @{$msgs});

    foreach (@msg_paths){
	$opt_noharm ? print "unlink $_\n" :
	    unlink($_) || die $@;
    }
}

sub printd
{
    print STDERR @_ if $DEBUG;
}

##
## Check folder existance.
##
sub chk_folder_existance
{
    my @folders = @_;
    my $path;

    printd("chk_folder_existance: folder: @folders\n");

    foreach (@folders){
	$path = impath($_);

	im_die "no folder $_. (Nothing was removed.)\n"
	    if (!-d $path);
	im_die "folder $_ is not writable. (Nothing was removed.)\n"
	    if (!-w $path);
    }
    printd("chk_folder_existance: OK.\n");
}

sub chk_msg_existance
{
    my $folder = shift;
    my @paths  = impath($folder, @_);

    printd("chk_msg_existance: folder: $folder msg: @_\n");

    foreach (@paths){
	im_die "message specification error in $folder. (Nothing was removed.)\n"
	    if (!-f $_);
    }
    printd("chk_msg_existance: OK.\n");
}

sub impath
{
    my $folder = shift;
    my @msgs  = @_;
    my @paths;

    printd("impath: folder: $folder msgs: @msgs\n");
    @paths = get_message_paths($folder, @msgs);
    printd("impath: paths: @paths\n");

    return wantarray ? @paths : $paths[0];
}



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