Follow up the changes in the previous commit with some minor improvements to formatting, grammar, spelling, and wording. * layers/+distributions/spacemacs-docker/README.org: Replace "+" with "and". * layers/+email/mu4e/README.org: Use full sentences in the comments in the mu4e-alert example. * layers/+intl/japanese/README.org: Use verbatim markers for names of files, functions, packages, and variables. Capitalize "Linux". * layers/+os/osx/README.org: Capitalize "Emacs", "Vim", and "Evil". * layers/+os/osx/config.el (osx-command-as, osx-use-dictionary-app): * layers/+os/osx/keybindings.el (spacemacs/system-is-mac): Improve docstrings. * layers/+readers/dash/README.org: Capitalize "API", "Helm", and "Ivy". * layers/+spacemacs/spacemacs-defaults/config.el (delete-by-moving-to-trash): Use full sentences in comment. * layers/+spacemacs/spacemacs-defaults/funcs.el (spacemacs/toggle-frame-fullscreen-non-native): Improve docstrings.
10 KiB
Mu4e layer
Description
This layer adds support for the Mu4e
email client.
Features:
- Search, read, reply, move, and delete email.
- Search-based: no folders, only queries.
- UI optimized for speed: quick keystrokes for common actions.
- Very extendable and customizable.
- Integration with Helm.
- Maildir summary using mu4e-mailidirs-extension
- Notifications using mu4e-alert
Install
In order to use this layer you must install mu
and mu4e
separately.
Typically mu4e
will be bundled with mu
(this is the case on many Linux
distributions).
If you're on macOS and install mu
using Homebrew, you must specify the
location of your Emacs binary at install time using the EMACS environment
variable, as well as passing the --with-emacs
option:
brew install mu --with-emacs
If the installation directory of mu4e
is not in Emacs' load path, you can set
the layer variable mu4e-installation-path
, for example:
(setq-default dotspacemacs-configuration-layers
'((mu4e :variables
mu4e-installation-path "/usr/share/emacs/site-lisp")))
Then add this layer to your ~/.spacemacs
. You will need to add mu4e
to the
existing dotspacemacs-configuration-layers
list in this file.
Commands
Global bindings
Key binding | Command |
---|---|
SPC a M |
Start mu4e |
SPC m S or SPC m / |
Search emails (requires helm) |
SPC m C |
Search contacts (requires helm) |
C-x m |
Compose new message |
Headers mode
Key binding | Command |
---|---|
J |
Go to next unread thread marking other mail read on the way |
C-j |
Next header |
C-k |
Previous header |
View mode
Key binding | Command |
---|---|
J |
Go to next unread thread marking other mail read on the way |
C-j |
Next header |
C-k |
Previous header |
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.
Maildirs extension
The maildirs extension adds a list of all your maildirs to the main mu4e
view
that by default shows the unread and total mail counts for all your mail under
your base mail directory.
The maildirs extension is not enabled by default. To activate it, change the
variable mu4e-use-maildirs-extension
to a non-nil value:
(setq-default dotspacemacs-configuration-layers
'((mu4e :variables
mu4e-use-maildirs-extension t)))
Multiple Accounts
With mu 0.9.16
, mu4e
comes with a native contexts feature for managing
multiple accounts.
The following example is taken from the manual:
(setq mu4e-contexts
`( ,(make-mu4e-context
:name "Private"
:enter-func (lambda () (mu4e-message "Switch to the Private context"))
;; leave-func not defined
:match-func (lambda (msg)
(when msg
(mu4e-message-contact-field-matches msg
:to "aliced@home.example.com")))
:vars '( ( user-mail-address . "aliced@home.example.com" )
( user-full-name . "Alice Derleth" )
( mu4e-compose-signature .
(concat
"Alice Derleth\n"
"Lauttasaari, Finland\n"))))
,(make-mu4e-context
:name "Work"
:enter-func (lambda () (mu4e-message "Switch to the Work context"))
;; leave-fun not defined
:match-func (lambda (msg)
(when msg
(mu4e-message-contact-field-matches msg
:to "aderleth@miskatonic.example.com")))
:vars '( ( user-mail-address . "aderleth@miskatonic.example.com" )
( user-full-name . "Alice Derleth" )
( mu4e-compose-signature .
(concat
"Prof. Alice Derleth\n"
"Miskatonic University, Dept. of Occult Sciences\n"))))))
;; set `mu4e-context-policy` and `mu4e-compose-policy` to tweak when mu4e should
;; guess or ask the correct context, e.g.
;; start with the first (default) context;
;; default is to ask-if-none (ask when there's no context yet, and none match)
;; (setq mu4e-context-policy 'pick-first)
;; compose with the current context is no context matches;
;; default is to ask
;; (setq mu4e-compose-context-policy nil)
Note: We used to have a hack to support multiple accounts with older version of
mu
but we removed it to encourage people to update their version and use the
new contexts feature.
Async mode
mu4e
can send mails in async mode, which speeds up sending as you do not have
to wait for the email to be sent. This is off by default but you can enable
it by setting the mu4e-enable-async-operations
variable when including the
layer.
(setq-default dotspacemacs-configuration-layers
'((mu4e :variables
mu4e-enable-async-operations t)))
Attachment directory
By default mu4e
will save attachment files to $HOME
, but this layer changes
that to $HOME/Downloads
if it exists. You can override this in your
dotspacemacs/user-config
:
(setq mu4e-attachment-dir "~/files")
Example configuration
;;; 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)))
Notifications
mu4e-alert
is an extension that provides desktop notifications and adds the
count of unread messages to the modeline.
For an extended documentation of the available customizations please refer to mu4e-alert's documentation
OS notifications
To enable notifications about new messages, add the following line to your
dotspacemacs/user-config
:
(setq mu4e-enable-notifications t)
or use layer variables when you add the layer to
dotspacemacs-configuration-layers
:
(mu4e :variables mu4e-enable-notifications t)
By default, notifications will be shown in the *Messages*
buffer. To enable
desktop notifications about new messages, add the following lines to
your dotspacemacs/user-config
, according to your operating system and the
installed libraries:
(with-eval-after-load 'mu4e-alert
;; Enable Desktop notifications
(mu4e-alert-set-default-style 'notifications)) ; For Linux.
;; (mu4e-alert-set-default-style 'libnotify)) ; Alternative for Linux
;; (mu4e-alert-set-default-style 'notifier)) ; For macOS (through the
; terminal notifier app).
;; (mu4e-alert-set-default-style 'growl)) ; Alternative for macOS.
Mode-line notifications
To enable mode-line display about new messages, add the following line to
your dotspacemacs/user-config
:
(setq mu4e-enable-mode-line t)
or use layer variables when you add the layer to
dotspacemacs-configuration-layers
:
(mu4e :variables mu4e-enable-mode-line t)
Spacemacs layout integration
A Spacemacs custom layout is defined by the layer. The name and the key binding for it can be customized with the following layer variables:
mu4e-spacemacs-layout-name
for the layout name,mu4e-spacemacs-layout-binding
for the key binding.mu4e-spacemacs-kill-layout-on-exit
for automatically removing layout when quittingmu4e
.
By default the values are:
(setq-default dotspacemacs-configuration-layers
'((mu4e :variables mu4e-spacemacs-layout-name "@Mu4e"
mu4e-spacemacs-layout-binding "m"
mu4e-spacemacs-kill-layout-on-exit t)))
See also
Refer to the official mu
and mu4e
documentation for additional info.