;; -*- emacs-lisp -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; $Id: gnus_summary.el,v 1.25 2006-11-06 21:02:42 rscholz Exp $ ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Einstellungen für den Summary Buffer ;; ;; Die offizielle Quelle dieser Datei ist ;; <http://www.zonix.de/projects/emacs/config> ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Navigation (Info-goto-node "(Gnus)Summary Maneuvering") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; beim Markieren nicht automatisch ungelesene Nachrichten anspringen (setq gnus-summary-goto-unread nil) ;; immer die erste Nachricht selektieren (setq gnus-auto-select-subject 'first) ;; schnelles Bewegen im Summary Buffer (define-key gnus-summary-mode-map [(tab)] 'gnus-summary-next-thread) (define-key gnus-summary-mode-map [(control tab)] (lambda () (gnus-summary-next-thread -1))) ;; `=' liegt auf dt. Tastaturen ungünstig, stattdessen `+' (define-key gnus-summary-mode-map "+" "=") ;; Selektierte Zeile komplett hervorheben ;(add-hook 'gnus-summary-mode-hook 'hl-line-mode) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Threading (Info-goto-node "(Gnus)Threading") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; schnellere Rekonstruktion von Threads (setq gnus-build-sparse-threads 'some) (setq gnus-fetch-old-headers 'some) ;; Niemals einen Pseudo-Root-Artikel für einen angefangenen Thread ;; erstellen (setq gnus-summary-make-false-root-always nil) ;; Fuzzy-Algorithmus zur Threadbildung (setq gnus-summary-gather-subject-limit 'fuzzy) ;; Subjects vereinfachen (für Threading nach Subject, falls eingestellt) (setq gnus-simplify-subject-functions '(gnus-simplify-subject-re gnus-simplify-subject-fuzzy gnus-simplify-whitespace)) (setq gnus-simplify-ignored-prefixes "\\(Re?\\|AW\\): *") ;; bewegte Anzeige beim Erstellen der Summary (ab Gnus 5.10) ;(setq gnus-summary-display-while-building t) ;; Threads werden nach den References generiert (setq gnus-summary-thread-gathering-function 'gnus-gather-threads-by-references) ;; Threads werden nach dem Subject generiert ;(setq gnus-summary-thread-gathering-function ; 'gnus-gather-threads-by-subject) ;; Baumdarstellung in einem eigenen Buffer ;(setq gnus-use-trees t ; gnus-generate-tree-function 'gnus-generate-horizontal-tree ; gnus-tree-line-format "%(%[%6,6n%]%)") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Anzeige des Namens (Info-goto-node "(Gnus)To From Newsgroups") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar zonix-gnus-summary-show-sender "^nn.+:\\(INBOX\\.\\)?\\(sent\\.\\(mail\\|news\\)\\)\\|[Dd]rafts$" "Regulärer Ausdruck, der auf Mail-Gruppen zutrifft, in denen statt des Empfängers der Absender angezeigt werden soll.") (setq gnus-ignored-from-addresses (concat "\\(" (user-login-name) "\\|ray-[0-9]+\\|raymond\\.scholz\\|nobody\\|\\(ymond\\|plastikball\\)\.de\\)")) ;;(setq gnus-extra-headers '(To Newsgroups)) ;;(setq nnmail-extra-headers gnus-extra-headers) (defun zonix-gnus-summary-from-name () (make-local-variable 'gnus-ignored-from-addresses) (unless (string-match zonix-gnus-summary-show-sender gnus-newsgroup-name) (setq gnus-ignored-from-addresses nil))) ;; oben definierte Funktion zum Sortieren benutzen (add-hook 'gnus-summary-mode-hook 'zonix-gnus-summary-from-name) ;; besseres (aber langsameres) Parsen der Absenderadresse (setq gnus-extract-address-components 'mail-extract-address-components) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Summary Line (Info-goto-node "(Gnus)Summary Buffer Lines") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Pfeil => für aktiven Artikel (bei Emacs 21 im Fringe) (setq gnus-summary-display-arrow t) ;; Anzeige mit Datum ;(setq gnus-summary-line-format "%U%R%z%d %I%(%[%4L: %-22,22n%]%) %s\n") ;; Datum und Zeit (Horst Winkler in <97tebb.158.1@horst.earlydream.de>) ;(setq gnus-summary-line-format ; (concat "%U%R%[" ; "%~(cut-left 6)~(max-right 2)o.%~(cut-left 4)~(max-right 2)o" ; ".%~(cut-left 2)~(max-right 2)o %~(cut-left 9)~(max-right 2)o" ; ":%~(cut-left 11)~(max-right 2)o] (%4i)%I %(%[%3L:%-20,20n%]%)" ; "%2~(ignore 1)t %s\n")) ;; Hans-Peter Binder in <pb.ae5aitkf.fsf@urkwell.fqdn.th-h.de> ;; The following snippets of .gnus code allow Gnus to report a message's date ;; in any format supported by format-time-string (defun gnus-user-format-function-y (header) "Convert the DATE to DD MM YYYY, HH:MM." (format-time-string "%d.%m.%Y, %R" (gnus-date-get-time (mail-header-date header)))) (defun gnus-user-format-function-z (header) "Convert the DATE to DD MM YYYY" (format-time-string "%d.%m.%Y" (gnus-date-get-time (mail-header-date header)))) (add-to-list 'nnmail-extra-headers 'Content-Type) (add-to-list 'gnus-extra-headers 'Content-Type) ;; ShengHuo ZHU und ein Helfer, den ich vergessen habe, haben mir hier ;; geholfen. Die Funktion sorgt dafür, dass bei einem Content-Type != ;; text/plain ein @ zurückgegeben wird. So kann man schon im ;; Summary-Buffer anzeigen lassen, dass eine Message ein Attachment ;; o.ä. hat. ;; Content-Type-Header zu den Extra-Headern hinzufügen (add-to-list 'nnmail-extra-headers 'Content-Type) (add-to-list 'gnus-extra-headers 'Content-Type) (defun gnus-user-format-function-parts (header) (let ((ctype (cdr (assq 'Content-Type (mail-header-extra header))))) (if (or (not ctype) (string-match "^text/plain" ctype) (string-match "^multipart/\\(encrypted\\|signed\\)" ctype)) " " "@"))) ;; eingeklappte Threads ;(setq gnus-summary-line-format "%U%R%z%I%(%[ %-20,20n%]%) %~(ignore 1)2t: %s\n") ;; Anzeigen mit Datum ;(setq gnus-summary-line-format "%U%R%z %*%-6,6&user-date; [%4L] %I%(%[%2{ %-22,22n %}%]%) %s\n") ;(setq gnus-summary-line-format ":%U%R %B %s %-60= |%4L |%-20,20f|%&user-date; \n") ;; Kurzform der Gruppe in Modeline (setq gnus-summary-mode-line-format "Gnus: %p [%A / Sc:%4z] %Z") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Anzeige mit andersfarbigem Autor (meine Lieblingseinstellung) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; neue Faces basteln (copy-face 'default 'face-1) (set-face-foreground 'face-1 "Darkgreen") (setq gnus-face-1 'face-1) (copy-face 'default 'face-2) (set-face-foreground 'face-2 "MidnightBlue") (setq gnus-face-2 'face-2) ;; ASCII-Art (default) (setq gnus-sum-thread-tree-indent " ") (setq gnus-sum-thread-tree-root "") (setq gnus-sum-thread-tree-false-root "o ") (setq gnus-sum-thread-tree-single-indent "") (setq gnus-sum-thread-tree-leaf-with-other "+-> ") (setq gnus-sum-thread-tree-vertical "| ") (setq gnus-sum-thread-tree-single-leaf "`-> ") ;; Unicode (when window-system (setq gnus-sum-thread-tree-indent " ") (setq gnus-sum-thread-tree-root "● ") (setq gnus-sum-thread-tree-false-root "◯ ") (setq gnus-sum-thread-tree-single-indent "◎ ") (setq gnus-sum-thread-tree-leaf-with-other "├─► ") (setq gnus-sum-thread-tree-vertical "│") (setq gnus-sum-thread-tree-single-leaf "╰─► ") ;; (setq ;; gnus-sum-thread-tree-false-root "┈┬──▷ " ;; gnus-sum-thread-tree-single-indent " ● " ;; gnus-sum-thread-tree-root "┌─▶ " ;; gnus-sum-thread-tree-vertical "│" ;; gnus-sum-thread-tree-leaf-with-other "├┬─► " ;; gnus-sum-thread-tree-single-leaf "╰┬─► " ;; gnus-sum-thread-tree-indent " ") ;; (setq gnus-sum-thread-tree-root "\x4912f ") ;; (setq gnus-sum-thread-tree-single-indent "\x4912e ") ;; (setq gnus-sum-thread-tree-leaf-with-other "\x4903c\x49020\x490fa ") ;; (setq gnus-sum-thread-tree-vertical "\x49022") ;; (setq gnus-sum-thread-tree-single-leaf "\x490b0\x49020\x490fa ") ) ; Darstellung von Followups ;(setq gnus-summary-same-subject ">") (setq gnus-summary-same-subject "") ;; einfache Baumdarstellung ;(setq gnus-summary-line-format "%U%R%z %*%d [%4L] %B%(%[%2{ %-22,22n %}%]%) %s\n") ;; einfacher auf der Textconsole (setq gnus-summary-line-format (concat ; "%«%*%5{%U%R%z%}%»" ;%uc" "%*%5{%U%R%z%}" ;%uc" "%4{|%}" "%2{%-10&user-date;%}" ; Datum "%4{|%}" "%2{%u&parts;%}" ; Parts "%4{|%}" ;"%2{ %}%(%-20,20a%)" "%2{ %}%(%-24,24f" ;From/To (n) ;"%2{ %}%1{%-20,20a%}" "%4{|%}" "%2{%5i%}" "%4{|%}" "%2{%6k %}%)" ;3t 6k "%4{|%}" "%2{ %}%3{%B%}%1{%us%}\n")) ;; Mit Unicode-Chars unter X (when window-system (setq gnus-summary-line-format (concat ; "%«%*%5{%U%R%z%}%»" ;%uc" "%*%5{%U%R%z%}" ;%uc" "%4{│%}" "%2{%-10&user-date;%}" ; Datum "%4{│%}" "%2{%u&parts;%}" ; Parts "%4{│%}" ;"%2{ %}%(%-20,20a%)" "%2{ %}%(%-24,24f" ;From/To (n) ;"%2{ %}%1{%-20,20a%}" "%4{│%}" "%2{%5i%}" "%4{│%}" "%2{%6k %}%)" ;3t 6k "%4{│%}" "%2{ %}%3{%B%}%1{%us%}\n"))) ;; aktuelle Zeile wird hervorgehoben (sieht auf Textterminals komisch aus) (when window-system (require 'highline) (add-hook 'gnus-group-prepare-hook 'highline-on) (add-hook 'gnus-summary-prepare-hook 'highline-on) (set-face-background 'highline-face "grey70")) ;; (when window-system ;; (copy-face 'highlight 'hl-line-mode-highlight) ;; (set-face-background 'hl-line-mode-highlight "grey70") ;; (setq hl-line-face 'hl-line-mode-highlight) ;; (add-hook 'gnus-group-prepare-hook 'hl-line-mode) ;; (add-hook 'gnus-summary-prepare-hook 'hl-line-mode)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Sortierung (Info-goto-node "(Gnus)Sorting the Summary Buffer") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defvar zonix-gnus-summary-sorted-by-score "^\\(nn.*:[Ll]ist\\.\\|nnvirtual:\\)" "Regulärer Ausdruck, der auf Mail-Gruppen zutrifft, die nach Score sortiert werden sollen.") ;; Newsgroups und Mailinglisten nach Score sortieren, sonst nach Datum. (defun zonix-gnus-summary-sorting () (if (or (gnus-news-group-p gnus-newsgroup-name) (string-match zonix-gnus-summary-sorted-by-score gnus-newsgroup-name)) ;; nach Score (progn (make-local-variable 'gnus-use-adaptive-scoring) (make-local-variable 'gnus-use-scoring) (make-local-variable 'gnus-thread-sort-functions) (make-local-variable 'gnus-sort-gathered-threads-function) (setq gnus-use-scoring t) ;; Adaptives Scoring (setq gnus-use-adaptive-scoring t) (setq gnus-thread-sort-functions 'gnus-thread-sort-by-total-score) (setq gnus-sort-gathered-threads-function 'gnus-thread-sort-by-total-score)) ;; sonst nach Datum (progn (make-local-variable 'gnus-use-adaptive-scoring) (make-local-variable 'gnus-use-scoring) (make-local-variable 'gnus-thread-sort-functions) (make-local-variable 'gnus-sort-gathered-threads-function) (setq gnus-use-scoring nil) ;; Kein adaptives Scoring (setq gnus-use-adaptive-scoring nil) (setq gnus-thread-sort-functions 'gnus-thread-sort-by-date) (setq gnus-sort-gathered-threads-function 'gnus-thread-sort-by-date)))) ;; oben definierte Funktion zum Sortieren benutzen (add-hook 'gnus-summary-mode-hook 'zonix-gnus-summary-sorting) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Faces (Info-goto-node "(Gnus)Summary Highlighting") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; die Defaulteinstellung ist grausig (set-face-foreground 'gnus-summary-cancelled-face "Grey") (set-face-background 'gnus-summary-cancelled-face nil) ;; Sehr hohe Scores, d.h. (Antworten auf) eigene Postings grau hinterlegen (defvar zonix-score-X 999) (copy-face 'gnus-summary-high-ticked-face 'gnus-summary-high-ticked-face-X) (copy-face 'gnus-summary-high-ancient-face 'gnus-summary-high-ancient-face-X) (copy-face 'gnus-summary-high-unread-face 'gnus-summary-high-unread-face-X) (copy-face 'gnus-summary-high-read-face 'gnus-summary-high-read-face-X) (when window-system (set-face-background 'gnus-summary-high-unread-face-X "grey") (set-face-background 'gnus-summary-high-ticked-face-X "grey") (set-face-background 'gnus-summary-high-ancient-face-X "grey") (set-face-background 'gnus-summary-high-read-face-X "grey")) ;; Thanks to Bill White for pointing me to the `pushnew' function... (pushnew '((> score zonix-score-X) . gnus-summary-high-read-face-X) gnus-summary-highlight) (pushnew '((and (> score zonix-score-X) (= mark gnus-ancient-mark)) . gnus-summary-high-ancient-face-X) gnus-summary-highlight) (pushnew '((and (> score zonix-score-X) (= mark gnus-unread-mark)) . gnus-summary-high-unread-face-X) gnus-summary-highlight) (pushnew '((and (> score zonix-score-X) (or (= mark gnus-dormant-mark) (= mark gnus-ticked-mark))) . gnus-summary-high-ticked-face-X) gnus-summary-highlight) (pushnew '((and (> score zonix-score-X) (memq mark (list gnus-downloadable-mark gnus-undownloaded-mark))) . gnus-summary-high-unread-face-X) gnus-summary-highlight) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Balloon Help ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Jesper Harder in <m365w5u5qp.fsf@defun.localdomain> ;; To do it you enclose the part of `gnus-summary-line-format' you want to ;; be mouse sensitive in %« %», e.g. ;(setq gnus-summary-line-format "%U%R%z %B%«%-23,23n%» %s\n") ;(setq gnus-summary-line-format ; "%U%R%z %*%d %u&parts; [%4L] %I%(%[%2{ %«%-22,22n%» %}%]%) %s\n") ;; and set `gnus-balloon-help-face-0' to a function which returns the ;; information to be displayed, e.g. (setq gnus-balloon-face-0 'jh-article-help) (defun jh-article-help (window object position) "Help echo for the summary buffer." (with-current-buffer object (let* ((article (get-text-property position 'gnus-number)) (head (gnus-data-header (gnus-data-find article)))) (format "Date: %s\nSize: %s\nScore: %s\nNumber: %s" (mail-header-date head) (gnus-summary-line-message-size head) (gnus-summary-article-score article) (mail-header-number head))))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Buffer Layout (Info-goto-node "(Gnus)Window Layout") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; alternatives Layout mit drei Buffern ; (setq gnus-build-sparse-threads 'some ; 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.25 ; (summary 0.75 point) ; (tree 1.0)) ; (article 1.0)))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Nachfragen bei direkten Replies (ab Gnus 5.10) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Patric Mueller in <7iq1t9.m63.ln@bhaak.xodox.com> ;; von mir erweitert um die Abfrage auf Mailinglisten (defun zonix-gnus-confirm-mail-reply-to-news (name) (or (gnus-news-group-p (if (gnus-virtual-group-p name) (car (nnvirtual-map-article (cdr gnus-article-current))) name)) (string-match "^nn.+:\\(INBOX\.\\)?list\\." name))) ;; nachfragen, wenn Funktion (s.o.) t zurückgibt (setq gnus-confirm-mail-reply-to-news 'zonix-gnus-confirm-mail-reply-to-news) ;; nachfragen, wenn aktuelle Gruppe einem best. Pattern entspricht ;(setq gnus-confirm-mail-reply-to-news "list\\.") ;; immer nachfragen ;(setq gnus-confirm-mail-reply-to-news t) ;; auch nachfragen, wenn es sich bei der Nachricht, auf die man ;; antwortet, um Mail handelt (z.B. in Mailinglisten) (setq gnus-confirm-treat-mail-like-news t) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Nachfragen bei direkten Replies (vor Gnus 5.10) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Patric Mueller in <7iq1t9.m63.ln@bhaak.xodox.com> ;; von mir erweitert um die Abfrage auf Mailinglisten ;; (defadvice gnus-summary-reply (around reply-in-news activate) ;; (when (or ;; (not (or (gnus-news-group-p ;; (if (gnus-virtual-group-p gnus-newsgroup-name) ;; (car (nnvirtual-map-article (cdr gnus-article-current))) ;; gnus-newsgroup-name ;; )) ;; (string-match "list\\." gnus-newsgroup-name))) ;; (y-or-n-p "Really, really reply? ")) ;; ad-do-it)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Nützliche Funktionen ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Threads aus- und einklappen mit Cursortasten <do2ub8.68i.ln@grumbel.subdomain.de> (defun my-gnus-summary-show-thread () "Show thread without changing cursor positon." (interactive) (gnus-summary-show-thread) (beginning-of-line) (forward-char 1)) ;(setq gnus-thread-hide-subtree t) ;(define-key gnus-summary-mode-map [(right)] 'my-gnus-summary-show-thread) ;(define-key gnus-summary-mode-map [(left)] 'gnus-summary-hide-thread) ;; Ganzen Thread anzeigen ;; Christoph Conrad in <m3smud2ske.fsf@ID-24456.user.dfncis.de> (defun cc-fetch-whole-thread() "like `A R' `T o' `A T' in the summary buffer." (interactive) (gnus-summary-refer-references) (gnus-summary-top-thread) (gnus-summary-refer-thread)) (define-key gnus-summary-mode-map (kbd "AA") 'cc-fetch-whole-thread) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Mailinglisten-Mode (Info-goto-node "(Gnus)Mailing List") ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (add-hook 'gnus-summary-mode-hook (lambda () (if (string-match zonix-gnus-summary-sorted-by-score gnus-newsgroup-name) (turn-on-gnus-mailing-list-mode)))) ;; Local Variables: ;; coding: utf-8 ;; End: