[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[ HS ] Integration abook/remind/mutt [Was: webcalendar]



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


Reply to: