mu4e: update documentation

This commit is contained in:
Dirk-Jan C. Binnema
2020-02-24 21:58:45 +02:00
parent 06c9b17a4e
commit c251a22d65
2 changed files with 298 additions and 280 deletions

View File

@ -190,8 +190,6 @@ If the string exceeds this limit, it will be truncated to fit."
"Create a mu4e proplist with the following elements: "Create a mu4e proplist with the following elements:
- `name': the user-visible name of the bookmark - `name': the user-visible name of the bookmark
- `key': a single key to search for this bookmark - `key': a single key to search for this bookmark
- `show-unread' whether to show an indicator for read/unread messages. Specifying
this for too many bookmarks may incur slowdowns in showing the mu4e main page.
- `query': the query for this bookmark. Either a literal string or a function - `query': the query for this bookmark. Either a literal string or a function
that evaluates to a string." that evaluates to a string."
`(:name ,name :query ,query :key ,key)) `(:name ,name :query ,query :key ,key))
@ -215,15 +213,15 @@ are plists" "1.3.7")
"List of pre-defined queries that are shown on the main screen. "List of pre-defined queries that are shown on the main screen.
Each of the list elements is a plist with at least: Each of the list elements is a plist with at least:
:name - the name of the query `:name' - the name of the query
:query - the query expression or function `:query' - the query expression or function
:key - the shortcut key. `:key' - the shortcut key.
Note that the :query parameter can be a function/lambda. Note that the :query parameter can be a function/lambda.
Optionally, you can add the following: Optionally, you can add the following:
:hide - if t, bookmark is hdden from the main-view and speedbar. `:hide' - if t, bookmark is hdden from the main-view and speedbar.
:hide-unread - do not show the counts of unread/total number `:hide-unread' - do not show the counts of unread/total number
of matches for the query in the main-view. This can be useful of matches for the query in the main-view. This can be useful
if a bookmark uses a very slow query. :hide-unread if a bookmark uses a very slow query. :hide-unread
is implied from :hide. Furthermore, it is implied from the query is implied from :hide. Furthermore, it is implied from the query

View File

@ -91,7 +91,7 @@ section with answers to frequenly asked questions, @ref{FAQ}.
* Headers view:: Lists of message headers * Headers view:: Lists of message headers
* Message view:: Viewing specific messages * Message view:: Viewing specific messages
* Editor view:: Creating / editing messages * Editor view:: Creating / editing messages
* Searching:: Some more background on searching/queries * Searching:: Some more background on searching/queries`
* Marking:: Marking messages and performing actions * Marking:: Marking messages and performing actions
* Contexts:: Defining contexts and switching between them * Contexts:: Defining contexts and switching between them
* Dynamic folders:: Folders that change based on circumstances * Dynamic folders:: Folders that change based on circumstances
@ -129,7 +129,7 @@ professionally and privately. Having an efficient e-mail client is
essential. Since none of the existing ones worked the way I wanted, I essential. Since none of the existing ones worked the way I wanted, I
thought about creating my own. thought about creating my own.
@command{emacs} is an integral part of my workflow, so it made a lot of Emacs is an integral part of my workflow, so it made a lot of
sense to use it for e-mail as well. And as I had already written an sense to use it for e-mail as well. And as I had already written an
e-mail search engine (@t{mu}), it seemed only logical to use that as a e-mail search engine (@t{mu}), it seemed only logical to use that as a
basis. basis.
@ -166,7 +166,7 @@ messages end up in a maildir, @t{mu4e} and @t{mu} are happy to deal with
them. them.
@item @t{mu4e} also does @emph{not} implement sending of messages; instead, it @item @t{mu4e} also does @emph{not} implement sending of messages; instead, it
depends on @t{smtpmail} (@inforef{Top,,smtpmail}), which is part of depends on @t{smtpmail} (@inforef{Top,,smtpmail}), which is part of
@command{emacs}. In addition, @t{mu4e} piggybacks on Gnus' message editor; Emacs. In addition, @t{mu4e} piggybacks on Gnus' message editor;
@inforef{Top,,message}. @inforef{Top,,message}.
@end itemize @end itemize
@ -232,7 +232,7 @@ After these steps, @t{mu4e} should be ready to go!
@t{mu}/@t{mu4e} are known to work on a wide variety of Unix- and @t{mu}/@t{mu4e} are known to work on a wide variety of Unix- and
Unix-like systems, including many Linux distributions, OS X and Unix-like systems, including many Linux distributions, OS X and
FreeBSD, and even on MS-Windows (with Cygwin). @command{emacs} 24 or FreeBSD, and even on MS-Windows (with Cygwin). Emacs 24 or
higher is required, as well as higher is required, as well as
Xapian@footnote{@url{https://xapian.org/}} and Xapian@footnote{@url{https://xapian.org/}} and
GMime@footnote{@url{http://spruce.sourceforge.net/gmime/}}. GMime@footnote{@url{http://spruce.sourceforge.net/gmime/}}.
@ -326,20 +326,20 @@ different, and require you to have autotools (@t{autoconf},
$ git clone git://github.com/djcb/mu.git $ git clone git://github.com/djcb/mu.git
$ cd mu $ cd mu
$ ./autogen.sh && ./configure && make $ ./autogen.sh && make
# On the BSDs: use gmake instead of make # On the BSDs: use gmake instead of make
$ sudo make install $ sudo make install
@end example @end example
(Xapian, GMime and their dependencies must be installed). (Xapian, GMime and their dependencies must be installed).
After this, @t{mu} and @t{mu4e} should be installed @footnote{there's a hard After this, @t{mu} and @t{mu4e} should be installed @footnote{there's
dependency between versions of @t{mu4e} and @t{mu} --- you cannot combine a hard dependency between versions of @t{mu4e} and @t{mu} --- you
different versions} on your system, and be available from the command line cannot combine different versions} on your system, and be available
in @command{emacs}. from the command line and in Emacs.
You may need to restart @command{emacs}, so it can find @t{mu4e} in its You may need to restart Emacs, so it can find @t{mu4e} in its
@code{load-path}. If, even after restarting, @command{emacs} cannot find @code{load-path}. If, even after restarting, Emacs cannot find
@t{mu4e}, you may need to add it to your @code{load-path} explicitly; check @t{mu4e}, you may need to add it to your @code{load-path} explicitly; check
where @t{mu4e} is installed, and add something like the following to your where @t{mu4e} is installed, and add something like the following to your
configuration before trying again: configuration before trying again:
@ -350,7 +350,7 @@ configuration before trying again:
@subsection mu4e and emacs customization @subsection mu4e and emacs customization
There is some support for using the @command{emacs} customization system in There is some support for using the Emacs customization system in
@t{mu4e}, but for now, we recommend setting the values manually. Please refer @t{mu4e}, but for now, we recommend setting the values manually. Please refer
to @ref{Example configs} for a couple of examples of this; here we go to @ref{Example configs} for a couple of examples of this; here we go
through things step-by-step. through things step-by-step.
@ -382,7 +382,7 @@ googling should be able to provide you with the details.
@node Initializing the message store @node Initializing the message store
@section Initializing the message store @section Initializing the message store
The first time your run @t{mu}, you need to initialize its store The first time you run @t{mu}, you need to initialize its store
(database). The default location for that is @t{~/.cache/mu/xapian}, (database). The default location for that is @t{~/.cache/mu/xapian},
but you can change this using the @t{--muhome} option, and remember to but you can change this using the @t{--muhome} option, and remember to
pass that to the other commands as well. pass that to the other commands as well.
@ -404,7 +404,7 @@ them as yours:
indexing messages. If you want to change them, you need to @t{init} indexing messages. If you want to change them, you need to @t{init}
once again. once again.
If you want to see the current values, you can use @t{mu info}. If you want to see the current values, you can use @command{mu info}.
@node Indexing your messages @node Indexing your messages
@section Indexing your messages @section Indexing your messages
@ -446,7 +446,7 @@ is to do some basic configuration for @t{mu4e}.
@node Basic configuration @node Basic configuration
@section Basic configuration @section Basic configuration
Before we can start using @t{mu4e}, we need to tell @command{emacs} to load Before we can start using @t{mu4e}, we need to tell Emacs to load
it. So, add to your @file{~/.emacs} (or its moral equivalent, such as it. So, add to your @file{~/.emacs} (or its moral equivalent, such as
@file{~/.emacs.d/init.el}) something like: @file{~/.emacs.d/init.el}) something like:
@ -454,7 +454,7 @@ it. So, add to your @file{~/.emacs} (or its moral equivalent, such as
(require 'mu4e) (require 'mu4e)
@end lisp @end lisp
If @command{emacs} complains that it cannot find @t{mu4e}, check your If Emacs complains that it cannot find @t{mu4e}, check your
@code{load-path} and make sure that @t{mu4e}'s installation directory is part @code{load-path} and make sure that @t{mu4e}'s installation directory is part
of it. If not, you can add it: of it. If not, you can add it:
@ -485,14 +485,15 @@ situation. See @ref{Dynamic folders} for details.}:
@end lisp @end lisp
Note, the folder names are all relative to the root-maildir (see the Note, the folder names are all relative to the root-maildir (see the
output of @t{mu info}). If you use @t{mu4e-context}, see @ref{Contexts output of @command{mu info}). If you use @t{mu4e-context}, see
and special folders} for what that means for these special folders. @ref{Contexts and special folders} for what that means for these
special folders.
@node Retrieval and indexing @node Retrieval and indexing
@section Retrieval and indexing with mu4e @section Retrieval and indexing with mu4e
As we have seen, we can do all of the mail retrieval @emph{outside} of As we have seen, we can do all of the mail retrieval @emph{outside} of
@command{emacs}/@t{mu4e}. However, you can also do it from within Emacs/@t{mu4e}. However, you can also do it from within
@t{mu4e}. @t{mu4e}.
@subsection Basics @subsection Basics
@ -763,7 +764,19 @@ Next to each bookmark there is the number of (unread/all) messages
that match. that match.
Bookmarks are stored in the variable @code{mu4e-bookmarks}; you can add your Bookmarks are stored in the variable @code{mu4e-bookmarks}; you can add your
own and/or replace the default ones; @xref{Bookmarks}. own and/or replace the default ones; @xref{Bookmarks}. For instance:
@lisp
(add-to-list 'mu4e-bookmarks
;; add bookmark for recent messages on the Mu mailing list.
'( :name "Mu7Days"
:key ?m
:query "list:mu-discuss.googlegroups.com AND date:7d..now"))
@end lisp
There are optional keys @t{:hide} to hide the bookmark from the main
memu, but still have it available (using @key{b})) and
@t{:hide-unread} to avoid generating the unread-number; that can be
useful if you have bookmarks for slow queries.
@node Miscellaneous @node Miscellaneous
@section Miscellaneous @section Miscellaneous
@ -888,7 +901,7 @@ headers-view.
@section Keybindings @section Keybindings
Using the below key bindings, you can do various things with these messages; Using the below key bindings, you can do various things with these messages;
these actions are also listed in the @t{Headers} menu in the @command{emacs} these actions are also listed in the @t{Headers} menu in the Emacs
menu bar. menu bar.
@verbatim @verbatim
@ -1319,10 +1332,10 @@ extract (for example, @kbd{1 3-6 8}). The range "@samp{a}" is a shortcut for
@section Viewing images inline @section Viewing images inline
It is possible to show images inline in the message view buffer if you run It is possible to show images inline in the message view buffer if you run
@command{emacs} in GUI-mode. You can enable this by setting the variable Emacs in GUI-mode. You can enable this by setting the variable
@code{mu4e-view-show-images} to @t{t}. Since @command{emacs} does not always @code{mu4e-view-show-images} to @t{t}. Since Emacs does not always
handle images correctly, this is not enabled by default. If you are using handle images correctly, this is not enabled by default. If you are using
@command{emacs} 24 with Emacs 24 with
@emph{ImageMagick}@footnote{@url{http://www.imagemagick.org/}} support, make @emph{ImageMagick}@footnote{@url{http://www.imagemagick.org/}} support, make
sure you call @code{imagemagick-register-types} in your configuration, so it sure you call @code{imagemagick-register-types} in your configuration, so it
is used for images. is used for images.
@ -1458,7 +1471,7 @@ Currently, only PGP/MIME is supported; PGP-inline and S/MIME are not.
For all of this to work, @command{gpg-agent} must be running, and it For all of this to work, @command{gpg-agent} must be running, and it
must set the environment variable @t{GPG_AGENT_INFO}. You can check from must set the environment variable @t{GPG_AGENT_INFO}. You can check from
@command{emacs} with @key{M-x getenv GPG_AGENT_INFO}. Emacs with @key{M-x getenv GPG_AGENT_INFO}.
In many mainstream Linux/Unix desktop environments, everything works In many mainstream Linux/Unix desktop environments, everything works
out-of-the-box, but if your environment does not automatically start out-of-the-box, but if your environment does not automatically start
@ -1554,8 +1567,8 @@ Gimp}
see the results. Suppose you receive a patch file, and would like to get an see the results. Suppose you receive a patch file, and would like to get an
overview of the changes, using the @t{diffstat} program. You can use something overview of the changes, using the @t{diffstat} program. You can use something
like: @kbd{A | 1 RET diffstat -b RET}. like: @kbd{A | 1 RET diffstat -b RET}.
@item @command{emacs} (@key{e}): open the attachment in your running @command{emacs}. For @item Emacs (@key{e}): open the attachment in your running Emacs. For
example, if you receive some text file you'd like to open in @command{emacs}: example, if you receive some text file you'd like to open in Emacs:
@kbd{A e 1 RET}. @kbd{A e 1 RET}.
@end itemize @end itemize
@ -1623,7 +1636,7 @@ C-S-u update mail & reindex
@node Address autocompletion @node Address autocompletion
@section Address autocompletion @section Address autocompletion
@t{mu4e} supports@footnote{@command{emacs} 23.2 or higher is required} @t{mu4e} supports@footnote{GNU Emacs 24.4 or higher is required}
autocompleting addresses when composing e-mail messages. @t{mu4e} uses the autocompleting addresses when composing e-mail messages. @t{mu4e} uses the
e-mail addresses from the messages you sent or received as the source for e-mail addresses from the messages you sent or received as the source for
this. Address auto-completion is enabled by default; if you want to disable it this. Address auto-completion is enabled by default; if you want to disable it
@ -1814,7 +1827,7 @@ then still include the signature manually, using the function
@section Other settings @section Other settings
@itemize @itemize
@item If you want use @t{mu4e} as @command{emacs}' default program for sending mail, @item If you want use @t{mu4e} as Emacs' default program for sending mail,
see @ref{Emacs default}. see @ref{Emacs default}.
@item Normally, @t{mu4e} @emph{buries} the message buffer after sending; if you want @item Normally, @t{mu4e} @emph{buries} the message buffer after sending; if you want
to kill the buffer instead, add something like the following to your to kill the buffer instead, add something like the following to your
@ -2254,7 +2267,7 @@ action | a | apply some action
After marking a message, the left-most columns in the headers view indicate After marking a message, the left-most columns in the headers view indicate
the kind of mark. This is informative, but if you mark many (say, thousands) the kind of mark. This is informative, but if you mark many (say, thousands)
messages, this slows things down significantly@footnote{this uses an messages, this slows things down significantly@footnote{this uses an
@command{emacs} feature called @emph{overlays}, which are slow when used a lot Emacs feature called @emph{overlays}, which are slow when used a lot
in a buffer}. For this reason, you can disable this by setting in a buffer}. For this reason, you can disable this by setting
@code{mu4e-headers-show-target} to @code{nil}. @code{mu4e-headers-show-target} to @code{nil}.
@ -2742,10 +2755,10 @@ In @ref{Folders}, we explained how you can set up @t{mu4e}'s special
folders: folders:
@lisp @lisp
(setq (setq
mu4e-sent-folder "/sent" ;; sent messages mu4e-sent-folder "/sent" ;; sent messages
mu4e-drafts-folder "/drafts" ;; unfinished messages mu4e-drafts-folder "/drafts" ;; unfinished messages
mu4e-trash-folder "/trash" ;; trashed messages mu4e-trash-folder "/trash" ;; trashed messages
mu4e-refile-folder "/archive") ;; saved messages01 mu4e-refile-folder "/archive") ;; saved messages
@end lisp @end lisp
In some cases, having such static folders may not suffice --- perhaps you want In some cases, having such static folders may not suffice --- perhaps you want
@ -3210,7 +3223,7 @@ one of the user's e-mail addresses (as per @code{mu4e-user-mail-address-list}).
see @code{mu4e-toggle-logging}. see @code{mu4e-toggle-logging}.
@item @code{mu4e-message}, @code{mu4e-warning}, @code{mu4e-error} are the @item @code{mu4e-message}, @code{mu4e-warning}, @code{mu4e-error} are the
@t{mu4e} equivalents of the normal elisp @code{message}, @t{mu4e} equivalents of the normal elisp @code{message},
@code{user-error}@footnote{@code{user-error} only appears in @command{emacs} @code{user-error}@footnote{@code{user-error} only appears in Emacs
24.2 and later; in older versions it falls back to @code{error}} and 24.2 and later; in older versions it falls back to @code{error}} and
@code{error} functions. @code{error} functions.
@end itemize @end itemize
@ -3229,7 +3242,6 @@ with other tools.
* BBDB::Hooking up with the Insidious Big Brother Database * BBDB::Hooking up with the Insidious Big Brother Database
* Sauron::Getting new mail notifications with Sauron * Sauron::Getting new mail notifications with Sauron
* Speedbar::A special frame with your folders * Speedbar::A special frame with your folders
* Mu-cite:: Fancy citation engine
* Dired:: Attaching files using @t{dired} * Dired:: Attaching files using @t{dired}
* Hydra:: Custom shortcut menus * Hydra:: Custom shortcut menus
@end menu @end menu
@ -3237,7 +3249,7 @@ with other tools.
@node Emacs default @node Emacs default
@section Emacs default @section Emacs default
@command{emacs} allows you to select an e-mail program as the default Emacs allows you to select an e-mail program as the default
program it uses when you press @key{C-x m} (@code{compose-mail}), call program it uses when you press @key{C-x m} (@code{compose-mail}), call
@code{report-emacs-bug} and so on. If you want to use @t{mu4e} for this, @code{report-emacs-bug} and so on. If you want to use @t{mu4e} for this,
you can do so by adding the following to your configuration: you can do so by adding the following to your configuration:
@ -3356,7 +3368,7 @@ After this, you should be able to:
@node Sauron @node Sauron
@section Sauron @section Sauron
The @command{emacs} package @t{sauron}@footnote{Sauron can be found at The Emacs package @t{sauron}@footnote{Sauron can be found at
@url{https://github.com/djcb/sauron}, or in the Marmalade package repository @url{https://github.com/djcb/sauron}, or in the Marmalade package repository
at @url{https://marmalade-repo.org/}} (by the same author) can be used at @url{https://marmalade-repo.org/}} (by the same author) can be used
to get notifications about new mails. If you run something like the below to get notifications about new mails. If you run something like the below
@ -3412,8 +3424,8 @@ running outside its session.
@node Speedbar @node Speedbar
@section Speedbar @section Speedbar
@code{speedbar} is an @command{emacs}-extension that shows navigational information for @code{speedbar} is an Emacs-extension that shows navigational information for
an @command{emacs} buffer in a separate frame. Using @code{mu4e-speedbar}, @t{mu4e} an Emacs buffer in a separate frame. Using @code{mu4e-speedbar}, @t{mu4e}
lists your bookmarks and maildir folders and allows for one-click access to lists your bookmarks and maildir folders and allows for one-click access to
them. them.
@ -3427,25 +3439,6 @@ list, such as auto-completion when jumping to a maildir.
@code{mu4e-speedbar} was contributed by @emph{Antono Vasiljev}. @code{mu4e-speedbar} was contributed by @emph{Antono Vasiljev}.
@node Mu-cite
@section Mu-cite
@t{mu-cite}@footnote{Note, despite its name, @t{mu-cite} is a project
unconnected to @t{mu}/@t{mu4e}} is a package to control the way message
citations look like (i.e., the message you responded to when you reply to them
or forward them), with its latest version available at
@url{https://www.jpl.org/elips/mu/}.
After installing @t{mu-cite}, you can use something like the following to make
it work with @t{mu4e}:
@lisp
(require 'mu-cite)
(setq mu4e-compose-cite-function 'mu-cite-original)
(setq mu-cite-top-format '("On " date ", " from " wrote:\n\n"))
(setq mu-cite-prefix-format '(" > "))
@end lisp
@node Dired @node Dired
@section Dired @section Dired
@ -3797,7 +3790,7 @@ Next step: let's make a @t{mu4e} configuration for this:
@end lisp @end lisp
And that's it --- put the above in your @file{~/.emacs}, change @t{USERNAME} And that's it --- put the above in your @file{~/.emacs}, change @t{USERNAME}
etc. to your own, and restart @command{emacs}, and run @kbd{M-x mu4e}. etc. to your own, and restart Emacs, and run @kbd{M-x mu4e}.
@node CONF Other settings @node CONF Other settings
@section Other settings @section Other settings
@ -3833,100 +3826,117 @@ answers.
@node General @node General
@section General @section General
@enumerate @subsection Results from @command{mu} and @t{mu4e} differ - why?
@item @emph{Does @t{mu4e} provide context-sensitive help information?} Yes --- pressing @key{H} In general, the same queries for @command{mu} and @t{mu4e} should
should take you to the right section in this manual. yield the same results. If they differ, this is usually because one
@item @emph{How can I quickly delete/move/trash a lot of messages?} You can of the following reasons:
select ('mark' in @command{emacs}-speak) the messages like you would select @itemize
text in a buffer; the actions you then take (e.g., @key{DEL} for delete, @item different default options:
@key{m} for move and @key{t} for trash) apply to all selected messages. You mu4e defaults to having @t{mu4e-headers-include-related} and
can also use functions like @code{mu4e-headers-mark-thread} (@key{T}), @t{mu4e-headers-skip-duplicates} enabled and
@code{mu4e-headers-mark-subthread} (@key{t}) to mark whole threads at the same @t{mu4e-headers-results-limit} set to 500. However, the command-line
time, and @code{mu4e-headers-mark-pattern} (@key{%}) to mark all messages @command{mu find}'s corresponding @t{--include-related} and
matching a certain regular expression. @t{--skip-dups} are false, and there's no limit (@t{--maxnum}).
@item @emph{@t{mu4e} seems to return a subset of all matches --- how can I @item reverse sorting:
get them all?} For speed reasons, @t{mu4e} returns only up to the value The results amy be different when only one @t{mu4e} and @command{mu
of the variable @code{mu4e-search-result-limit} (default: 500) find} do not both sort their results in the same direction.
matches. To show @emph{all}, use @kbd{M-x @item shell quoting issues:
mu4e-headers-toggle-full-search} (@key{Q}), or customize the variable Depending on the shell, various shell metacharacters in search query
@code{mu4e-headers-full-search}. This applies to all search commands. (such as @t{*}) may be expanded by the shell before @command{mu} ever
@item @emph{Can I automatically apply the marks on messages when sees them, and the query may not be what you think it is. Quoting is
leaving the headers buffer?} Yes you can --- see the documentation for the necessary.
variable @t{mu4e-headers-leave-behavior}. @end itemize
@item @emph{How can I set @t{mu4e} as the default e-mail client in @command{emacs}?}
@subsection How can I quickly delete/move/trash a lot of messages?
You can select ('mark' in Emacs-speak) the messages like you
would select text in a buffer; the actions you then take (e.g.,
@key{DEL} for delete, @key{m} for move and @key{t} for trash) apply to
all selected messages. You can also use functions like
@code{mu4e-headers-mark-thread} (@key{T}),
@code{mu4e-headers-mark-subthread} (@key{t}) to mark whole threads at
the same time, and @code{mu4e-headers-mark-pattern} (@key{%}) to mark
all messages matching a certain regular expression.
@subsection Can I automatically apply the marks on messages when leaving the headers buffer?
Yes you can --- see the documentation for the variable
@t{mu4e-headers-leave-behavior}.
@subsection How can I set @t{mu4e} as the default e-mail client in Emacs?
See @ref{Emacs default}. See @ref{Emacs default}.
@item @emph{Can @t{mu4e} use some fancy Unicode characters instead of these
boring plain-ASCII ones?} Glad you asked! Yes, if you set @subsection Can @t{mu4e} use some fancy Unicode instead of these boring plain-ASCII ones?
@code{mu4e-use-fancy-chars} to @t{t}, @t{mu4e} uses such fancy Glad you asked! Yes, if you set @code{mu4e-use-fancy-chars} to @t{t},
characters in a number of places. Since not all fonts include all @t{mu4e} uses such fancy characters in a number of places. Since not
characters, you may want to install the @t{unifont} and/or @t{symbola} all fonts include all characters, you may want to install the
fonts on your system. @t{unifont} and/or @t{symbola} fonts on your system.
@item @emph{Can I start @t{mu4e} in the background?} Yes --- if you provide a
prefix-argument (@key{C-u}), @t{mu4e} starts, but does not show the @subsection Can I start @t{mu4e} in the background?
main-window. Yes --- if you provide a prefix-argument (@key{C-u}), @t{mu4e} starts,
@item @emph{Does @t{mu4e} support searching for CJK (Chinese-Japanese-Korean) characters?} but does not show the main-window.
@subsection Does @t{mu4e} support searching for CJK (Chinese-Japanese-Korean) characters?
Yes, if you have @t{Xapian} 1.2.8 or newer, and set the environment Yes, if you have @t{Xapian} 1.2.8 or newer, and set the environment
variable @t{XAPIAN_CJK_NGRAM} to non-empty before indexing, both when variable @t{XAPIAN_CJK_NGRAM} to non-empty before indexing, both when
using @t{mu} from the command-line and from @t{mu4e}. using @t{mu} from the command-line and from @t{mu4e}.
@item @emph{How can I customize the function to select a folder?}
The @t{mu4e-completing-read-function} variable can be customized to select a @subsection How can I customize the function to select a folder?
folder in any way. The variable can be set to a function that receives The @t{mu4e-completing-read-function} variable can be customized to
five arguments, following @t{completing-read}. The default value is select a folder in any way. The variable can be set to a function that
@code{ido-completing-read}; to use emacs's default behavior, set the receives five arguments, following @t{completing-read}. The default
variable to @code{completing-read}. Helm users can use the same value, value is @code{ido-completing-read}; to use emacs's default behavior,
and by enabling @code{helm-mode} use helm-style completion. set the variable to @code{completing-read}. Helm users can use the
@item @emph{I have a lot of Maildir folders, so regenerating them each time makes same value, and by enabling @code{helm-mode} use helm-style
things slow. What can I do?} completion.
Set @code{mu4e-cache-maildir-list} to @code{t} (but make sure to read
@subsection With a lot of Maildir folders, jumping to them can get slow. What can I do?
Set @code{mu4e-cache-maildir-list} to @code{t} (make sure to read
its docstring). its docstring).
@item @emph{How can I hide certain message from the search results?}
@subsection How can I hide messages from the search results?
See the variable @code{mu4e-headers-hide-predicate}. See the variable @code{mu4e-headers-hide-predicate}.
@item @emph{I'm getting an error 'Variable binding depth exceeds max-specpdl-size'
when using mu4e -- what can I do about it?} The error occurs because @subsection I'm getting an error 'Variable binding depth exceeds max-specpdl-size' when using mu4e -- what can I do about it?
@t{mu4e} is binding more variables than @t{emacs} allows for, by The error occurs because @t{mu4e} is binding more variables than
default. You can avoid this by setting a higher value, e.g. by adding the @t{emacs} allows for, by default. You can avoid this by setting a
following to your configuration: higher value, e.g. by adding the following to your configuration:
@lisp @lisp
(setq max-specpdl-size 5000) (setq max-specpdl-size 5000)
@end lisp @end lisp
@end enumerate
@node Retrieving mail @node Retrieving mail
@section Retrieving mail @section Retrieving mail
@enumerate @subsection How can I get notifications when receiving mail?
@item @emph{How can I get notifications when receiving mail?} There is There is @code{mu4e-index-updated-hook}, which gets triggered when the
@code{mu4e-index-updated-hook}, which gets triggered when the indexing indexing process triggered sees an update (not just new mail though).
process triggered sees an update (not just new mail though). To use this To use this hook, put something like the following in your setup
hook, put something like the following in your setup (assuming you have (assuming you have @t{aplay} and some soundfile, change as needed):
@t{aplay} and some soundfile, change as needed):
@lisp @lisp
(add-hook 'mu4e-index-updated-hook (add-hook 'mu4e-index-updated-hook
(defun new-mail-sound () (defun new-mail-sound ()
(shell-command "aplay ~/Sounds/boing.wav&"))) (shell-command "aplay ~/Sounds/boing.wav&")))
@end lisp @end lisp
@item @emph{It seems my headers-buffer is automatically updated when new
messages are found during the indexing process --- can I disable this @subsection Getting mail through a local mailserver. What should I use for @code{mu4e-get-mail-command}?
somehow?} Yes --- set @code{mu4e-headers-auto-update} to @code{nil}. Use the literal string @t{"true"} (or don't do anything, it's the
@item @emph{I don't use @t{offlineimap}, @t{fetchmail} etc., I get my mail default) which then uses @t{/bin/true} (a command that does nothing
through my own mailserver. What should I use for and always succeeds). This makes getting mail a no-op, but the
@code{mu4e-get-mail-command}}? Use the literal string @t{"true"} (or messages are still re-indexed.
don't do anything, it's the default) which then uses @t{/bin/true} (a
command that does nothing and always succeeds). This makes getting mail @subsection How can I re-index my messages without getting new mail?
a no-op, but the messages are still re-indexed.
@item @emph{How can I re-index my messages without getting new mail?}
Use @kbd{M-x mu4e-update-index} Use @kbd{M-x mu4e-update-index}
@item @emph{When I try to run @t{mu index} while @t{mu4e} is running I get
errors like:} @subsection When I try to run @t{mu index} while @t{mu4e} is running I get errors
For instance:
@verbatim @verbatim
mu: mu_store_new_writable: xapian error mu: mu_store_new_writable: xapian error
'Unable to get write lock on ~/.cache/mu/xapian: already locked 'Unable to get write lock on ~/.cache/mu/xapian: already locked
@end verbatim @end verbatim
@emph{What to do about this?} You get this error because the underlying What to do about this? You get this error because the underlying
Xapian database is locked by some other process; it can be opened only once in Xapian database is locked by some other process; it can be opened only
read-write mode. There is not much @t{mu4e} can do about this, but if is once in read-write mode. There is not much @t{mu4e} can do about this,
another @command{mu} instance that is holding the lock, you can ask it to but if is another @command{mu} instance that is holding the lock, you
(gracefully) terminate: can ask it to (gracefully) terminate:
@verbatim @verbatim
pkill -2 -u $UID mu # send SIGINT pkill -2 -u $UID mu # send SIGINT
sleep 1 sleep 1
@ -3934,66 +3944,67 @@ another @command{mu} instance that is holding the lock, you can ask it to
@end verbatim @end verbatim
@t{mu4e} automatically restarts @t{mu} when it needs it. In practice, this @t{mu4e} automatically restarts @t{mu} when it needs it. In practice, this
seems to work quite well. seems to work quite well.
@item @emph{I don't like the @t{Indexing...} messages that the indexing process
gives me. Can I turn them off?}. Yes: set the variable
@code{mu4e-hide-index-messages} to non-@t{nil}.
@item @emph{Some IMAP-synchronization programs such as @t{mbsync} (but not
@t{offlineimap}) don't like it when message files do not change their names
when they are moved to different folders. Can @t{mu4e} somehow accommodate
this?} Yes --- you can set the variable @code{mu4e-change-filenames-when-moving}
to non-@t{nil}.
@item @emph{@command{offlineimap} uses IMAP's UTF-7 for encoding
non-ascii folder names, while @t{mu} expects UTF-8 (so, e.g. @t{/まりも
えお}@footnote{some Japanese characters} becomes
@t{/&MH4wijCCMEgwSg-}). How can I make @t{mu4e} display such folders
correctly?} This is best solved by telling @command{offlineimap} to use
UTF-8 instead --- see
@url{https://github.com/djcb/mu/issues/68#issuecomment-8598652}.
@item @emph{@t{mbsync} or @t{offlineimap} do not sync properly with my web-mail
provider (such as gmail) -- what can I do about it?} Unfortunately,
@t{mbsync} and/or @t{offlineimap} do not always agree with @t{mu} about
the meaning of various Maildir-flags. If you encounter unexpected
behavior, it is recommended you check before and after a sync-operation.
If the problem only shows up @emph{after} sync'ing, the problem is with @subsection How can I disable the @t{Indexing...} messages?
the sync-program, and it's most productive to complain there. Otherwise, Set the variable @code{mu4e-hide-index-messages} to non-@t{nil}.
there have been quite a few related queries on the mailing-list;
worthwhile to check out. @subsection IMAP-synchronization and file-name changes
@end enumerate Some IMAP-synchronization programs such as @t{mbsync} (but not
@t{offlineimap}) don't like it when message files do not change their
names when they are moved to different folders. @t{mu4e} can attempt
to help with this - you can set the variable
@code{mu4e-change-filenames-when-moving} to non-@t{nil}.
@subsection @command{offlineimap} and UTF-7
@command{offlineimap} uses IMAP's UTF-7 for encoding non-ascii folder
names, while @command{mu} expects UTF-8 (so, e.g. @t{/まりもえ
お}@footnote{some Japanese characters} becomes @t{/&MH4wijCCMEgwSg-}).
This is best solved by telling @command{offlineimap} to use UTF-8
instead --- see
@url{https://github.com/djcb/mu/issues/68#issuecomment-8598652}.
@subsection @command{mbsync} or @command{offlineimap} do not sync properly
Unfortunately, @command{mbsync} and/or @command{offlineimap} do not
always agree with @t{mu} about the meaning of various Maildir-flags.
If you encounter unexpected behavior, it is recommended you check
before and after a sync-operation. If the problem only shows up
@emph{after} sync'ing, the problem is with the sync-program, and it's
most productive to complain there. Otherwise, there have been quite a
few related queries on the mailing-list; worthwhile to check out.
@node Reading messages @node Reading messages
@section Reading messages @section Reading messages
@enumerate @subsection How can I view attached images in my message view buffers? See
@item @emph{How can I view attached images in my message view buffers?} See
@ref{Viewing images inline}. @ref{Viewing images inline}.
@item @emph{How can I word-wrap long lines in when viewing a @subsection How can I word-wrap long lines in when viewing a message?
message?} You can toggle between wrapped and non-wrapped states using You can toggle between wrapped and non-wrapped states using
@key{w}. If you want to do this automatically, invoke @code{visual-line-mode} in @key{w}. If you want to do this automatically, invoke @code{visual-line-mode} in
your @code{mu4e-view-mode-hook}. your @code{mu4e-view-mode-hook}.
@item @emph{How can I perform custom actions on messages and attachments?} See @subsection How can I perform custom actions on messages and attachments?
@ref{Actions}. See @ref{Actions}.
@item @emph{Does @t{mu4e} support crypto (i.e., decrypting messages and @subsection Does @t{mu4e} support crypto (i.e., decrypting messages and verifying signatures)?
verifying signatures)?} Yes --- if @t{mu} was built with @t{GMime} 2.6 Yes --- if @t{mu} was built with @t{GMime} 2.6
or later, it is possible to do both (note, only PGP/MIME is or later, it is possible to do both (note, only PGP/MIME is
supported). In the @ref{Main view} the support is indicated by a big supported). In the @ref{Main view} the support is indicated by a big
letter @t{C} on the right hand side of the @t{mu4e} version. See letter @t{C} on the right hand side of the @t{mu4e} version. See
@ref{Decryption} and @ref{Verifying signatures}. For encryption and @ref{Decryption} and @ref{Verifying signatures}. For encryption and
signing messages, see @ref{Writing messages}. signing messages, see @ref{Writing messages}.
@item @emph{How can I prevent @t{mu4e} from automatically marking messages as `read' when I read them?} @subsection How can I prevent @t{mu4e} from automatically marking messages as `read' when I read them?
Set @code{mu4e-view-auto-mark-as-read} to @code{nil}. Set @code{mu4e-view-auto-mark-as-read} to @code{nil}.
@item @emph{Does @t{mu4e} support including all related messages in a thread, @subsection Does @t{mu4e} support including all related messages in a thread, like Gmail does?
like Gmail does?} Yes --- see @ref{Including related messages}. Yes --- see @ref{Including related messages}.
@item @emph{There seems to be a lot of duplicate messages --- how can I get rid @subsection There seems to be a lot of duplicate messages --- how can I get rid of them?
of them?} See @ref{Skipping duplicates}. See @ref{Skipping duplicates}.
@item @emph{How can I use the @t{eww} browser to view rich-text messages?} @subsection How can I use the @t{eww} browser to view rich-text messages?
With a new enough emacs, this happens automatically. See @ref{Html2text With a new enough emacs, this happens automatically. See
functions} for some details. @ref{Html2text functions} for some details.
@item @emph{Some messages are almost unreadable in emacs --- can I view them in @subsection Some messages are almost unreadable in emacs --- can I view them in an external web browser?
an external web browser?} Indeed, airlines often send messages that Indeed, airlines often send messages that heavily depend on html and
heavily depend on html and are hard to digest inside emacs. Fortunately, are hard to digest inside emacs. Fortunately, there's an @emph{action}
there's an @emph{action} (@ref{Message view actions}) (@ref{Message view actions}) defined for this. Simply add to your
defined for this. Simply add to your configuration: configuration:
@lisp @lisp
(add-to-list 'mu4e-view-actions (add-to-list 'mu4e-view-actions
'("ViewInBrowser" . mu4e-action-view-in-browser) t) '("ViewInBrowser" . mu4e-action-view-in-browser) t)
@ -4001,11 +4012,11 @@ defined for this. Simply add to your configuration:
Now, when viewing such a difficult message, type @kbd{aV}, and the message Now, when viewing such a difficult message, type @kbd{aV}, and the message
opens inside a webbrowser. You can influence the browser with opens inside a webbrowser. You can influence the browser with
@code{browse-url-generic-program}; and see @ref{Privacy aspects}. @code{browse-url-generic-program}; and see @ref{Privacy aspects}.
@item @emph{How can I read encrypted messages that I sent?}. Since you do not own the @subsection How can I read encrypted messages that I sent?
recipient's key you typically cannot read those mails --- so the trick is Since you do not own the recipient's key you typically cannot read
to encrypt outgoing mails with your key, too. This can be automated by those mails --- so the trick is to encrypt outgoing mails with your
adding the following snippet to your configuration (courtesy of user key, too. This can be automated by adding the following snippet to
@t{kpachnis}): your configuration (courtesy of user @t{kpachnis}):
@lisp @lisp
(require 'epg-config) (require 'epg-config)
(setq mml2015-use 'epg (setq mml2015-use 'epg
@ -4013,75 +4024,78 @@ adding the following snippet to your configuration (courtesy of user
mml2015-encrypt-to-self t mml2015-encrypt-to-self t
mml2015-sign-with-sender t) mml2015-sign-with-sender t)
@end lisp @end lisp
@item @emph{view-as-pdf seems to hang for some e-mails --- what can I do about that?} @subsection Can I `bounce' or `resend' messages?
Short answer: install @t{nspluginwrapper}. Longer answer: @t{mu} comes Yes --- it is possible to edit a (copy of) an existing message and
with @t{msg2pdf}, which is a program used to convert the messages to then send it, using @code{M-x mu4e-compose-resend}. This gives you a
pdf, and which depends on WebKit, which in some cases needs raw copy of the message, including all headers, encoded parts and so
@t{nspluginwrapper} and it waits for a long time if it's not there. So, on. Reason for this is that for resending, it is important not to
installing @t{nspluginwrapper} prevents that. change anything (except perhaps for the @t{To:} address when
@item @emph{Can I `bounce' or `resend' messages?} bouncing); since we cannot losslessly decode an existing message, you
Yes --- it is possible to edit a (copy of) an existing message and then get the raw version.
send it, using @code{M-x mu4e-compose-resend}. This gives you a raw copy
of the message, including all headers, encoded parts and so on. Reason
for this is that for resending, it is important not to change anything
(except perhaps for the @t{To:} address when bouncing); since we cannot
losslessly decode an existing message, you get the raw version.
@end enumerate
@node Writing messages @node Writing messages
@section Writing messages @section Writing messages
@enumerate @subsection What's the deal with replies to messages I wrote myself?
@item @emph{What's the deal with replies to messages I wrote myself?} Like Like many other mail-clients, @t{mu4e} treats replies to messages you
many other mail-clients, @t{mu4e} treats replies to messages you wrote wrote yourself as special --- these messages keep the same @t{To:} and
yourself as special --- these messages keep the same @t{To:} and @t{Cc:} @t{Cc:} as the original message. This is to ease the common case of
as the original message. This is to ease the common case of following up following up to a message you wrote earlier.
to a message you wrote earlier.
@item @emph{How can I automatically set the @t{From:}-address for a @subsection How can I automatically set the @t{From:}-address for a reply-message?
reply-message, based on some field in the original?} See @ref{Compose hooks}. See @ref{Compose hooks}.
@item @emph{And what about customizable folders for draft messages, sent
messages, trashed messages, based on e.g. the @t{From:} header?} See @subsection How can I dynamically determine the folders for draft/sent/trashed messages?
@ref{Dynamic folders}. See @ref{Dynamic folders}.
@item @emph{Can I define aliases for (groups of) e-mail addresses?} Sure -
see @ref{(emacs) Mail Aliases}. @subsection How can I define aliases for (groups of) e-mail addresses?
@item @emph{How can I automatically add some header to an outgoing message?} See @ref{(emacs) Mail Aliases}.
Once more, see @ref{Compose hooks}.
@item @emph{How can I influence the way the original message looks when @subsection How can I automatically add some header to an outgoing message?
replying or inline forwarding?} Since @code{mu4e-compose-mode} derives from See @ref{Compose hooks}.
@code{message-mode}, you can re-use many of its facilities.
@inforef{Insertion Variables,,message}. @subsection How can I influence the way the original message looks when replying/forwarding?
@item @emph{How can I easily include attachments in the messages I write?} Since @code{mu4e-compose-mode} derives from @code{message-mode}, you
You can drag-and-drop from your desktop; alternatively, you can use @t{dired} can re-use many of its facilities. @inforef{Insertion
--- see @ref{Dired}. Variables,,message}.
@item @emph{@t{mu4e} seems to remove myself from the @t{Cc:}-list; how can I
prevent that?} Set @code{mu4e-compose-keep-self-cc} to @t{t} in your @subsection How can I easily include attachments in the messages I write?
configuration. You can drag-and-drop from your desktop; alternatively, you can use
@item @emph{How can I start a new message-thread from a reply?} Remove the @t{In-Reply-To} header, @t{dired} --- see @ref{Dired}.
and @t{mu4e} automatically removes the (hidden) @t{References} header as
well when sending it. This makes the message show up as a top-level @subsection @t{mu4e} seems to remove myself from the @t{Cc:}-list; how can Iprevent that?
message rather than as a response. Set @code{mu4e-compose-keep-self-cc} to @t{t} in your configuration.
@item @emph{How can I attach an existing message?} Use @code{mu4e-action-capture-message}
(i.e., @kbd{a c} in the headers view) to `capture' the to-be-attached @subsection How can I start a new message-thread from a reply?
message, then when editing the message, use @kbd{M-x Remove the @t{In-Reply-To} header, and @t{mu4e} automatically removes
mu4e-compose-attach-captured-message}. the (hidden) @t{References} header as well when sending it. This makes
@item @emph{How can I sign or encrypt messages?} You can do so using @command{emacs}' the message show up as a top-level message rather than as a response.
MIME-support --- check the @t{Attachments}-menu while composing a
message. Also see @ref{Signing and encrypting}. @subsection How can I attach an existing message?
@item @emph{Can I use @t{BBDB} with @t{mu4e}?} Yes, with the current Use @code{mu4e-action-capture-message} (i.e., @kbd{a c} in the headers
(2015-06-23) development release of BBDB view) to `capture' the to-be-attached message, then when editing the
message, use @kbd{M-x mu4e-compose-attach-captured-message}.
@subsection How can I sign or encrypt messages?
You can do so using Emacs' MIME-support --- check the
@t{Attachments}-menu while composing a message. Also see @ref{Signing
and encrypting}.
@subsection Can I use @t{BBDB} with @t{mu4e}?
Yes, with the current (2015-06-23) development release of BBDB
@url{https://savannah.nongnu.org/projects/bbdb/}, or releases of BBDB @url{https://savannah.nongnu.org/projects/bbdb/}, or releases of BBDB
after 3.1.2. after 3.1.2. @ref{BBDB}.
@ref{BBDB}.
@item @emph{After sending some messages, it seems the buffer for these @subsection How can I get rid of the message buffer after sending?
messages stay around. How can I get rid of those?}
@lisp @lisp
(setq message-kill-buffer-on-exit t) (setq message-kill-buffer-on-exit t)
@end lisp @end lisp
@item @emph{Sending big messages is slow and blocks emacs --- what can I do
about it?} For this, there's @url{https://github.com/jwiegley/emacs-async} @subsection Sending big messages is slow and blocks emacs --- what can I do about it?
(also available from the Emacs package repository); add the following snippet
to your configuration: For this, there's @url{https://github.com/jwiegley/emacs-async} (also
available from the Emacs package repository); add the following
snippet to your configuration:
@lisp @lisp
(require 'smtpmail-async) (require 'smtpmail-async)
(setq (setq
@ -4091,9 +4105,9 @@ to your configuration:
With this, messages are sent using a background Emacs instance. With this, messages are sent using a background Emacs instance.
A word of warning though, this tends to not be as reliable as sending A word of warning though, this tends to not be as reliable as sending
the message in the normal, synchronous fashion, and people have reported the message in the normal, synchronous fashion, and people have
silent failures, where mail sending fails for some reason without any reported silent failures, where mail sending fails for some reason
indication of that. without any indication of that.
You can check the progress of the background by checking the You can check the progress of the background by checking the
@t{*Messages*}-buffer, which should show something like: @t{*Messages*}-buffer, which should show something like:
@ -4106,24 +4120,27 @@ Sending...done
@end verbatim @end verbatim
The first and final messages are the most important, and there may be The first and final messages are the most important, and there may be
considerable time between them, depending on the size of the message. considerable time between them, depending on the size of the message.
@item @emph{Is it possible to compose messages in a separate frame?}
Yes --- set the variable @code{mu4e-compose-in-new-frame} to @code{t}.
@item @emph{How can I apply format=flowed to my outgoing messages, enabling
receiving clients that support this feature to reflow my paragraphs?}
Plain text emails with @t{Content-Type: text/plain; format=flowed} can
be reflowed (i.e. line endings removed, paragraphs refilled) by
receiving clients that support this standard. Clients that don't support
this, show them as is, which means this feature is truly non-invasive.
Here's an explanatory blog post which also shows why this is a desirable @subsection Is it possible to compose messages in a separate frame?
feature: @url{https://mathiasbynens.be/notes/gmail-plain-text} (if you Yes --- set the variable @code{mu4e-compose-in-new-frame} to @code{t}.
don't have it, your mails mostly look quite bad especially on mobile
@subsection How can I apply format=flowed to my outgoing messages?
This enables receiving clients that support this feature to reflow
paragraphs. Plain text emails with @t{Content-Type: text/plain;
format=flowed} can be reflowed (i.e. line endings removed, paragraphs
refilled) by receiving clients that support this standard. Clients
that don't support this, show them as is, which means this feature is
truly non-invasive.
Here's an explanatory blog post which also shows why this is a
desirable feature:
@url{https://mathiasbynens.be/notes/gmail-plain-text} (if you don't
have it, your mails mostly look quite bad especially on mobile
devices) and here's the RFC with all the details: devices) and here's the RFC with all the details:
@url{https://www.ietf.org/rfc/rfc2646.txt}. @url{https://www.ietf.org/rfc/rfc2646.txt}.
Since version 0.9.17, @t{mu4e} send emails with @t{format=flowed} by Since version 0.9.17, @t{mu4e} sensd emails with @t{format=flowed} by
setting setting
@lisp @lisp
(setq mu4e-compose-format-flowed t) (setq mu4e-compose-format-flowed t)
@end lisp @end lisp
@ -4142,8 +4159,8 @@ understand the latter as it is the case for Google or Github), use
@kbd{M-x use-hard-newlines} (to turn @code{use-hard-newlines} off) or @kbd{M-x use-hard-newlines} (to turn @code{use-hard-newlines} off) or
uncheck the box @t{format=flowed} in the @t{Text} menu when composing a uncheck the box @t{format=flowed} in the @t{Text} menu when composing a
message. message.
@item @emph{How can force images to be shown at the end of my messages,
regardless of where I insert them?} @subsection How can force images to be shown at the end of my messages, regardless of where I insert them?
User Marcin Borkowski has a solution: User Marcin Borkowski has a solution:
@lisp @lisp
(defun mml-attach-file--go-to-eob (orig-fun &rest args) (defun mml-attach-file--go-to-eob (orig-fun &rest args)
@ -4157,7 +4174,7 @@ User Marcin Borkowski has a solution:
(advice-add 'mml-attach-file :around #'mml-attach-file--go-to-eob) (advice-add 'mml-attach-file :around #'mml-attach-file--go-to-eob)
@end lisp @end lisp
@item @emph{How can I avoid Outlook display issues?} @subsection How can I avoid Outlook display issues?
Limited testing shows that certain Outlook clients do not work well Limited testing shows that certain Outlook clients do not work well
with inline replies, and the entire message including-and-below the with inline replies, and the entire message including-and-below the
@ -4174,7 +4191,6 @@ such as:
@lisp @lisp
(setq message-citation-line-format "On %Y-%m-%d at %R %Z, %f wrote...") (setq message-citation-line-format "On %Y-%m-%d at %R %Z, %f wrote...")
@end lisp @end lisp
@end enumerate
@node Known issues @node Known issues
@section Known issues @section Known issues
@ -4185,7 +4201,7 @@ won't have to search in vain for things that are not there (yet), and
the author can use it as a todo-list. the author can use it as a todo-list.
@itemize @itemize
@item @emph{mu4e does not work well if the @command{emacs} language environment is not @item @emph{mu4e does not work well if the Emacs language environment is not
UTF-8}; so, if you encounter problems with encodings, be sure to have UTF-8}; so, if you encounter problems with encodings, be sure to have
@code{(set-language-environment "UTF-8")} in your @file{~/.emacs}. @code{(set-language-environment "UTF-8")} in your @file{~/.emacs}.
@item @emph{Thread handling is incomplete.} While threads are calculated and are @item @emph{Thread handling is incomplete.} While threads are calculated and are
@ -4457,11 +4473,11 @@ server.
@item @t{mu} indexes these messages periodically, so you can quickly search for @item @t{mu} indexes these messages periodically, so you can quickly search for
them. @t{mu} can run in a special @t{server}-mode, where it provides services them. @t{mu} can run in a special @t{server}-mode, where it provides services
to client software. to client software.
@item @t{mu4e}, which runs inside @command{emacs} is @item @t{mu4e}, which runs inside Emacs is
such a client; it communicates with @command{mu} (in its @t{server}-mode) to such a client; it communicates with @command{mu} (in its @t{server}-mode) to
search for messages, and manipulate them. search for messages, and manipulate them.
@item @t{mu4e} uses the facilities @item @t{mu4e} uses the facilities
offered by @command{emacs} (the Gnus message editor and @t{smtpmail}) to send offered by Emacs (the Gnus message editor and @t{smtpmail}) to send
messages. messages.
@end itemize @end itemize
@ -4475,7 +4491,7 @@ client that is emacs-based.
One way to implement this, would be to call the @t{mu} command-line One way to implement this, would be to call the @t{mu} command-line
tool with some parameters and then parse the output. In fact, that was tool with some parameters and then parse the output. In fact, that was
the first approach --- @t{mu4e} would invoke e.g., @t{mu find} and the first approach --- @t{mu4e} would invoke e.g., @t{mu find} and
process the output in @command{emacs}. process the output in Emacs.
However, with this approach, we need to load the entire e-mail However, with this approach, we need to load the entire e-mail
@emph{Xapian} database (in which the message is stored) for each @emph{Xapian} database (in which the message is stored) for each
@ -4490,15 +4506,15 @@ can be used manually, which is great for debugging.
@section Reading from the server @section Reading from the server
In the design, the next question was what format @t{mu} should use for its In the design, the next question was what format @t{mu} should use for its
output for @t{mu4e} (@command{emacs}) to process. Some other programs use output for @t{mu4e} (Emacs) to process. Some other programs use
@abbr{JSON} here, but it seemed easier (and possibly, more efficient) just to @abbr{JSON} here, but it seemed easier (and possibly, more efficient) just to
talk to @command{emacs} in its native language: @emph{s-expressions}, and talk to Emacs in its native language: @emph{s-expressions}, and
interpret those using the @command{emacs}-function interpret those using the Emacs-function
@code{read-from-string}. See @ref{The message s-expression} for details on the @code{read-from-string}. See @ref{The message s-expression} for details on the
format. format.
So, now let's look at how we process the data from @t{mu server} in So, now let's look at how we process the data from @t{mu server} in
@command{emacs}. We'll leave out a lot of details, @t{mu4e}-specifics, and look Emacs. We'll leave out a lot of details, @t{mu4e}-specifics, and look
at a bit more generic approach. at a bit more generic approach.
The first thing to do is to create a process (for example, with The first thing to do is to create a process (for example, with
@ -4583,10 +4599,10 @@ Some notes on the format:
@itemize @itemize
@item The address fields are @emph{lists} of pairs @code{(name . email)}, @item The address fields are @emph{lists} of pairs @code{(name . email)},
where @t{name} can be @t{nil}. where @t{name} can be @t{nil}.
@item The date is in format @command{emacs} uses (for example in @item The date is in format Emacs uses (for example in
@code{current-time}).@footnote{Emacs 32-bit integers have only 29 bits @code{current-time}).@footnote{Emacs 32-bit integers have only 29 bits
available for the actual number; the other bits are use by available for the actual number; the other bits are use by
@command{emacs} for internal purposes. Therefore, we need to split Emacs for internal purposes. Therefore, we need to split
@t{time_t} in two numbers.} @t{time_t} in two numbers.}
@item Attachments are a list of elements with fields @t{:index} (the number of @item Attachments are a list of elements with fields @t{:index} (the number of
the MIME-part), @t{:name} (the file name, if any), @t{:mime-type} (the the MIME-part), @t{:name} (the file name, if any), @t{:mime-type} (the
@ -4646,3 +4662,7 @@ it on all the time. By default, the log only maintains the most recent
@include fdl.texi @include fdl.texi
@bye @bye
@c Local Variables:
@c coding: utf-8
@c End: