-
-
Save anguslees/838ff9f0d059250d229556c7cb941e32 to your computer and use it in GitHub Desktop.
ancient ~gus/.wl
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; wanderlust setup -*- emacs-lisp -*- | |
; see nice example at http://www.tamaru.kuee.kyoto-u.ac.jp/~kokada/wl/src | |
(setq wl-user-mail-address-list | |
(list "gus@slug.org.au" | |
"gus@inodes.org" | |
"gus@madcow.inodes.org" | |
"gus@debian.org" | |
"gus@switchonline.com.au" | |
"gus@pasture.com.au" | |
"angus.lees@urnet.com.au")) | |
(setq wl-subscribed-mailing-list | |
'("slug@slug.org.au" | |
"committee@slug.org.au" | |
"festies@slug.org.au" | |
"pdftex@tug.org" | |
"embperl@perl.apache.org" | |
"wl-en@lists.airs.net" | |
"pcanet@cat.org.au" | |
"design@lists.freeswan.org" | |
"tech@lists.busibox.com.au")) | |
(setq wl-from "Angus Lees <gus@inodes.org>") | |
(cond | |
((string-match "^cat" (system-name)) | |
;; laptop is poorly connected, so force a unique message-id doman | |
(setq wl-local-domain "inodes.org" | |
wl-message-id-domain "gus.inodes.org")) ; random unique string | |
((string-match "urnet\\.com\\.au" (system-name)) | |
;; ldap | |
(setq wl-use-ldap t | |
wl-ldap-server "coke.int-server.urnet.com.au" | |
wl-ldap-base "ou=People,dc=urnet,dc=com,dc=au") | |
(setq elmo-imap4-default-server "mail.urnet.com.au" | |
elmo-imap4-default-authenticate-type 'clear ; :( | |
elmo-imap4-default-user "angus.lees@urnet.com.au") | |
; (setq elmo-imap4-debug t) | |
(setq wl-from "Angus Lees <angus.lees@urnet.com.au>"))) | |
(setq elmo-nntp-default-server "news.gmane.org") | |
(defun wl-mailing-list-addresses () | |
(let (list-addrs) | |
(dolist (to (mapcar | |
(lambda (addr) | |
(nth 1 (std11-extract-address-components addr))) | |
(wl-parse-addresses | |
(wl-concat-list | |
(elmo-multiple-fields-body-list (list "To" "Cc")) | |
",")))) | |
(when (elmo-string-matched-member to wl-subscribed-mailing-list t) | |
(setq list-addrs (cons to list-addrs)))) | |
(nreverse list-addrs))) | |
(setq wl-draft-config-alist | |
'(("^\\(To\\|Cc\\): .*@slug\\.org\\.au" | |
("From" . "Angus Lees <gus@slug.org.au>")) | |
((wl-mailing-list-addresses) | |
;("Mail-Followup-To" . (wl-mailing-list-addresses)) | |
("Mail-Copies-To" . "never")) | |
("^\\(To\|Cc\\): .*@.*debian\\.org" | |
(template . "debian")) | |
("^To: .*announce@slug\\.org\\.au" | |
("Mail-Followup-To" . "festies@slug.org.au")) | |
("^To: .*@urnet\\.com\\.au" | |
("From" . "Angus Lees <angus.lees@urnet.com.au>")))) | |
;; add a (pgp-sign . BOOL) | |
(unless (assq 'pgp-sign wl-draft-config-sub-func-alist) | |
(wl-append wl-draft-config-sub-func-alist | |
'((pgp-sign . mime-edit-set-sign)))) | |
;; add a (pgp-encrypt . BOOL) | |
(unless (assq 'pgp-encrypt wl-draft-config-sub-func-alist) | |
(wl-append wl-draft-config-sub-func-alist | |
'((pgp-encrypt . mime-edit-set-encrypt)))) | |
; add a (signature . "filename") | |
(unless (assq 'signature wl-draft-config-sub-func-alist) | |
(wl-append wl-draft-config-sub-func-alist | |
'((signature . wl-draft-config-sub-signature)))) | |
(defun wl-draft-config-sub-signature (content) | |
(require 'signature) | |
(let ((signature-insert-at-eof nil) | |
(signature-file-name content)) | |
;; should remove old signature first.. | |
(goto-char (mime-edit-content-end)) ; part-bottom | |
(insert-signature))) | |
; apply wl-draft-config-alist when draft buffer is prepared, not when sent | |
(remove-hook 'wl-draft-send-hook 'wl-draft-config-exec) | |
(add-hook 'wl-mail-setup-hook | |
'(lambda () | |
(unless wl-draft-reedit | |
(wl-draft-config-exec wl-draft-config-alist)))) | |
(setq wl-draft-reply-buffer-style 'full) | |
(setq wl-draft-always-delete-myself t | |
wl-insert-mail-followup-to t) | |
; templates :) | |
(setq wl-template-alist | |
'(("default" | |
("From" . wl-from) | |
(signature . "~/.signature")) | |
("debian" | |
("From" . "Angus Lees <gus@debian.org>") | |
("Organization" . "Debian") | |
(pgp-sign . t)) | |
("corporate" | |
("From" . "angus.lees@urnet.com.au") | |
("Organization" . "Ursys") | |
(signature . "~/.signature")) | |
("debian" | |
("From" . "gus@debian.org") | |
("Organization" . "Debian") | |
(signature . "~/.signature") | |
(pgp-sign . t)))) | |
;; silly-mail headers. heh. | |
(if (fboundp 'sm-add-random-header) | |
(add-hook 'wl-mail-setup-hook 'sm-add-random-header)) | |
;; split large messages | |
(setq mime-edit-split-message t) | |
;; cache sent messages in 'sendlog, store permanently in +outbox | |
(setq wl-draft-use-cache t | |
wl-fcc "+outbox" | |
wl-fcc-force-as-read t | |
wl-draft-delete-myself-from-bcc-fcc t) | |
(setq wl-plugged t | |
elmo-enable-disconnected-operation t | |
elmo-plugged-condition 'elmo-plug-on-by-exclude-servers | |
wl-auto-flush-queue t) | |
(setq wl-folder-access-subscribe-alist | |
'(("^%" . (t "."))) | |
wl-folder-hierarchy-access-folders | |
'("^-$" "^-alt$" | |
"^-gmane$" "^-gmane.comp$" "^-gmane.linux$" | |
"^%Mail/\\(trash\\|outbox\\|draft\\|schedule\\)/")) | |
(setq wl-summary-target-above 2000 | |
wl-score-folder-alist | |
'(("^%Mail/slug" "slug.SCORE") | |
("^-gmane\\." "gmane.SCORE"))) | |
;; open threads as they are modified | |
(setq wl-thread-insert-opened t | |
wl-summary-divide-thread-when-subject-changed t) | |
(setq wl-highlight-folder-by-numbers 1) | |
(setq wl-fldmgr-add-complete-with-current-folder-list t) | |
;; bind "b" to resend-message | |
(define-key wl-summary-mode-map "b" | |
(if (fboundp 'wl-summary-resend) 'wl-summary-resend | |
'wl-summary-resend-message)) | |
;;{{{ mailcrypt support | |
;(autoload 'wl-summary-decrypt-pgp-nonmime "wl-pgp-nonmime" | |
; "Decrypt PGP encrypted region" t) | |
;(autoload 'wl-summary-verify-pgp-nonmime "wl-pgp-nonmime" | |
; "Verify PGP signed region" t) | |
;(autoload 'wl-summary-pgp-snarf-keys-nonmime "wl-pgp-nonmime" | |
; "Extract PGP keys" t) | |
;(define-key wl-summary-mode-map "\C-c/v" 'wl-summary-verify-pgp-nonmime) | |
;(define-key wl-summary-mode-map "\C-c/d" 'wl-summary-decrypt-pgp-nonmime) | |
;(define-key wl-summary-mode-map "\C-c/a" 'wl-summary-pgp-snarf-keys-nonmime) | |
;;}}} | |
;;{{{ BBDB | |
;; | |
;; FIXME: somehow ignore name changes to wl-subscribed-mailing-list | |
;; | |
(require 'bbdb-wl) | |
(bbdb-wl-setup) | |
(setq bbdb/mail-auto-create-p 'bbdb-ignore-some-messages-hook | |
bbdb-ignore-some-messages-alist | |
'(("From" . "mailer.daemon") | |
("Sender" . "debbugs@master\\.debian\\.org") | |
("Resent-Sender" . "debbugs@master\\.debian\\.org")) | |
bbdb-use-pop-up nil | |
bbdb-electric-p t | |
bbdb-offer-save 'just-save-dammit | |
;bbdb-pop-up-elided-display t | |
;bbdb-pop-up-target-lines 5 | |
signature-use-bbdb t | |
wl-summary-from-function 'bbdb-wl-from-func | |
bbdb-user-mail-names (mapconcat 'regexp-quote | |
wl-user-mail-address-list "\\|")) | |
(add-hook 'bbdb-change-hook 'bbdb-delete-redundant-nets) | |
(defun my-bbdb-canonicalize-net-hook (addr) | |
(cond | |
;; rewrite mail-drop hosts (from sample-bbdb-canonicalize-net-hook) | |
((string-match | |
(concat "\\`\\([^@%!]+@\\).*\\.\\(" bbdb-canonical-hosts "\\)\\'") | |
addr) | |
(concat (bbdb-match-substring addr 1) (bbdb-match-substring addr 2))) | |
;; drop user+whatever | |
((string-match "\\`\\([^@%!]+\\)\\+[^@%!]*\\(@switchonline\\.com\\.au\\)\\'" addr) | |
(concat (bbdb-match-substring addr 1) (bbdb-match-substring addr 2))) | |
;; drop tmda foo-dated-whatever | |
((string-match "\\`\\([^@%!]+\\)-dated-[^@%!]*\\(@.*\\)\\'" addr) | |
(concat (bbdb-match-substring addr 1) (bbdb-match-substring addr 2))) | |
(t addr))) | |
(setq bbdb-canonicalize-net-hook 'my-bbdb-canonicalize-net-hook) | |
(defun my-bbdb-canonicalize-name-hook (name) | |
(cond | |
;; replace any whitespace with space | |
((string-match "[\f\t\n\r\v]" name) | |
(replace-match " " nil t name)) | |
;; replace multiple whitespace with single | |
((string-match " \\{2,\\}" name) | |
(replace-match " " nil t name)) | |
;; strip leading whitespace (this is a bug in std11 libs?) | |
((string-match "\\` +\\(.*\\)" name) | |
(bbdb-match-substring name 1)) | |
;; strip extra quotes (Some MS mailer likes "'full name'") | |
((string-match "\\`[`'\"]\\(.*\\)[`'\"]\\'" name) | |
(bbdb-match-substring name 1)) | |
;; Surname, Firstname -> Firstname Surname | |
((string-match "\\`\\(\\w+\\), \\(\\w+\\)\\'" name) | |
(concat (bbdb-match-substring name 2) " " (bbdb-match-substring name 1))) | |
(t name))) | |
(defun my-bbdb-canonicalize-name (name) | |
(when name ;name is sometimes nil? | |
(while (not (eq name (setq name (my-bbdb-canonicalize-name-hook name)))))) | |
name) | |
(setq bbdb-wl-canonicalize-full-name-function 'my-bbdb-canonicalize-name) | |
;; bugfix? bbdb-hack-x-face assumes highlight-headers-hack-x-face-p is a function | |
(defun-when-void highlight-headers-hack-x-face-p () | |
highlight-headers-hack-x-face-p) | |
(put 'face 'field-separator "\n") | |
(put 'cface 'field-separator "\n") | |
;; from Steve Youngs, slightly modified to remove call to gnus-convert-face-to-png | |
(defun steve-bbdb-display-colour-face () | |
"Search for face properties and display the faces. | |
This is from Alex Schroeder." | |
(let ((inhibit-read-only t); edit the BBDB buffer | |
(all-records bbdb-records) | |
cface record start) | |
(while all-records | |
(setq record (caar all-records) | |
cface (bbdb-record-getprop record 'cface) | |
start (marker-position (nth 2 (car all-records)))) | |
(if cface | |
(progn | |
(set-extent-begin-glyph | |
(make-extent start start) | |
(make-glyph | |
(list (vector 'png ':data (base64-decode-string cface))))) | |
(insert " "))) | |
(setq all-records (cddr all-records))))) | |
(add-hook 'bbdb-list-hook 'steve-bbdb-display-colour-face) | |
(add-hook 'bbdb-notice-hook 'bbdb-auto-notes-hook) | |
(setq bbdb-auto-notes-alist | |
'(("Organization" (".*" company 0)) | |
("List-Id" | |
("<.*slug\\.org\\.au>" . "SLUG") | |
("<.*\\.lists\\.freeswan\\.org>" . "FreeSWAN")) | |
("X-Mailing-List" | |
("debian-.*@lists\\.debian\\.org" . "Debian") | |
("embperl-help@perl\\.apache\\.org" . "Embperl")) | |
("X-URL" (".*" www 0)) | |
("X-URI" (".*" www 0)) | |
("User-Agent" (".*" mailer 0)) | |
("X-Mailer" (".*" mailer 0)) | |
("X-Newsreader" (".*" mailer 0)) | |
("Subject" (".*" last-subj 0 'replace)) | |
("X-Face" (".+" face 0 'replace)) | |
("Face" (".+" cface 0 'replace)))) | |
;;}}} | |
(setq elmo-msgdb-extra-fields | |
'("x-spam-flag" "x-ml-name" "list-id" "mailing-list")) | |
(setq wl-message-ignored-field-list | |
'("Received:" "Path:" "I[dD]:" "^Replied:" "^Errors-To:" | |
"^Lines:" "^\\(X-\\)?Sender:" "Host:" "^Xref:" "^Precedence:" | |
"^\\(X-\\(MSMail-\\)?\\)?Priority:" "^Status:" "^X-VM-.*:" | |
"^List-" "^Content-" "^Delivered-To:" "^Mime-Version:" | |
"^Envelope-to:" "^Delivery-date:" "^X-Original-To:" | |
"^\\(X-\\)?Mailing-List:" "^X-BeenThere:" "^X-Mailman" "^X-MimeOLE:" | |
"^X-Loop:" "^X-From_:" "^X-OriginalArrivalTime:" "^X-Orcpt:" | |
"^X-Authentication-Warning:" "^X-Uptime:" "^X-Original-Date:" | |
"^X-Fetchmail-Warning:" "^X-MIMETrack:" "^Managed-by:" | |
"^X-Virus-Scanned\\(-By\\)?:" | |
"^X-.*MailScanner\\(-Information\\|-SpamCheck\\|-From\\)?:" | |
"^X-MIME-Autoconverted:" "^X-Spam-Checker-Version:" | |
"^X-Sanitizer:" "^X-Browser:" "^X-Spam-Level:" | |
"^X-Spam-Rating:" "X-Qmail-Scanner\\(-Mail-From\\)?:" | |
"^X-Mail-Count:" "^X-MLServer:" "^X-ML-Info:" | |
"^X-\\(Debian-PR\\|PTS\\)-Keywords?:" "^X-Unsubscribe:" | |
"^X-HotPOP:" "^X-AntiAbuse:" "^X-Payment:" "^X-Hashcash:" | |
"^X-Weather:" "^X-SKK:" "^X-AntiVirus:" "^X-FILTER-DSPAM:" | |
"^X-Scan-Signature:") | |
wl-message-visible-field-list | |
'("^To:" "^Cc:" "^From:" "^Subject:" "^Organi[sz]ation:") | |
wl-message-sort-field-list | |
'("Return-Path" "Received" "^To" "^Cc" "Newsgroups" | |
"Subject" "^From" "^Organi[sz]ation" "^Date" "^Resent")) | |
;; Don't rewrap "formatted" headers | |
(mime-set-field-decoder 'X-Spam-Status 'wide nil) | |
(setq elmo-spam-scheme 'header | |
wl-spam-auto-check-folder-regexp-list | |
'("^%Mail/inbox@mail\\.pasture\\.com\\.au$") | |
elmo-spam-header-spam-alist '(("X-Spam-Status" . "^Yes,") | |
("Subject" . "^{Spam\\?}")) | |
elmo-spam-header-good-alist '(("X-Spam-Status" . "^No,"))) | |
(require 'wl-spam) | |
;;{{{ Debian buttons | |
;; debian bug numbers | |
(when (fboundp 'debian-bug-web-bug) | |
(autoload 'debian-bug-web-package "debian-bug") | |
(wl-append wl-message-header-button-alist | |
'(("^Subject:" "Bug#\\([0-9]+\\)" | |
0 debian-bug-web-bug 1 12) | |
("^X-Debian-PR-Message:" "[0-9]+" | |
0 debian-bug-web-bug 0 8) | |
("^X-\\(Debian-PR\\|PTS\\)-Package:" "[-.A-Za-z0-9]+" | |
0 debian-bug-web-package 0 25))) | |
(wl-append wl-message-body-button-alist | |
'(("\\<\\([Cc]loses:? *#?\\|[Bb]ugs?#? *\\)?\\([0-9]+\\)" | |
0 debian-bug-web-bug 2 1024)))) | |
(set-alist 'wl-message-header-button-alist | |
"URL" (list mime-browse-url-regexp 0 'browse-url 0 40)) | |
;;}}} | |
;;{{{ RT buttons | |
;; RT hyperlinks (because i could) | |
(defvar rt-web-server-alist | |
'(("busibox.com.au" . "http://rt.urnet.com.au/")) | |
"Alist of RT ticket \"rtnames\" and their corresponding web server") | |
(defvar rt-default-rtname "busibox.com.au" | |
"Default RT ticket \"rtname\" to use if no other is specified") | |
(defun rt-web-ticket (ticket &optional rtname) | |
"Jump to a Request Tracker ticket via browse-url" | |
(interactive "sTicket:") | |
(if (string-equal ticket "") | |
(message "No ticket to look up.") | |
(let* ((r (or rtname rt-default-rtname)) | |
(server (cdr (or (assoc r rt-web-server-alist) | |
(error (format "No server known for `%s'" r)))))) | |
(browse-url (concat server "/Ticket/Display.html?id=" ticket)) | |
(message "Looking up ticket %s/%s via browse-url" r ticket)))) | |
(defun rt-web-ticket-button (string) | |
"Call `rt-web-ticket' after splitting STRING into rtname and ticket id" | |
(save-match-data | |
(string-match "\\([^ ]*\\) +#\\([0-9]+\\)" string) | |
(rt-web-ticket (match-string 2 string) (match-string 1 string)))) | |
;; FIXME needs to be a reply to current-buffer. | |
;; In particular needs to keep RT-Ticket header. | |
(defun rt-reply-to-originator (originator) | |
"Compose reply to ORIGINATOR." | |
(compose-mail originator)) | |
(set-alist 'wl-message-header-button-alist "^RT-Ticket:" | |
'("[^ ]* +#[0-9]+" 0 rt-web-ticket-button 0 25)) | |
(set-alist 'wl-message-header-button-alist "^RT-Originator:" | |
'("[^ ]+@[a-z0-9.-]+" 0 rt-reply-to-originator 0 25)) | |
;;}}} | |
(setq wl-generate-mailer-string-function | |
'wl-generate-user-agent-string-1) | |
(setq wl-biff-check-interval 300 ; 300 seconds (5 mins) | |
wl-biff-check-folder-list '("%Mail/inbox@mail.pasture.com.au")) | |
;(defun my-wl-update-current-summaries () | |
; (let ((buffers (wl-collect-summary))) | |
; (while buffers | |
; (with-current-buffer (car buffers) | |
; (save-excursion | |
; (wl-summary-sync-update))) | |
; (setq buffers (cdr buffers))))) | |
;(add-hook 'wl-biff-notify-hook 'my-wl-update-current-summaries) | |
(setq wl-refile-rule-alist | |
'(("List-Id" | |
("<pdftex\\.tug\\.org>" . "%Mail/pdftex@mail.pasture.com.au") | |
("<\\(asterisk-\\(users\\|dev\\)\\)\\.lists\\.digium\\.com>" . | |
"%inbox/\\1:angus.lees@urnet.com.au/clear@mail.urnet.com.au") | |
("<design\\.lists\\.freeswan\\.org>" . | |
"%inbox/freeswan:angus.lees@urnet.com.au/clear@mail.urnet.com.au") | |
("<xdg-list\\.freedesktop\\.org>" . "%Mail/xdg@mail.pasture.com.au") | |
("<ntg-context\\.ntg\\.nl>" . "%Mail/context@mail.pasture.com.au")) | |
("Mailing-List" | |
("embperl-help@perl\\.apache\\.org" . | |
"%Mail/embperl@mail.pasture.com.au")) | |
("Cc" | |
("\\(aegis\\|cook\\)-users@canb\\.auug\\.org\\.au" . | |
"%Mail/aegiscook@mail.pasture.com.au")))) | |
;; strip [listname] from subject lines in folders that only contain that list | |
(defvar my-folder-subject-functions-alist | |
'(("slug" my-summary-subject-strip "\\[SLUG\\] *")) | |
"alist of (regex function args) pairs for filtering subjects. | |
ALL functions matching the current folder name are called.") | |
(defun my-summary-subject-function (subject) | |
"call appropriate function from `my-folder-subject-functions' on SUBJECT" | |
(let ((case-fold-search t) | |
(alist my-folder-subject-functions-alist) | |
(folder (wl-summary-buffer-folder-name)) | |
entry) | |
(if folder | |
(save-match-data | |
(while alist | |
(setq entry (car alist) | |
alist (cdr alist)) | |
(when (string-match (car entry) folder) | |
(let ((func (cdr entry)) | |
(args '())) | |
(if (listp func) | |
(setq args (cdr func) | |
func (car func))) | |
(setq subject (apply func subject args))))))) | |
subject)) | |
(defun my-summary-subject-strip (subject regexp) | |
"Strip REGEXP from SUBJECT" | |
(save-match-data | |
(if (string-match regexp subject) | |
(concat (substring subject 0 (match-beginning 0)) | |
(substring subject (match-end 0))) | |
subject))) | |
(setq wl-summary-subject-function 'my-summary-subject-function) | |
;; new Face header | |
;; http://triaez.kaisei.org/~kaoru/diary/?200301b#200301192 | |
(defun wl-highlight-face-header () | |
(save-restriction | |
(save-excursion | |
(x-face-narrow-to-header) | |
(let ((hide-props (if x-face-xmas-inhibit-read-only | |
'(invisible t) | |
'(invisible t read-only t))) | |
face from-pt face-pt) | |
(when (and (setq face (x-face-mail-fetch-field "Face")) | |
(goto-char (point-min)) | |
(setq from-pt (x-face-search-field "^From"))) | |
(set-extent-end-glyph | |
(make-extent (nth 1 from-pt) (nth 1 from-pt)) | |
(make-glyph (vector 'png :data (base64-decode-string face)))) | |
;; Hide Face field | |
(goto-char (point-min)) | |
(setq face-pt (x-face-search-field "^Face")) | |
(add-text-properties (nth 0 face-pt) (nth 2 face-pt) hide-props)))))) | |
;; x-face | |
(when window-system | |
(cond ((and (featurep 'xemacs) ; for XEmacs | |
(module-installed-p 'x-face)) | |
(require 'x-face) | |
;(autoload 'x-face-xmas-wl-display-x-face "x-face") | |
(setq wl-highlight-x-face-function | |
(lambda (&optional junk1 junk2) | |
(cond ((std11-field-body "Face") | |
(wl-highlight-face-header)) | |
((std11-field-body "X-Face") | |
(x-face-xmas-wl-display-x-face)))))) | |
;; for Emacs21 | |
((and (not (featurep 'xemacs)) | |
(= emacs-major-version 21) | |
(module-installed-p 'x-face-e21)) | |
(autoload 'x-face-decode-message-header "x-face-e21") | |
(setq wl-highlight-x-face-function 'x-face-decode-message-header)) | |
;; for Emacs 19.34, Emacs 20.x | |
((module-installed-p 'x-face-mule) | |
;; x-face-mule distributed with bitmap-mule 8.0 or later | |
(autoload 'x-face-decode-message-header "x-face-mule") | |
(setq wl-highlight-x-face-function 'x-face-decode-message-header)) | |
)) | |
;; more intelligent application/octet-stream handler (from w3m) | |
(require 'octet) | |
(octet-mime-setup) | |
(defun mime-view-application/x-tar (entity situation) | |
;; load content into buffer. switch to tar-mode | |
(view-buffer-other-window | |
(generate-new-buffer (mime-entity-filename entity))) | |
(mime-insert-entity-content entity) | |
(setq buffer-file-name file-name) | |
(tar-mode) | |
) | |
;(mime-add-condition | |
; 'action | |
; '((type . application)(subtype . x-tar) | |
; (method . mime-view-application/x-tar)) | |
; 'strict) | |
(defun mime-view-entity-in-buffer (entity situation) | |
(let ((filename (mime-entity-filename entity))) | |
(view-buffer-other-window (generate-new-buffer filename)) | |
(if (eq (mime-entity-media-type entity) 'text) | |
(mime-insert-text-content entity) | |
(mime-insert-entity-content entity)) | |
(setq buffer-file-name filename) | |
(normal-mode))) | |
(mime-add-condition | |
'action | |
'((method . mime-view-entity-in-buffer) | |
'strict 'with-default)) | |
;;{{{ ms-tnef | |
(defun mime-display-application/ms-tnef (entity situation) | |
(save-restriction | |
(narrow-to-region (point-max)(point-max)) | |
(mime-insert-entity-content entity) | |
(shell-command-on-region (point-min) (point-max) | |
"tnef --list" nil t))) | |
(defun mime-extract-application/ms-tnef (entity situation) | |
(let ((dir (if (eq t mime-save-directory) | |
default-directory | |
mime-save-directory)) | |
(tmpfile (make-temp-name (expand-file-name "mime-tnef" | |
(temp-directory))))) | |
(setq dir (read-directory-name | |
(format "Extract contents into: (default %s) " dir) dir)) | |
(unless (file-exists-p dir) | |
(if (yes-or-no-p (format "Directory %s does not exist. Create? " dir)) | |
(make-directory dir t) | |
(error 'file-error))) | |
(mime-write-entity-content entity tmpfile) | |
(shell-command (format "tnef --interactive --directory %s --file %s" | |
dir tmpfile)) | |
(delete-file tmpfile))) | |
(mime-add-condition | |
'preview | |
'((type . application)(subtype . ms-tnef) | |
(body . visible) | |
(body-presentation-method . mime-display-application/ms-tnef))) | |
(mime-add-condition | |
'action | |
'((type . application)(subtype . ms-tnef) | |
(mode . "view") | |
(method . mime-extract-application/ms-tnef))) | |
;;}}} | |
;; use with mhc | |
(when (fboundp 'mhc-select-mailer-package) | |
(mhc-select-mailer-package 'wl)) | |
;; FIXME: add archiving for expiry from outbox | |
(setq wl-dispose-folder-alist | |
'(("^-" . remove) | |
("^@" . remove) | |
("^%" . trash)) | |
wl-expire-alist | |
'(("^\\+trash$" (date 14) remove) | |
("^%Mail/\\(slarken\\|debian-devel\\|debian-mentors\\).*@mail.pasture.com.au$" (date 14) remove))) | |
;; msgdb migration (wl 2.10 -> 2.12) | |
(setq elmo-msgdb-default-type 'standard | |
elmo-msgdb-convert-type 'sync) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment