.gnus
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Gnus Konfiguration ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;
;; Allgemein ;;
;;;;;;;;;;;;;;;
; Leafnode als News-Server
(setq gnus-select-method '(nntp "localhost")
; ganz allgemeine Einstellungen
user-mail-address "olli@sopos.org"
user-full-name "Oliver Heins"
; wir fragen den Server nach neuen Newsgroups, das ist schneller, als
; wenn Gnus das herausfinden muss
gnus-check-new-newsgroups 'ask-server
; und dann gibt es eigentlich auch keinen Grund mehr für killed-groups
gnus-save-killed-list nil
; wenn es eine Backup-Datei gibt, soll die gelesen werden, ohne den
; Benutzer zu nerven
gnus-always-read-dribble-file t
; Agent brauchen wir doch, um große Gruppen zu cachen
gnus-agent t
; Wir wollen Mails lesen
gnus-secondary-select-methods '((nnml ""))
; die Mail liegt in /var/mail/olli
mail-sources '((file))
; Das Verzeichnis, von dem alle Datei-Variablen abgeleitet werden
gnus-directory "~/News/"
; Hier werden Artikel gespeichert
gnus-article-save-directory (concat gnus-directory "save/")
; Und hier die Killfiles
gnus-kill-files-directory (concat gnus-directory "killfiles/"))
; Auch gmane soll abgefragt werden
(add-to-list 'gnus-secondary-select-methods
'(nntp "news.gmane.org"))
; Einen Timer starten
(gnus-start-date-timer)
; Wir wollen PGG
(require 'pgg)
(setq pgg-cache-passphrase t
pgg-passphrase-cache-expiry 600
pgg-gpg-use-agent t
pgg-default-user-id "0x9a00d827")
; spam.el
(spam-initialize)
(setq spam-use-whitelist t ; Whitelisten benutzen
spam-use-BBDB t ; Wer in der BBDB ist, wird nicht gefiltert
spam-use-regex-headers t) ; catch X-Spam-Flag (SpamAssassin)
;;;;;;;;;;;;;;;;;;
;; Group Buffer ;;
;;;;;;;;;;;;;;;;;;
; Gruppen sollen hierarchisch sortiert werden können (topic-mode)
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
; Formatierung der group-line
; zunächst soll sich Gnus merken, wann eine Gruppe zuletzt besucht
; wurde
(add-hook 'gnus-select-group-hook 'gnus-group-set-timestamp)
; jetzt die eigentliche group-line
(setq gnus-group-line-format
"%M\%S\%p\%P\%5y: %(%-40,40G%) %ud\n")
; und die Zeitausgabe formitieren
(defun gnus-user-format-function-d (headers)
(let ((time (gnus-group-timestamp gnus-tmp-group)))
(if time
(format-time-string "%b %d %H:%M" time)
"")))
;;;;;;;;;;;;;;;;;;;;
;; Summary Buffer ;;
;;;;;;;;;;;;;;;;;;;;
; summary-line
(setq gnus-user-date-format-alist
'(((gnus-seconds-today) . " %k:%M") ; heute (14:39)
((+ 86400 (gnus-seconds-today)) . "gestern %k:%M") ; gestern 14:39
((+ 604800 (gnus-seconds-today)) . "%a %k:%M") ; sam 14:39
((gnus-seconds-month) . "%a %d") ; sam 28
((gnus-seconds-year) . "%b %d") ; mai 28
(t . "%b %d '%y")) ; mai 28 '05
gnus-summary-line-format
(concat
"%*%U%R%z"
"%-14&user-date;"
"%[%4L%] %*"
"%(%-24,24f %)"
"%1{ %B%s%}\n"))
; Faces zum Unterscheiden der Ebenen
(copy-face 'default 'mysubject)
(set-face-foreground 'mysubject "indianred")
(setq gnus-face-1 'mysubject)
(copy-face 'default 'mytime)
(set-face-foreground 'mytime "green")
(setq gnus-face-2 'mytime)
;; Grafische Bäume
(setq gnus-sum-thread-tree-root "\x4912f " ; "> "
gnus-sum-thread-tree-false-root "\x490f8 " ; "> "
gnus-sum-thread-tree-single-indent " " ; ""
gnus-sum-thread-tree-leaf-with-other "\x4903c\x49020\x490fa " ; "+-> "
gnus-sum-thread-tree-single-leaf "\x490b0\x49020\x490fa " ; "\-> "
gnus-sum-thread-tree-vertical "\x49022" ; "| "
; Sortiere Threads
gnus-thread-sort-functions
'(gnus-thread-sort-by-number
gnus-thread-sort-by-total-score))
; Den ersten Thread einer Gruppe nicht automatisch expandieren
(setq gnus-auto-select-first 'unseen-or-unread)
(add-hook 'gnus-summary-prepared-hook 'gnus-summary-hide-all-threads)
; Alte Header sollen gefetcht werden, um die Threadanzeige zu verbessern
(setq gnus-fetch-old-headers 'some
; Bei eigenen Artikeln darf der Name in der Anzeige unterdrückt werden
gnus-ignored-from-adresses "Oliver Heins"
; Summary Buffer Mode Line
gnus-summary-mode-line-format "Gnus: %G [%A] %Z"
; Caching einschalten für persistente Artikel (Mark: *; Unmark M-*)
gnus-use-cache 'passive
; Zumindest die digitale Signatur eines Artikels soll gezeigt werden
gnus-buttonized-mime-types '("multipart/signed")
; Ältere Artikel sollen nach Möglichkeit vom Server gefetcht werden --
; und wenn dies fehlschlägt von Google
gnus-refer-article-method
`(current
,(gnus-server-to-method "nnml:sent-mail") ; lokales Archiv
,(gnus-server-to-method "nnml:") ; normale Mails
(nntp "localhost") ; lokaler Newsserver
(nnweb "refer" (nnweb-type google)))
; Ein Pfeil in der Fringe soll den aktuell gewählten Artikel
; kennzeichnen
gnus-summary-display-arrow t)
;;;;;;;;;;;;;;;;;;;;
;; Article Buffer ;;
;;;;;;;;;;;;;;;;;;;;
; Boring headers
(setq gnus-treat-hide-boring-headers 'head
gnus-boring-article-headers
'(empty followup-to reply-to long-to)
; Leere Zeilen aus Artikeln entfernen
gnus-treat-strip-leading-blank-lines t
gnus-treat-strip-multiple-blank-lines t
gnus-treat-strip-trailing-blank-lines t
; Umbrochene URLs "entbrechen"
gnus-treat-unsplit-urls nil
; Datum soll einerseits als lokale Zeit, andererseits wie lang es her
; ist angezeigt werden
gnus-treat-date-local 'head
gnus-treat-date-lapsed 'head
gnus-article-date-lapsed-new-header t
; ein paar Verschönerungen
gnus-treat-display-smileys t
gnus-treat-display-x-face 'head
gnus-treat-display-face 'head
gnus-treat-emphasize t)
;;;;;;;;;;;;;;;;;;;;
;; Message Buffer ;;
;;;;;;;;;;;;;;;;;;;;
;; enable automagic wordwrap for composing articles
(add-hook 'message-mode-hook
(lambda ()
(setq fill-column 72)
(turn-on-auto-fill)
(define-key message-mode-map (kbd "C-c [") ; RefTeX
(lambda () (interactive)
(require 'reftex)
(let ((reftex-cite-format "(%2a: %t, %j %v, %p, %2e: %b, %v, %r: %u, %s %d %y%<)"))
(reftex-citation))))))
;; footnote-mode
(autoload 'footnote-mode "footnote" nil t)
(add-hook 'message-mode-hook 'footnote-mode)
;;;;;;;;;;;
;; Mails ;;
;;;;;;;;;;;
;; Messages sollen archiviert werden -- und zwar nach Möglichkeit auch
;; in der Gruppe, in der sie verfasst wurden
; Thanks to Reiner Steib
(defun rs-gnus-message-archive-group-oh (group-current)
"Return preferred archive group."
;; See thread around the following MIDs for more info:
;; <news:87slkqnmyz.fsf@sopos.org>
(let ((gcc1 (when (gnus-check-backend-function
'request-move-article group-current)
group-current))
(gcc2 (if (message-news-p)
"nnml+private:sent-news"
"nnml+private:sent-mail")))
;; Don't gcc to current group, if it's a mailing list:
(when (and gcc1
(string-match "\<list\." group-current))
(setq gcc1 nil))
(cond ((and gcc1 gcc2)
(list gcc1 gcc2))
(gcc1 gcc1)
(gcc2 gcc2)
(t nil))))
(setq gnus-message-archive-group 'rs-gnus-message-archive-group-oh)
;; Mail Splitting
; Gebräuchliche Abkürzungen erweitern
(setq nnmail-split-abbrev-alist
'((any . "List-Post\|X-unsubscribe\|from\|to\|cc\|sender\\
|apparently-to\|delivered-to\|x-apparently-to\|resent-from\\
|resent-to\|resent-cc")
(mail . "mailer-daemon\|postmaster\|uucp")
(to . "to\|cc\|apparently-to\|resent-to\|resent-cc\\
|delivered-to\|x-apparently-to")
(from . "from\|sender\|resent-from")
(nato . "to\|cc\|resent-to\|resent-cc")
(naany . "from\|to\|cc\|sender\|resent-from\|resent-to\|resent-cc")
(ml . "resent-from\|resent-to\|resent-cc\|cc\|X-Original-To\\
|List-Post\|X-unsubscribe\|X-BeenThere\|List-Id\|X-Loop\|X-Mailing\
-List\|To\|List-Post")))
(setq nnmail-split-methods 'nnmail-split-fancy
nnmail-treat-duplicates 'warn
nnmail-cache-accepted-message-ids t
nnmail-cache-ignore-groups '("^sent-mail$"
"^sent-news$"
"^drafts$")
nnmail-message-id-cache-length 5000
nnmail-split-fancy
'(| (: spam-split) ; Spam
("X-Spam-Flag" "YES" "spam")
(: nnmail-split-fancy-with-parent)
(ml "debian-\([-a-zA-Z_\]+\)@lists.debian.org.*" "list.debian-\1")
(ml "cacert\(-?[-a-zA-Z_\]*\)@lists.cacert.org.*" "list.cacert\1")
(to "GMX Kundennummer" "spam")
(from "mailings@gmx.net" "spam")
(to "redaktion@sopos.org" "Sopos.Redaktion")
"inbox"))
; Ich will HTML-Mails möglichst als Plaintext angezeigt bekommen
(eval-after-load "mm-decode"
'(progn
(add-to-list 'mm-discouraged-alternatives "text/html")
(add-to-list 'mm-discouraged-alternatives "text/richtext")))
; Und wenns sein muss, soll w3m die Mails formatieren
(setq mm-text-html-renderer 'w3m-standalone)
;;;;;;;;;;;;;
;; Message ;;
;;;;;;;;;;;;;
; xfaces sehen einfach hässlich aus, wenn sie in ner
; Konfigurationsdatei stehen. Auslagern.
(defun xface-insert ()
(with-temp-buffer nil
(insert-file-contents "~/.xface")
(buffer-string)))
(setq message-subject-re-regexp ; Kaputte Re: auffinden
(concat
"^[ \t]*"
"\("
"\("
"[Aa][Nn][Tt][Ww]\.?\|" ; antw
"[Aa][Ww]\|" ; aw
"[Ff][Ww][Dd]?\|" ; fwd
"[Oo][Dd][Pp]\|" ; odp
"[Rr][Ee]\|" ; re
"[Rr][\311\351][Ff]\.?\|" ; ref
"[Ss][Vv]" ; sv
"\)"
"\(\[[0-9]*\]\)"
"*:[ \t]*"
"\)"
"*[ \t]*"
)
message-subject-trailing-was-query t ; lösche (was: ...) in Antworten
message-alternative-emails ; diese Adressen sollen im Falle eines Reply
(regexp-opt '("heins@sopos.org" "webmaster@sopos.org" ; beibehalten
"webmaster@offizinverlag.de")) ; werden
message-cite-function 'message-cite-original-without-signature ; Signatur
message-signature t ; strippen
message-signature-insert-empty-line t
message-required-news-headers ; Mein Face
(nconc message-required-news-headers
(list '(Face . (lambda ()
(gnus-face-from-file "~/face.jpg")))))
message-required-mail-headers ; Mein Face
(nconc message-required-mail-headers
(list '(Face . (lambda ()
(gnus-face-from-file "~/face.jpg")))))
message-required-mail-headers
(nconc message-required-mail-headers
(list '(X-Face . xface-insert)))
message-required-news-headers
(nconc message-required-news-headers
(list '(X-Face . xface-insert)))
gnus-confirm-mail-reply-to-news t ; Nachfrage bei (Mail-)Reply
; auf News
gnus-gcc-mark-as-read t ; archivierte Mails sollen als read
; markiert werden
gnus-posting-styles
'((".*"
(signature-file "~/.signature"))
("^de.alt.soc.punk"
(signature-file "~/.signature-dasp"))))
;; Message-ID setzen
(defun message-make-message-id ()
(concat "<"(message-unique-id)"@sopos.org>"))
;;* Higher Scoring of followups to myself
(add-hook 'message-sent-hook 'gnus-score-followup-article)
(add-hook 'message-sent-hook 'gnus-score-followup-thread)
© 2006 Oliver Heins <olli@sopos.org>
GnuPG-Key: https://sopos.org/pgp/olli.asc
GnuPG-Fingerprint: F27A BA8C 1CFB B905 65A8 2544 0F07 B675 9A00 D827
Letzte Änderung dieser Seite: Samstag, 25. November 2006, 00:47.