* mu4e: documentation updates

This commit is contained in:
djcb
2012-09-30 20:12:07 +03:00
parent ffa12ad837
commit c87b426312

View File

@ -2,6 +2,12 @@
@c %**start of header @c %**start of header
@setfilename mu4e.info @setfilename mu4e.info
@settitle mu4e user manual @settitle mu4e user manual
@c Use proper quote and backtick for code sections in PDF output
@c Cf. Texinfo manual 14.2
@set txicodequoteundirected
@set txicodequotebacktick
@documentencoding utf-8 @documentencoding utf-8
@c %**end of header @c %**end of header
@include version.texi @include version.texi
@ -24,21 +30,30 @@ Documentation License.''
@titlepage @titlepage
@title @t{mu4e} - an e-mail client for emacs @title @t{mu4e} - an e-mail client for emacs
@subtitle{version @value{mu4e-version}} @subtitle{version @value{mu4e-version}}
@author by Dirk-Jan C. Binnema @author Dirk-Jan C. Binnema
@end titlepage
@c The following two commands start the copyright page.
@page
@vskip 0pt plus 1filll
@insertcopying
@end titlepage
@dircategory Emacs @dircategory Emacs
@direntry @direntry
* mu4e: (mu4e). An email client for emacs. * mu4e: (mu4e). An email client for emacs.
@end direntry @end direntry
@insertcopying
@contents @contents
@ifnottex
@node Top @node Top
@top Welcome to mu4e @top mu4e manual
@end ifnottex
@iftex
@node Welcome to mu4e
@unnumbered Welcome to mu4e
@end iftex
Welcome to @t{mu4e}! Welcome to @t{mu4e}!
@ -52,23 +67,25 @@ Some of its features include:
@itemize @itemize
@item Fully search-based: there are no folders, only queries @item Fully search-based: there are no folders, only queries
@item Fully documented, with example configurations @item Fully documented, with example configurations
@item UI optimized for speed with quick key strokes for common actions @item User-interface optimized for speed with quick key strokes for common actions
@item Asynchronous: heavy actions don't block @t{emacs}@footnote{currently, @item Asynchronous: heavy actions don't block @t{emacs}@footnote{currently,
the only exception to this is @emph{sending mail}} the only exception to this is @emph{sending mail}}
@item Support for crypto @item Support for crypto
@item Writing rich-text e-mails using @t{org-mode} (experimental) @item Writing rich-text e-mails using @t{org-mode}
@item Address auto-completion based on your messages @item Address auto-completion based on your messages
@item Extendable using your own custom actions @item Easily extendable
@end itemize @end itemize
This manual goes through the installation of @t{mu4e}, discusses the basic This manual goes through the installation of @t{mu4e}, discusses the basic
configuration, and explains its daily use. It also shows how you can customize configuration, and explains its daily use. It also shows you how you can
@t{mu4e} for your needs. At the end of the manual, there are some example customize @t{mu4e} for your needs.
configurations, which should help you to get up to speed quickly.
Also note the @xref{FAQ - Frequently Anticipated Questions}, and the section At the end of the manual, there are some example configurations, which should
on @xref{Known issues}, which may save you some time, and the appendices that help you to get up to speed quickly.
try the shed some light on @t{mu4e}'s internals.
Then there's the @xref{FAQ - Frequently Anticipated Questions}, and the
section on @xref{Known issues}, which may save you some time, and the
appendices that try the shed some light on @t{mu4e}'s internals.
This manual has been updated for @t{mu}/@t{mu4e} version This manual has been updated for @t{mu}/@t{mu4e} version
@emph{@value{mu4e-version}}. @emph{@value{mu4e-version}}.
@ -114,9 +131,9 @@ professionally and privately. Having an efficient e-mail client is essential
for me. Since none of the existing ones worked the way I wanted, I created my for me. Since none of the existing ones worked the way I wanted, I created my
own. own.
As @t{emacs} is such an integral part of my workflow, it made a lot of sense As @t{emacs} is an integral part of my workflow, it made a lot of sense to use
to use it for e-mail as well. And as I already had written an e-mail search it for e-mail as well. And as I already had written an e-mail search engine
engine (@t{mu}), it seemed only logical to use that as a basis. (@t{mu}), it seemed only logical to use that as a basis.
Even though I created @t{mu4e} for such selfish reasons, @t{mu4e} tries hard Even though I created @t{mu4e} for such selfish reasons, @t{mu4e} tries hard
to be as useful as possible for all its users - suggestions are very to be as useful as possible for all its users - suggestions are very
@ -151,9 +168,9 @@ a mail server. That task is delegated to other tools, such as
messages end up in a Maildir, @t{mu4e} and @t{mu} are happy to deal with them. messages end up in a Maildir, @t{mu4e} and @t{mu} are happy to deal with them.
@t{mu4e} also does @emph{not} implement sending of messages; instead, it @t{mu4e} also does @emph{not} implement sending of messages; instead, it
depends on @inforef{Top,smtpmail,smtpmail}, which is part of @t{emacs}. In depends on @t{smptmail} (@inforef{Top,smtpmail,smtpmail}), which is part of
addition, @t{mu4e} piggybacks on Gnus' message editor; @inforef{Top,Gnus @t{emacs}. In addition, @t{mu4e} piggybacks on Gnus' message editor;
message editor,message}. @inforef{Top,Gnus message editor,message}.
Thus, many of the things an e-mail client traditionally needs to do, are Thus, many of the things an e-mail client traditionally needs to do, are
delegated to other tools. This leaves @t{mu4e} to concentrate on what it does delegated to other tools. This leaves @t{mu4e} to concentrate on what it does
@ -183,8 +200,8 @@ After these steps, @t{mu4e} should be ready to go.
@node Installation @node Installation
@section Installation @section Installation
@t{mu4e} is part of @t{mu} - by installing the latter, the former will be @t{mu4e} is part of @t{mu} - by installing the latter, the former is installed
installed as well. Note, some distributions provide packed versions of as well. Note, some distributions provide packaged versions of
@t{mu}/@t{mu4e}; if you can use those, there's no need to compile anything @t{mu}/@t{mu4e}; if you can use those, there's no need to compile anything
yourself. However, if there are no packages for your distribution, or if you yourself. However, if there are no packages for your distribution, or if you
want to use the latest development versions, you can follow the steps below. want to use the latest development versions, you can follow the steps below.
@ -244,7 +261,7 @@ examples of this.
In order for @t{mu} (and, by extension, @t{mu4e}) to work, you need to have In order for @t{mu} (and, by extension, @t{mu4e}) to work, you need to have
your e-mail messages stored in a Maildir. If you are already using Maildirs, your e-mail messages stored in a Maildir. If you are already using Maildirs,
you are lucky; otherwise, you will need to get your mail there in some way. you are lucky; otherwise, you need to get your mail there in some way.
If you are using some external @abbr{IMAP} or @abbr{POP} server, you can use If you are using some external @abbr{IMAP} or @abbr{POP} server, you can use
tools like @t{getmail}, @t{fetchmail} @t{offlineimap} or @t{isync} to download tools like @t{getmail}, @t{fetchmail} @t{offlineimap} or @t{isync} to download
@ -263,9 +280,9 @@ view}.
You can also have this command run periodically in the background, by setting You can also have this command run periodically in the background, by setting
the variable @code{mu4e-update-interval} to the number of seconds between the variable @code{mu4e-update-interval} to the number of seconds between
these updates. If set to @code{nil}, it will not update at all. If you make these updates. If set to @code{nil}, it won't update at all. If you make
changes to @code{mu4e-update-interval}, @code{mu4e} must be restarted before changes to @code{mu4e-update-interval}, @code{mu4e} must be restarted before
the change will take effect. the changes take effect.
It is possible to get notifications when the indexing process does any updates It is possible to get notifications when the indexing process does any updates
- for example when receiving new mail. See @code{mu4e-index-updated-hook} and - for example when receiving new mail. See @code{mu4e-index-updated-hook} and
@ -367,8 +384,8 @@ A very minimal setup could look something like:
(setq smtpmail-smtp-server "smtp.example.org") (setq smtpmail-smtp-server "smtp.example.org")
@end lisp @end lisp
Since @t{mu4e} uses the same @t{message mode} and @t{smtpmail} that Gnus uses, Since @t{mu4e} (re)uses the same @t{message mode} and @t{smtpmail} that Gnus
many settings for those will also apply to @t{mu4e}. uses, many settings for those also apply to @t{mu4e}.
By default, @t{mu4e} puts a copy of any messages you sent in the folder you By default, @t{mu4e} puts a copy of any messages you sent in the folder you
set for @code{mu4e-sent-folder}. In some case, this may not be what you want - set for @code{mu4e-sent-folder}. In some case, this may not be what you want -
@ -386,7 +403,7 @@ message is copied to the trash-folder (@code{mu4e-trash-folder}), and
For Gmail-IMAP, you could add the following to your settings: For Gmail-IMAP, you could add the following to your settings:
@verbatim @verbatim
;; don't save messages to Sent Messages, Gmail/IMAP will take care of this ;; don't save messages to Sent Messages, Gmail/IMAP takes care of this
(setq mu4e-sent-messages-behavior 'trash) (setq mu4e-sent-messages-behavior 'trash)
@end verbatim @end verbatim
@ -438,7 +455,7 @@ E: Edit B: edit bookmark-search
@end example @end example
@node Main view @node Main view
@chapter Main view @chapter The main view
After you have installed @t{mu4e} (@pxref{Getting started}), you can start it After you have installed @t{mu4e} (@pxref{Getting started}), you can start it
with @code{M-x mu4e}. @t{mu4e} does some checks to ensure everything is set up with @code{M-x mu4e}. @t{mu4e} does some checks to ensure everything is set up
@ -497,15 +514,16 @@ Below, we assume the default key bindings.
First, the @emph{Basics}: First, the @emph{Basics}:
@itemize @itemize
@item @t{[j]ump to some maildir} means that after pressing @key{j}, @item @t{[j]ump to some maildir}: after pressing @key{j} (``jump''),
@t{mu4e} will ask you for a maildir to visit. These are the maildirs you set @t{mu4e} asks you for a maildir to visit. These are the maildirs you set in
in @ref{Basic configuration}. If you choose @key{o} (@emph{other}) or @key{/}, @ref{Basic configuration} and any of your own. If you choose @key{o}
you can choose from @emph{all} maildirs under @code{mu4e-maildir}. (``other'') or @key{/}, you can choose from all maildirs under
@item @t{enter a [s]earch query} means that after pressing @key{s} you will @code{mu4e-maildir}. After choosing a maildir, the message in that maildir are
be asked for a search query, and after entering one, the results will be shown in the @ref{Headers view}.
shown. @xref{Searching}. @item @t{enter a [s]earch query}: after pressing @key{s}, @t{mu4e} asks
@item @t{[C]ompose a new message} means that after pressing @key{C}, you you for a search query, and after entering one, shows the results in the
will be thrown in a message-editing buffer, where you can compose a new message. @ref{Headers view}.
@item @t{[C]ompose a new message}: after pressing @key{C}, you start
@end itemize @end itemize
@node MV Bookmarks @node MV Bookmarks
@ -523,20 +541,20 @@ bookmark. If you'd like to edit the bookmarked query first, use @key{B}.
Finally, there are some @emph{Misc} (miscellaneous) actions: Finally, there are some @emph{Misc} (miscellaneous) actions:
@itemize @itemize
@item @t{[U]pdate email & database} will execute whatever is in @item @t{[U]pdate email & database} executes whatever is in
the variable @code{mu4e-get-mail-command}, and afterwards update the @t{mu} the variable @code{mu4e-get-mail-command}, and afterwards update the @t{mu}
database; @pxref{Indexing your messages}. See @ref{Getting mail} for details. database; @pxref{Indexing your messages}. See @ref{Getting mail} for details.
@item @t{toggle [m]ail sending mode (direct)} will toggle between sending @item @t{toggle [m]ail sending mode (direct)} toggles between sending
mail directly, and queuing it first (for example, when you are offline), and mail directly, and queuing it first (for example, when you are offline), and
@t{[f]lush queued mail} will flush any queued mail. This item is visible only @t{[f]lush queued mail} flushes any queued mail. This item is visible only
if you have actually set up mail-queuing. @ref{Queuing mail}. if you have actually set up mail-queuing. @ref{Queuing mail}.
@item @t{[A]bout mu4e} will give some general information about @t{mu4e}. @item @t{[A]bout mu4e} provides general information about @t{mu4e}.
@item @t{[H]elp} will show help information for this view. @item @t{[H]elp} shows help information for this view.
@item Finally, @t{[q]uit mu4e} will quit @t{mu4e}. @item Finally, @t{[q]uit mu4e} unsurprisingly quits @t{mu4e}.
@end itemize @end itemize
@node Headers view @node Headers view
@chapter Headers view @chapter The headers view
The headers view shows the results of a search query. There is a line for each The headers view shows the results of a search query. There is a line for each
matching message, showing information about it. matching message, showing information about it.
@ -672,14 +690,14 @@ avoiding accidents.
The mark/unmark commands support the current @emph{region} (i.e., selection) The mark/unmark commands support the current @emph{region} (i.e., selection)
-- so, for example, if you the select ('mark' in emacs lingo) a number of -- so, for example, if you the select ('mark' in emacs lingo) a number of
message (like you would select text in a buffer) and then press @key{DEL}, all message (like you would select text in a buffer) and then press @key{DEL}, all
selected message will be marked for deletion. selected message is marked for deletion.
You can mark all messages that match a certain pattern with @key{%}. In You can mark all messages that match a certain pattern with @key{%}. In
addition, you can mark all messages in the current thread (@key{T}) or addition, you can mark all messages in the current thread (@key{T}) or
sub-thread (@key{t}). sub-thread (@key{t}).
When you try to do a new search, or refresh the headers buffer while you still When you try to do a new search, or refresh the headers buffer while you still
have marked messages, normally you will be asked what to do with those marks have marked messages, normally you are asked what to do with those marks
-- whether to @emph{apply} them before leaving, or @emph{ignore} them. This -- whether to @emph{apply} them before leaving, or @emph{ignore} them. This
behavior can be influenced with the variable behavior can be influenced with the variable
@code{mu4e-headers-leave-behavior} -- see its documentation. @code{mu4e-headers-leave-behavior} -- see its documentation.
@ -725,7 +743,7 @@ on the message at point. You can specify these actions using the variable
@code{mu4e-headers-actions}. Refer to @ref{Actions} for details. @code{mu4e-headers-actions}. Refer to @ref{Actions} for details.
@t{mu4e} defines some default actions. One of this those is for @t{mu4e} defines some default actions. One of this those is for
@emph{capturing} a message: @key{a c} will 'capture' the current @emph{capturing} a message: @key{a c} 'captures' the current
message. Next, when you're editing some message, you can include the message. Next, when you're editing some message, you can include the
previously captured message as an attachment, using previously captured message as an attachment, using
@code{mu4e-compose-attach-captured-message}. @code{mu4e-compose-attach-captured-message}.
@ -766,7 +784,7 @@ You can change the selected window from the headers-view to the message-view
and vice-versa with @code{mu4e-select-other-view}, bound to @key{y}. and vice-versa with @code{mu4e-select-other-view}, bound to @key{y}.
@node Message view @node Message view
@chapter Message view @chapter The message view
@menu @menu
* MSGV Overview:: * MSGV Overview::
@ -781,8 +799,8 @@ and vice-versa with @code{mu4e-select-other-view}, bound to @key{y}.
@node MSGV Overview @node MSGV Overview
@section Overview @section Overview
After selecting a message in the @ref{Headers view}, it will be shown in the After selecting a message in the @ref{Headers view}, it appears in the message
message view, for example: view, for example:
@verbatim @verbatim
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
@ -890,7 +908,7 @@ g go to (visit) numbered URL (using `browse-url')
(or: <mouse-1> or M-RET with point on url) (or: <mouse-1> or M-RET with point on url)
e extract (save) attachment (asks for number) e extract (save) attachment (asks for number)
(or: <mouse-2> or S-RET with point on attachment) (or: <mouse-2> or S-RET with point on attachment)
C-u e will extract multiple attachments C-u e extracts multiple attachments
o open attachment (asks for number) o open attachment (asks for number)
(or: <mouse-1> or M-RET with point on attachment) (or: <mouse-1> or M-RET with point on attachment)
@ -929,7 +947,7 @@ variable @code{mu4e-attachment-dir}, for example:
@end lisp @end lisp
If you want to extract multiple attachments at once, you can do so by If you want to extract multiple attachments at once, you can do so by
prefixing the extracting command by @key{C-u}; so @key{C-u e} will ask you for prefixing the extracting command by @key{C-u}; so @key{C-u e} asks you for
a range of attachments to extract (for example, 1 3-6 8). Range @t{a} is a a range of attachments to extract (for example, 1 3-6 8). Range @t{a} is a
shortcut for @emph{all} attachments. shortcut for @emph{all} attachments.
@ -965,7 +983,7 @@ If there is only an html-version, or if the plain-text version is too short in
comparison with the html part, @t{mu4e} tries to convert the html into comparison with the html part, @t{mu4e} tries to convert the html into
plain-text for display. The default way to do that is to use the Emacs plain-text for display. The default way to do that is to use the Emacs
built-in @code{html2text} function, but if you set the variable built-in @code{html2text} function, but if you set the variable
@code{mu4e-html2text-command} to some external program, that program will be @code{mu4e-html2text-command} to some external program, that program is
used. This program is expected to take html from standard input and write used. This program is expected to take html from standard input and write
plain text in @t{utf-8} encoding on standard output. plain text in @t{utf-8} encoding on standard output.
@ -992,6 +1010,12 @@ message over the html version. You can change this by setting
@node MSGV Crypto @node MSGV Crypto
@section Crypto @section Crypto
The @t{mu4e} message view supports decryption of encrypted messages, as well
as verification of signatures. For signing/encrypting messages your outgoing
messages, see @ref{Signing and encrypting}.
Currently, only PGP/MIME is supported; PGP-inline and S/MIME are not.
@subsection Decryption @subsection Decryption
@anchor{Decryption} @anchor{Decryption}
@ -1002,14 +1026,15 @@ addition, @t{gnupg-agent} must be running; thankfully, in most mainstream
Linux/Unix desktop environments, this should work automatically. Linux/Unix desktop environments, this should work automatically.
You can influence how @t{mu4e} should deal with encrypted messages using You can influence how @t{mu4e} should deal with encrypted messages using
@code{mu4e-decryption-policy}. If you set it to @t{t}, @t{mu4e} will attempt to @code{mu4e-decryption-policy}. If you set it to @t{t}, @t{mu4e} attempts to
decrypt messages automatically; this is the default. If you set it to @t{nil}, decrypt messages automatically; this is the default. If you set it to @t{nil},
@t{mu4e} will @emph{not} attempt to decrypt anything, and finally if you set @t{mu4e} won't @emph{not} attempt to decrypt anything, and finally if you set
it to @t{'ask}, it asks you each time when encountering an encrypted message. it to @t{'ask}, it asks you what to do, each time an encrypted message is
encountered.
When opening an encrypted message, @t{mu} consults @t{gpg-agent} to see When opening an encrypted message, @t{mu} consults @t{gpg-agent} to see
whether it already has unlocked the key needed to decrypt the message; if not, whether it already has unlocked the key needed to decrypt the message; if not,
it will prompt us for a password (typically with a separate top-level it prompts us for a password (typically with a separate top-level
window). This is only needed once per session. window). This is only needed once per session.
@subsection Verifying signatures @subsection Verifying signatures
@ -1030,7 +1055,7 @@ Signature: unverified (Details)
@end verbatim @end verbatim
You can see the details of the signature verification by activating the You can see the details of the signature verification by activating the
@t{Details} or pressing @key{v}. This will pop-up a little window with the @t{Details} or pressing @key{v}. This pops up a little window with the
details of the signatures found and whether they could be verified or not. details of the signatures found and whether they could be verified or not.
For more information, please see the @t{mu-verify} manual page. For more information, please see the @t{mu-verify} manual page.
@ -1051,8 +1076,8 @@ By default, @t{mu4e} already offers a few useful actions for attachments:
@itemize @itemize
@item @t{open-with} (@key{w}): open the attachment with some arbitrary @item @t{open-with} (@key{w}): open the attachment with some arbitrary
program. For example, suppose you have received a message with a picture program. For example, suppose you have received a message with a picture
attachment; then, @t{A w 1 RET gimp RET} will open that attachment in The attachment; then, @t{A w 1 RET gimp RET} opens that attachment in @emph{The
Gimp. Gimp}.
@item @t{pipe} (@key{|}: process the attachment with some Unix shell-pipe and @item @t{pipe} (@key{|}: process the attachment with some Unix shell-pipe and
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
@ -1069,7 +1094,7 @@ For more information on setting up actions and how to define them, see
@node Editor view @node Editor view
@chapter Editor view @chapter The editor view
Writing e-mail messages takes place in the Editor View. @t{mu4e}'s editor view Writing e-mail messages takes place in the Editor View. @t{mu4e}'s editor view
builds on top of Gnu's @t{message-mode}. Most of the @t{message-mode} builds on top of Gnu's @t{message-mode}. Most of the @t{message-mode}
@ -1130,7 +1155,7 @@ If you want use @t{mu4e} as the default program for sending mail, please see
other interesting topics: @ref{Citations with mu-cite} and @ref{Maintaining an other interesting topics: @ref{Citations with mu-cite} and @ref{Maintaining an
address-book with org-contacts}. address-book with org-contacts}.
Normally, @t{mu4e} will @emph{bury} the message buffer after sending; if you 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 want to kill the buffer instead, add something like the following to your
configuration: configuration:
@ -1159,8 +1184,8 @@ buffer. Once the number of matches gets below this number, one is selected
@subsection Limiting the number of addresses @subsection Limiting the number of addresses
If you have a lot of mail, especially from mailing lists and the like, there If you have a lot of mail, especially from mailing lists and the like, there
will be @emph{many} e-mail adresses, most of which are unlikely to be useful are @emph{many} e-mail addresses, most of which are unlikely to be useful when
when auto-completing. auto-completing.
So, @t{mu4e} attempts to limit the number of e-mail addresses in the So, @t{mu4e} attempts to limit the number of e-mail addresses in the
completion pool by filter the ones that are most likely to be relevant. The completion pool by filter the ones that are most likely to be relevant. The
@ -1246,18 +1271,18 @@ message is fully formed when this hook runs. For example, to add a
@node Signing and encrypting @node Signing and encrypting
@section Signing and encrypting @section Signing and encrypting
Signing and encrypting of messages is possible using @ref{(emacs-mime) Signing and encrypting of messages is possible using @t{emacs-mime}
Composing}, most easily accessed through the @t{Attachments}-menu while (@inforef{Composing,,emacs-mime Composing}), most easily accessed through the
composing a message, or functions like @code{mml-secure-message-encrypt-pgp}, @t{Attachments}-menu while composing a message, or functions like
@code{mml-secure-message-sign-pgp}. @code{mml-secure-message-encrypt-pgp}, @code{mml-secure-message-sign-pgp}.
The support for encryption and signing is @emph{independent} of the support The support for encryption and signing is @emph{independent} of the support
for their counterparts, decrypting and signature verification; even if your for their counterparts, decrypting and signature verification (as discussed in
@t{mu4e} does have support for the latter two, you can still sign/encrypt @ref{MSGV Crypto}); even if your @t{mu4e} does have support for the latter
messages. two, you can still sign/encrypt messages.
Note however that decryption and signature verification only works for Currently, decryption and signature verification only works for PGP/MIME;
PGP/MIME; inline-PGP and S/MIME are currently not supported. inline-PGP and S/MIME are not supported.
@node Queuing mail @node Queuing mail
@section Queuing mail @section Queuing mail
@ -1290,7 +1315,7 @@ directory for indexing, which makes sense since it contains @t{smtpmail}
meta-data rather than 'normal' messages; see the @t{mu-mkdir} and @t{mu-index} meta-data rather than 'normal' messages; see the @t{mu-mkdir} and @t{mu-index}
man pages for details. man pages for details.
@emph{Warning}: when you switch on queued-mode, your messages will not reach @emph{Warning}: when you switch on queued-mode, your messages won't reach
their destination until you switch it off again; so, be careful not to do this their destination until you switch it off again; so, be careful not to do this
accidentally. accidentally.
@ -1397,11 +1422,11 @@ definition of the default bookmarks is instructive here:
("date:today..now" "Today's messages" ?t) ("date:today..now" "Today's messages" ?t)
("date:7d..now" "Last 7 days" ?w) ("date:7d..now" "Last 7 days" ?w)
("mime:image/*" "Messages with images" ?p)) ("mime:image/*" "Messages with images" ?p))
"A list of pre-defined queries; these will show up in the main "A list of pre-defined queries; these show up in the main
screen. Each of the list elements is a three-element list of the screen. Each of the list elements is a three-element list of the
form (QUERY DESCRIPTION KEY), where QUERY is a string with a mu form (QUERY DESCRIPTION KEY), where QUERY is a string with a mu
query, DESCRIPTION is a short description of the query (this will query, DESCRIPTION is a short description of the query (this
show up in the UI), and KEY is a shortcut key for the query.") shows up in the UI), and KEY is a shortcut key for the query.")
@end lisp @end lisp
You can replaces these, or add your own items, by putting in your You can replaces these, or add your own items, by putting in your
@ -1415,7 +1440,7 @@ This prepends your bookmark to the list, and assigns the key @key{b} to it. If
you want to @emph{append} your bookmark, you can use @code{t} as the third you want to @emph{append} your bookmark, you can use @code{t} as the third
argument to @code{add-to-list}. argument to @code{add-to-list}.
In the various @t{mu4e} views, pressing @key{b} will list all the bookmarks In the various @t{mu4e} views, pressing @key{b} lists all the bookmarks
defined in the echo area, with the shortcut key highlighted. So, to invoke the defined in the echo area, with the shortcut key highlighted. So, to invoke the
bookmark we just defined (to get the list of "Big Messages"), all you need to bookmark we just defined (to get the list of "Big Messages"), all you need to
type is @key{bb}. type is @key{bb}.
@ -1508,11 +1533,10 @@ search, you want to narrow things down to only those messages that have
attachments. attachments.
Now, @code{mu4e-headers-search-narrow} (@key{/}) comes in handy. That function Now, @code{mu4e-headers-search-narrow} (@key{/}) comes in handy. That function
asks for an additional search pattern, which will be appended to the current asks for an additional search pattern, which is appended to the current search
search query, in effect getting you the subset of the currently shown headers query, in effect getting you the subset of the currently shown headers that
that also match this extra search pattern. @key{\} takes you back to the also match this extra search pattern. @key{\} takes you back to the previous
previous query, so, effectively 'widens' the search if you have just narrowed query, so, effectively 'widens' the search if you have just narrowed it.
it.
Technically, narrowing the results of query @t{x} with expression @t{y} Technically, narrowing the results of query @t{x} with expression @t{y}
implies doing a search @t{(x) AND y}. implies doing a search @t{(x) AND y}.
@ -1534,8 +1558,8 @@ Marking can happen in both the @ref{Headers view} and the @ref{Message view}.
* What to mark for:: * What to mark for::
* Executing the marks:: * Executing the marks::
* Leaving the headers buffer:: * Leaving the headers buffer::
* Built-in marking functions::
* Custom mark functions:: * Custom mark functions::
* Some marking examples::
@end menu @end menu
@node Selecting messages for marking @node Selecting messages for marking
@ -1588,7 +1612,7 @@ you can disable this by setting @code{mu4e-headers-show-target} to @code{nil}.
@t{deferred} is a special kind of mark; you can use it to mark some messages, @t{deferred} is a special kind of mark; you can use it to mark some messages,
and then decide later what mark to use for them. At any time, you can set the and then decide later what mark to use for them. At any time, you can set the
actual mark with @code{mu4e-mark-resolve-deferred-marks} (@key{#}), or actual mark with @code{mu4e-mark-resolve-deferred-marks} (@key{#}), or
@t{mu4e} will ask you for it when you execute the marks (@key{x}). @t{mu4e} asks you for it when you execute the marks (@key{x}).
@node Executing the marks @node Executing the marks
@section Executing the marks @section Executing the marks
@ -1599,9 +1623,24 @@ After you have marked some messages, you can execute them with @key{x}
@node Leaving the headers buffer @node Leaving the headers buffer
@section Leaving the headers buffer @section Leaving the headers buffer
When you quit the buffer (for example, but doing a new search) with marks being When you quit or update a headers buffer (for example, by doing a new search)
present, @t{mu4e} asks you what to do with them, depending on the value of the that has marked messages, @t{mu4e} asks you what to do with them, depending on
variable @code{mu4e-headers-leave-behavior} -- see its documentation. the value of the variable @code{mu4e-headers-leave-behavior} -- see its
documentation.
@node Built-in marking functions
@section Built-in marking functions
Some examples of @t{mu4e}'s built-in marking functions.
@itemize
@item @emph{Mark the message at point for trashing}: press @key{d}
@item @emph{Mark all messages in the buffer as unread}: press @key{C-x h o}
@item @emph{Delete the messages in the current thread}: press @key{T D}
@item @emph{Mark messages with a subject matching ``hello'' for flagging}:
press @key{% + s hello RET}. Note, the menu system helps you here; all you
need to remember is @key{%} for @code{mu4e-headers-mark-pattern}.
@end itemize
@node Custom mark functions @node Custom mark functions
@section Custom mark functions @section Custom mark functions
@ -1615,16 +1654,15 @@ Custom mark functions should be appended to the list
@code{mu4e-headers-custom-markers}. Each of the elements of this list @code{mu4e-headers-custom-markers}. Each of the elements of this list
('markers') is a list with three (or two) elements: ('markers') is a list with three (or two) elements:
@itemize @itemize
@item The name of the marker - as short string describing this marker. The @item The name of the marker - a short string describing this marker. The
first character of this string will also be its shortcut, so these should be first character of this string determines its shortcut, so these should be
unique. unique. If necessary, simply prefix the name with a unique character.
@item a predicate function taking two arguments @t{msg} and @t{param}- first, @item a predicate function taking two arguments @t{msg} and @t{param}. @t{msg} is the message
@t{msg}, which is the message plist (see @ref{The message s-expression} and @t{param} is a parameter
plist (see @ref{The message s-expression}); second is a parameter provided by provided by the third of the marker elements (see the next item). The
the third of the marker elements (next item). The predicate function should predicate function should return non-nil if the message matches.
return non-nil if the messages matches. @item (optionally) a function that is evaluated once, and the result is passed as a
@item (optionally) a function that is evaluated once, and its result is passed as a parameter to the predicate function. This is useful when user-input is needed.
parameter to the predicate function. This is useful to ask for user-input.
@end itemize @end itemize
So, let's look at an example: suppose we want to match all messages that have So, let's look at an example: suppose we want to match all messages that have
@ -1633,37 +1671,25 @@ more than @emph{n} recipients. We could do it like this:
@lisp @lisp
(add-to-list 'mu4e-headers-custom-markers (add-to-list 'mu4e-headers-custom-markers
'("More than n recipients" '("More than n recipients"
(lambda (msg n) (> (+ (length (mu4e-message-field msg :to)) (lambda (msg n)
(length (mu4e-message-field msg :cc))) n)) (> (+ (length (mu4e-message-field msg :to))
(length (mu4e-message-field msg :cc))) n))
(lambda () (lambda ()
(read-number "Match messages with more recipients than: "))) t) (read-number "Match messages with more recipients than: "))) t)
@end lisp @end lisp
After evaluating this, pressing @key{&} should let you choose the custom After evaluating this, pressing @key{&} lets you choose the custom marker
marker function, and ask you for the parameters. function, and ask you for the parameters.
As you can see, it's not very hard to define simple functions to match As you can see, it's not very hard to define simple functions to match
messages. There are some more examples in the defaults for messages. There are some more examples in the defaults for
`mu4e-headers-custom-markers'; see @file{mu4e-headers.el}. `mu4e-headers-custom-markers'; see @file{mu4e-headers.el}.
@node Some marking examples
@section Some marking examples
Let's look at some examples, assuming the default key-bindings.
@itemize
@item @emph{Mark the message at point for trashing}: press @key{d}
@item @emph{Mark all messages in the buffer as unread}: press @key{C-x h o}
@item @emph{Delete the messages in the current thread}: press @key{T D}
@item @emph{Mark messages with a subject matching ``hello'' for flagging}:
press @key{% + s hello RET}. Note, the menu system helps you here; all you
need to remember is @key{%} for @code{mu4e-headers-mark-pattern}.
@end itemize
@node Dynamic folders @node Dynamic folders
@chapter Dynamic folders @chapter Dynamic folders
In @ref{Folders} we gave an example of setting the standard folders: @ref{Folders} showed how to set the standard folders:
@lisp @lisp
(setq (setq
mu4e-sent-folder "/sent" ;; folder for sent messages mu4e-sent-folder "/sent" ;; folder for sent messages
@ -1672,13 +1698,15 @@ In @ref{Folders} we gave an example of setting the standard folders:
mu4e-refile-folder "/archive") ;; saved messages mu4e-refile-folder "/archive") ;; saved messages
@end lisp @end lisp
In some case, these static folders may not suffice, and you might want to In some cases having such static folders may not suffice - you might want to
change the folders depending on the context. For example, we may have change the folders depending on the context. For example, the folder for
different folders for refiling, based on the sender of the message. refiling could vary, based on the sender of the message.
To enable this, instead of setting the standard folders to constant strings, For this, instead of setting the standard folders to a string, you can set
you can set them to be a @emph{function} that takes a message as parameter, them to be a @emph{function} that takes a message as parameter, and returns
and returns the desired folder name. the desired folder name.
In this chapter we show how to do that.
@menu @menu
* Smart refiling:: * Smart refiling::
@ -1737,8 +1765,20 @@ matches the regular expression.
Using the same mechanism, you can set special sent-, trash-, and draft-folders Using the same mechanism, you can set special sent-, trash-, and draft-folders
for messages. The message-parameter you receive for sent and draft folder is for messages. The message-parameter you receive for sent and draft folder is
the @emph{original} message, that is, the message you reply to, or forward. If the @emph{original} message, that is, the message you reply to, or forward. If
there is not such message (for example when composing a new message) the there is no such message (for example when composing a new message) the
message parameter will be @t{nil}. message parameter is @t{nil}.
Let's look at another example. Suppose you want a different trash folder for
work-email. You can do so with something like the following:
@lisp
(setq mu4e-sent-folder
(lambda (msg)
(if (mu4e-message-contact-field-matches msg :to "me@@work.com")
"/trash-work"
"/trash-private")))
@end lisp
@node Actions @node Actions
@chapter Actions @chapter Actions
@ -1815,7 +1855,7 @@ Suppose we would like to inspect the number of recipients for a message in the
'("Number of recipients" . show-number-of-recipients) t) '("Number of recipients" . show-number-of-recipients) t)
@end lisp @end lisp
After activating this, @key{a n} in the headers view will show the number of After activating this, @key{a n} in the headers view shows the number of
recipients for the message at point. recipients for the message at point.
@node Adding an action in the message view @node Adding an action in the message view
@ -1842,7 +1882,7 @@ Finally, let's define an action for an attachment. As mentioned,
attachment-action function take @emph{2} arguments, the message and the attachment-action function take @emph{2} arguments, the message and the
attachment number to use. attachment number to use.
The following will count the number of lines in an attachment, and define The following counts the number of lines in an attachment, and define
@key{n} as the shortcut key (the 'n' is prefixed to the description). @key{n} as the shortcut key (the 'n' is prefixed to the description).
@lisp @lisp
@ -1862,8 +1902,7 @@ functions are internal, and which are usable for others as well.
To help a bit with this, all functions and variables in @t{mu4e} marked for To help a bit with this, all functions and variables in @t{mu4e} marked for
@emph{internal} use have the prefix @t{mu4e~}, while all the public ones use @emph{internal} use have the prefix @t{mu4e~}, while all the public ones use
@t{mu4e-}. The @t{~} was chosen because its ascii-code is after all the @t{mu4e-}. The @t{~} was chosen because its ascii-code is after all the
letters, so they will only appear at the end of completion buffers and the letters, so they appear only at the end of completion buffers and the like.
like.
Functions that start with @t{mu4e-view-} and @t{mu4e-headers-} should be Functions that start with @t{mu4e-view-} and @t{mu4e-headers-} should be
called only from that particular context (the message view and the headers called only from that particular context (the message view and the headers
@ -1901,7 +1940,7 @@ with other tools.
@section Setting the default emacs mail program @section Setting the default emacs mail program
@t{emacs} allows you to select an e-mail program as the default program it @t{emacs} allows you to select an e-mail program as the default program it
will use when you press @key{C-x m} (@code{compose-mail}), call uses when you press @key{C-x m} (@code{compose-mail}), call
@code{report-emacs-bug} and so on. @code{report-emacs-bug} and so on.
If you want to use @t{mu4e} for this, you do so by adding the following to If you want to use @t{mu4e} for this, you do so by adding the following to
@ -1911,7 +1950,7 @@ your configuration:
(setq mail-user-agent 'mu4e-user-agent) (setq mail-user-agent 'mu4e-user-agent)
@end lisp @end lisp
At the present time, support is still experimental. At the present time, support is experimental.
@node Creating org-mode links @node Creating org-mode links
@section Creating org-mode links @section Creating org-mode links
@ -1924,7 +1963,7 @@ can set it up by adding it to your configuration:
@end lisp @end lisp
After this, you can use the normal @t{org-mode} mechanisms to store links: After this, you can use the normal @t{org-mode} mechanisms to store links:
@t{M-x org-store-link} will store a link to a particular message when you're @t{M-x org-store-link} stores a link to a particular message when you're
in @ref{Message view}, and a link to a query when you are in @ref{Headers in @ref{Message view}, and a link to a query when you are in @ref{Headers
view}. view}.
@ -1934,7 +1973,7 @@ org-agenda-open-link} in agenda buffers, or @t{M-x org-open-at-point}
elsewhere - both are typically bound to @kbd{C-c C-o}. elsewhere - both are typically bound to @kbd{C-c C-o}.
@node Rich-text messages with org-mode @node Rich-text messages with org-mode
@section Rich-text messages with org-mode (EXPERIMENTAL) @section Rich-text messages with org-mode
@t{org-mode} has some nice facilities for editing texts -- creating lists, @t{org-mode} has some nice facilities for editing texts -- creating lists,
tables, mathematical formulae etc. In addition, it can convert them to tables, mathematical formulae etc. In addition, it can convert them to
@ -1979,9 +2018,10 @@ mode-switching between @t{org-mode} and @t{mu4e-compose-mode} is
@subsection Some caveats @subsection Some caveats
It is better @emph{not} to put @t{org-mu4e-compose-org-mode} in a mode-hook It is better @emph{not} to put @t{org-mu4e-compose-org-mode} in a mode-hook
for @t{mu4e-compose-mode}, since that makes it impossible to shut it off for @t{mu4e-compose-mode}, since that makes it impossible to shut it off again
again@footnote{This is because @t{mu4e-compose-mode} in invoked again for the particular message@footnote{This is because @t{mu4e-compose-mode} in
internally when switching, which re-triggers the hook function.} invoked again internally when switching, which re-triggers the
hook-function.}.
In addition, currently the rich-text code does not work well with the In addition, currently the rich-text code does not work well with the
MIME-functionality, such as adding attachments or signing/encrypting MIME-functionality, such as adding attachments or signing/encrypting
@ -2016,13 +2056,13 @@ view and the message view, using the @t{org-capture} mechanism. Note, the
@node Getting new mail notifications with Sauron @node Getting new mail notifications with Sauron
@section Getting new mail notifications with Sauron @section Getting new mail notifications with Sauron
The emacs-package 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{http://http://marmalade-repo.org/}} (by the same author) can be used at @url{http://http://marmalade-repo.org/}} (by the same author) can be used
to get notifications about new mails. to get notifications about new mails.
If you put something like the below script in your @t{crontab} (or have some If you put something like the below script in your @t{crontab} (or have some
other way of having it execute every @emph{n} minutes, you will receive other way of having it execute every @emph{n} minutes) you receive
notifications in the sauron-buffer when new messages arrive. notifications in the sauron-buffer when new messages arrive.
@verbatim @verbatim
@ -2057,7 +2097,8 @@ Note, you should put something like:
@lisp @lisp
(setq sauron-dbus-cookie t) (setq sauron-dbus-cookie t)
@end lisp @end lisp
in your setup, which allows the script to find the D-Bus session bus. in your setup, which allows the script to find the D-Bus session bus, even
when running outside its context.
@node Speedbar support @node Speedbar support
@section Speedbar support @section Speedbar support
@ -2068,12 +2109,12 @@ lists your bookmarks and maildir folders and allows for one-click access to
them. them.
@t{mu4e} loads @t{mu4e-speedbar} automatically; all you need to do to activate @t{mu4e} loads @t{mu4e-speedbar} automatically; all you need to do to activate
it is @code{M-x speedbar}. Then, when then going to the @ref{Main view}, the it is @code{M-x speedbar}. Then, when then switching to the @ref{Main view},
speedbar-frame will be updated with your bookmarks and maildirs. For speed the speedbar-frame is updated with your bookmarks and maildirs. For speed
reasons, the list of maildirs is determined when @t{mu4e} starts; if the list reasons, the list of maildirs is determined when @t{mu4e} starts; if the list
of maildirs changes while @t{mu4e} is running, you need to restart @t{mu4e} to of maildirs changes while @t{mu4e} is running, you need to restart @t{mu4e} to
reflect those changes in the speedbar and in other places that use this list, have those changes reflected in the speedbar and in other places that use this
such as auto-completion when jumping to a maildir. list, such as auto-completion when jumping to a maildir.
@code{mu4e-speedbar} was contributed by Antono Vasiljev. @code{mu4e-speedbar} was contributed by Antono Vasiljev.
@ -2100,12 +2141,13 @@ following to make it work with @t{mu4e}:
@node Attaching files with dired @node Attaching files with dired
@section Attaching files with @t{dired} @section Attaching files with @t{dired}
It's possible to attach files to @t{mu4e} messages, using the following steps It's possible to attach files to @t{mu4e} messages using @t{dired}
(based on a post on the @t{mu-discuss} mailing list by Stephen Eglen). (@inforef{Dired,,emacs}), using the following steps (based on a post on the
@t{mu-discuss} mailing list by Stephen Eglen).
To prepare for this, you need a special version of the @code{gnus-dired-mail-buffers} To prepare for this, you need a special version of the
function so it understands @t{mu4e} buffers as well; so put in your @code{gnus-dired-mail-buffers} function so it understands @t{mu4e} buffers as
configuration: well; so put in your configuration:
@lisp @lisp
(require 'gnus-dired) (require 'gnus-dired)
@ -2166,7 +2208,7 @@ make sure mu4e is in your load-path
;; you use e.g. 'mu mkdir' to make the Maildirs if they don't ;; you use e.g. 'mu mkdir' to make the Maildirs if they don't
;; already exist ;; already exist
;; below are the defaults; if they do not exist yet, mu4e will offer to ;; below are the defaults; if they do not exist yet, mu4e offers to
;; create them ;; create them
;; (setq mu4e-sent-folder "/sent") ;; (setq mu4e-sent-folder "/sent")
;; (setq mu4e-drafts-folder "/drafts") ;; (setq mu4e-drafts-folder "/drafts")
@ -2446,7 +2488,7 @@ answers.
@item @emph{How can I quickly delete/move/trash a lot of messages?} You can @item @emph{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 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 buffer; the actions you then take (e.g., @key{DEL} for delete, @key{m} for
move and @key{t} for trash) will apply to @emph{all} selected messages. You move and @key{t} for trash) applies to @emph{all} selected messages. You
can also use functions like @code{mu4e-headers-mark-thread} (@key{T}), 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 @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 time, and @code{mu4e-headers-mark-pattern} (@key{%}) to mark all messages
@ -2470,7 +2512,7 @@ and some soundfile, change as needed):
@item @emph{I don't use @t{offlineimap}, @t{fetchmail} etc., I get my mail @item @emph{I don't use @t{offlineimap}, @t{fetchmail} etc., I get my mail
through my own mailserver. What should I use for through my own mailserver. What should I use for
@code{mu4e-get-mail-command}}? Use @t{"true"}. This makes getting mail @code{mu4e-get-mail-command}}? Use @t{"true"}. This makes getting mail
a no-op, but will re-index the messages. a no-op, but the messages are reindexed.
@item @emph{When I try to run @t{mu index} while @t{mu4e} is running I get @item @emph{When I try to run @t{mu index} while @t{mu4e} is running I get
errors like @t{mu: mu_store_new_writable: xapian error 'Unable to get write errors like @t{mu: mu_store_new_writable: xapian error 'Unable to get write
lock on ~/.mu/xapian: already locked'}. What can I do about this?} You get lock on ~/.mu/xapian: already locked'}. What can I do about this?} You get
@ -2482,7 +2524,7 @@ but what you can do is telling @t{mu} to (gracefully) terminate:
sleep 1 sleep 1
mu index mu index
@end verbatim @end verbatim
@t{mu4e} will automatically restart @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{Can I automatically apply the marks on messages when @item @emph{Can I automatically apply the marks on messages when
leaving the headers buffer?} Yes you can -- see the documentation for the leaving the headers buffer?} Yes you can -- see the documentation for the
@ -2492,9 +2534,9 @@ should take you to the right place in this manual.
@item @emph{How can I set @t{mu4e} as the default e-mail client in emacs?} @item @emph{How can I set @t{mu4e} as the default e-mail client in emacs?}
See @ref{Setting the default emacs mail program}. See @ref{Setting the default emacs mail program}.
@item @emph{Can @t{mu4e} use some fancy Unicode characters instead of these @item @emph{Can @t{mu4e} use some fancy Unicode characters instead of these
boring plain-ASCII ones?} Glad you asked! Yes, you can set boring plain-ASCII ones?} Glad you asked! Yes, if you set
@code{mu4e-use-fancy-chars} to @t{t}, and @t{mu4e} will use those fancy @code{mu4e-use-fancy-chars} to @t{t}, @t{mu4e} uses such fancy characters in a
characters in a number of places. number of places.
@end itemize @end itemize
@node Reading messages @node Reading messages
@ -2538,7 +2580,7 @@ You can drag-and-drop from your desktop; alternatively, you can use @t{dired}
prevent that?} prevent that?}
Set @code{mu4e-compose-keep-self-cc} to @t{t} in your configuration. Set @code{mu4e-compose-keep-self-cc} to @t{t} in your configuration.
@item @emph{How can I sign or encrypt messages?} You can do so using emacs' @item @emph{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 MIME-support -- check the @t{Attachments}-menu while composing a message. Also
see @ref{Signing and encrypting}. see @ref{Signing and encrypting}.
@end itemize @end itemize
@ -2634,9 +2676,9 @@ However, with approach, we need to load the entire e-mail @emph{Xapian}
database (in which the message is stored) for each invocation. Wouldn't it be database (in which the message is stored) for each invocation. Wouldn't it be
nicer to keep a running @t{mu} instance around? Indeed, it would - and thus, nicer to keep a running @t{mu} instance around? Indeed, it would - and thus,
the @t{mu server} sub-command was born. Running @t{mu server}, you get a the @t{mu server} sub-command was born. Running @t{mu server}, you get a
sort-of shell, in which you can give commands to @t{mu}, which will then spit sort-of shell, in which you can give commands to @t{mu}, which then spits out
out the results/errors. @t{mu server} is not meant for humans, but it can be the results/errors. @t{mu server} is not meant for humans, but it can be used
used manually, which is great for debugging. manually, which is great for debugging.
@node Reading from the server @node Reading from the server
@section Reading from the server @section Reading from the server
@ -2654,8 +2696,8 @@ leave out a lot of detail, @t{mu4e}-specifics, and look at a bit more generic
approach. 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
@code{start-process}), and then register a filter function for it, which will @code{start-process}), and then register a filter function for it, which is
be invoked whenever the process has some data for us. Something like: invoked whenever the process has some data for us. Something like:
@lisp @lisp
(let ((proc (start-process <arguments>))) (let ((proc (start-process <arguments>)))
@ -2681,10 +2723,10 @@ process and the chunk of output as arguments; in @t{mu4e} it looks something lik
@end lisp @end lisp
@code{<evaluate-expression>} de-multiplexes the s-expression we got. For @code{<evaluate-expression>} de-multiplexes the s-expression we got. For
example, if the s-expression looks like an e-mail message header, it will be example, if the s-expression looks like an e-mail message header, it is
processed by the header-handling function, which will append it to the header processed by the header-handling function, which appends it to the header
list. If the s-expression looks like an error message, it will be reported to list. If the s-expression looks like an error message, it is reported to the
the user. And so on. user. And so on.
The language between frontend and backend is documented in the @t{mu-server} The language between frontend and backend is documented in the @t{mu-server}
man-page. @t{mu4e} can log these communications; you can use @code{M-x man-page. @t{mu4e} can log these communications; you can use @code{M-x
@ -2753,8 +2795,8 @@ about its version. @t{mu server} then responds with a @t{pong} s-expression to
provide this information (this is implemented in @file{mu-cmd-server.c}). provide this information (this is implemented in @file{mu-cmd-server.c}).
We start this sequence when @t{mu4e} is invoked (when the program is We start this sequence when @t{mu4e} is invoked (when the program is
started). It call @t{mu4e-proc-ping}, and registers a (lambda) function for started). It calls @t{mu4e-proc-ping}, and registers a (lambda) function for
@t{mu4e-proc-pong-func}, so it will retrieve the response. @t{mu4e-proc-pong-func}, to handle the response.
@verbatim @verbatim
-> ping -> ping
@ -2762,8 +2804,8 @@ started). It call @t{mu4e-proc-ping}, and registers a (lambda) function for
@end verbatim @end verbatim
When we receive such a @t{pong} (in @file{mu4e-proc.el}), the lambda function When we receive such a @t{pong} (in @file{mu4e-proc.el}), the lambda function
we registered will be called, and it check the version we got from the we registered is called, and it compares the version we got from the @t{pong}
@t{pong} with the version we expected, and raises an error, if they differ. with the version we expected, and raises an error, if they differ.
@node Logging and debugging @node Logging and debugging
@appendix Logging and debugging @appendix Logging and debugging
@ -2776,9 +2818,9 @@ reason, @t{mu4e} can log all these messages. Note that the 'protocol' is
documented to some extent in the @t{mu-server} manpage. documented to some extent in the @t{mu-server} manpage.
You can enable (and disable) logging with @t{M-x mu4e-toggle-logging}. The You can enable (and disable) logging with @t{M-x mu4e-toggle-logging}. The
log-buffer is called @t{*mu4e-log*}, and in the @ref{Main view}, log-buffer is called @t{*mu4e-log*}, and in the @ref{Main view}, @ref{Headers
@ref{Headers view} and @t{Message view}, there's a keybinding @key{$} that view} and @t{Message view}, there's a keybinding @key{$} that takes you
will take you there. You can quit it by pressing @key{q}. there. You can quit it by pressing @key{q}.
Logging can be a bit resource-intensive, so you may not want to leave it on Logging can be a bit resource-intensive, so you may not want to leave it on
all the time. By default, the log only maintains the most recent 1200 lines. all the time. By default, the log only maintains the most recent 1200 lines.
@ -2791,4 +2833,4 @@ Note, @t{mu} itself keeps a log as well, you can find this it in
@include fdl.texi @include fdl.texi
@bye @bye