;; -*- emacs-lisp -*-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; $Id: gnus_splitting.el,v 1.25 2006-11-06 21:02:42 rscholz Exp $
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Sortieren von Mails
;;
;; Die offizielle Quelle dieser Datei ist
;;   <http://www.zonix.de/projects/emacs/config>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Splitting von Mails        (Info-goto-node "(Gnus)Splitting Mail")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Splitting der Mails. Mails werden in die entsprechende Gruppe
;; einsortiert, falls der angegebene reguläre Ausdruck passt...

;; Ich bin inzwischen auf IMAP umgestiegen, dass heißt, die hier
;; oben aufgezeichneten Splitting-Regeln werden nicht mehr benutzt.
;; IMAP-Splitting ist weiter unten aufgeführt.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Splitting für nnml-Backend
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; TIPP: die hier spezifizierten Gruppen werden von Gnus AUTOMATISCH
;; angelegt, müssen also nicht erzeugt werden.  Falls nach dem Abrufen
;; von Mails mit `g' diese Gruppen scheinbar nicht sichtbar sein
;; sollten, einfach `F' im Summary-Buffer drücken.  Damit sucht Gnus
;; nach eventuell neu angelegten Gruppen.

;; Fancy Splitting (Info-goto-node "(Gnus)Fancy Splitting Mail")
(setq nnmail-split-methods 'nnmail-split-fancy)
(setq nnmail-split-fancy

      ;; Falls die Mail im References-Header auf eine Mail verweist,
      ;; die bereits irgendwo einsortiert wurde, soll diese Mail auch
      ;; dort gespeichert werden.
      '(| "subject" "some subject" "mail.privacy")

          ;; Dieser Header wird in jeder meiner Messages eingefügt, damit
          ;; ich weiß, aus welcher Gruppe ich die geschrieben habe.
          ("X-Message-Source" "[a-z0-9]+ INBOX\\.\\(.*\\)"  "\\1")
          ("X-Message-Source" "[a-z0-9]+ \\(.*\\)"          "\\1")
          
          ;; hat obige Regel nicht gepasst, werden nun die anderen betrachtet...
          (to "anon@ymo.us" "mail.protect")

          (from "anon@ymo.us" "mail.my"
                 (| "subject" "some subject" "mail.privacy")
                                                            "mail.my"))

          (from "anon@ymo.us" "mail.my")
          (to "anon@ymo.us" "mail.protect")
          
          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my"
                 (| "subject" "some subject" "mail.privacy")
                                                                            "mail.my"))
          
          (from "anon@ymo.us" "mail.my")

          (any "anon@ymo.us" "mail.privacy")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")

          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")

          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")

          (any "anon@ymo.us" "mail.privacy")
          (any "anon@ymo.us" "mail.privacy")
          (to "anon@ymo.us" "mail.protect")
          
          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")

          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")

          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")          
          (from "anon@ymo.us" "mail.my")

          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")

          (from "anon@ymo.us" "mail.my")
          
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my"
                                                            "admin.bills")
          
          (from "anon@ymo.us" "mail.my")
          (from "anon@ymo.us" "mail.my")
          (to "anon@ymo.us" "mail.protect")
 
          (to "anon@ymo.us" "mail.protect")
          (to "anon@ymo.us" "mail.protect")

          (to "anon@ymo.us" "mail.protect")

          (from "anon@ymo.us" "mail.my")
          (to "anon@ymo.us" "mail.protect")
          (to "anon@ymo.us" "mail.protect")
          
          (from "anon@ymo.us" "mail.my"
                 (| "subject" "some subject" "mail.privacy")
                                                            "mail.my"))

          ("subject" "\\<Re:.*"                             "mail.other")
          
          "mail.inbox"

          ))

;; nicht in Mailinglisten splitten, weil sonst private Antworten auf
;; meine Mails in Mailinglisten wieder dort landen könnten.
(setq nnmail-split-fancy-with-parent-ignore-groups "list\\.")

;; Message-ID-Cache, für nnmail-split-fancy-with-parent erhöht
(setq nnmail-message-id-cache-length 5000)

