This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+email/mu4e/README.org
2017-08-18 22:12:17 +03:00

235 lines
8.5 KiB
Org Mode
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Mu4e layer
* Table of Contents :TOC_4_gh:noexport:
- [[#install][Install]]
- [[#commands][Commands]]
- [[#global-bindings][Global bindings]]
- [[#headers-mode][Headers mode]]
- [[#view-mode][View mode]]
- [[#configuration][Configuration]]
- [[#maildirs-extension][Maildirs extension]]
- [[#multiple-accounts][Multiple Accounts]]
- [[#example-configuration][Example configuration]]
- [[#notifications][Notifications]]
- [[#os-notifications][OS notifications]]
- [[#mode-line-notifications][Mode-line notifications]]
- [[#spacemacs-layout-integration][Spacemacs layout integration]]
- [[#see-also][See also]]
* 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 OS X 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:
#+begin_src shell
brew install mu --with-emacs
#+end_src
If the installation directory of mu4e is not in Emacs load path, you can set
the layer variable =mu4e-installation-path=, for example:
#+begin_src emacs-lisp
(setq-default dotspacemacs-configuration-layers
'((mu4e :variables
mu4e-installation-path "/usr/share/emacs/site-lisp")))
#+end_src
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
| Keybinding | Command |
|------------+------------|
| ~SPC a M~ | Start mu4e |
** Headers mode
| Keybinding | Command |
|------------+-------------------------------------------------------------|
| ~J~ | Go to next unread thread marking other mail read on the way |
| ~C-j~ | Next header |
| ~C-k~ | Previous header |
** View mode
| Keybinding | 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.
This extension is enabled by default, you can deactivate (and uninstall) it by
adding the package =mu4e-maildirs-extension= to your dotfile variable
=dotspacemacs-excluded-packages=.
** 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:
#+BEGIN_SRC emacs-lisp
(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)
#+END_SRC
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.
** 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
** Notifications
=mu4e-alert= is an extension that provides desktop notifications and adds the
count of unread messages to the modeline.
[[https://raw.githubusercontent.com/iqbalansari/mu4e-alert/master/screenshots/mu4e-alert-in-action.png]]
For an extended documentation of the available customizations please refer to
[[https://github.com/iqbalansari/mu4e-alert#user-content-customizations][mu4e-alert's documentation]]
*** OS notifications
To enable notifications about new messages, add the following line to your
=dotspacemacs/user-config=:
#+BEGIN_SRC emacs-lisp
(setq mu4e-enable-notifications t)
#+END_SRC
or use layer variables when you add the layer to
=dotspacemacs-configuration-layers=:
#+BEGIN_SRC emacs-lisp
(mu4e :variables mu4e-enable-notifications t)
#+END_SRC
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:
#+BEGIN_SRC emacs-lisp
(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 Mac OSX (through the
; terminal notifier app)
;; (mu4e-alert-set-default-style 'growl)) ; Alternative for Mac OSX
#+END_SRC
*** Mode-line notifications
To enable mode-line display about new messages, add the following line to
your =dotspacemacs/user-config=:
#+BEGIN_SRC emacs-lisp
(setq mu4e-enable-mode-line t)
#+END_SRC
or use layer variables when you add the layer to
=dotspacemacs-configuration-layers=:
#+BEGIN_SRC emacs-lisp
(mu4e :variables mu4e-enable-mode-line t)
#+END_SRC
** Spacemacs layout integration
A [[https://github.com/syl20bnr/spacemacs/blob/develop/doc/DOCUMENTATION.org#layouts-and-workspaces][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.
By default the values are:
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers '(
(mu4e :variables mu4e-spacemacs-layout-name "@Mu4e"
mu4e-spacemacs-layout-binding "m")))
#+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]]