Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add mu4e layer #2514

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
89 changes: 89 additions & 0 deletions layers/+email/mu4e/README.org
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
* mu4e layer for Spacemacs

This layer provides mu4e support for Spacemacs.

** Installation

You need to install mu and mu4e separately in order to use this layer. On Arch
Linux, simply installing the mu package will do. I assume the same will work
for most other Linux distros.

** Commands

| Keybinding | Command |
|------------+------------|
| SPC a M | Start mu4e |

** Configuration

Configuration varies too much to give precise instructions. What follows is one
example configuration. Refer to mu4e's manual for more detailed configuration
instructions.

*** Important note

This layer includes support for multiple sending accounts. Configure the
`mu4e-account-alist` variable:

#+BEGIN_SRC emacs-lisp
(setq mu4e-account-alist
'(("gmail"
;; Under each account, set the account-specific variables you want.
(mu4e-sent-messages-behavior delete)
(mu4e-sent-folder "/gmail/[Gmail]/.Sent Mail")
(mu4e-drafts-folder "/gmail/[Gmail]/.Drafts")
(user-mail-address "billy@gmail.com")
(user-full-name "Billy"))
("college"
(mu4e-sent-messages-behavior sent)
(mu4e-sent-folder "/college/Sent Items")
(mu4e-drafts-folder "/college/Drafts")
(user-mail-address "bb15@college.edu")
(user-full-name "Billy Bob 15"))))
(mu4e/mail-account-reset)
#+END_SRC

The first account listed will be the default account, so variables like
`user-full-name`, which is used by other parts of Emacs, will have their value
reset for the default account after sending each email.

Make sure you call `mu4e/mail-account-reset` afterward, which will initialize
the given account variables.

*** Example configuration

#+BEGIN_SRC emacs-lisp
;;; Set up some common mu4e variables
(setq mu4e-maildir "~/.mail"
mu4e-trash-folder "/Trash"
mu4e-refile-folder "/Archive"
mu4e-get-mail-command "mbsync -a"
mu4e-update-interval nil
mu4e-compose-signature-auto-include nil
mu4e-view-show-images t
mu4e-view-show-addresses t)

;;; Mail directory shortcuts
(setq mu4e-maildir-shortcuts
'(("/gmail/INBOX" . ?g)
("/college/INBOX" . ?c)))

;;; Bookmarks
(setq mu4e-bookmarks
`(("flag:unread AND NOT flag:trashed" "Unread messages" ?u)
("date:today..now" "Today's messages" ?t)
("date:7d..now" "Last 7 days" ?w)
("mime:image/*" "Messages with images" ?p)
(,(mapconcat 'identity
(mapcar
(lambda (maildir)
(concat "maildir:" (car maildir)))
mu4e-maildir-shortcuts) " OR ")
"All inboxes" ?i)))
#+END_SRC

** See also

Refer to the official mu and mu4e documentation for additional info.

- [[http://www.djcbsoftware.nl/code/mu/mu4e/index.html][mu4e Manual]]
42 changes: 42 additions & 0 deletions layers/+email/mu4e/extensions.el
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
;;; extensions.el --- mu4e Layer extensions File for Spacemacs
;;
;; Copyright (c) 2012-2014 Sylvain Benner
;; Copyright (c) 2014-2015 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3

(setq mu4e-pre-extensions
'(mu4e))

(setq mu4e-post-extensions
'())

(defvar mu4e-account-alist nil
"Account alist for custom multi-account compose.")

(defun mu4e/init-mu4e ()
(use-package mu4e
:init
(progn
(evil-leader/set-key "a M" 'mu4e)
(global-set-key (kbd "C-x m") 'mu4e-compose-new))
:config
(progn
(spacemacs|evilify-map mu4e-main-mode-map
:mode mu4e-main-mode
:bindings
(kbd "j") 'mu4e~headers-jump-to-maildir)
(spacemacs|evilify-map mu4e-headers-mode-map :mode mu4e-headers-mode)
(spacemacs|evilify-map mu4e-view-mode-map :mode mu4e-view-mode)

(setq mu4e-completing-read-function 'helm--completing-read-default)

(add-to-list 'mu4e-view-actions
'("View in browser" . mu4e-action-view-in-browser) t)
(add-hook 'mu4e-compose-pre-hook 'mu4e/set-account)
(add-hook 'message-sent-hook 'mu4e/mail-account-reset))))
36 changes: 36 additions & 0 deletions layers/+email/mu4e/funcs.el
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
;;; funcs.el --- mu4e Layer extensions File for Spacemacs
;;
;; Copyright (c) 2012-2014 Sylvain Benner
;; Copyright (c) 2014-2015 Sylvain Benner & Contributors
;;
;; Author: Sylvain Benner <sylvain.benner@gmail.com>
;; URL: https://github.com/syl20bnr/spacemacs
;;
;; This file is not part of GNU Emacs.
;;
;;; License: GPLv3

(defun 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))
(helm-comp-read
"Compose with account:"
(mapcar (lambda (var) (car var)) mu4e-account-alist))))
(account-vars (cdr (assoc account mu4e-account-alist))))
(if account-vars
(mu4e//map-set account-vars)
(error "No email account found"))))

(defun mu4e//map-set (vars)
"Setq an alist VARS of variables and values."
(mapc (lambda (var) (set (car var) (cadr var)))
vars))

(defun mu4e/mail-account-reset ()
"Reset mail account info to first."
(mu4e//map-set (cdar mu4e-account-alist)))