Wilane' Weblog

jaZZ ... just another Zine Zblog

Billets dans la catégorie « Emacs »

Configuration séléctive avec WL

écrit par Ousmane Wilane, le 13/12/09 11:05.

Mon compte gmail est configuré pour me faire suivre tous mes courriels à mon adresse habituel. Donc en principe j’ai juste besoin de configurer mon serveur IMAP normal et je reçois tous les courriels qui passent par mes filtres .dovecot.sieve et sont rangés auto-magiquement dans les dossiers qui vont bien.

Pour mes courriels sortants il arrive que je veuille les envoyer depuis mon compte gmail (ce que je peut faire avec mon propre serveur mais il y a des chances que nombre de serveurs le considèrent alors comme un courriel indésirable, Google par exemple, soumet ces courriels à la modération). Je veut en particulier que tous les courriels que j’envoie vers le domaine googlegoups.com passent par les serveurs SMTP de Google. La plupart des ML qui m’intéressent sont maintenant sur ce domaine.

Avec WL on peut utiliser des comparaisons d’en-tête et même des expressions Lisp pour décider de la config du courriel sortant au moment où on fait C-c C-c, il suffit juste d’ajouter à votre .wl le bout de code elisp suivant:

(setq
 wl-template-alist
 '(("default"
    (wl-smtp-connection-type . 'starttls)
    (wl-smtp-authenticate-type . "plain"))
   ("gmail"
    ("From" . "NomComplet <MonLogin@gmail.com>")
    (template . "default")
    (wl-smtp-posting-user . "MonLogin")
    (wl-smtp-posting-server . "smtp.gmail.com")
    (wl-smtp-posting-port . 587))
   ("MonServeur"
    ("From" . "NomComplet <MonLogin@MonDomaine.MonTLD>")
    (wl-smtp-posting-user . "MonLogin")
    (wl-smtp-posting-server . "mon.serveur.smtp")
    (wl-smtp-posting-port . 587)))
 wl-draft-config-matchone t
 wl-draft-config-alist
 '(("^From: .*MonLogin@gmail\\.com"
    (template . "gmail"))
   (reply "^To: .*googlegroups\\.com"
    (template . "gmail"))
   ("^From: .*MonLogin@MonDomaine\\.MonTLD"
    (template . "MonServeur"))))

En gros je définit une liste contenant des modèles de configuration avec un modèle par défaut contenant le dénominateur commun de tous les autre modèles, ensuite je définit les règles d’utilisation de ces modèles en fonction de critères, et c’est tout.

Si vous souhaitez que ceci soit évalué lorsque vous préparez un brouillon:

(add-hook 'wl-mail-setup-hook 'wl-draft-config-exec)

Si vous souhaitez qu’il soit évalué après une ré-edition d’un brouillon (E) que vous auriez sauvegarder par exemple:

(add-hook 'wl-draft-reedit-hook 'wl-draft-config-exec)

Si vous décidez d’envoyer un brouillon (C-c C-c) et qu’ensuite vous annulez l’action pour ré-éditer le brouillon par exemple, si vous souhaitez ré-évaluer (wl-draft-config-alist), il vous suffit de faire C-c C-e (wl-draft-config-exec) explicitement.

Tout ceci est bien documenté en amérique. Vous remarquerez que les critères peuvent naturellement être définit par rapport au dossier de courriel dans lequel vous vous trouvez.

TwIt et l'historique

écrit par Ousmane Wilane, le 09/10/09 18:27.

Un autre truc que j’aimes avec certains clients Identica/Twitter c’est le fait qu’ils vous ramènent là où vous en étiez la dernière fois que vous avez lu les tweets. Pour faire la même chose avec TwIt, j’ai ajouté une fonction (dirty hack comme on dis) permettant de bookmarker un Tweet (sauvegarder son id/status twit-save-id-at-point) et une fonction permettant de charger les tweets depuis l’id bookmarqué twit-show-recent-tweets-from-last-id. La touche q qui est utilisé par défaut pour quitter est remplacée par une fonction twit-quit qui sauvegarde le tweet actuel avant d’invoquer burry-buffer:

  ("W" . twit-save-id-at-point)
  ("q" . twit-quit)

(defconst twit-friend-timeline-file-from-last-id
  (concat twit-base-url 
   "/statuses/friends_timeline.xml?count=200&since_id=%s"))
