;; -*-Emacs-Lisp-*- ;; gnus.el - NBC - nchuche@teaser.fr ;; ;; http://www.teaser.fr/~nchuche/gnus/ ;; Version $Id: gnus.el,v 1.11 2001/07/05 14:04:06 nc Exp $ ;; $Revision: 1.11 $ ;; ;; This file is free software; you can redistribute it and/or modify it under ;; the terms of the GNU General Public License as published by the Free ;; Software Foundation; either version 2, or (at your option) any later ;; version. ;; ;; ATTENTION, ce fichier marche (du moins normalement) avec gnus ;; 5.6.45, 5.7, 5.8.* et la nouvelle version beta de gnus (Oort). Il ;; ne marchera pas avec un gnus 5.5 et je n'ai pas essayé avec les ;; gnus 5.6.* intermédiaires. ;; ;; ;; INSTALLATION : ;; ;; 1. copiez le fichier gnus.el- directement dans votre homedir sous le nom ;; .gnus.el ;; 2. Allez dans la partie "les VARIABLES À FIXER" et changez ce qu'il faut. ;; Cette partie est la seule où il y a des modifications indispensable à faire ;; Celles-ci sont indiquées soit par un "XXXXXXXXX" à remplacer par ce qu'il faut ;; soit par des commentaires bien sentis. ;; 3. Créez un répertoire ~/.elisp/gnus/ ;; 4. copiez le fichier filtre.gnus dans ce répertoire et modifier ;; avec vos propres réglages ;; 5. lisez le reste du fichier quand vous avez le temps pour adapter ;; tout ça à vos besoins et entre autre les lignes commentées par ';;;' ;; ;; COMPILATION : ;; ;; Pour aller un peu plus vite, vous pouvez compiler ce fichier. Pour ça, ;; UNE FOIS L'INSTALLATION FINIE ET TESTÉE: ;; 1. lancez gnus avec votre fichier tout neuf ;; 2. dans le même emacs ouvrez ce même fichier tout neuf (.gnus.el) ;; 3. Tapez : M-x emacs-lisp-byte-compile ;; 4. Vous devez obtenir quelques injures ;; Sous gnus 5.6, vous devez voir des : ;; - assignement to free variable ... ;; - reference to free variable ... ;; Et sous gnus-5.8, vous ne devriez voir qu'une injure : ;; - assignement to free variable ... ;; 5. Maintenant, vous avez un fichier .gnus.elc à coté de votre .gnus.el. ;; C'est la version compilée. ;; ;; Si vous voulez apporter des modifs à votre fichier, pensez à ;; supprimer la version compilée... ;; ;; ;; Conventions utilisées pour les commentaires : ;; - les commentaires expliquant le fonctionnement des options sont précédés ;; de deux points virgules : ';;' ;; - le code mis en commentaire pour une raison quelconque (options avancées) ;; est précédé de 3 points virgules : ';;;' ;; - le code commenté par 4 points virgules (;;;;) est là comme exemple ;; ;; bugs : ;; - les couleurs choisies dans les buffers ne passent bien que sur un fond sombre. ;; Pour être plus "portable", il faudrait jouer avec les 'defface', mais j'ai ;; un peu (beaucoup) la flemme. ;; ;; Ce .gnus est largement inspiré des fichiers de conf trouvés sur ;; http://superdave.socom.com/gnus/ ;; et sur ;; http://www.alternatif.fr/linux-france/article/appli/cfg/index.html ;; que ceux qui les ont écrits et mis en ligne en soient remerciés. ;; ;; Et enfin, merci à Lars pour cet outil et ses mugs au logo argenté. ;;; (setq system-name "soda.teaser.fr") ;; Redéfinition de programmes à utiliser pour les urls ;; certains gestionnaires de ML ajoutent un champs mailto pour obtenir des infos ;; et gnus par défaut utilise les réglages de emacs soit netscape... ;; donc on redéfinit le mailto pour l'attribuer à gnus. (setq browse-url-browser-function '(("^mailto:" . gnus-url-mailto) ("." . browse-url-netscape))) ;; ********************************** ;; les VARIABLES À FIXER ;; ********************************** ;; Votre nom ;;;;(setq user-full-name "Gaspard le Chat") (setq user-full-name "XXXXXXXXX") ;; l'adresse email à mettre dans le cas général ;; on peut également utiliser les "posting-styles" ;; pour cela, allez voir vers la fin ;;;;(setq user-mail-address "gaspard@soda.teaser.fr") (setq user-mail-address "XXXXXXXXX") ;; je me fais une copie cachée de tous les messages que j'envoie ;; ce qui me permet de garder une trace et de les trier dans les bonnes boites ;; changer le 'XXX' pour votre nom d'utilisateur local. ;;;;(setq message-default-mail-headers "Bcc: nc\n") (setq message-default-mail-headers "Bcc: XXXXXXXXX\n") (setq ;; le serveur de news à utiliser ;; remplacer 'localhost' par le nom de votre serveur de news si vous ;; n'étes pas en local gnus-select-method '(nntp "localhost")) ;; ne mets pas dans le 'Cc:' les adresses matchant la regexp ;; quand on fait un "reply to all" ;; Changez le nom puis décommenter ;;; (setq message-dont-reply-to-names "chuche") ;; le répertoire où vous avez installé les différents fichiers ;; spécifiques à gnus comme les filtres (filtre.gnus)... (setq nbc-gnus-dir "~/.elisp/gnus/") ;; remplacez "nil" par "t" si vous avez installé bbdb. (setq nbc-bbdb nil) ;; remplacez "nil" par "t" si vous avez installé sig.el (setq nbc-sig nil) ;; remplacez nil par t si vous avez un fichier ;; filtre.gnus dont vous voulez vous servir (setq nbc-gnus-filtre nil) ;; remplacez nil par t si vous avez installé ;; nnir.el ;; voir howto sur http://my.gnus.org (setq nbc-nnir nil) ;; pour ceux qui veulent cliquer sur des boutons plutôt que d'utiliser ;; les raccourcis clavier cette option rajoute une espèce de barre ;; d'outil sur laquelle on peut cliquer. ;;;(setq gnus-carpal t) ;; ********************************** ;; Fin des VARIABLES À FIXER ;; ********************************** ;; on teste la version de gnus et on sort en erreur si elle est trop ancienne (if (string-match "5.5" gnus-version) (error "Ce fichier ne marche pas avec votre version de gnus")) ;; ********************************** ;; Paramètres par défaut des en-têtes ;; ********************************** (setq ;; header par défaut des news qui indique de ne pas m'envoyer de copie courrier ;;; message-default-news-headers "Mail-Copies-To: never\n" ;; le champ organisation ;;; message-user-organization "home sweet home" ) ;; paramètres globaux (setq ;; moins dangereux que gnus-expert mais bon... ;; pour l'occasion j'ai mis un paramètres plus conservateur. ;; Vous pourrez le changer quand vous serez plus grand ;-) ;;; gnus-novice-user nil ;; sans commentaire, mais à manier avec précaution... ;;; gnus-expert-user t ;; pas de demande de confirmation pour quitter gnus gnus-interactive-exit nil ;; indique si la ligne de mode (la ligne noire en bas des buffers) ;; est coupée ou non. ;; 'nil' indique qu'elle n'est pas coupée ;; la valeur 40 permet, chez moi, de toujours voir les infos supplémentaires (buffer, lignes...) gnus-mode-non-string-length 40 ;; pas de demande de confirmation pour sauver un article gnus-prompt-before-saving nil ;; limite la signature à 4 lignes gnus-signature-limit '(4.0 "^---*Forwarded article") ) (setq ;; vérifie les nouveaux groupes à chaque démarrage ;; si votre serveur est lent, vous avez intérêt à mettre cette variable à 'nil' gnus-check-new-newsgroups t ;; Ne lit le active que pour les groupes abonnés gnus-read-active-file 'some ;; ne sauve pas la liste des groupes tués gnus-save-killed-list nil ;; pas de newsrc, ;; donc PAS de compatibilité avec d'autres lecteurs de news gnus-save-newsrc-file nil ;; que faire des nouveaux groupes gnus-subscribe-newsgroup-method 'gnus-subscribe-hierarchically) ;; génère le maximum de header à la création du message ;; plutôt qu'au moment de l'envoyer ;; si vous ne voyez pas à quoi ça sert, laisser donc le commentaire ;;; (setq message-generate-headers-first t) ;; ******************************************* ;; retirer les mail ;; ******************************************* (setq ;; la methode à utiliser en second (les news étant la première) ;; si on ne définit pas entièrement cette méthode, on risque ;; de retrouver des mails dans nnml.archive ; ce qui peut, pour ;; quelqu'un de mauvaise foi, être considéré comme un bug ;; la façon de faire a changer en 5.8, mais je reste à celle-ci ;; pour la compatibilité avec la 5.6.45 gnus-secondary-select-methods '((nnml "" ;; le répertoire par défaut pour les mails (nnml-directory "~/Mail/") ;; le fichier active par défaut pour les mails (nnml-active-file "~/Mail/active"))) ;; le nombre de jour de l'expire nnmail-expiry-wait 2 ;; les groupes à faire expirer automatiquement ;; les autres mailboxes ne sont JAMAIS expirées gnus-auto-expirable-newsgroups "mail.\\(root\\|delete\\)" ;; utilise les noms longs plutôt que les sous répertoires nnmail-use-long-file-names t ;; les mails marqués ne sont pas mis dans le cache ;; (ce n'est pas la peine puisque je n'expire pas les mails) gnus-uncacheable-groups "^nnml") ;; De base, gnus récupère les mails dans le répertoire ;; définit par la variable $MAIL mais si vous êtes sous windows ;; ou que vous voulez récupérer directement votre mail sur un ;; serveur POP , un truc comme ci-dessous devrait faire l'affaire. ;;;(setq mail-sources ;;; (pop :server "votre.serveur.mail" :user "login" :password "mot_de_passe")) ;; Vous pouvez aussi déclarer plusieurs boites comme ceci : ;;;(setq mail-sources ;;; (pop :server "votre.serveur.mail" :user "login" :password "mot_de_passe") ;;; (apop :server "votre.secondserveur.mail" :user "login2" :password "mot_de_passe2")) ;; ******************************************** ;; le buffer de selection des groupes ;; ******************************************** ;; Tri par les topics définis ;; pour mettre en place les topics, voir dans : ;; info gnus - The Group Buffer - Group Topics (add-hook 'gnus-group-mode-hook 'gnus-topic-mode) (setq ;; ne montre que le premier message de chaque thread quand on ouvre un groupe gnus-thread-hide-subtree t ;; n'affiche que dans un groupe les articles crosspostés gnus-suppress-duplicates t ;; ne selectionne pas d'article au démarrage gnus-auto-select-first nil) (setq ;; le fichier de scoring utilisé gnus-home-score-file "all.SCORE" ;; la liste des groupes toujours visibles gnus-permanently-visible-groups "^nndoc" ;; à partir de combien d'articles demander la confirmation ;; d'ouverture d'un forum. ;; si vous n'utilisez pas un serveur local vous avez peut-être ;; intérêt à baisser cette valeur. gnus-large-newsgroup 1000) ;; ******************************************* ;; le buffer "summary" (affichage des threads...) ;; ******************************************* ;; Tri et les groupes de news par : ;; - score du thread ;; - sujet ;; Tri les groupes de mails par ordre de ;; - dates ;; ATTENTION, le tri écrit en dernier est le dernier effectué ;; donc si vous voulez trier principalement par score puis pour des ;; scores égaux par sujet, il faut d'abord mettre le tri par ;; sujet puis celui par score (add-hook 'gnus-summary-mode-hook (lambda () (if (or (gnus-news-group-p gnus-newsgroup-name) (string-match "^nnml:list" gnus-newsgroup-name)) (setq gnus-thread-sort-functions '(gnus-thread-sort-by-subject gnus-thread-sort-by-total-score)) (setq gnus-thread-sort-functions '(gnus-thread-sort-by-date))))) ;; A la demande de certaine, la description de chaque article inclue la date. ;; Comme dis dans la doc, il faut garder les paramètres %U, %R et %z le plus ;; à gauche possible de l'expression pour des raisons de rapidité ;; Pour le groupe d'archivage des mes posts, je ne veux pas voir le posteur ;; (puisque c'est forcément moi) mais le newsgroup dans lequel cela a été posté. ;; D'où le truc suivant. ;; Attention, si vous n'êtes pas en gnus 5.8.*, vous ne verrez rien ;; ATTENTION, si vous venez d'une version 5.6, il faudra refaire l'overview ;; des groupes pour que cela soit pris en compte. Pour ça, lancer la commande : ;; `nnml-generate-nov-databases' ;; depuis n'importe quel buffer ;; Fonction qui génère la variable gnus-summary-line-format suivant ce que je veux (defun nbc-gnus-summary-format () "Change le format suivant le groupe utilisé. Utilisable uniquement sous gnus-5.8.*" (if (and (string-match "archive" gnus-newsgroup-name) (string-match "5.8" gnus-version)) (setq gnus-summary-line-format "%U%R%z%I %d %(%[%4L: %-20,20f%]%) %s\n") (setq gnus-summary-line-format "%U%R%z%I %d %(%[%4L: %-20,20n%]%) %s\n"))) ;; là, si on est en gnus 5.8 (...) on appelle la fonction définie supra. (if (string-match "5.8" gnus-version) (progn (setq ;; ajoute le newsgroup dans le .overview gnus-extra-headers '(Newsgroups) ;; appelle la bonne fonction nnmail-extra-headers gnus-extra-headers ;; affiche le newsgroup plutôt que l'adresse mail quand celle-ci matche ;; l'expression suivant ;; remplacez le XXXXXXXXX par votre nom gnus-ignored-from-addresses "XXXXXXXXX") ;; j'appelle la fonction à chaque fois que je rentre dans un groupe (add-hook 'gnus-summary-mode-hook 'nbc-gnus-summary-format)) ;; SINON, (gnus 5.6 par exemple) on fixe définitivement la variable (setq gnus-summary-line-format "%U%R%z%I %d %(%[%4L: %-20,20n%]%) %s\n")) ;; ******************************************* ;; l'affichage des articles ;; ******************************************* (setq ;; la liste des champs à afficher tout le temps nbc-gnus-visible-headers '("^From:\\|^Organization:\\|^To:\\|^Cc:\\|^Reply-To:\\|^Subject:\\|^Sender:" ;; ne montre le champ newsgroups que quand il y a un crosspost ;; cette ligne peut-être supprimé en mettant 'newsgroups' dans gnus-boring-... dans gnus-5.8 "^Newsgroups:.+[,]+.*$" ;; pour ceux qui veulent voir avec quoi les gens postent "^X-Mailer:\\|^X-Newsreader:\\|^user-Agent\\|^X-Posting-Agent" "^Followup-To:\\|^Date:" )) (defun nbc-add-approved () "ajoute le champ approved dans la liste des headers visibles uniquement pour fmbd cette fonction se sert de nbc-gnus-visible headers" (if (string-match "dinosaures" gnus-newsgroup-name) (setq gnus-visible-headers (append nbc-gnus-visible-headers (list '"^Approved:\\|^Summary:"))) (setq gnus-visible-headers nbc-gnus-visible-headers))) (setq ;; la liste des headers à cacher s'ils sont vides ;; c'est la valeur par défaut, mais j'aime bien le voir gnus-boring-article-headers '(empty followup-to reply-to)) ;; cette partie active certaines fonctions à l'affichage des articles ;; gnus-article-display-hook ayant disparu, j'utilise à la place gnus-article-mode-hook. (add-hook 'gnus-article-mode-hook ;; on ajoute le champ approved grace à la fonction définit supra 'nbc-add-approved) ;; pfff, pour faire plaisir à certaine, je suis passé du setq au add-hook. ;; ça fait quand même moins propre vous trouvez pas ? ;; cf et précédent ;; la coloration des articles (add-hook 'gnus-article-display-hook 'gnus-article-highlight) ;; cache les cles PGP (add-hook 'gnus-article-display-hook 'gnus-article-hide-pgp) ;; cache les headers indésirables (add-hook 'gnus-article-display-hook 'gnus-article-hide-headers-if-wanted) ;; vire certains headers s'ils sont vides (add-hook 'gnus-article-display-hook 'gnus-article-hide-boring-headers) ;; vire le QP (add-hook 'gnus-article-display-hook 'gnus-article-de-quoted-unreadable) ;; vire les lignes blanches en tête (add-hook 'gnus-article-display-hook 'gnus-article-strip-leading-blank-lines) ;; vire les lignes blanches en queue (add-hook 'gnus-article-display-hook 'gnus-article-remove-trailing-blank-lines) ;; vire les lignes blanches en doubles (add-hook 'gnus-article-display-hook 'gnus-article-strip-multiple-blank-lines) ;; met en valeur les *machins* et autres _trucs_ (add-hook 'gnus-article-display-hook 'gnus-article-emphasize) ;; la liste des flags débiles (et que je ne veux pas voir) ;; utilisés par les mailings-listes ;; n'aura un effet que sous gnus 5.8. Vous voyez que vous devriez y passer. (setq gnus-list-identifiers '("\\[CRR\\]" "{bb}" "\\[deadlands_fr\\]" "\\[DL\\]")) ;; ******************************************* ;; la gestion du mime ;; ******************************************* ;; ajoute le charset ISO-8859-1 si besoin est ;; (pratique en version 5.6 et inutile en 5.8) (when (string-match "5.6.*" gnus-version) (add-hook 'message-header-hook 'gnus-inews-insert-mime-headers)) ;; je redéfinis ces variables parce que je REFUSE de voir mes mails ;; partir en qp. Est-ce que c'est le plus propre. C'est une très ;; bonne question. Ça marche c'est tout. (setq gnus-group-posting-charset-alist '(("^\\(no\\|fr\\|dk\\)\\.[^,]*\\(,[ \t\n]*\\(no\\|fr\\|dk\\)\\.[^,]*\\)*$" iso-8859-1 (iso-8859-1)) (message-this-is-mail nil t) (message-this-is-news nil t))) (setq mm-body-charset-encoding-alist '((iso-2022-jp . 7bit) (iso-2022-jp-2 .7bit) (iso-8859-1 . 8bit) )) ;; La suite de cette partie est spécifique à gnus 5.8.* ;; je vous ai déjà dit qu'il était bien le nouveau gnus ? ;; les types mime à ignorer : directement pompé dans la doc (setq gnus-ignored-mime-types '("text/x-vcard")) ;; je ne VEUX pas voir les messages en html ni en richtext : ;; je préfère la version texte brute si elle existe (setq mm-discouraged-alternatives '("text/html" "text/richtext")) ;; ******************************************* ;; l'affichage des buffers ;; ******************************************* ;; sépare la fenêtre emacs en deux buffer. Le message d'origine est ;; affiché en haut et la réponse en bas quand on répond sans citer ;; (touche r) (gnus-add-configuration '(reply (vertical 1.0 (article 0.5) (message 1.0 point)))) ;; NOUVEAU ;; on change la configuration du buffer sommaire pour conserver ;; l'affichage des groupes sur la gauche etl'affichage du sommaire ;; à droite (gnus-add-configuration '(summary (horizontal 1.0 (vertical 0.3 (group 1.0)) (vertical 1.0 (summary 1.0 point))))) ;; on change la configuration du buffer article pour conserver ;; l'affichage des groupes sur la gauche, l'affichage du sommaire en ;; haut à droite et l'affichage des messages en bas à droite (gnus-add-configuration '(article (horizontal 1.0 (vertical 0.3 (group 1.0)) (vertical 1.0 (summary 0.3) (article 1.0))))) ;; Vous voulez une présentation à la MacSoup avec le Zolie arbre ? ;; Et bien essayez remplacer le paragraphe précédent par ça : ;;;(setq gnus-use-trees t ;;; gnus-generate-tree-function 'gnus-generate-horizontal-tree ;;; gnus-tree-minimize-window nil) ;;; ;;;(gnus-add-configuration ;;; '(article ;;; (vertical 1.0 ;;; (horizontal 0.4 (summary 0.6 point) (tree 1.0)) ;;; (article 1.0)))) ;; colorier le buffer de réponse utilisé le hook ;; gnus-message-setup-hook n'est documenté que dans gnus-msg.el ;; comme quoi, il faut lire les sources parfois (add-hook 'gnus-message-setup-hook 'font-lock-fontify-buffer) ;; ********************************** ;; tri des mails en entrées ;; ;; la partie de tri des mails proprement dite a été mis ;; dans un second fichier pour nettoyer un peu le code. ;; ********************************** (setq ;; méthode utilisée nnmail-split-methods 'nnmail-split-fancy ;; ne crée pas de crossposts pour les mails respectants plusieurs rêgles de fancy-splliting nnmail-crosspost nil) ; on a besoin de nnmail pour que la alist soit définie dans les add-to-list qui suivent (require 'nnmail) ;; liste des abréviations courantes utilisées dans filtre.gnus ;; certains alias sont déjà définis dans nnmail.el : ;; ;; any : tous les en-têtes, ou presque ;; mail : les mails d'erreurs ;; to : ce qui correspond au destinataire ;; from : ce qui correspond à l'expéditeur ;; nato : ;; naany : ;; les en-têtes pour différencier les mailing listes (add-to-list 'nnmail-split-abbrev-alist '(lists . "reply-to\\|from\\|to\\|cc\\|x-loop\\|sender")) ;; les en-têtes a vérifier pour le spam (add-to-list 'nnmail-split-abbrev-alist '(spam . "^X\\|^X-1\\|^X-2\\|^X-Mailer\\|^X-Sender\\|to\\|from\\|^X-advertisement\\|received\\|subject")) ;; charge le fichier de tri des mails : (when nbc-gnus-filtre (load-file (concat nbc-gnus-dir "filtre.gnus"))) ;; NOUVEAU ;; cette partie sert à gérer les mails de réponses. Par défaut le mail ;; sera trié par les rêgles normales. Avec cette option, le mail sera ;; mis dans la même boite que le mail auquel il répond. vous devez ;; également modifier la variable « nnmail-split-fancy » (qui se ;; trouve dans le fichier filtre.gnus si vous avez conserver mon ;; organisation). ;; Cette fonction est apparu dans gnus 5.8.5 ou autour ;; pour cela, juste après les lignes : ;; (setq ;; nnmail-split-fancy ;; '(| ;; ajoutez cette ligne : ;; (: nnmail-split-fancy-with-parent) ;; le fichier ou est stocké la liste des messages-id (setq nnmail-message-id-cache-file (concat nbc-gnus-dir "nnmail-cache") ;; le nombre de message id à garder dans le fichier (setq nnmail-message-id-cache-length 5000) ;; doit-on ajouter le message id dans le fichier quand le mail est ;; déplacé à la main ? ;; si vous ne voulez pas, remplacez « t » par « nil » (setq nnmail-cache-accepted-message-ids t) ;; que doit-on faire quand on reçoit un mail déjà reçu avant (setq nnmail-treat-duplicates 'warn) ;;'delete) ;; ******************************************* ;; la gestion des couleurs des buffers ;; ******************************************* ;; cette partie n'est pas propre dans la mesure où, entre autre elle ;; ne prend pas en compte le fond d'écran utilisé mais bon... D'autre ;; part, les commentaires datent d'un autre age donc les couleurs ne ;; correspondent pas avec ;; les groupes mails non vides (set-face-foreground 'gnus-group-mail-3-face "firebrick4") ;; les groupes mails vides (set-face-foreground 'gnus-group-mail-3-empty-face "firebrick3") ;; les groupes de news : ;; non vides (set-face-foreground 'gnus-group-news-3-face "dark slate blue") ;; vides (set-face-foreground 'gnus-group-news-3-empty-face "light slate blue") ;; les anciens messages (set-face-foreground 'gnus-summary-normal-ancient-face "grey61") ;; les messages lus (scorés et non scorés) (set-face-foreground 'gnus-summary-normal-read-face "grey41") (set-face-foreground 'gnus-summary-high-read-face "grey41") (set-face-foreground 'gnus-summary-low-read-face "grey41") ;; les messages scorés (set-face-foreground 'gnus-summary-high-unread-face "firebrick4") ;; les messages marqués (set-face-foreground 'gnus-summary-normal-ticked-face "green4") (set-face-foreground 'gnus-summary-high-ticked-face "green4") ;; ******************************************* ;; l'envoi d'articles ;; ******************************************* ;; coupe les lignes à 72 caractères par défaut dans la composition des messages (add-hook 'message-mode-hook 'turn-on-auto-fill) (setq ;; coupe la signature des messages cités message-cite-function 'message-cite-original-without-signature ;; définition des séparateurs de signatures ;; directement récupérée de la doc de gnus gnus-signature-separator '( "^-- $" ; The standard "^-- *$" ; A common mangling "^-------*$" ; Many people just use a looong line of dashes. Shame! "^ *--------*$" ; Double-shame! "^________*$" ; Underscores are also popular "^========*$")) ;; ******************************************* ;; les "posting-styles" ;; ******************************************* ;; ils permettent de définir plusieurs adresses email/headers ;; à utiliser pour les mails/news/forums spécifiques. ;; ATTENTION, cela pose des problèmes pour l'annulation/supersede des posts. (setq ;; définition des rêgles de postages à appliquer suivant les groupes gnus-posting-styles '( ;; réglage général pour les news (message-this-is-news ;;;; ("From" "Nicolas Chuche ") ) ;; reglage général pour les mails (message-this-is-mail ;;;; ("From" "Nicolas Chuche ") ) ;; bruit2 est a nchuche@teaser.fr ;;;; ("liste.bruit2" ;;;; ("From" "Nicolas Chuche ")) ;;;; ("mail.apop" ;;;; ("From" "Nicolas Chuche ")) ;; les listes deadlands sont ici ;;;; ("liste.deadlands_fr" ;;;; ("From" "Nicolas Chuche ")) ;;;; ("liste.deadlands" ;;;; ("From" "Nicolas Chuche ")) ;;;; ("fr.usenet.abus.d" ;;;; ("From" "Nicolas Chuche ")) ;;;; ("soda.*" ;;;; ("From" "Nicolas Chuche ")) ;; ajouter le approved pour fmbd ;;;; ("fr.misc.bavardages.dinosaures" ;;;; La commande n'est pas complète, à vous de trouver comment faire ;) )) ;; cette fonction sert à insérer la ligne "machin à dit". ;; elle marche avec l'instruction 'cond' qui est de la forme : ;; (cond ;; ((une-condition) (une action)) ;; ((une-autre-condition) (une autre action)) ;; ((une-3eme-condition) (une 3eme action)) ;; ...) ;; dans le cas présent, ma dernière condition est 't' (true) pour récuperer ;; tous les cas non traités dans les conditions précédentes. ;; ;; Dés qu'une condition est vraie, ça s'arrête. (defun nbc-message-insert-citation-line () "Function that inserts a simple citation line." (when message-reply-headers (cond ;; le premier cas : ((string-match "fr.misc.bavardages.dinosaures" gnus-newsgroup-name) (insert "Le dino " (mail-header-from message-reply-headers) " disait récemment :\n\n")) ;; le deuxième cas : ((string-match "nnml:mail" gnus-newsgroup-name) (insert "Vous m'avez dit récemment :\n\n" )) ;; le troisième cas : ;; pour montrer que toutes les conditions ne commencent pas par ;; 'string-match' ;; et pour ceux qui veulent la date et l'heure (voir ;; format-time-string dans emacs lisp reference manual) ((gnus-news-group-p gnus-newsgroup-name) (insert (mail-header-from message-reply-headers) " disait le " (format-time-string "%D" (gnus-date-get-time (mail-header-date message-reply-headers))) " que :\n\n")) ;; le cas « ramasse-miette » (t (insert (mail-header-from message-reply-headers) " disait récemment que :\n\n"))))) ;; et là, on dit à gnus d'utiliser ma fonction à moi en lieu et place de la sienne (setq message-citation-line-function 'nbc-message-insert-citation-line) ;; ******************************************* ;; création de l'archive des news envoyées : ;; je veux garder une trace de tous les posts que j'envoie ;; ******************************************* (setq ;; Backend utilisé gnus-message-archive-method '(nnml "archive" ;; pas d'expiration de l'archive (je veux garder indéfiniment ma prose) (nnml-inhibit-expiry t) ;; le fichier active de l'archive (nnml-active-file "~/News/archive/active") ;; le repertoire ou mettre les archives (nnml-directory "~/News/archive/")) ;; n'archiver que les news (les mails sont archivés différement) ;; et dans un seul groupe nommé "news" gnus-message-archive-group '((if (message-news-p) "news"))) ;; ******************************************* ;; Les archives de messages intéressants ;; ;; L'archivage d'un message se fait de deux façons simples : ;; - en sélectionnant le message et en appuyant sur 'o' ;; - en marquant (touche '#') plusieurs messages et en appuyant sur 'o' ;; ;; gnus propose alors les groupes possibles. Choisissez le bon et validez. ;; ;; Pour voir ces groupes dans le buffer "Group", ;; par le menu : faites "Groups/foreign groups/make a doc group" ;; ou bien "G f" et entrez le nom du groupe désiré ;; ******************************************* (setq ;; demande la confirmation du nom de groupe à utiliser pour les articles gnus-prompt-before-saving t ;; sauvegarde les articles au format rmail par défaut gnus-default-article-saver 'gnus-summary-save-in-rmail ;; propose le groupe ou sauvegardé comme je le veux gnus-split-methods ;; les messages venant de *linux* ou *unix* ou *bsd* dans unix-stuff '(("^Newsgroups:.*\\(unix\\|linux\\|bsd\\)" "unix-stuff") ("^Newsgroups:.*\\(tex\\|xml\\)" "xml-stuff") ;; les messages de *perl* dans perl-stuff... ("^Newsgroups:.*perl" "perl-stuff") ("^Newsgroups:.*jdr" "jdr-stuff") ;; les messages contenants *emacs* ou *gnus dans emacs-stuff ("^Newsgroups:.*emacs\\|^Newsgroups:.*gnus" "emacs-stuff"))) ;; ******************************************* ;; quelques fonctions diverses et bien pratiques ;; ******************************************* ;; NOUVEAU ;; Cette partie demande à l'utilisateur s'il veut vraiment ;; répondre à l'auteur quand il est dans un groupe de news ;; (trouvé sur gnu.emacs.gnus. Que l'auteur en soit mille fois ;; remercié...) (defadvice gnus-summary-reply (around reply-in-news activate) (interactive) (when (or (not (gnus-news-group-p gnus-newsgroup-name)) (y-or-n-p "Vraiment répondre à l'auteur ? ")) ad-do-it)) ;; permet de développer, respectivement réduire les threads en appuyant ;; sur la touche "flèche gauche", respectivement "flèche droite" ;; Sur une idée de Ingo Ruhnke (defun my-gnus-summary-show-thread () "Show thread without changing cursor positon." (interactive) (gnus-summary-show-thread) (beginning-of-line) (forward-char 1)) (define-key gnus-summary-mode-map [(right)] 'my-gnus-summary-show-thread) (define-key gnus-summary-mode-map [(left)] 'gnus-summary-hide-thread) ;; ******************************************* ;; bbdb 2.0 ;; (voir la doc ainsi que www.linux-france.org) ;; la version de bbdb utilisée est la 2.0 ;; ******************************************* (when nbc-bbdb (require 'bbdb) (bbdb-initialize 'gnus) ;; lance bbdb en même temps que gnus (add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus) ;;(bbdb-insinuate-sc) (bbdb-insinuate-message) ;; on définit où se trouve le fichier de bbdb (setq bbdb-file (concat nbc-gnus-dir "bbdb")) (add-hook 'mail-setup-hook 'bbdb-insinuate-sendmail) (setq bbdb-offer-save 'yes bbdb-electric-p t bbdb-pop-up-target-lines 5 bbdb-use-pop-up t ;; pour pas que bbdb teste la validite du numero... ;; par rapport au format americain... bbdb-north-american-phone-numbers-p nil) ;; M-TAB permet d'avoir la complétion des adresses à partir du début d'un nom. (add-hook 'message-mode-hook (lambda () (local-set-key [(meta tab)] 'bbdb-complete-name))) ) ;; ********************************** ;; extensions de gnus ;; ********************************** ;; j'ai ajouté ici le chargement d'extensions qui ne font pas ;; directement directement de la configuration de gnus mais ;; qui font des choses bien (tout au moins je trouve !) ;; chargement d'une signature aléatoire par groupe (when nbc-sig (load-file (concat nbc-gnus-dir "sig.el"))) ;; configuration pour nnir.el (when nbc-nnir (require 'nnir) (setq nnir-mail-backend (nth 0 gnus-secondary-select-methods) nnir-search-engine 'swish-e))