chiark / gitweb /
dot/vm: Set a `From' header when composing mail.
[profile] / dot / vm
1 ;;; -*-emacs-lisp-*-
2 ;;;
3 ;;; Configuration for VM
4
5 (require 'auth-source)
6
7 (setq vm-reply-subject-prefix "Re: "
8       vm-included-text-prefix "> "
9       vm-included-text-attribution-format "%F <%f> wrote:\n\n"
10       vm-folder-directory "~/Mail/"
11       vm-startup-with-summary t
12       vm-skip-deleted-messages nil
13       vm-circular-folders nil
14       vm-preview-lines nil
15       vm-highlighted-header-regexp "^From\\|^Subject"
16       vm-movemail-program "movemail-hack"
17       vm-mail-header-from (format "Mark Wooding <%s>"
18                                   (or (mdw-config 'email)
19                                       "mdw@distorted.org.uk"))
20       vm-delete-after-saving t
21       vm-move-after-deleting t
22       vm-delete-empty-folders nil)
23
24 (setq auth-sources '("~/.gnus.authinfo")
25       vm-imap-max-message-size 0
26       vm-imap-refer-to-inbox-by-account-name t
27       vm-imap-save-to-server t
28       vm-imap-account-alist
29       '(("imap-ssl:mail.distorted.org.uk:993:*:login:mdw:*"
30          "distorted")
31         ("imap-ssl:mail.distorted.org.uk:993:*:login:markw:*"
32          "markw-distorted")
33         ("imap-ssl:imap.dovecot.chiark.greenend.org.uk:993:*:login:mdw:*"
34          "mdw-chiark")
35         ("imap-ssl:imap.dovecot.chiark.greenend.org.uk:993:*:login:mwooding:*"
36          "mwooding-chiark")
37         ("imap-ssl:imap.gmail.com:993:*:login:distorted.mdw@gmail.com:*"
38          "google")))
39
40 (and (eq (terminal-coding-system) 'utf-8)
41      (add-to-list 'vm-mime-default-face-charsets "utf-8"))
42
43 (setq vm-mime-qp-encoder-program nil
44       vm-mime-qp-decoder-program nil
45       vm-mime-base64-encoder-program nil
46       vm-mime-base64-decoder-program nil)
47
48 (setq vm-visible-headers '("resent-from:" "from:" "reply-to:" "sender:"
49                            "to:" "apparently-to:" "cc:"
50                            "subject:" "date:"
51                            "delivered-to:" "return-path:"))
52
53 (setq vm-reply-ignored-addresses
54       (let ((pat bbdb-user-mail-names))
55         (if (string-prefix-p "^" pat)
56             (setq pat (substring pat 1)))
57         (if (string-suffix-p "$" pat)
58             (setq pat (substring pat 0 (1- (length pat)))))
59         (cons (concat "\\<" pat "\\>") nil)))
60
61 (defvar mdw-mailing-lists
62   '("hibachi-dealers-members@chiark\\.greenend\\.org\\.uk"))
63
64 (setq vm-mime-external-content-types-alist
65       '(("image/jpeg" "xdg-open")
66         ("image/jpg" "xdg-open")
67         ("image/gif" "xdg-open")
68         ("image/bmp" "xdg-open")
69         ("image/tiff" "xdg-open")
70         ("application/postscript" "xdg-open")
71         ("application/pdf" "xdg-open")))
72
73 (setq vm-url-browser "sensible-browser")
74
75 (setq vm-frame-parameter-alist
76       '((folder ((width . 81) (height . 33)))
77         (summary ((width . 81) (height . 33)))
78         (primary-summary ((width . 81) (height . 33)))))
79
80 (setq vm-auto-folder-alist
81       '(("delivered-to" ("root@" . "admin"))
82         ("from" ("Cron Daemon" . "admin"))))
83
84 (defun join-strings (del strings)
85   (with-output-to-string
86     (if (null strings)
87         nil
88       (princ (car strings))
89       (setq strings (cdr strings))
90       (while strings
91         (princ del)
92         (princ (car strings))
93         (setq strings (cdr strings))))))
94
95 (defun mdw-vm-fix-mailing-lists ()
96   (save-restriction
97     (save-excursion
98       (or (vm-mail-mode-get-header-contents "Resent-To:")
99           (vm-mail-mode-get-header-contents "Resent-Cc:")
100           (vm-mail-mode-get-header-contents "Resent-Bcc:")
101           (let ((mailing-list-regex (concat "\\<\\("
102                                             (join-strings "\\|"
103                                                           mdw-mailing-lists)
104                                             "\\)\\>"))
105                 (to (vm-mail-mode-get-header-contents "To:"))
106                 (cc (vm-mail-mode-get-header-contents "Cc:")))
107             (if (or (and to (string-match mailing-list-regex to))
108                     (and cc (string-match mailing-list-regex cc)))
109                 (let ((addrs (nconc (and to (vm-parse-addresses to))
110                                     (and cc (vm-parse-addresses cc))))
111                       (new nil))
112                   (while addrs
113                     (if (string-match mailing-list-regex (car addrs))
114                         (setq new (cons (car addrs) new)))
115                     (setq addrs (cdr addrs)))
116                   (vm-mail-mode-remove-header "Cc:")
117                   (vm-mail-mode-remove-header "To:")
118                   (widen)
119                   (goto-char (point-min))
120                   (insert (format "To: %s\n" (join-strings ", " new))))))))))
121
122 (add-hook 'vm-reply-hook 'mdw-vm-fix-mailing-lists)
123
124 (defun mdw-mark-as-spam ()
125   (interactive)
126   (save-window-excursion
127     (vm-pipe-message-to-command "userv spamd spam" 1))
128   (vm-delete-message 1))
129 (define-key vm-summary-mode-map "/" 'mdw-mark-as-spam)