(defun twit-save-id-at-point ()
  (interactive)
  (setq twit-id (twit-get-text-property 'twit-id))
  " Let's store this in a file so we 
      can start it from here next time"
  (write-region twit-id nil "~/.twit-last-id")
)

(defun twit-quit ()
  " Let' do some pre-hook before burying the buffer"
  (interactive)
  (twit-save-id-at-point)
  (bury-buffer)
)


(defun twit-show-recent-tweets-from-last-id 
                             (&optional page)
  (interactive "P")
  (setq page (twit-check-page-prefix page))

  (with-temp-buffer 
   (setq retval (insert-file-contents "~/.twit-last-id") )
   (setq twit-id (buffer-string)))
  
  (pop-to-buffer
   (with-twit-buffer "*Twit-recent*"
     (twit-write-title "Recent Tweets (Page %s) [%s]\n"
       page (format-time-string "%c"))
     (twit-write-recent-tweets
       (twit-parse-xml (format twit-friend-timeline-\
                 file-from-last-id twit-id) "GET")))))

Trouvez le module patché ici

Navigation avec TwIt (Twitter mode pour Emacs)

écrit par Ousmane Wilane, le 05/10/09 16:49.

C’est pas un secret pour ceux qui me suivent sur Twitter (où je n’ai rien à dire en moyenne d’ailleurs, alors arrêtez de me suivre et suivez ceux qui ont des choses à dire et en plus ils sont légion) que j’utilise TwIt. Je suis bizarrement assez accroc à Twitter ces temps-ci, et lorsqu’il m’arrive de ne pas suivre mon Timeline pendant quelques temps, j’ai envie avec une seule touche de regarder les pages précédentes/suivantes jusqu’à la dernière page où je m’étais arrêté la dernière fois. Je peut utiliser C-u <page> M-x twit-show-recent-tweets mais c’est pas très pratique pour passer de la page suivante/précédente. J’ai ajouté quelques fonctions à twit.el pour utiliser les touches N et P pour passer naviguer entre les pages:

(defun twit-previous-page ()
  (interactive)
  (twit-jump-page 1)
)

(defun twit-next-page ()
  (interactive)
  (twit-jump-page -1)
)

(defun twit-jump-page (n)
  (goto-char 0)
  (if (re-search-forward 
        "Recent Tweets (Page \\([[:digit:]]+\\))")
       (setq curpage 
           (buffer-substring-no-properties 
             (match-beginning 1) 
             (match-end 1)))
       (setq curpage 1)
       )
  (twit-show-recent-tweets  
   (twit-check-page-prefix 
     (+ n (string-to-number curpage))
    ))
  )

Ajouter les lignes suivantes à twit-key-list:

    ("P" . twit-previous-page)
    ("N" . twit-next-page)

Trouvez le module patché ici

Oublié de joindre le fichier ? Wanderlust !

écrit par Ousmane Wilane, le 28/09/09 12:50.

Nous oublions tout le temps d’attacher des fichiers aux courriels après les avoir annoncé dans le corps du courriel, avec Wanderlust, vous pouvez vous le faire rappeler avant d’envoyer le courriel. Ce billet est entièrement programmé par djcb, j’ai juste ajouté la chaîne joint à l’expression régulière. Merci djcb. Vous trouverez sur le blog de djcb le hook utilisé pour vous rappelez que vous envoyez un courriel sans objet.

(defun my-wl-draft-attachment-check ()
  "if attachment is mention but none included, 
   warn the the user"
  (save-excursion
    (goto-char 0)
    (unless ;; don't we have an attachment?
	(re-search-forward "^Content-Disposition: 
                                attachment" nil t) 
      (when ;; no attachment; did we mention 
                                    an attachment?
	  ;; English or French
	  (re-search-forward "attach\|joint" nil t)
	(unless (y-or-n-p "Vous n'avez peut 
        être pas joint la pièce. Voulez-vous 
        quand même envoyer le brouillon ?")
          (error "Abort."))))))

(add-hook 'wl-mail-send-pre-hook 
                          'my-wl-draft-attachment-check)

Tutoriel Emacs

écrit par Ousmane Wilane, le 27/09/09 11:21.

A l’occasion de notre Software Freedom Day (2009) (Merci SFD pour les T-shirts et les CD/DVD) tenu le 26/09/2009, j’ai fait une petite démo d’utilisation d’Emacs, Wanderlust et twit.el, les 26 slides sont disponibles et le code source accessible à partir des slides. Les slides seront disponibles sur le site de mon LUG