EmacsFR  ·   Vim  ·   GnusFR  ·   OutLookFR    ConviMailers United  
Mutt ? Parce que je le vaux bien !

Mutt french Page
Sur ce site : docs, liens et astuces sur Mutt et tous les softs associés (Vim, Emacs, MTAs, GNU-PG/PGP etc.). Bonne visite !



daCode CVS
 - [112] Articles

 - Proposer une dépêche
 - Proposer un sondage

Thèmes
 - Crypto et Privacy
 - daCode
 - Emacs
 - fetchmail
 - Mutt add-ons
 - bugs, failles, problèmes
 - Muttfr
 - Mutt Tips
 - Mutt et VIM
 - Procmail Tips

 ((Linux Magazine France parle de mutt))
Posté par Emmanuel Seyman. Approuvé le Vendredi 12 Juillet à 00:08 [M]
Dépt: Presse
muttfr Le numéro 41 de Linux Magazine France contient un article sur Mutt.
David Obadia est l'auteur d'un artcle relativement court (une page) mais très intéressant sur la variable query_command de mutt qui permet de completer une adresse e-mail comme un shell complete le nom d'une commande.
1 commentaire

<< Ajouter un alias à partir du fichier d'alias mutt   Abook >>


Envoyer à un ami
Imprimer

Liens proposés
 - gnu.org/copyleft/gpl.html>


Linux Magazine France parle de mutt | Nouveau Compte | 1 commentaire
Masquer les signatures: Score:
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.


Script (Score: 3) - Vendredi 12 Juillet à 14:18
Ajouté par Emmanuel Seyman ( #75 ) Voir les commentaires

David m'a envoyé le script dont il parle dans l'article mais qui n'est pas repris. Merci à lui.

#!/usr/bin/perl
# Mutt Wrapper for searching addresses in the mail directory.
#
# Distributed under the GNU GPL <www.gnu.org/copyleft/gpl.html>
# by David Obadia <david@odav.org>
#
# Add 'set query_command="perl ~/bin/mutt_grep_mailbox_wrapper.pl ~/Mail %s"'
# in your ~/.muttrc, assuming that ~/Mail is your mailbox directory.
#
# If you prefix your search pattern by the word "rehash ", or if the
# $cache_file is older than $expiration, the mailboxes will be
# reprocessed.
#
# The search pattern is a perl regex. If you're looking for David Obadia
# (that's me :)), you can for example use dav.*ob and hit <Ctrl+T> for
# mutt to call the wrapper.
#
# The database (if I may call it so) uses the E-mail addresses as unique
# keys. Therefore, if an E-mail appears with several different names, the
# wrapper will take the last one in the mailbox scanning order. If you are
# not satisfied with it, you can manually edit the database (it's a flat
# file) and change it. The wrapper will *NOT* override your changes during
# the next scan.
#
# Created: Mon, 27 Nov 2000 17:16:02 +0100
# Modified: Mon, 3 Jun 2002 18:21:02 +0200

use strict;
use DirHandle;
use FileHandle;
use MIME::QuotedPrint;

my $mailbox_directory = shift;
my $pattern = join (' ', @ARGV);
my $cache_file = $ENV{'HOME'} . '/.mutt_grep_mailbox_wrapper.db';
my $expiration = 60 * 60 * 24 * 7; # One week
my $rehash = 1;
my $discard = '---';

if ($pattern =~ /^rehash/)
{
$rehash = 0;
$pattern =~ s/^rehash\ +//;
}

sub lower_case_email
{
my ($login, $domain) = split ('@', $_[0], 2);
$domain = lc $domain;
$_[0] = $login . '@' . $domain;
return $_[0];
}

sub retrieve
{
my $file = new FileHandle shift;
my $data = {};
while (my ($email, $name) = split (/\s/, scalar <$file>, 2))
{
lower_case_email $email;
chomp $name;
$data->{$email} = $name;
}
undef $file;
return $data;
}

sub store
{
my $data = shift;
my $file = new FileHandle '> ' . shift;
foreach my $email (sort keys %$data)
{
print $file $email . "\t" . $data->{$email} . "\n";
}
undef $file;
return 1;
}

sub process_mailbox
{
my $data = shift;
my $tmp_data = shift;
my $mailbox = shift;
return unless -f $mailbox;
my $file = new IO::File $mailbox or die $!;
my $some_more = 0;

while (my $line = <$file>)
{
if ($line =~ /^(From|To|Cc|Bcc): (.*)$/i
or ($some_more and $line =~ /^(.*)$/i))
{

if ($some_more)
{
$line = $1;
}
else
{
$line = $2;
}

chomp $line;

if ($line =~ /,\s*$/)
{
$some_more = 1;
}
else
{
$some_more = 0;
}

foreach my $address (split (/\s*,\s*/, $line))
{
$address =~ s/"//g;
$address =~ s/^\s+//;
$address =~ s/\s+$//;
$address =~ s/\s+/\ /g;
if ($address =~ /^(.*)\s*<(.*@.*)>$/)
{
my ($name, $email) = ($1, $2);

$name =~ s/=\?\S+\?Q\?//g;
$name =~ s/\?=//g;
$name = decode_qp($name);

next
unless $name =~
/^([a-z]|[A-Z]|[0-9]|à|é|è|ê|ë|ç|\s|\-|\(|\)|\.|')+$/;

$name =~ s/^'//;
$name =~ s/'$//;
$name =~ s/^\s+//;
$name =~ s/\s+$//;

lower_case_email $email;

if ($tmp_data->{$email})
{
$data->{$email} = $tmp_data->{$email};
}
else
{
$data->{$email} = $name;
}
}
}
}
}
undef $file;
}

sub process_mailbox_directory
{
chdir($mailbox_directory) or die $!;
if (-f $cache_file
&& time() - (lstat($cache_file))[9] < $expiration
&& $rehash)
{
return (retrieve($cache_file));
}
else
{
my $data = {};
my $tmp_data = {};

if (-f $cache_file)
{
$tmp_data = retrieve($cache_file);
}

my $directory = new DirHandle '.';
while (my $mailbox = $directory->read())
{
process_mailbox($data, $tmp_data, $mailbox)
unless $mailbox eq 'Spam';
}
undef $directory;

store($data, $cache_file) or die $!;
return ($data);
}
}

my $data = process_mailbox_directory();

exit 1 unless $pattern;

print 'Searching database ... ' . scalar(keys(%$data)) . ' entries:' . "\n";
foreach my $email (sort keys %$data)
{
if (($email =~ /$pattern/i or $data->{$email} =~ /$pattern/i)
and $data->{$email} ne $discard)
{
print $email . "\t" . $data->{$email} . "\n";
}
}
[ Répondre ]




<< Ajouter un alias à partir du fichier d'alias mutt  Abook >>



© 2001-2002 MuttFr.org - Ce document peut être reproduit par n'importe quel moyen que ce soit, pourvu qu'aucune modification ne soit effectuée et que cette notice soit préservée.