Le Monday 23 Aug 2010 à 09:53:06 (+0200), David Soulayrol a écrit : [...] > J'utilise une configuration similaire (encore que je penche maintenant > plutôt pour addressbook sous emacs), mais je l'exploite actuellement > très peu et justement je suis en train d'essayer de compléter cet > aspect de mon environnement. Pourrais-tu partager les méthodes et les > scripts que tu utilises pour faire le liant entre les outils ? > Pour info : http://github.com/dsoulayrol/config Salut, Bien sur, avec plaisir : - Configuration msmtp : plutot que d'utiliser un serveur de messagerie, je préfère utiliser msmtp car il permet de choisir un serveur SMTP en fonction de l'adresse utilisée pour rédiger les messages. Ainsi, quelque soit le profil mutt utilisé, lorsque je rédige un message, il est envoyé à travers le bon serveur (sous réserve que la connexion courante le permette). De plus, les scripts msmtpq et msmtpQ fournis avec le paquet permettent de gérer une file d'attente des messages en cours d'envoi si le serveur SMTP n'est pas accessible). Le fichier de configuration principal ~/.msmtprc contient la définition des différents serveurs SMTP à utiliser en focntion de l'adresse d'expéditeur. Je commence par lui donner l'emplacement des certificats TLS valides (mon serveur SMTP perso n'est utilisable qu'avec TLS). Ensuite, je déclare les deux principaux comptes SMTP à utiliser. J'ai crée un sous répertoire ~/.msmtp pour regrouper les fichiers de log et les fichiers de la file d'attente : ------------------------------------------------------------------- # Set default values for all following accounts. defaults tls on tls_trust_file /etc/ssl/certs/ca-certificates.crt logfile ~/.msmtp/msmtp.log account Cerbelle host smtp.cerbelle.net port 25 from francois@cerbelle.net auth login user francois@cerbelle.net password xxxxxx tls_starttls on tls_certcheck on account Boulot host smtp.boulot.fr port 25 from francois.cerbelle@boulot.fr auth plain user fcerbell password xxxxxx tls_starttls on tls_certcheck on account default : Cerbelle ------------------------------------------------------------------- Ensuite, j'ai recopié le script msmtpq (servant à gérer la file d'attente des messages) dans mon répertoire perso ~/bin (accessible par le PATH). J'ai modifié la ligne 33 pour indiquer au script l'emplacement des fichiers de la file d'attente : Q=~/.msmtp/queue # the queue - modify this to reflect where you'd like it to be et j'ai crée ce sous-répertoire. ------------------------------------------------------------------- Ensuite, j'ai recopié le script msmtpQ (servant à envoyer les messages grâce à msmtp vers le serveur SMTP aproprié ou à mettre le message en file d'attente si le serveur SMTP est inaccessible) dans mon répertoire perso ~/bin (accessible par le PATH). J'ai modifié les lignes 35 et 36 pour indiquer au script l'emplacement des fichiers de la file d'attente et de son fichier de log : Q=~/.msmtp/queue LOG=~/.msmtp/queue.log - configuration de imapfilter : Mon serveur de messagerie gere le classement des messages avec des filtres Sieve (Dovecot). Je n'ai donc pas besoin de gérer cela avec imapfilter. Mon but est de limiter au maximum le volume de données échangées lorsque je suis en itinérance (ca coute cher depuis l'étranger). Donc le classement est déjà fait automatiquement par le serveur. Par contre, j'utilise imapfilter pour définir des règles d'archivage et de purge automatique des message : Cerbelle = IMAP { server = 'imap.cerbelle.net', username = 'francois@cerbelle.net', password = 'xxxxxx', ssl = 'ssl3' } -- -- Archivages / Purges -- -- Messages reçus results = Cerbelle['INBOX/Lus']:is_older(365) Cerbelle['INBOX/Lus']:move_messages(Cerbelle['Archives/INBOX'], results) -- Messages envoyés results = Cerbelle['Sent']:is_older(365) Cerbelle['Sent']:move_messages(Cerbelle['Archives/Sent'], results) -- Humour results = Cerbelle['INBOX/humour']:is_older(365) Cerbelle['INBOX/humour']:move_messages(Cerbelle['Archives/humour'], results) -- Corbeille results = Cerbelle['Trash']:is_older(30) Cerbelle['Trash']:delete_messages(results) -- Suivi des systèmes results = Cerbelle['INBOX/logcheck']:is_older(10) Cerbelle['INBOX/logcheck']:delete_messages(results) -- Liste Parinux / Linux results = Cerbelle['INBOX/Lists/Parinux']:is_older(30) Cerbelle['INBOX/Lists/Parinux']:delete_messages(results) -- Liste Debian / User-fr results = Cerbelle['INBOX/Lists/Debian/User-fr']:is_older(30) Cerbelle['INBOX/Lists/Debian/User-fr']:delete_messages(results) -- Marquage commu lu des spams et de la corbeille results = Cerbelle['Junk']:is_unseen() Cerbelle['Junk']:mark_seen(results) results = Cerbelle['Trash']:is_unseen() Cerbelle['Trash']:mark_seen(results) - configuration de offlineimap : OfflineImap me permet de créer une copie locale synchronisée de certains répertoires IMAP. Ainsi, je ne synchronise pas le répertoire des archives qui est trop gros et qui génererait un enorme volume de transfert, au pire, j'y accede en direct. Je ne synchronise que les répertoires vivants de mes comptes imap en local. Ensuite, mutt pourra se connecter soit sur la copie locale, soit sur le serveur (voire meme les deux). Je place cette copie synchronisée dans le sous-répertoire ~/.offlineimap Il faut créer un sous-répertoire ~/.offlineimap/cache Voici un extrait de mon fichier de configuration offline imap : [general] accounts = Free, GMail, Cerbelle, Boulot maxsyncaccounts = 4 ################### # Free ################### [Account Free] localrepository = LocalFree remoterepository = RemoteFree [Repository LocalFree] type = Maildir localfolders = ~/.offlineimap/Cache/Free [Repository RemoteFree] type = IMAP remotehost = imap.free.fr remoteuser = fcerbell remotepass = xxxxxxxx #ssl = yes ################### # GMail ################### [Account GMail] localrepository = LocalGMail remoterepository = RemoteGMail [Repository LocalGMail] type = Maildir localfolders = ~/.offlineimap/Cache/GMail [Repository RemoteGMail] type = Gmail remoteuser = francois.cerbelle remotepass = xxxxxxxx # on ne synchronise pas les dossiers virtuels folderfilter = lambda foldername: foldername not in ['[Gmail]/Tous les messages', '[Gmail]/Suivis' ] ################### # Cerbelle ################### [Account Cerbelle] localrepository = LocalCerbelle remoterepository = RemoteCerbelle [Repository LocalCerbelle] type = Maildir localfolders = ~/.offlineimap/Cache/Cerbelle [Repository RemoteCerbelle] type = IMAP remotehost = imap.cerbelle.net remoteuser = francois@cerbelle.net remotepass = xxxxxxxx ssl = yes # ne synchronise pas les archives et les spams détectés par Amavis/SA folderfilter = lambda foldername: not re.search('(dovecot.sieve|Archives.*|Junk)', foldername) ################### # Boulot ################### [Account Boulot] localrepository = LocalBoulot remoterepository = RemoteBoulot [Repository LocalBoulot] type = Maildir localfolders = ~/.offlineimap/Cache/Boulot [Repository RemoteBoulot] type = IMAP remotehost = imap.boulot.fr remoteuser = fcerbell remotepass = xxxxxxxx ssl = yes folderfilter = lambda foldername: not re.search('INBOX.Archives(|INBOX|.*)', foldername) - configuratioa de muttprint : pour imprimer de jolis messages depuis mutt, je n'ai rien fait de terrible ici, juste changé le logo et l'encadrement des en-tetes. J'ai recopié le fichier /etc/Muttprintrc dans ~/.muttprintrc et j'ai modifié les lignes suivantes : PRINTER="lp1" PRINT_COMMAND="lpr -P$PRINTER" PENGUIN="/shares/common/logo/MonLogo.eps" FRONTSTYLE="Ovalbox" - configuration de abook : pour gérer mon carnet d'adresses. J'ai juste recompilé le paquet debian en modifiant la taille maximal des commentaires dans les sources du soft (en dur). Je voulais plus de place. Ensuite, j'ai choisi de mettre les dates de naissances dans un champs personnalisé déclaré dans ~/.abook/abookrc : customfield 1 Naissance Ce sont ces dates de naissance qui seront utilisées pour remplir le calendrier. L'idéal est de saisir des dates complètes au format francais (JJ/MM/AA ou JJ/MM/AAAA). - configuration de mutt/muttprofile : j'ai défini deux profiles pour chaque compte : un profile "online" pour que mutt se connecte directement sur le serveur IMAP pour tous les dossiers du compte et un profil "offline" pour que mutt se connecte à la copie locale synchronisée par offlineimap pour les dossiers synchronisés mais propose aussi une connexion directe sur le serveur pour accéder aux dossiers non synchronisés (Archives par exemple). J'ai donc de nombreux fichiers : ~/.muttrc (fichier contenant toutes les configuration globales à tous les comptes de mutt). Les lignes importantes sont des inclusions d'autres fichiers (scoring, couleurs, configuration de la barre laterale de mutt-patched, ...) et des configuration génériques pour lier les outils entre eux. Voici les principales lignes : source /etc/Muttrc source $HOME/.mutt/scoring source $HOME/.mutt/colors source $HOME/.mutt/sidebar set print_command="muttprint" ########################################################## # Contacts ########################################################## # Alias set alias_file= ~/.mutt/aliases set sort_alias= alias set reverse_alias=yes source $alias_file # Abook macro pager A |'abook --add-email'\n macro index A |'abook --add-email'\n ########################################################## ########################################################## # Chiffrement / Signature électronique ########################################################## # auto sign outgoing set crypt_autosign=yes # auto check old signatures set pgp_auto_decode=yes ########################################################## ######################################################## # Préférences d'affichage ######################################################## # Headers to ignore/see # Ignore everything but the really important lines: ignore * unignore from: date subject to cc reply-to: mail-followup-to: sender: unignore organization organisation unignore user-agent: x-agent: x-mailer: x-newsreader: x-mailing-list: x-editor unignore newsgroups: posted-to: x-spam-rule: X-Spam-Status: X-SpamProbe: unignore priority: importance: # recognize CCs from Usenet: unignore message-id: newsgroups: posted-to: posted-and-mailed: unignore x-also-posted-to: # this identifies mailing lists - # see also: 'followup_to' and 'honor_followup_to' unignore mail-followup-to: # Display the delivery address. I need to see this # from time to time with spams that get into my mailbox. *sigh* unignore delivered-to # Display the languages that the reader knows about. # Netscape/Mozilla adds this to the header. # Example: "X-Accept-Language: en" unignore x-accept-language # ordering of headers in the pager unhdr_order * hdr_order Date: Subject: From: To: Cc: X-Newsreader: X-Mailer: Organization: Organisation: User-Agent: Newsgroups: Reply-To: X-Spam-Status: x-spam-rule: x-SpamProbe: # I like plaintext more than html. alternative_order text/plain text/html text # Index lines on top of message body set pager_index_lines=7 # locales FR pour les nom des jours et mois set locale="fr_FR" # Format de date set date_format="%A %d %b %Y à %H:%M:%S (%Z)" # phrase d'intro pour réponse quotée set attribution="Le %d, %n a écrit :" set forward_format="[Fwd: %s]" ######################################################## # # Fréquence de vérification de nouveaux messages set mail_check=5 # keep a cache of headers for faster loading (1.5.9+?) set header_cache="~/.mutt/cache/" # keep a cache of messages for faster loading (1.5.12+?) set message_cachedir="~/.mutt/cache/" # Display download progress every 5K set net_inc=5 # Ne deplace pas automatiquement les messages lus set move=no # indente les messages transmis en inline set forward_quote # Attach forwarded messages and its attachments set mime_forward = yes set mime_forward_rest = yes set delete=yes set confirmappend=no set sort=threads set sort_aux=reverse-date-sent ################################################# # Profile ################################################# # Cette ligne est importante pour que MSMTP puisse choisir le serveur SMTP à # utiliser en fonction de l'adresse d'expéditeur set envelope_from=yes source ~/.mutt/profile.active ################################################## Je te passe le fichier de définition des couleurs et des scorings Voici ma configuration de la barre latérale mutt-patched : # set up the sidebar, default not visible set sidebar_width=30 set sidebar_visible=yes set sidebar_delim='|' # color of folders with new mail color sidebar_new yellow default # ctrl-n, ctrl-p to select next, prev folder # ctrl-o to open selected folder bind index \CP sidebar-prev bind index \CN sidebar-next bind index \CO sidebar-open bind pager \CP sidebar-prev bind pager \CN sidebar-next bind pager \CO sidebar-open # I don't need these. just for documentation purposes. See below. # sidebar-scroll-up # sidebar-scroll-down # B toggles sidebar visibility macro index B '<enter-command>toggle sidebar_visible<enter>' macro pager B '<enter-command>toggle sidebar_visible<enter>' Ensuite, j'ai crée un fichier de configuration pour chaque identité. Il regroupe les configurations spécifiques à chaque identité, en faisant abstraction de la méthode de connexion (Offline / Online). Voici mon fichier pour l'identité principale (.mutt/param.cerbelle) : # Initial Mailbox to open set spoolfile=+INBOX my_hdr X-Operating-System: `uname -a` set realname="François Cerbelle" set from="francois@cerbelle.net" set signature="fortune ~/MesDocs/citations/|" # Déclaration de toutes les boites aux lettres dont on dispose # d'une copie locale (elle sont à la fois en local et sur le serveur) mailboxes `(cd ~/.offlineimap/Cache/Cerbelle/; ls | awk '{printf ("=%s ",$1)}')` # Déclaration manuelle des boites aux lettres se trouvant uniquement sur le serveur mailboxes imaps://imap.cerbelle.net/Junk mailboxes imaps://imap.cerbelle.net/Archives.dyndns mailboxes imaps://imap.cerbelle.net/Archives.humour mailboxes imaps://imap.cerbelle.net/Archives.icann mailboxes imaps://imap.cerbelle.net/Archives.linuxcounter mailboxes imaps://imap.cerbelle.net/Archives.INBOX mailboxes imaps://imap.cerbelle.net/Archives.Sent set imap_user=francois@cerbelle.net set imap_pass=xxxxxxxx # ainsi, si le prefix = est le chemin local, mutt dispose des boites aux # lettres locales synchronisées et des boites aux lettres distantes non # synchronisées, sinon, si le prefix = est une chaine de connexion # distante, mutt dispose de la lsite des BAL sur le serveur save-hook . =INBOX.Lus folder-hook = 'set sort=threads' folder-hook = 'set trash="=Trash"' folder-hook = 'set realname="François Cerbelle"' folder-hook =Sent 'set sort=reverse-date' folder-hook =Drafts 'set sort=reverse-date' folder-hook imaps://imap.cerbelle.net/Junk 'set sort=reverse-date' folder-hook =Trash 'set sort=reverse-date' folder-hook =Trash 'unset trash' # Configuration par défaut # (les hooks ne s'appliquent pas à l'ouverture) set trash="=Trash" set record="=Sent" set postponed="=Drafts" ################################################## # Macros perso ################################################## # Spams macro index S simaps://imap.cerbelle.net/Junk<enter> macro pager S simaps://imap.cerbelle.net/Junk<enter> # La boite aux lettre SPam sur le serveur sert à alimenter un # apprentissage de SpamAssassin, autant la mettre à jour. ################################################## lists debian-user-fr subscribe debian-user-fr folder-hook =INBOX.Lists.Debian.User-fr 'set realname=Fanfan' lists linux subscribe linux folder-hook =INBOX.Lists.Parinux 'set realname="Fanfan"' # vim: set syntax=muttrc: Maintenant, il faut aussi définir deux profiles pour cette identité, un local et un distant. Voici la déclaration locale dans le fichier ~/.mutt/profile.cerbelle_local : # NAME: 1 # DESC: Cerbelle # Mail folder set folder=$HOME/.offlineimap/Cache/Cerbelle/ # SMTP server #set smtp_url="smtp://francois@cerbelle.net@imap.cerbelle.net" #set smtp_pass=xxxxxxxx #set sendmail=/usr/bin/msmtp # Utilisation du script Msmtp avec gestion de file d'attente set sendmail=~/bin/msmtpQ # Chargement des parametres globaux de l'identité source $HOME/.mutt/param.cerbelle La meme chose pour la connexion distante de l'identité principale : # NAME: S1 # DESC: Cerbelle (Online) # Mail folder set folder=imaps://imap.cerbelle.net/ set imap_user=francois@cerbelle.net set imap_pass=xxxxxxxx # SMTP server set smtp_url="smtp://francois@cerbelle.net@smtp.cerbelle.net" set smtp_pass=xxxxxxxx source $HOME/.mutt/param.cerbelle Et voila, On a déja tout ce qu'il faut pour purger/archiver automatiquement les messages dans les dossiers imap du serveur, créer une copie locale synchronisée des dossiers IMAP principaux du serveur, consulter les messages de chaque identité soit directement sur le serveur, soit en hybride (local pour ce qui est synchronisé, serveur pour ce qui ne l'est pas), envoyer des messages en utilisant un serveur SMTP choisi en fonction de l'expéditeur, gérer une file d'attente pour pouvoir quand meme envoyer des messages hors-connexion. - configuration de remind : J'utilise le fichier principal de remind (~/.reminders) pour inclure des configurations séparées (couleurs, ...), des evenements automatiques (anniversaires, fetes, ...) et pour déclarer mes évenements manuels. Voici son contenu : ########################################################################## # Fonctions génériques ########################################################################## INCLUDE /home/fcerbell/.remind/generic.rem INCLUDE /home/fcerbell/.remind/colors.rem ########################################################################## # Ajout d'affichages (Soleil, Lune, ...) ########################################################################## INCLUDE /home/fcerbell/.remind/affichages.rem ########################################################################## # Anniversaires ########################################################################## MSG [BrCyn]Anniversaires[Nrm]%"%"% INCLUDE /home/fcerbell/.remind/birthdays.rem REM 24 MSG %"[_mo_age(04,2009)] mois Angelina%" (%b)% MSG [BrCyn]Fêtes[Nrm]%"%"% ########################################################################## # Dates des fêtes religieuses, légales et des fériés ########################################################################## INCLUDE /home/fcerbell/.remind/dates.rem ########################################################################## # Fêtes du jour ########################################################################## INCLUDE /home/fcerbell/.remind/fetes.rem ########################################################################## # Tâches ########################################################################## MSG [BrCyn]Agenda[Nrm]%"%"% REM Aug 5 2010 +1 AT 09:30 DURATION 1:00 MSG %"Saint-Lazare %" 52€ %b% REM Aug 10 2010 +1 AT 09:23 DURATION 1:00 MSG Arrivée %"Irina %" %b% Le répertoire ~/.remind contient les fichiers à inclure. Le fichier ~/.remind/generic reprend des définitions trouvées dans /usr/share/doc/remind/examples/def.rem.gz dont je vais avoir besoin par la suite et les adapte éventuellement : SET Quote CHAR(34) SET Week_1 1 SET Week_2 8 SET Week_3 15 SET Week_4 22 FSET _last(mo) "1 " + MON((mo%12)+1) + " --7" FSET _trig() TRIGGER(TRIGDATE()) FSET _back(days) TRIGGER(TODAY()-days) FSET _am_pm(tm) IIF(tm<01:00, tm+12*60+"am", \ tm<12:00, tm+"am", \ tm<13:00, tm+"pm", \ tm-12*60+"pm") FSET _no_lz(s) IIF(SUBSTR(s, 1, 1)=="0", SUBSTR(s, 2), s) FSET _light_len(date) MAX(SUNSET(date)-SUNRISE(date), 0) FSET _dark_len(date) 1440-_light_len(date) FSET _yr_age(yr) YEAR(TRIGDATE()) - yr FSET _mo_age(mo, yr) 12 * (YEAR(TRIGDATE()) - yr) + MONNUM(TRIGDATE()) - mo REM Sat Sun SPECIAL SHADE 220 Le fichier ~/.remind/colors.rem contient la définition des couleurs ANSI trouvée dans le fichier def.rem.gz : SET Esc CHAR(27) SET Nrm Esc + "[0m" SET Blk Esc + "[0;30m" SET Red Esc + "[0;31m" SET Grn Esc + "[0;32m" SET Ylw Esc + "[0;33m" SET Blu Esc + "[0;34m" SET Mag Esc + "[0;35m" SET Cyn Esc + "[0;36m" SET Wht Esc + "[0;37m" SET Gry Esc + "[30;1m" SET BrRed Esc + "[31;1m" SET BrGrn Esc + "[32;1m" SET BrYlw Esc + "[33;1m" SET BrBlu Esc + "[34;1m" SET BrMag Esc + "[35;1m" SET BrCyn Esc + "[36;1m" SET BrWht Esc + "[37;1m" Le fichier ~/.remind/affichages.rem contient des adaptations de configurations trouvées de ci de la pour ajouter les heures de lever/coucher du soleil en Postscript, la durée d'illumination, la date de la prochaine lune, ... [trigger(moondate(0))] SPECIAL MOON 0 [trigger(moondate(1))] SPECIAL MOON 1 [trigger(moondate(2))] SPECIAL MOON 2 [trigger(moondate(3))] SPECIAL MOON 3 SET $LongDeg 2 SET $LongMin 19 SET $LongSec 00 SET $LatDeg 48 SET $LatMin 52 SET $LatSec 00 REM PS Border Border BoxHeight add 10 sub moveto \ /SmallFont findfont 4 scalefont setfont \ (Soleil de [sunrise(trigdate())] à [sunset(trigdate())] ([(sunset(trigdate())-sunrise(trigdate()))-(sunset(trigdate()-1)-sunrise(trigdate()-1))] min.)) show MSG [BrYlw]Soleil de [sunrise(trigdate())] à [sunset(trigdate())] ([(sunset(trigdate())-sunrise(trigdate()))-(sunset(trigdate()-1)-sunrise(trigdate()-1))] min.)[Nrm], [BrWht]Prochaine pleine lune le [day(moondate(2))]/[monnum(moondate(2))][Nrm].%"%"% FSET _DayOfYear(x) x-(date(year(x),1,1) - 1) REM PS BoxWidth 3 mul 4 div Border BoxHeight add 10 sub moveto \ /SmallFont findfont 4 scalefont setfont \ ( [_DayOfYear(today())] ([365+isleap(today())-_DayOfYear(today())])) show Le fichier ~/.remind/dates.rem contient les fêtes légales, fêtes religieuses et dates particulières qui m'intéressaient. J'ai fabriqué ce fichier grace aux informations trouvées dans Wikipedia (Fetes fixes et mobiles, dates des changement de saison, ...) : ############################################################################# # Fetes religieuses Chrétiennes Catholiques ############################################################################# # Fetes fixes REM Jan 6 MSG %"Épiphanie%"% REM Feb 2 MSG %"Chandeleur%"% REM Mar 25 MSG %"Annonciation%"% REM Jun 24 MSG %"St.Jean-Baptiste%"% REM Aug 6 MSG %"Transfiguration%"% REM Aug 15 MSG %"Assomption%" de Marie% REM Nov 1 MSG %"Toussaint%"% REM Dec 8 MSG %"Immaculée conception%"% REM Dec 25 MSG %"Noël%"% # Fêtes mobiles basées sur Noël REM Sun Dec 18 MSG %"Avent%" (4ème dimanche)% REM Sun Dec 11 MSG %"Avent%" (3ème dimanche)% REM Sun Dec 4 MSG %"Avent%" (2ème dimanche)% REM Sun Nov 27 MSG %"Avent%" (1er dimanche)% REM Sun Nov 20 MSG Fête du %"Christ Roi%"% # Fêtes mobiles basées sur Pâques%" SET easter EASTERDATE(YEAR(TODAY())) REM [TRIGGER(easter-63)] MSG %"Septuagénisme%"% REM [TRIGGER(easter-47)] MSG %"Mardi gras%"% REM [TRIGGER(easter-46)] MSG Mercredi des %"Cendres%"% REM [TRIGGER(easter-7)] MSG Dimanche des %"Rameaux%"% REM [TRIGGER(easter)] +8 MSG %"Semaine Sainte%"% REM [TRIGGER(easter-3)] MSG %"Jeudi saint%"% REM [TRIGGER(easter-2)] MSG %"Vendredi saint%"% REM [TRIGGER(easter)] MSG Dimanche de %"Paques%"%"% REM [TRIGGER(easter+1)] MSG %"Lundi de Paques%"% REM [TRIGGER(easter+7)] MSG %"Divine miséricorde%"% REM [TRIGGER(easter+36)] MSG %"Rogations%"% REM [TRIGGER(easter+37)] MSG %"Rogations%"% REM [TRIGGER(easter+38)] MSG %"Rogations%"% REM [TRIGGER(easter+39)] MSG Jeudi de l'%"Ascension%"% REM [TRIGGER(easter+49)] MSG %"Pentecote%"% REM [TRIGGER(easter+50)] MSG %"Lundi de Pentecote%"% REM [TRIGGER(easter+56)] MSG %"Sainte trinité%"% REM [TRIGGER(easter+60)] MSG %"Fête-Dieu%"% ############################################################################# # Autres fêtes ############################################################################# REM Jan 7 MSG %"Noël orthodoxe%"% REM Feb 14 MSG %"St.Valentin%"% REM Mar 7 MSG %"Fête des grand-mères%"% REM Mar 17 MSG %"St. Patrick%"% REM Apr 1 MSG %"Poisson d'Avril%"% REM Sun May [Week_2] MSG %"Fete des meres%"% REM Sun Jun [Week_3] MSG %"Fete des peres%"% REM Jun 24 MSG Feux de la %"St. Jean%"% REM Oct 30 MSG %"Mischief Night%"% REM Oct 31 MSG %"Halloween%"% REM Thu Nov [Week_4] SCANFROM [_back(7)] SATISFY 1 REM [_trig()] MSG %"Thanksgiving%" Day% REM Fri Nov [Week_4+1] SCANFROM [_back(7)] SATISFY 1 REM [_trig()] MSG %"Thanksgiving%" (cont.)% REM Dec 24 MSG %"Reveillon Noel%"% ############################################################################# # Changements d'heure ############################################################################# REM Sun Mar 8 ++2 FROM 1 Jan 2007 MSG Passage à l'%"heure d'ete%" %b% REM Sun 1 Nov FROM 1 Jan 2007 MSG Passage à l'%"heure d'hiver%" %b% ############################################################################# # Fériés ############################################################################# SET SaveTrig $NumTrig OMIT Jan 1 MSG %"Nouvel an%"% OMIT May 1 MSG %"Fete du travail%"% OMIT May 8 MSG %"Armistice 1945%"% OMIT Jul 14 MSG %"Fete nationale%"% OMIT Aug 15 MSG %"%" # Assomption OMIT Nov 1 MSG %"%" # Toussaint OMIT Nov 11 MSG %"Armistice 1918%"% OMIT Dec 25 MSG %"%" # Noël OMIT [TRIGGER(easter+50)] MSG %"%" # Lundi de Pentecote if $NumTrig > SaveTrig REM SPECIAL SHADE 220 endif ########################################################################## # Saisons 2001-2017 ########################################################################## REM Mar [CHOOSE(YEAR(TODAY())-2000, 20,20,21,20,20,20,21,20,20,20,20,20,20,20,20,20,20)] MSG %"Printemps%"% REM Jun [CHOOSE(YEAR(TODAY())-2000, 21,21,21,21,21,21,21,20,21,21,21,20,21,21,21,20,21)] MSG %"Été%"% REM Sep [CHOOSE(YEAR(TODAY())-2000, 22,23,23,22,22,23,23,22,22,23,23,22,22,23,23,22,22)] MSG %"Automne%"% REM Dec [CHOOSE(YEAR(TODAY())-2000, 21,22,22,21,21,22,22,21,21,21,22,21,21,21,22,21,21)] MSG %"Hiver%"% Pour ce qui est des deux fichiers birthdays.rem et fetes.rem, ils sont générés par les scripts suivants. - script d'extraction des anniversaires (~/bin/update-birthday.sh) : Extrait les dates d'anniversaire depuis le champs personnalisé de abook pour créer un fichier des anniversaires automatiquement inclus par remind : #!/bin/bash abook --convert --outformat allcsv --infile ~/.abook/addressbook \ | sed 's/","/";"/g;s/"//g' \ | cut -d\; -f1,16 \ | grep -v \;$ \ | sed 's#\([^;]*\);\([0-9]*\)/\([0-9]*\)/\([0-9]*\)#REM \2 \3 ++12 MSG %"[_yr_age(\4)] ans \1%" (%b)%#g' \ | tail -n +2 \ | grep '^REM [0-9]' \ | sed 's/^\(REM [0-9]\+ \)0\?1 /\1Jan /g' \ | sed 's/^\(REM [0-9]\+ \)0\?2 /\1Feb /g' \ | sed 's/^\(REM [0-9]\+ \)0\?3 /\1Mar /g' \ | sed 's/^\(REM [0-9]\+ \)0\?4 /\1Apr /g' \ | sed 's/^\(REM [0-9]\+ \)0\?5 /\1May /g' \ | sed 's/^\(REM [0-9]\+ \)0\?6 /\1Jun /g' \ | sed 's/^\(REM [0-9]\+ \)0\?7 /\1Jul /g' \ | sed 's/^\(REM [0-9]\+ \)0\?8 /\1Aug /g' \ | sed 's/^\(REM [0-9]\+ \)0\?9 /\1Sep /g' \ | sed 's/^\(REM [0-9]\+ \)10 /\1Oct /g' \ | sed 's/^\(REM [0-9]\+ \)11 /\1Nov /g' \ | sed 's/^\(REM [0-9]\+ \)12 /\1Dec /g' \ | sed 's/\[_yr_age()\] ans/Anniv./' \ > ~/.remind/birthdays.rem - script d'extration des fêtes (~/bin/update-fetes.sh) : trouve les prénoms dans la base de abook et cherche les fetes correspondant dans un fichier ~/.remind/saints.dat. Si le prénom n'est pas trouvé et qu'il s'agit d'un prenom composé, on le decompose et on cherche les sous-prenoms... Enfin, pour éviter d'avoir un calendrier illisible, on regroupe les personnes à féliciter en une seule ligne par fete : #!/bin/bash function FindFete() { PRENOM=$1 FULL=`echo $2 | tr '_' ' '` SAINT=`grep -i \ $PRENOM\$ ~/.remind/saints.dat | sed "s/\([0-9]\+ [a-zA-Z]\{3,3\}\) \(.*\)\$/REM \1 +1 MSG %\"St.\2 ($FULL)%\" %b%/"` [ "x$SAINT" == x ] && return 1; echo $SAINT | sed 's/ REM/\nREM/g' >> ~/.remind/fetes.rem return 0 } rm ~/.remind/fetes.rem for i in `abook --convert --outformat allcsv --infile ~/.abook/addressbook \ | tail -n +2 \ | cut -d',' -f1 \ | sed 's/"//g' \ | sed 's/(.*)//' \ | sed 's/^\([^ ]*\)-&-\([^ ]*\)\(.*\)/\1\3\n\2\3/g' \ | sed 's/ /_/g'`; do PRENOM=`echo $i | cut -d_ -f1`; # Recherche de saint FindFete $PRENOM $i [ $? -eq 1 ] && echo $PRENOM introuvable && [ `echo $PRENOM | grep -- -` ] && for j in `echo $PRENOM | tr '-' ' '`; do FindFete $j $i [ $? -eq 1 ] && echo $j introuvable done done sort -u ~/.remind/fetes.rem > ~/.remind/fetes2.rem cat ~/.remind/fetes2.rem \ | sed -n '1h;1!H;${;g;s/\(REM[^(]*(\)\([^)]*\))%" %b%.\1/\1\2, /g;p;}' \ | sed -n '1h;1!H;${;g;s/\(REM[^(]*(\)\([^)]*\))%" %b%.\1/\1\2, /g;p;}' \ | sed -n '1h;1!H;${;g;s/\(REM[^(]*(\)\([^)]*\))%" %b%.\1/\1\2, /g;p;}' \ | sed -n '1h;1!H;${;g;s/\(REM[^(]*(\)\([^)]*\))%" %b%.\1/\1\2, /g;p;}' \ > ~/.remind/fetes.rem rm ~/.remind/fetes2.rem Extrait du fichier ~/.remind/saints.dat (dispo à la demande en privé : 1 Jan Muriel 2 Jan Basile 3 Jan Gaspard 3 Jan Genevieve 3 Jan Caspar 3 Jan Caspara 3 Jan Casper 3 Jan Gaspar 3 Jan Gaspare 3 Jan Gasparin 3 Jan Gasparine 3 Jan Gasparo 3 Jan Gasper 3 Jan Jasper 3 Jan Kapp 3 Jan Kaspar 3 Jan Kasper 3 Jan KÄsper 3 Jan Genevievre 3 Jan Genovefa - principales commandes à utiliser imapfilter : faire la purge/archivage dans les dossiers du serveur IMAP offlineimap : synchroniser les dossiers choisis entre le serveur et la copie locale muttprofile : choix de l'identité et du profil (local/distant) à utiliser mutt : no comment abook : no comment update-birthday.sh : reconstruire la liste des anniversaires à inclure dans remind update-fetes.sh : reconstruire la liste des fetes à inclure dans remind rem : affichage coloré des événements de la journée (Soleil, Lune, Fetes, Anniversaires, ...) Désolé pour la longueur de ce message. Et pourtant, j'ai coupe les fichiers, supprimé des commentaires, ... Si tu veux le contenu plus complet de toute la config, dis le, j'essayerai de faire une page web sous la forme d'un tuto. Fanfan
Attachment:
signature.asc
Description: Digital signature