This repository has been archived on 2022-12-11. You can view files and clone it, but cannot push or open issues or pull requests.
dot-files/.emacs.d/config/mu4e.el

161 lines
7.3 KiB
EmacsLisp
Raw Permalink Normal View History

Modularize emacs config Approximately coincides with the release of emacs 24.4, Though some changes for the emacs 24.4 upgrade are not yet completed; specifically: * replace w3m with the now built in eww * no need to enable electric-indent-mode since it is now enabled by default * other things that I don't know about yet ... Now the main changes are as follows: * Use .emacs.d/init.el for emacs start-up file instead of .emacs; this new init file is much shorter in summary does the following: - auto-loads packages installed using package.el using the package-initialize function - adds .emacs.d/site-lisp-extra to the load-path - sets a few variables and functions and then recursively loads all .el files in .emacs.d/config - contains all variables set by customize at the end of the file * All other configuration is written to files with appropriate names in .emacs.d/config; currently the concatenation of these files is the same as the .emacs in the last commit not including the sexp's that went into .emacs.d/init.el Things that remain the same but are no less important to mention in regards to the setup of this emacs configuration: * custom themes are stored in .emacs.d/themes * custom yasnippets are stored in .emacs.d/snippets * templates (used by .emacs.d/config/insert-templates.el to insert a comment at the beginning of certain files using auto-insert-mode) are located at .emacs.d/templates Note: I've been considering depreciating the use of auto-insert-mode to insert content into new files and instead use yasnippets. Further though is required. Signed-off-by: Collin J. Doering <rekahsoft@gmail.com>
2014-10-23 08:09:14 +00:00
;; (C) Copyright Collin J. Doering 2014
;;
;; This program is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program. If not, see <http://www.gnu.org/licenses/>.
;; File: mu4e.el
;; Author: Collin J. Doering <collin.doering@rekahsoft.ca>
;; Date: Oct 22, 2014
;; Setup email using mu4e (offlineimap in the background) and smtpmail
(require 'mu4e)
(require 'smtpmail)
(setq mail-user-agent 'mu4e-user-agent
mu4e-get-mail-command "mbsync -a"
mu4e-update-interval 300
mu4e-user-mail-address-list (list "collin.doering@gmail.com" "rekahsoft@gmail.com")
message-kill-buffer-on-exit t
mu4e-use-fancy-chars t
mu4e-sent-messages-behavior 'delete
mu4e-confirm-quit nil
mu4e-headers-date-format "%d/%b/%Y %H:%M" ; date format
message-signature "Collin J. Doering\n\nhttp://rekahsoft.ca\nhttp://blog.rekahsoft.ca\n"
mu4e-compose-signature message-signature
message-signature-insert-empty-line t
mu4e-html2text-command "pandoc -f html -t asciidoc"
mu4e-view-show-images t
mu4e-view-image-max-width 800
;; Default email for smtp and mu4e
user-mail-address "collin.doering@gmail.com"
;; Setup mu4e default sent and draft folders
mu4e-sent-folder "/collin.doering-gmail/[Gmail].Sent"
mu4e-drafts-folder "/collin.doering-gmail/[Gmail].Drafts"
;; Set location of maildir
mu4e-maildir "~/.mail"
;; Setup smtp defaults
user-full-name "Collin J. Doering"
smtpmail-smtp-server "smtp.gmail.com"
smtpmail-smtp-service 587
smtpmail-auth-credentials "~/.authinfo.gpg"
smtpmail-stream-type 'starttls
smtpmail-debug-info t
message-send-mail-function 'smtpmail-send-it)
;; Override default mu4e-bookmarks with custom ones
(setq mu4e-bookmarks
'(("flag:unread AND NOT flag:trashed AND NOT maildir:/collin.doering-gmail/[Gmail].Spam AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Unread messages" ?u)
("date:today..now AND NOT maildir:/collin.doering-gmail/[Gmail].Spam AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Today's messages" ?t)
("date:7d..now AND NOT maildir:/collin.doering-gmail/[Gmail].Spam AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Last 7 days" ?w)
("mime:image/*" "Messages with images" ?p)
;; For collin.doering-gmail maildir
("flag:unread AND maildir:/collin.doering-gmail/INBOX AND NOT flag:trashed AND NOT maildir:/collin.doering-gmail/[Gmail].Spam" "Unread messages to collin.doering-gmail" ?z)
("date:today..now AND maildir:/collin.doering-gmail/INBOX AND NOT maildir:/collin.doering-gmail/[Gmail].Spam" "Today's messages to collin.doering-gmail" ?x)
("date:7d..now AND maildir:/collin.doering-gmail/INBOX AND NOT maildir:/collin.doering-gmail/[Gmail].Spam" "Last 7 days (collin.doering-gmail)" ?c)
("mime:image/* AND maildir:/collin.doering-gmail/INBOX" "Messages with images to collin.doering-gmail" ?v)
;; For rekahsoft-gmail maildir
("flag:unread AND maildir:/rekahsoft-gmail/INBOX AND NOT flag:trashed AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Unread messages to rekahsoft-gmail" ?m)
("date:today..now AND maildir:/rekahsoft-gmail/INBOX AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Today's messages to rekahsoft-gmail" ?,)
("date:7d..now AND maildir:/rekahsoft-gmail/INBOX AND NOT maildir:/rekahsoft-gmail/[Gmail].Spam" "Last 7 days (rekahsoft-gmail)" ?.)
("mime:image/* AND maildir:/rekahsoft-gmail/INBOX" "Messages with images to rekahsoft-gmail" ?/)))
;; TODO: consolidate my-mu4e-account-alist and smtp-accounts
(defvar my-mu4e-account-alist
'(("collin.doering-gmail"
(mu4e-sent-folder "/collin.doering-gmail/[Gmail].Sent")
(mu4e-drafts-folder "/collin.doering-gmail/[Gmail].Drafts")
(user-mail-address "collin.doering@gmail.com"))
("rekahsoft-gmail"
(mu4e-sent-folder "/rekahsoft-gmail/[Gmail].Sent")
(mu4e-drafts-folder "/rekahsoft-gmail/[Gmail].Drafts")
(user-mail-address "rekahsoft@gmail.com"))))
(defun my-mu4e-set-account ()
"Set the account for composing a message."
(let* ((account
(if mu4e-compose-parent-message
(let ((maildir (mu4e-message-field mu4e-compose-parent-message :maildir)))
(string-match "/\\(.*?\\)/" maildir)
(match-string 1 maildir))
(completing-read (format "Compose with account: (%s) "
(mapconcat #'(lambda (var) (car var)) my-mu4e-account-alist "/"))
(mapcar #'(lambda (var) (car var)) my-mu4e-account-alist)
nil t nil nil (caar my-mu4e-account-alist))))
(account-vars (cdr (assoc account my-mu4e-account-alist))))
(if account-vars
(mapc #'(lambda (var)
(set (car var) (cadr var)))
account-vars)
(error "No email account found"))))
(add-hook 'mu4e-compose-pre-hook 'my-mu4e-set-account)
;; Attach files using dired using 'C-c RET C-a'
;; Thanks to: http://www.djcbsoftware.nl/code/mu/mu4e/Attaching-files-with-dired.html#Attaching-files-with-dired
(require 'gnus-dired)
;; make the `gnus-dired-mail-buffers' function also work on
;; message-mode derived modes, such as mu4e-compose-mode
(defun gnus-dired-mail-buffers ()
"Return a list of active message buffers."
(let (buffers)
(save-current-buffer
(dolist (buffer (buffer-list t))
(set-buffer buffer)
(when (and (derived-mode-p 'message-mode)
(null message-sent-message-via))
(push (buffer-name buffer) buffers))))
(nreverse buffers)))
(setq gnus-dired-mail-mode 'mu4e-user-agent)
(add-hook 'dired-mode-hook 'turn-on-gnus-dired-mode)
;; Setup mu4e-maildirs-extension
(require 'mu4e-maildirs-extension)
(mu4e-maildirs-extension)
(setq smtp-accounts
'(("collin.doering@gmail.com" "Collin J. Doering" "smtp.gmail.com")
("rekahsoft@gmail.com" "rekahsoft" "smtp.gmail.com")))
(defun my-change-smtp ()
(save-excursion
(loop with from = (save-restriction
(message-narrow-to-headers)
(message-fetch-field "from"))
for (addr fname server) in smtp-accounts
when (string-match addr from)
do (setq user-mail-address addr
user-full-name fname
smtpmail-smtp-server server
smtpmail-smtp-user addr))))
(defadvice smtpmail-via-smtp
(before change-smtp-by-message-from-field (recipient buffer &optional ask) activate)
(with-current-buffer buffer (my-change-smtp)))
(ad-activate 'smtpmail-via-smtp)
;; Set environment variables set by gpg-agent --daemon in ~/.gpg-agent-info
;; TODO: perhaps better error handling if ~/.gpg-agent-info doesn't exist
(mapc (lambda (x) (setenv (car x) (cadr x)))
(with-temp-buffer
(insert-file-contents "~/.gpg-agent-info")
(mapcar (lambda (x) (split-string x "=" t)) (split-string (buffer-string) "\n" t))))