;; -*- emacs-lisp -*-
;; don't let gnus destroy our window configuration!
;; (setq gnus-use-full-window t)
(setq user-mail-address "cjb@laptop.org")
'(query-user-mail-address nil)
(setq gnus-verbose 10)
(setq gnus-verbose-backends 10)
(setq garbage-collection-messages nil)
;; This marks mail I send as read.
(setq gnus-gcc-mark-as-read t)
;; The CVS of Oort hides References: from me while composing. It didn't
;; always, but it does now. We don't need to delay generating it until
;; until send-time (unlike, say, Date:), so let's not; that way I can
;; check that I'm including one, too. Yay.
(setq message-generate-headers-first '(References))
;; GC. This keeps things somewhere around:
;; PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
;; 18291 chris 0 0 56768 55M 2980 S 0.0 22.0 15:34 xemacs
(setq gc-cons-threshold 6000000)
;; General speedups.
(setq gnus-read-active-file nil)
(setq gnus-check-new-newsgroups nil)
(setq gnus-nov-is-evil nil)
(setq gnus-save-newsrc-file t)
(setq user-full-name "Chris Ball")
(setq message-from-style 'angles)
;; Using %G (default is %g) avoids the nnfoo:bar+ prefix
(setq gnus-group-line-format "%M\%S\%p\%5y: %G\n")
;; Topic headings for groups.
(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)
;; Wrap at 70 cols.
(add-hook 'message-mode-hook
'(lambda()
(turn-on-auto-fill)
(setq fill-column 70)))
(setq message-send-mail-function 'smtpmail-send-it)
(setq smtpmail-smtp-server "printf.net")
(setq gnus-message-archive-group "nnimap+printf:2009mbox")
(setq gnus-select-method '(nnimap "printf"
(nnimap-address "printf.net")
(nnimap-authenticator login)
(nnimap-stream ssl)
(remove-prefix "INBOX.")
(nnimap-authinfo-file "/home/cjb/.authinfo")
)
)
(setq gnus-secondary-select-methods '((nntp "news.gmane.org")))
;; Supercite.
(setq sc-preferred-attribution-list
`("x-attribution" "initials" "sc-lastchoice" "firstname" "lastname"))
(setq sc-preferred-header-style 1)
(setq sc-citation-leader " ")
(setq sc-reference-tag-string ">> ")
;(setq news-reply-header-hook nil)
(autoload `sc-cite-original "supercite" "Supercite 3.1" t)
(add-hook `mail-citation-hook `sc-cite-original)
(setq sc-nested-citation-p t)
(setq sc-cite-regexp "\\s *[-a-zA-Z0-9_.]*>+\\s *[> ]*")
(setq sc-auto-fill-region-p t)
(add-hook 'mail-citation-hook 'sc-cite-original)
;; Show the time since the article came in.
(setq gnus-treat-date-lapsed 'head)
;; Make sure Gnus doesn't display smiley graphics.
(setq gnus-treat-display-smileys nil)
;; I keep hitting "b" by mistake in the group view, and it messes things up.
(define-key gnus-group-mode-map "b" 'gnus-group-get-new-news)
;; Use a second connection to grab the next article when I read one, so
;; I don't have to wait for it be downloaded.
(setq gnus-asynchronous t)
;; Avoid "Here's an attachment oops I forget to attach it augh" embarrassment.
;; Taken from .
(defun check-attachments-attached ()
(interactive)
(save-excursion
(goto-char (point-min))
(let* (
;; Nil when message came from outside (eg calling emacs as editor)
;; Non-nil marker of end of headers.
(internal-messagep
(re-search-forward
(concat "^" (regexp-quote mail-header-separator) "$") nil t))
(end-of-headers ; Start of body.
(copy-marker
(or internal-messagep
(re-search-forward "^$" nil t)
(point-min))))
(limit
(or (re-search-forward "^-- $" nil t)
(point-max)))
(old-case-fold-search case-fold-search))
(unwind-protect
(progn
(goto-char end-of-headers)
(when (search-forward "attach" limit t)
(goto-char end-of-headers)
;; the word 'attach' has been used, can we find an
;; attachment?
(unless
(or (re-search-forward "^<#/" limit t)
(y-or-n-p
"Found the word `attach' but no MIME attachment: send anyway? "
)
(error "Aborted send")))))
(set-marker end-of-headers nil)))))
(add-hook 'message-send-hook 'check-attachments-attached)
;; Add formalities for me.
(defadvice gnus-summary-reply (after formalities () activate)
(cjb-add-formalities))
(defun cjb-add-formalities ()
"Add the sender's first name and my tag to e-mail."
;; Modified from
(save-excursion
(message-goto-signature)
(previous-line 2)
(when (not (looking-at "- Chris."))
(insert "\n\n- Chris.")))
(let* ((to (message-fetch-field "To"))
(address-comp (mail-extract-address-components to))
(name (car address-comp))
(first (or (and name (concat "" (car (split-string name)))) "")))
(when first
;; Go to the first line of the message body.
(message-goto-body)
(insert "Hi,\n\n")
(kill-line)
(kill-line)
(kill-line)
(message-goto-signature)
(previous-line 4)
(newline)
)))
;;(insert (concat (capitalize first) ",\n\n")))))
(defun gnus-demon-scan-mail-or-news-and-update ()
"Scan for new mail/news and update the *Group* buffer"
(when (gnus-alive-p)
(save-window-excursion
(save-excursion
(set-buffer gnus-group-buffer)
(gnus-group-get-new-news)))))
(defun gnus-demon-scan-and-update ()
(gnus-demon-scan-mail-or-news-and-update))
;; Sort threads by the date of the root node.
(setq gnus-thread-sort-functions `(gnus-thread-sort-by-date))
;; BBDB
(require 'bbdb)
(bbdb-initialize)
(add-hook 'gnus-startup-hook 'bbdb-insinuate-gnus)
(setq bbdb-use-pop-up nil)
(setq gnus-use-full-window nil)
;; Save BBDB addresses from the people I reply to.
;; Taken from
(defun cjb-bbdb-add-recipients-to-bbdb ()
(mapcar
(lambda (address)
(let* ((parsed (mail-header-parse-address (bbdb-string-trim address)))
(net (car parsed))
(name (cdr parsed)))
(when (not (bbdb-search-simple name net))
(bbdb-create-internal (cdr parsed) nil (car parsed) nil nil nil))))
(append (message-tokenize-header (message-fetch-field "to"))
(message-tokenize-header (message-fetch-field "cc"))
(message-tokenize-header (message-fetch-field "bcc")))))
(add-hook 'message-send-mail-hook 'cjb-bbdb-add-recipients-to-bbdb)
;; Initialize the Gnus daemon, check new mail every one minute.
(gnus-demon-add-handler 'gnus-demon-scan-and-update 1 1)
(setq gnus-use-demon t)
(gnus-demon-init)
(gnus-compile)