Gnus Installation 4/6

All dancing

Wir möchten in einem eigenen News-Artikel einen extra Header-Eintrag einfügen, aber in Mails nicht. Und nur in Mails soll ebenfalls ein Eintrag im Header erscheinen, der aber nicht in News-Artikeln erscheinen soll.
Zuerst könnten wir den Default-Header konfigurieren, die From-Zeile soll den Namen und dahinter die Adresse beinhalten
und ein Sender-Eintrag soll unterbunden werden.

(setq
      message-from-style 'angles
      ;;* Die Signature beim Antworten nicht zitieren
      message-cite-function 'message-cite-original-without-signature
      ;;* Eine Sender-Zeile im Header unterbinden
      message-syntax-checks '((sender . disabled))
)

;;* Eine Extra-Zeile nur bei News-Artikeln in den Header setzen. X-No-Archive für
;;* deja.com z.B., gepostete Artikel werden dadurch _nicht_ ins News-Archiv
;;* aufgenommen.
(require 'message)
(setq message-required-news-headers
		(nconc message-required-news-headers
			(list '(X-No-Archive . "yes"))
		)
)

;;* Und nur für Mails.
(require 'message)
(setq message-required-mail-headers
      (nconc message-required-mail-headers
	     (list '(X-URL . "http://privat.schlund.de/"))
	     (list '(X-Org . "Hands up! Linux of borgs!"))
      )
)

;;* Einen guten Spruch automatisch von Fortune in die Signatur? Fortune
;;* beinhaltet mehrere Dateien mit Sprüchen oder Zitaten nach Themen
;;* sortiert, wie z.B. Kunst, Liebe, Computer, Linux oder Startrek. Der
;;* Spruch wird einwandfrei abgetrennt und ist auch nicht zu lang.

(setq message-signature 'fortune)
(defvar fortune-program nil
  "*Program used to generate epigrams, default \"fortune\".")
(defvar fortune-switches nil
  "*List of extra arguments when `fortune-program' is invoked.")
(defun fortune (&optional long-p)
  "Generate a random epigram.
An optional prefix argument generates a long epigram.
The epigram is inserted at point if called interactively."
  (interactive "*P")
  (let ((fortune-buffer (generate-new-buffer " fortune"))
	(fortune-string "Have an adequate day."))
    (unwind-protect
	(save-excursion
	  (set-buffer fortune-buffer)
	  (apply 'call-process
	         (append (list (or fortune-program "fortune") nil t nil)
	                  fortune-switches (list (if long-p "-l" "-s"))))
	  (skip-chars-backward "\n\t ")
	  (setq fortune-string (buffer-substring (point-min) (point))))
      (kill-buffer fortune-buffer))
    (if (interactive-p)
	(insert fortune-string))
	 fortune-string)
)

;;* adaptive scoring aktivieren.
(setq gnus-use-adaptive-scoring t)

;;* Hiermit können wir uns etwas zurücklehnen und Gnus die Score-Einträge 
;;* übernehmen lassen, die anhand des Lese-Verhaltens vorgenommen werden.
(defvar gnus-default-adaptive-score-alist
       '((gnus-unread-mark)
         (gnus-ticked-mark (from 4))
         (gnus-dormant-mark (from 5))
         (gnus-del-mark (from -5) (subject -5))
         (gnus-read-mark (from 4) (subject 2))
         (gnus-expirable-mark (from -1) (subject -1))
         (gnus-killed-mark (from -1) (subject -10))
         (gnus-kill-file-mark)
         (gnus-ancient-mark)
         (gnus-low-score-mark)
         (gnus-catchup-mark (from -1) (subject -5)))
)
 
;;* Für ungeliebte Poster, Spammer und Idioten kommt die Walze zur Geltung.
;;*                         --quick nuke people--
;;* This function should be called from the summary buffer with point
;;* on the article to nuke.  It puts a rule in ~/News/SPAMMERS to lower
;;* scores of author
;;* It needs an entry in all.SCORE of (files "~/News/SPAMMERS").

(defun gnus-scum-expunge ()
  "Remove this spammer from existance as much as possible."
  (interactive)
  (let* ((hdr (gnus-summary-article-header))
         (subj (aref hdr 1))
         (auth (aref hdr 2))
         (artid (aref hdr 4))
         (atsign (string-match "@" artid))
         (host (substring artid (+ atsign 1) (- (length artid) 1)))
         (oldscfile gnus-current-score-file))
    ;; Change to our spammer score file
    (gnus-score-change-score-file "SPAMMERS")
    ;; Add our horrible spammer scores
    ;;(gnus-summary-score-entry "Subject" subj 'S' -1000 nil)
    (gnus-summary-score-entry "From" auth 'S' -9999 nil)
    (gnus-summary-score-entry "Message-ID" host 'S' -9999 nil)
    ;; Change back to old current score file
    (gnus-score-change-score-file oldscfile)
    (gnus-score-save)))

;;* Mit Control-cx wird zugeschlagen.
(global-set-key "\C-cx" 'gnus-scum-expunge)

;;* Wenn wir auf ein Artikel antworten, das Subject aber nicht mehr
;;* zutrifft, gibt es eine schnelle kleine Hilfe.

(defun dpi-change-subject (neues-subject)
  "introduces new subject."
  (interactive "snew Subject: ")
  (let ((case-fold-search nil))
    (goto-line 0)
    (re-search-forward "^Subject: ")
    (if (re-search-forward "R[Ee]: " nil t)
        (replace-match "")
      )
    (insert-string neues-subject)
    (insert-string " (was: ")
    (end-of-line)
    (insert-string ")")
    )
  )

;;* Und mit M-n oder je nach Einstellung der Tastatur auch Esc-n,
;;* kommt das Ganze ins Rollen.
(define-key message-mode-map '"\M-n" 'dpi-change-subject)