;; Message-ID-Cache (fast) immer updaten
(setq nnmail-cache-accepted-message-ids t)

;; ...falls dabei mehrere Gruppen passen, wird nur die erste ausgewählt.
(setq nnmail-crosspost nil)

;; beim Kopieren oder Verschieben von Mails sinnvolle Vorschläge machen
;; (Info-goto-node "(Gnus)Mail Group Commands")
(setq gnus-move-split-methods
      '(("Xref:.*mail\\.inbox" "nnml:mail.other")
        ("mail.my")))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Splitting für nnimap-Backend (Info-goto-node "(Gnus)Splitting in IMAP")
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Mein Setup für IMAP besteht aus Courier-IMAP und maildrop zum
;; Sortieren in Maildirs, wodurch Gnus entlastet wird.  Dennoch will
;; ich einige Gnus-Funktionen nutzen, wie z.B. das Fancy Splitting
;; with Parent.  D.h., falls eine Mail im References-Header auf eine
;; Mail verweist, die bereits irgendwo einsortiert wurde oder manuell
;; verschoben wurde, soll diese Mail auch dorthin gespeichert werden.

;; Für IMAP nutze ich die Gnus-Registry (ab No Gnus), die u.a für jede
;; Nachricht, die gesplittet wird, vermerkt, wohin sie geplittet
;; wurde.  So kann ich das Fancy Splitting with Parent auf für IMAP nutzen.

;; Gnus-Registry laden

;; bis Oort v0.04
;(setq gnus-registry-install t)
;(require 'gnus-registry)

;; ab Oort v0.04
(gnus-registry-initialize)

;; lange History behalten
(setq gnus-registry-max-entries 20000)

;; Fancy Splitting für IMAP
(setq nnimap-split-rule 'nnimap-split-fancy)

;; Die Regeln sind einfach: Splitting nach dem Parent-Artikel und wenn
;; das nicht geht, in der IMAP-Inbox ablegen
(setq nnimap-split-fancy
      '(|
        (: gnus-registry-split-fancy-with-parent)
        "mail.my"))

;; Für Gruppen, die nicht in der Registry erfasst werden sollen
;; (z.B. NNTP-Gruppen), ist in den Gruppenparametern (`G c') oder den
;; Parametern des Topics ein ensprechender Eintrag einzufügen
;; (registry-ignore t).

;; Ebenfalls beachtet die Registry die Variable
;; `nnmail-split-fancy-with-parent-ignore-groups' (s.o.).

(setq gnus-registry-unfollowed-groups
      '("delayed"
        "drafts"
        "queue"
        "sent\\.mail"
        "sent\\.news"
        "^nnrss:"
        "^nntp:"
        ))

(setq gnus-registry-use-long-group-names t)

;; dieser IMAP-Folder soll gesplittet werden
(if (string-match "home" zonix-location)
    (setq nnimap-split-inbox '("mail.my")))

(if (string-match "verified" zonix-location)
    (setq nnimap-split-inbox '("mail.my")))

;; ...aber nur keine bereits als gelöscht markierten Artikel splitten
(setq nnimap-split-predicate "UNSEEN UNDELETED")

;; ...falls dabei mehrere Gruppen passen, wird nur die erste ausgewählt.
(setq nnimap-split-crosspost nil)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Allgemeine Einstellungen
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; MIME dekodieren, bevor gesplittet wird (ab Gnus 5.10)
(setq nnmail-mail-splitting-decodes t)

;; längere Headerzeilen splitten
(setq nnmail-split-header-length-limit 2048)

;; (kaputte) Refereces-Header löschen und vorhandenen References-Header nutzen
;(add-hook 'nnmail-prepare-incoming-header-hook 'nnmail-fix-eudora-headers)

;; Dupes erkennen und warnen
(setq nnmail-treat-duplicates 'warn)
;;
;; DIESE DATEI ENTHÄLT AUS DATENSCHUTZGRÜNDEN KEINE PERSONENBEZOGENEN DATEN MEHR!
;;