Skip to content

Instantly share code, notes, and snippets.

@anguslees
Created June 18, 2018 05:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anguslees/838ff9f0d059250d229556c7cb941e32 to your computer and use it in GitHub Desktop.
Save anguslees/838ff9f0d059250d229556c7cb941e32 to your computer and use it in GitHub Desktop.
ancient ~gus/.wl
; 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