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