Was ich mir zu meinem Gnus dazugebastelt habe

Gibt es Gründe Gnus zu benutzen, wie die Leistungsfähigkeit oder die gute Konfigurierbarkeit der Software, reicht mir ein Satz. Eine Frage. Diese steht im Manual und dazu noch in Klammern:

The smart choice is to have these specs as far to the left as possible. (Isn't that the case with everything, though? But I digress.)

Mir reicht das. So etwas muss gute Software sein.

So ist es auch tatsächlich; trotzdem fand ich, dass noch das eine oder andere fehlte. Und weil Gnus eben gute Software ist, konnte ich mir das fehlende selbst basteln.

Jedenfalls habe ich es versucht. Ich habe bemerkt, dass Lisp nicht meine Programmiersprache ist (diese habe ich allerdings eh noch nicht gefunden, im Moment hat wohl Perl die besten Chancen auf den Titel) und alle meine Versuche waren geprägt von wüstem Herumgestochere in Manuals, verzweifelten Versuchen, Teile anderer Lisp-Dateien zu verstehen und heftigen Albträumen.

Die hier gezeigten Ergebnisse funktionieren bislang bei mir recht gut, aber ich kann natürlich nicht versprechen, dass das immer und überall auf jedem Rechner so sein wird, wahrscheinlich lösen die folgenden Zeilen bei Lisp-Eingeweihten Brechreize aus - ich bin allerdings lernfähig und freue mich über jeden Verbesserungsvorschlag und jeden Menschen, der helfen will, eine Brücke der Freundschaft zwischen mir und Lisp zu schlagen. Vielen Dank.


templates in gnus

An erster Stelle habe ich keine mir genehme Möglichkeit gesehen, Vorlagen mit Gnus zu verwenden. Vielleicht habe ich etwas übersehen im Manual, auf irgendeiner Webseite im Internet oder in einen guten Ratschlag im Usenet; jetzt ist es eh zu spät, ich habe mir meine Vorlagenfunktion schon gebaut, so steht sie in meiner ~/.gnus-Datei:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;                                           ;;
;;   Auch nicht nett: Versuch mit Vorlagen   ;;
;;     written from gnus-msg.el-supersede    ;;
;;          and message(.el)-supersede       ;;
;;                                           ;;
;; Usage:                                    ;;
;; ------                                    ;;
;;                                           ;;
;; Preparation                               ;;
;;                                           ;;
;; 1. Create a directory to save your        ;;
;;    templates in, let's take               ;;
;;    `~/Mail/templates'.                    ;;
;;                                           ;;
;; 2. Create a (foreign) nndir-group by      ;;
;;    `G m' in the group-buffer, with        ;;
;;    group name `Templates' (if you like)   ;;
;;    and From method:                       ;;
;;    `nndir:~/Mail/templates'               ;;
;;                                           ;;
;; Creating templates                        ;;
;;                                           ;;
;; 3. Templates are created just like normal ;;
;;    mails, so press `m' and write your     ;;
;;    template as you need. Before saving it ;;
;;    by `C-x C-w' in `~/Mail/templates',    ;;
;;    remove the `mail-header-separator`     ;;
;;    `--text follows this line--', leave    ;;
;;    a blank line.                          ;;
;;    The filename of your first template    ;;
;;    must be `1', of your second `2', etc.  ;;
;;    After saving leave the message-buffer  ;;
;;    by `C-x k'.                            ;;
;;                                           ;;
;; Using the templates                       ;;
;;                                           ;;
;; 4. Enter the summary-buffer of the group  ;;
;;    `Templates', select the template you   ;;
;;    want to use and press `B v'.           ;;
;;    A new message-buffer is created from   ;;
;;    your template (Message-ID and Date     ;;
;;    Headers are renewed)                   ;;
;;                                           ;;
;;                                           ;;
;;                                           ;;
;;       insert this into your ~/.gnus       ;;

(defun TOTO-gnus-template ()
  "Compose a new article from template"
  (interactive)
(require 'gnus-msg)

  (let ((article (gnus-summary-article-number)))
    (gnus-setup-message 'reply-yank
      (gnus-summary-select-article t)
      (set-buffer gnus-original-article-buffer)

; these lines taken from message.el - message-supersede
  (let ((cur (current-buffer))
	(sender (message-fetch-field "sender"))
	(from (message-fetch-field "from"))
	)

    ;; Get a normal message buffer.
    (message-pop-to-buffer (message-buffer-name "mail from template"))
    (insert-buffer-substring cur)
    (message-narrow-to-head)

    ;; Remove unwanted headers.
    (goto-char (point-min))
    (if (re-search-forward "Message-ID:" nil t)
	(message-remove-header "Message-ID"))
    (goto-char (point-min))
    (if (re-search-forward "Content-Type:" nil t)
    (message-remove-header "Content-Type"))
    (goto-char (point-min))
    (if (re-search-forward "Date:" nil t)
    (message-remove-header "Date"))

    ;; insert mail-header-separator if not existent
    (goto-char (point-max))
    (if (re-search-backward (concat "\n" mail-header-separator "\n") nil t)
	(goto-char (point-max))
	 (insert mail-header-separator))

    ;; generate new headers
    (message-generate-headers '(Message-ID Date))

    ;; if no GCC-header has been specified, generate a new one
    (goto-char (point-max))
    (if (not (re-search-backward "^GCC:" nil t))
    	(gnus-inews-insert-gcc))

    (goto-char (point-max))
    (widen)
    (forward-line 1))))

;; I need this also
(flyspell-mode)

)

;; call it with "B v" in the Summary-buffer
(require 'gnus-msg)
(define-key gnus-summary-mode-map "Bv" 'TOTO-gnus-template)

;;         end of TOTO-gnus-template         ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


citation-line in posting-styles

Dass mit den Posting-Styles nicht die auch die Citation-Line dem jeweiligen Topic oder der aktuellen Newsgroup automatisch angepasst werden kann (oder geht das? - wo? wie?), ist ein wirklicher Skandal. Mir ist das folgende dazu eingefallen, es ist nicht sehr »lispig«, aber ich finde mich so einigermaßen in den Zeilen zurecht und mehr brauche ich erstmal nicht (wie es funktioniert sollte auch Außenstehenden schnell klar sein). Wieder aus meiner ~/.gnus-Datei:

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;            Jetzt wird´s arg:            ;;
;;  Angenehmere Fassung der citation-line  ;;
;;  replacing message-insert-citation-line ;;

(setq message-citation-line-function 'TOTO-insert-citation-line)

(defun TOTO-insert-citation-line ()
  "Function that inserts a simple citation line - 
   depending on topic or newsgroup,
   replacing message-insert-citation-line."

 (let* (
	;; basics
	(separator "!\n\n")
	(end ":\n\n")
	(from (mail-header-from message-reply-headers))
	(from-name (car (mail-extract-address-components from)))
	(from (or from-name from))
	(firstname (car (split-string from)))
	(date (format-time-string "%d.%m.%Y" (date-to-time (mail-header-date message-reply-headers))))

	;; defaults
	(salutation "Tach ")
	(ref "Du schrobst am ")
	(name firstname))

	;; this one for Topic "Steve" (more serious)
	(if (and (string-match "^Steve" gnus-newsgroup-name)
		  ;; but not if mail is for Ruth from the oeffentlichkeitsdienst
	  (not (string-match "oeffentlichkeitsdienst" (mail-header-from message-reply-headers))))
	 (setq salutation "Hallo "
	       name from
	       ref "Sie schrieben am "))

	;; this one is for the mailinglist Aktion-Bildung:
	(if (string-match "^nnml\\+private:ML-User" gnus-newsgroup-name)
	 (setq salutation "Hallo!\n\n"
	       separator ""
	       name from
	       ref " schrob am "))

	;; in de.-Hierarchie geht es so:
	(if (string-match "^de." gnus-newsgroup-name)
	 (setq salutation ""
	       separator ""
	       name from
	       ref " schrob am "))


	;; in gnu.emacs.gnus:
	;; no salutation
	;; standard date-format
	;; english written
	(if (string-match "^gnu.emacs.gnus" gnus-newsgroup-name)
	 (setq salutation ""
	       separator ""
	       date (mail-header-date message-reply-headers)
	       name from
	       ref " wrote on "))

;; insert the text
  (when message-reply-headers
      (insert salutation name separator ref date end))))

;; end of new message-insert-citation-line ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



Homepage ]

Torsten Krüger · 27.06.2003
zum Webimpressum