update documentation

This commit is contained in:
Dirk-Jan C. Binnema 2022-05-06 22:13:18 +03:00
parent 8c3d1ae90a
commit ec500d3ed4
3 changed files with 235 additions and 229 deletions

View File

@ -46,7 +46,7 @@
- the ~verify~ command for checking signatures has been updated, and is more
informative
- new commands ~fields~ and ~flags~ give information about the message fields and
- a new command ~mu fields~ provides information about the message fields and
flags for use in queries. The information is the same information that ~mu~
uses and so stays up to date.
@ -88,12 +88,16 @@
- A new ~defcustom~, ~mu4e-view-open-program~ for starting the appropriate
program for a give file (e.g., ~xdg-open~). There are some reasonable
defaults for various systems.
defaults for various systems. This can also be set to a function.
- For performance testing, you can set the variable
~mu4e-headers-report-render-time~ to ~t~ and ~mu4e~ will report the
search/rendering speed of each query operation.
- As an additional measure to limit the number of contacts that mu4e loads
for auto-completions, there's ~mu4e-compose-complete-max~, which by default
is set to *2000*, so you can auto-complete your 2000 closest friends.
- Removed ~make-mu4e-bookmark~ which was obsoleted in version 1.3.9.
- undo is now supported across message-saves
@ -123,8 +127,8 @@
- =mu4e-proc.el= has been renamed =mu4e-server.el=.
- Between =mu= and =mu4e=, contact cells are now represented as a plist ~(:name
"Foo Bar" :email "foobar@example.com")~ rather than a cons-cell ~("Foo
Bar" . "foobar@example.com").~
"Foo Bar" :email "foobar@example.com")~ rather than a cons-cell ~("Foo
Bar" . "foobar@example.com").~
- Because of all these changes, it is recommended you remove older version

View File

@ -1,6 +1,6 @@
#-*-mode:org-*-
#
# Copyright (C) 2012-2020 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
# Copyright (C) 2012-2022 Dirk-Jan C. Binnema <djcb@djcbsoftware.nl>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -62,6 +62,15 @@ mu extract is the mu command to display and save message parts
(attachments), and open them with other tools.
#END
#BEGIN MU_CONFIG_CMD_FIELDS
#STRING
mu fields
#STRING
mu fields produces a table with all messages fields and flags. This
is useful for writing query expressions.
#END
#BEGIN MU_CONFIG_CMD_FIND
#STRING
mu find [options] <search expression>
@ -91,6 +100,7 @@ is one of:
add - add message to database
cfind - find a contact
extract - extract parts/attachments from messages
fields - show table of all query fields and flags
find - query the message database
help - get help
index - index messages
@ -170,7 +180,6 @@ Run the 'msgs-per-month' script, and pass it the '--textonly' parameter:
$ mu msgs-per-month --textonly
#END
#BEGIN MU_CONFIG_CMD_VERIFY
#STRING
mu verify [options] <msgfile>

View File

@ -12,7 +12,7 @@
@c %**end of header
@copying
Copyright @copyright{} 2012-2020 Dirk-Jan C. Binnema
Copyright @copyright{} 2012-2022 Dirk-Jan C. Binnema
@quotation
Permission is granted to copy, distribute and/or modify this document
@ -55,7 +55,7 @@ Documentation License.''
Welcome to @t{mu4e} @value{VERSION}.
@t{mu4e} (@t{mu}-for-emacs) is an e-mail client for GNU Emacs version
24.4 or higher, built on top of the
25.3 or newer, built on top of the
@t{mu}@footnote{@url{https://www.djcbsoftware.nl/code/mu}} e-mail search
engine. @t{mu4e} is optimized for quickly processing large amounts of
e-mail.
@ -63,8 +63,8 @@ e-mail.
Some of its highlights:
@itemize
@item Fully search-based: there are no folders@footnote{that is, instead of
folders, you use queries that match messages in a particular folder}, only
queries.
folders, you use queries that match messages in a particular folder},
only queries.
@item Fully documented, with example configurations
@item User-interface optimized for speed, with quick key strokes for common actions
@item Support for non-English languages (so ``angstrom'' matches ``Ångström'')
@ -81,8 +81,8 @@ basic configuration and explain its daily use. We also show you how you
can customize @t{mu4e} for your special needs.
At the end of the manual, there are some example configurations, to get
you up to speed quickly: @ref{Example configs}. There's also a
section with answers to frequently asked questions, @ref{FAQ}.
you up to speed quickly: @ref{Example configs}. There's also a section
with answers to frequently asked questions, @ref{FAQ}.
@menu
* Introduction:: Where to begin
@ -167,9 +167,7 @@ delegated to other tools, such as
@t{fetchmail}@footnote{@url{http://www.fetchmail.info/}}; As long as
the messages end up in a maildir, @t{mu4e} and @t{mu} are happy to
deal with them.
@item @t{mu4e} also does @emph{not} implement sending of messages; instead, it
depends on @t{smtpmail} (@inforef{Top,,smtpmail}), which is part of
Emacs. In addition, @t{mu4e} piggybacks on Gnus' message editor;
@item @t{mu4e} also does @emph{not} implement sending of messages; instead, it depends on @t{smtpmail} (@inforef{Top,,smtpmail}), which is part of Emacs. In addition, @t{mu4e} piggybacks on Gnus' message editor;
@inforef{Top,,message}.
@end itemize
@ -218,6 +216,7 @@ After these steps, @t{mu4e} should be ready to go!
@menu
* Requirements:: What is needed
* Versions:: Available stable and development versions
* Installation:: How to install @t{mu} and @t{mu4e}
* Getting mail:: Getting mail from a server
* Initializing the message store:: Settings things up
@ -234,10 +233,9 @@ After these steps, @t{mu4e} should be ready to go!
@section Requirements
@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
FreeBSD, and even on MS-Windows (with Cygwin). Emacs 24 or
higher is required, as well as
Xapian@footnote{@url{https://xapian.org/}} and
Unix-like systems, including many Linux distributions, OS X and FreeBSD,
and even on MS-Windows (with Cygwin). Emacs 25.3 or higher is required,
as well as Xapian@footnote{@url{https://xapian.org/}} and
GMime@footnote{@url{http://spruce.sourceforge.net/gmime/}}.
@t{mu} has optional support for both versions 2.2 and 3.0 of the Guile
@ -245,17 +243,32 @@ GMime@footnote{@url{http://spruce.sourceforge.net/gmime/}}.
require GTK+ 3.x and Webkit.
If you intend to compile @t{mu} yourself, you need to have the typical
development tools, such as C and C++ compilers (both @command{gcc} and
@command{clang} should work), GNU Autotools and @command{make}, and
the development packages for GMime 3.x, GLib and Xapian. Optionally,
you also need the development packages for GTK+, Webkit and Guile.
development tools, such as C and C++17 compilers (both @command{gcc} and
@command{clang} should work), @command{meson} and @command{make}, and
the development packages for GMime 3.x, GLib and Xapian. Optionally, you
also need the development packages for GTK+, Webkit and Guile.
@node Versions
@section Versions
The stable (release) versions have even minor version numbers, while the
development versions have odd ones. So, for example, 1.6.10 is a stable
version, while the 1.7.15 is the development version.
The stable versions only receive bug fixes after being released, while
the development versions get new features, fixes, and, perhaps, bugs,
and are meant for people with a tolerance for that.
There is support for one release branch; so, when the 1.8 release is
available (and a new 1.9 development series start), no more changes are
expected for the 1.6 releases.
@node Installation
@section Installation
@t{mu4e} is part of @t{mu} --- by installing the latter, the former is
installed as well. Some Linux distributions provide packaged versions
of @t{mu}/@t{mu4e}; if you can use those, there is no need to compile
installed as well. Some Linux distributions provide packaged versions of
@t{mu}/@t{mu4e}; if you can use those, there is no need to compile
anything yourself. However, if there are no packages for your
distribution, if they are outdated, or if you want to use the latest
development versions, you can follow the steps below.
@ -281,34 +294,6 @@ $ sudo apt-get install libgmime-3.0-dev libxapian-dev emacs
$ sudo yum install gmime30-devel xapian-core-devel emacs
@end example
@subsection Building on Msys2
@example
# 1) install makepkg tool
pacman -S base-devel msys-devel gcc git
# 2) clone packages repo
cd ~
git clone https://github.com/msys2-unofficial/MSYS2-packages.git --depth=1
# make and install dependencies
cd ~/MSYS2-packages/xapian-core
makepkg -s
pacman -U xapian-core-1.4.15-1-x86_64.pkg.tar.xz
cd ~/MSYS2-packages/gmime3
makepkg -s
pacman -U gmime3-devel-3.2.6-1-x86_64.pkg.tar.xz
# 4) make and install mu from git (changes versions as needed)
cd ~/MSYS2-packages/mu
makepkg -sfp PKGBUILD-git
pacman -U mu-git-2020-03-01-r4854.17f38dc4-1-x86_64.pkg.tar.xz
@end example
@subsection Building from a release tarball
@anchor{Building from a release tarball}
@ -339,16 +324,15 @@ $ git clone git://github.com/djcb/mu.git
$ cd mu
$ ./autogen.sh
$ make
$ make install install
# ^^^ perhaps with 'sudo'
$ make install
@end example
After that, @t{make} (which is just @t{ninja -C build} under the
covers) should be enough for rebuilding.
After that, @t{make} (which is just @t{ninja -C build} under the covers)
should be enough for rebuilding.
Alternatively, you can also use the (deprecated) @t{autotools} build setup,
assuming you have autotools (@t{autoconf}, @t{automake}, @t{libtool},
@t{texinfo}) installed:
Alternatively, you can also use the (now deprecated) @t{autotools} build
setup, assuming you have autotools (@t{autoconf}, @t{automake},
@t{libtool}, @t{texinfo}) installed:
@example
# get from git (alternatively, use a github tarball)
@ -362,16 +346,16 @@ $ sudo make install
(Xapian, GMime and their dependencies must be installed).
After this, @t{mu} and @t{mu4e} should be installed @footnote{there's
a hard dependency between versions of @t{mu4e} and @t{mu} --- you
cannot combine different versions} on your system, and be available
from the command line and in Emacs.
After this, @t{mu} and @t{mu4e} should be installed @footnote{there's a
hard dependency between versions of @t{mu4e} and @t{mu} --- you cannot
combine different versions} on your system, and be available from the
command line and in Emacs.
You may need to restart Emacs, so it can find @t{mu4e} in its
@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 where @t{mu4e} is installed, and add something like the
following to your configuration before trying again:
@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 where
@t{mu4e} is installed, and add something like the following to your
configuration before trying again:
@lisp
;; the exact path may differ --- check it
(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/mu4e")
@ -404,14 +388,14 @@ is required:
into a maildir (@file{~/Maildir}, often). Because it is such a common
case, there is a full example of setting @t{mu4e} up with
@t{offlineimap} and Gmail; @pxref{Gmail configuration}.
@item @emph{Using a local mail server} --- if you are using a local mail-server
@item @emph{Using a local mail server} --- if you are using a local mail- server
(such as @t{postfix} or @t{qmail}), you can teach them to deliver into
a maildir as well, maybe in combination with @t{procmail}. A bit of
googling should be able to provide you with the details.
@end itemize
The maildir must be on a single file-system; and symbolic links are
not supported.
While a @t{mu} only supports a single Maildir, it can be spread across
different file-systems; and symbolic links are supported.
@node Initializing the message store
@section Initializing the message store
@ -437,7 +421,7 @@ You can add some e-mail addresses, so @t{mu} recognizes them as yours:
indexing messages. If you want to change them, you need to @t{init}
once again.
The addresses can also be basic POSIX regular expressions, wrapped in
The addresses may also be basic POSIX regular expressions, wrapped in
slashes, for example:
@example
@ -458,8 +442,8 @@ We can do that from @t{mu4e} --- @ref{Main view}, but the first time,
it is a good idea to run it from the command line, which makes it
easier to verify that everything works correctly.
Assuming that your maildir is at @file{~/Maildir}, we issue the following
command:
Assuming that your maildir is at @file{~/Maildir}, we issue the
following command:
@example
$ mu index
@end example
@ -472,16 +456,16 @@ The indexing process may take a few minutes the first time you do it
only scans messages that are new or have changed. Indexing is discussed
in full detail in the @t{mu-index} man-page.
After the indexing process has finished, you can quickly test if everything
worked, by trying some command-line searches, for example
After the indexing process has finished, you can quickly test if
everything worked, by trying some command-line searches, for example
@example
$ mu find hello
@end example
which lists all messages that match @t{hello}. For more examples of searches,
see @ref{Queries}, or check the @t{mu-find} and @t{mu-easy} man pages. If all
of this worked well, we are well on our way setting things up; the next step
is to do some basic configuration for @t{mu4e}.
which lists all messages that match @t{hello}. For more examples of
searches, see @ref{Queries}, or check the @t{mu-find} and @t{mu-easy}
man pages. If all of this worked well, we are well on our way setting
things up; the next step is to do some basic configuration for @t{mu4e}.
@node Basic configuration
@section Basic configuration
@ -495,8 +479,8 @@ it. So, add to your @file{~/.emacs} (or its moral equivalent, such as
@end lisp
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
of it. If not, you can add it:
@code{load-path} and make sure that @t{mu4e}'s installation directory is
part of it. If not, you can add it:
@lisp
(add-to-list 'load-path MU4E-PATH)
@ -524,10 +508,10 @@ situation. See @ref{Dynamic folders} for details.}:
mu4e-refile-folder "/archive") ;; saved messages
@end lisp
Note, the folder names are all relative to the root-maildir (see the
The folder (maildir) names are all relative to the root-maildir (see the
output of @command{mu info}). If you use @t{mu4e-context}, see
@ref{Contexts 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
@section Retrieval and indexing with mu4e
@ -657,25 +641,27 @@ A very minimal setup:
(setq smtpmail-smtp-server "smtp.example.org")
@end lisp
Since @t{mu4e} (re)uses the same @t{message mode} and @t{smtpmail} that Gnus
uses, many settings for those also apply to @t{mu4e}.
Since @t{mu4e} (re)uses the same @t{message mode} and @t{smtpmail} that
Gnus uses, many settings for those also apply to @t{mu4e}.
@subsection Dealing with sent messages
By default, @t{mu4e} puts a copy of messages you sent in the folder determined
by @code{mu4e-sent-folder}. In some cases, this may not be what you want -
for example, when using Gmail-over-@abbr{IMAP}, this interferes with Gmail's
handling of the sent messages folder, and you may end up with duplicate
messages.
By default, @t{mu4e} puts a copy of messages you sent in the folder
determined by @code{mu4e-sent-folder}. In some cases, this may not be
what you want - for example, when using Gmail-over-@abbr{IMAP}, this
interferes with Gmail's handling of the sent messages folder, and you
may end up with duplicate messages.
You can use the variable @code{mu4e-sent-messages-behavior} to customize what
happens with sent messages. The default is the symbol @code{sent} which, as
mentioned, causes the message to be copied to your sent-messages folder. Other
possible values are the symbols @code{trash} (the sent message is moved to the
trash-folder (@code{mu4e-trash-folder}), and @code{delete} to simply discard
the sent message altogether (so Gmail can deal with it).
You can use the variable @code{mu4e-sent-messages-behavior} to customize
what happens with sent messages. The default is the symbol @code{sent}
which, as mentioned, causes the message to be copied to your
sent-messages folder. Other possible values are the symbols @code{trash}
(the sent message is moved to the trash-folder
(@code{mu4e-trash-folder}), and @code{delete} to simply discard the sent
message altogether (so Gmail can deal with it).
For Gmail-over-@abbr{IMAP}, you could add the following to your settings:
For Gmail-over-@abbr{IMAP}, you could add the following to your
settings:
@verbatim
;; don't save messages to Sent Messages, Gmail/IMAP takes care of this
(setq mu4e-sent-messages-behavior 'delete)
@ -822,8 +808,9 @@ bookmarked query first before invoking it, use @key{B}.
Next to each bookmark there is the number of (unread/all) messages
that match.
Bookmarks are stored in the variable @code{mu4e-bookmarks}; you can add your
own and/or replace the default ones; @xref{Bookmarks}. For instance:
Bookmarks are stored in the variable @code{mu4e-bookmarks}; you can add
your 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.
@ -846,12 +833,14 @@ which would be disruptive in this case.
Finally, there are some @emph{Misc} (miscellaneous) actions:
@itemize
@item @t{[U]pdate email & database} executes the shell-command in the variable
@code{mu4e-get-mail-command}, and afterwards updates the @t{mu} database;
see @ref{Indexing your messages} and @ref{Getting mail} for details.
@code{mu4e-get-mail-command}, and afterwards updates the @t{mu}
database; see @ref{Indexing your messages} and @ref{Getting mail} for
details.
@item @t{toggle [m]ail sending mode (direct)} toggles between sending
mail directly, and queuing it first (for example, when you are offline), and
@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}
mail directly, and queuing it first (for example, when you are offline),
and @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}
@item @t{[A]bout mu4e} provides general information about the program
@item @t{[H]elp} shows help information for this view
@item Finally, @t{[q]uit mu4e} quits your @t{mu4e}-session
@ -900,14 +889,14 @@ Some notes to explain what you see in the example:
@itemize
@item The fields shown in the headers view can be influenced by customizing
the variable @code{mu4e-headers-fields}; see @code{mu4e-header-info} for the
list of built-in fields. Apart from the built-in fields, you can also create
custom fields using @code{mu4e-header-info-custom}; see @ref{HV Custom
headers} for details.
the variable @code{mu4e-headers-fields}; see @code{mu4e-header-info} for
the list of built-in fields. Apart from the built-in fields, you can
also create custom fields using @code{mu4e-header-info-custom}; see
@ref{HV Custom headers} for details.
@item By default, the date is shown with the @t{:human-date} field, which
shows the @emph{time} for today's messages, and the @emph{date} for older
messages. If you do not want to distinguish between `today' and `older', you can use
the @t{:date} field instead.
shows the @emph{time} for today's messages, and the @emph{date} for
older messages. If you do not want to distinguish between `today' and
`older', you can use the @t{:date} field instead.
@item You can customize the date and time formats with the variable
@code{mu4e-headers-date-format} and @code{mu4e-headers-time-format},
respectively. In the example, we use @code{:human-date}, which shows the
@ -924,10 +913,11 @@ mouse click, or @key{O}. Not all fields allow sorting.
@item Instead of showing the @t{From:} and @t{To:} fields separately, you
can use From/To (@t{:from-or-to} in @code{mu4e-headers-fields} as a more
compact way to convey the most important information: it shows @t{From:}
@emph{except} when the e-mail was sent by the user (i.e., you) --- in that case
it shows @t{To:} (prefixed by @t{To}@footnote{You can customize this by
changing the variable @code{mu4e-headers-from-or-to-prefix} (a cons cell)}, as
in the example above).
@emph{except} when the e-mail was sent by the user (i.e., you) --- in
that case it shows @t{To:} (prefixed by @t{To}@footnote{You can
customize this by changing the variable
@code{mu4e-headers-from-or-to-prefix} (a cons cell)}, as in the example
above).
@item The `List' field shows the mailing-list a message is sent to;
@code{mu4e} tries to create a convenient shortcut for the mailing-list
name; the variable @code{mu4e-user-mailing-lists} can be used to add
@ -960,9 +950,9 @@ headers-view.
@node Keybindings
@section Keybindings
Using the below key bindings, you can do various things with these messages;
these actions are also listed in the @t{Mu4e} menu in the Emacs
menu bar.
Using the below key bindings, you can do various things with these
messages; these actions are also listed in the @t{Mu4e} menu in the
Emacs menu bar.
@verbatim
key description
@ -1040,18 +1030,19 @@ move. After one or more messages are marked, you can then execute
mark-execute sequence is similar to what e.g. @t{dired} does. It is how
@t{mu4e} tries to be as quick as possible, while avoiding accidents.
The mark/unmark commands support the @emph{region} (i.e., ``selection'') ---
so, for example, if you select some messages and press @key{DEL}, all messages
in the region are marked for deletion.
The mark/unmark commands support the @emph{region} (i.e., ``selection'')
--- so, for example, if you select some messages and press @key{DEL},
all messages in the region are marked for deletion.
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
sub-thread (@key{t}).
When you do a new search or refresh the headers buffer while you still have
marked messages, you are asked what to do with those marks --- whether to
@emph{apply} them before leaving, or @emph{ignore} them. This behavior can be
influenced with the variable @code{mu4e-headers-leave-behavior}.
When you do a new search or refresh the headers buffer while you still
have marked messages, you are asked what to do with those marks ---
whether to @emph{apply} them before leaving, or @emph{ignore} them. This
behavior can be influenced with the variable
@code{mu4e-headers-leave-behavior}.
For more information about marking, see @ref{Marking}.
@ -1066,17 +1057,18 @@ the top-level messages are sorted by the date of the @emph{newest}
message in the thread.
The header field used for sorting is indicated by ``@t{V}'' or
``@t{^}''@footnote{or you can use little graphical triangles; see variable
@code{mu4e-use-fancy-chars}}, indicating the sort order (descending or
ascending, respectively).
``@t{^}''@footnote{or you can use little graphical triangles; see
variable @code{mu4e-use-fancy-chars}}, indicating the sort order
(descending or ascending, respectively).
You can change the sort order by clicking the corresponding column with the
mouse, or with @kbd{M-x mu4e-headers-change-sorting} (@key{O}); note that not
all fields can be used for sorting. You can toggle threading on/off using
@kbd{M-x mu4e-headers-toggle-threading} or @key{P}. For both of these functions,
unless you provide a prefix argument (@key{C-u}), the current search is
updated immediately using the new parameters. You can toggle full-search
(@ref{Searching}) using @kbd{M-x mu4e-headers-toggle-full-search} or @key{Q}.
You can change the sort order by clicking the corresponding column with
the mouse, or with @kbd{M-x mu4e-headers-change-sorting} (@key{O}); note
that not all fields can be used for sorting. You can toggle threading
on/off using @kbd{M-x mu4e-headers-toggle-threading} or @key{P}. For
both of these functions, unless you provide a prefix argument
(@key{C-u}), the current search is updated immediately using the new
parameters. You can toggle full-search (@ref{Searching}) using @kbd{M-x
mu4e-headers-toggle-full-search} or @key{Q}.
Note that with threading enabled, the sorting is exclusively by date,
regardless of the column clicked.
@ -1090,9 +1082,9 @@ search results.
@node HV Custom headers
@section Custom headers
Sometimes the normal headers that @t{mu4e} offers (Date, From, To, Subject,
etc.)@: may not be enough. For these cases, @t{mu4e} offers @emph{custom
headers} in both the headers-view and the message-view.
Sometimes the normal headers that @t{mu4e} offers (Date, From, To,
Subject, etc.)@: may not be enough. For these cases, @t{mu4e} offers
@emph{custom headers} in both the headers-view and the message-view.
You can do so by adding a description of your custom header to
@code{mu4e-header-info-custom}, which is a list of custom headers.
@ -1154,21 +1146,22 @@ actions.
Using the @emph{Split view}, we can see the @ref{Headers view} and the
@ref{Message view} next to each other, with the message selected in the
former, visible in the latter. You can influence the way the splitting is done
by customizing the variable @code{mu4e-split-view}. Possible values are:
former, visible in the latter. You can influence the way the splitting
is done by customizing the variable @code{mu4e-split-view}. Possible
values are:
@itemize
@item @t{horizontal} (this is the default): display the message view below the
header view. Use @code{mu4e-headers-visible-lines} the set the number of lines
shown (default: 8).
header view. Use @code{mu4e-headers-visible-lines} the set the number of
lines shown (default: 8).
@item @t{vertical}: display the message view on the
right side of the header view. Use @code{mu4e-headers-visible-columns} to set
the number of visible columns (default: 30).
@item @t{single-window}: single window mode. Single-window mode tries to
minimize mu4e window operations (opening, killing, resizing, etc) and buffer
changes, while still retaining the view and headers buffers. In addition, it
replaces mu4e main view with a minibuffer prompt containing the same
information.
minimize mu4e window operations (opening, killing, resizing, etc) and
buffer changes, while still retaining the view and headers buffers. In
addition, it replaces mu4e main view with a minibuffer prompt containing
the same information.
@item anything else: don't do any splitting
@end itemize
@ -1234,20 +1227,21 @@ An example message view:
Some notes:
@itemize
@item The variable @code{mu4e-view-fields} determines the header fields to be
shown; see @code{mu4e-header-info} for a list of built-in fields. Apart from
the built-in fields, you can also create custom fields using
shown; see @code{mu4e-header-info} for a list of built-in fields. Apart
from the built-in fields, you can also create custom fields using
@code{mu4e-header-info-custom}; see @ref{MSGV Custom headers}.
@item For search-related operations, see @ref{Searching}.
@item You can scroll down the message using @key{SPC}; if you do this at the
end of a message,it automatically takes you to the next one. If you want to
prevent this behavior, set @code{mu4e-view-scroll-to-next} to @code{nil}.
end of a message,it automatically takes you to the next one. If you want
to prevent this behavior, set @code{mu4e-view-scroll-to-next} to
@code{nil}.
@end itemize
@node MSGV Keybindings
@section Keybindings
You can find most things you can do with this message in the @emph{Mu4e} menu,
or by using the keyboard; the default bindings are:
You can find most things you can do with this message in the @emph{Mu4e}
menu, or by using the keyboard; the default bindings are:
@verbatim
key description
@ -3742,11 +3736,10 @@ answers.
@node General
@section General
@subsection Results from @command{mu} and @t{mu4e} differ - why?
@anchor{mu-mu4e-differ}
In general, the same queries for @command{mu} and @t{mu4e} should
yield the same results. If they differ, this is usually because one of
the following reasons:
@subsection Results from @t {mu} and @t{mu4e} differ - why?
@anchor{mu-mu4e-differ} In general, the same queries for @command{mu}
and @t{mu4e} should yield the same results. If they differ, this is
usually because one of the following reasons:
@itemize
@item different options:
@t{mu4e} defaults to having @t{mu4e-headers-include-related}, and
@ -3916,15 +3909,20 @@ However, if you experience slowdowns, here are some things to consider:
@item opening messages while indexing:
@t{mu4e} corresponds with the @t{mu} server synchronously; this means
that you can do only one thing at a time. The one operation that
potentially does take a bit of time is indexing of mail, during which
you have to wait for messages to open. For some strategies to reduce
that time, see the next question.
potentially does take a bit of time is indexing of mail. Since the 1.7.x
series you don't have to wait for the indexing to complete, but it can
be still be a bit slower because @t{mu} is very busy at that time.
For some strategies to reduce that time, see the next question.
@item getting contact information can take some time:
especially when opening @t{mu4e} the first time and you have a
@emph{lot} of contacts, it can take a few seconds to process those.
Note that @t{mu4e} 1.3 and higher only get @emph{changed} contacts in
@emph{lot} of contacts, it can take a few seconds to process those. Note
that @t{mu4e} 1.3 and higher only get @emph{changed} contacts in
subsequent updates (after and indexing operation), so this should be
less of a concern.
less of a concern. And you can tweak what contacts you get using
@var{mu4e-compose-complete-only-personal},
@var{mu4e-compose-complete-only-after} and
@var{mu4e-compose-complete-max}.
@item decryption / sign verification:
encrypted / signed messages sometimes require network access, and this
may take a while; certainly if the needed servers cannot be found.
@ -4009,9 +4007,8 @@ See @ref{(emacs) Mail Aliases}.
See @ref{Compose hooks}.
@subsection How can I influence the way the original message looks when replying/forwarding?
Since @code{mu4e-compose-mode} derives from @code{message-mode}, you
can re-use many of its facilities. @inforef{Insertion
Variables,,message}.
Since @code{mu4e-compose-mode} derives from @code{message-mode}, you can
re-use many of its facilities. @inforef{Insertion Variables,,message}.
@subsection How can I easily include attachments in the messages I write?
You can drag-and-drop from your desktop; alternatively, you can use
@ -4048,10 +4045,15 @@ and encrypting}.
@subsection Address auto-completion does not work?
If you have set @code{mu4e-compose-complete-only-personal} to non-nil,
@t{mu4e} only completes 'personal' addresses - so you tell it about
your e-mail addresses when setting up the database (@t{mu init});
@t{mu4e} only completes 'personal' addresses - so you tell it about your
e-mail addresses when setting up the database (@t{mu init});
@ref{Initializing the message store}.
If you cannot find specific addresses you'd expect to find, inspect the
values of @var{mu4e-compose-complete-only-personal},
@var{mu4e-compose-complete-only-after} and
@var{mu4e-compose-complete-max}.
@subsection Can I use @t{BBDB} with @t{mu4e}?
Yes, with releases of BBDB after 3.1.2. @ref{BBDB}.
@ -4063,8 +4065,8 @@ Yes, with releases of BBDB after 3.1.2. @ref{BBDB}.
@subsection 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} (also
available from the Emacs package repository); add the following
snippet to your configuration:
available from the Emacs package repository); add the following snippet
to your configuration:
@lisp
(require 'smtpmail-async)
(setq
@ -4074,9 +4076,9 @@ snippet to your configuration:
With this, messages are sent using a background Emacs instance.
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 silent failures, where mail sending fails for some reason
without any indication of that.
the message in the normal, synchronous fashion, and people have reported
silent failures, where mail sending fails for some reason without any
indication of that.
You can check the progress of the background by checking the
@t{*Messages*}-buffer, which should show something like:
@ -4116,11 +4118,11 @@ setting
@noindent
in your Emacs init file (@file{~/.emacs} or @file{~/.emacs.d/init.el}).
The transformation of your message into the proper format is
done at the time of sending. For this to happen properly, you should
write each paragraph of your message of as a long line (i.e. without
carriage return). If you introduce unwanted newlines in your paragraph,
use @kbd{M-q} to reformat it as a single line.
The transformation of your message into the proper format is done at the
time of sending. For this to happen properly, you should write each
paragraph of your message of as a long line (i.e. without carriage
return). If you introduce unwanted newlines in your paragraph, use
@kbd{M-q} to reformat it as a single line.
If you want to send the message with paragraphs on single lines but
without @t{format=flowed} (because, say, the receiver does not
@ -4145,18 +4147,18 @@ User Marcin Borkowski has a solution:
@subsection How can I avoid Outlook display issues?
Limited testing shows that certain Outlook clients do not work well
with inline replies, and the entire message including-and-below the
first quoted section is collapsed. This means recipients may not even
notice important inline text, especially if there is some top-posted
content. This has been observed on OS X, Windows, and Web-based
Outlook clients accessing Office 365.
Limited testing shows that certain Outlook clients do not work well with
inline replies, and the entire message including-and-below the first
quoted section is collapsed. This means recipients may not even notice
important inline text, especially if there is some top-posted content.
This has been observed on OS X, Windows, and Web-based Outlook clients
accessing Office 365.
It appears the bug is triggered by the standard reply regex "On ...
wrote:". Changing "On", or removing the trailing ":" appears to fix
the bug (in limited testing). Therefore, a simple work-around is to
set `message-citation-line-format` to something slightly non-standard,
such as:
wrote:". Changing "On", or removing the trailing ":" appears to fix the
bug (in limited testing). Therefore, a simple work-around is to set
`message-citation-line-format` to something slightly non-standard, such
as:
@lisp
(setq message-citation-line-format "On %Y-%m-%d at %R %Z, %f wrote...")
@end lisp
@ -4313,12 +4315,13 @@ another variable:
@node Saving outgoing messages
@section Saving outgoing messages
Like @code{mu4e-refile-folder}, the variable @code{mu4e-sent-folder} can also
be set to a function, in order to dynamically determine the save folder. One
might, for example, wish to automatically put messages going to mailing lists
into the trash (because you'll receive them back from the list anyway). If you
have set up the variable @code{my-mu4e-mailing-lists} as mentioned, you can
use the following function to determine a save folder:
Like @code{mu4e-refile-folder}, the variable @code{mu4e-sent-folder} can
also be set to a function, in order to dynamically determine the save
folder. One might, for example, wish to automatically put messages going
to mailing lists into the trash (because you'll receive them back from
the list anyway). If you have set up the variable
@code{my-mu4e-mailing-lists} as mentioned, you can use the following
function to determine a 'sent'-folder:
@lisp
(defun my-mu4e-sent-folder-function (msg)
@ -4511,13 +4514,17 @@ log using @kbd{M-x mu4e-show-log} (@key{$}).
@node The message s-expression
@section The message s-expression
As a word of warning, the details of the s-expression are internal to
the mu4e - mu communications, and are subject to change between
versions.
A typical message s-expression looks something like the following:
@lisp
(:docid 32461
:from (("Nikola Tesla" . "niko@@example.com"))
:to (("Thomas Edison" . "tom@@example.com"))
:cc (("Rupert The Monkey" . "rupert@@example.com"))
:from ((:name "Nikola Tesla" :email "niko@@example.com"))
:to ((:name "Thomas Edison" :email "tom@@example.com"))
:cc ((:name "Rupert The Monkey" :email "rupert@@example.com"))
:subject "RE: what about the 50K?"
:date (20369 17624 0)
:size 4337
@ -4525,42 +4532,27 @@ A typical message s-expression looks something like the following:
:path "/home/tom/Maildir/INBOX/cur/133443243973_1.10027.atlas:2,S"
:maildir "/INBOX"
:priority normal
:flags (seen)
:parts ( (:index 1 :mime-type "text/plain" :size 12345 :attachment nil)
(:index 2 :name "photo.jpg" :mime-type "image/jpeg"
:size 147331 :attachment t)
(:index 3 :name "book.pdf" :mime-type "application/pdf"
:size 192220 :attachment t))
:references ("C8384574032D81EE81AF0114E4E74@@123213.mail.example.com"
"38203498230942D81EE81AF0114E4E74@@123213.mail.example.com")
:in-reply-to "38203498230942D81EE81AF0114E4E74@@123213.mail.example.com"
:body-txt "Hi Tom,
:flags (seen attach)
....
")
@end lisp
This s-expression forms a property list (@t{plist}), and we can get values
from it using @t{plist-get}; for example @code{(plist-get msg :subject)} would
get you the message subject. However, it's better to use the function
@code{mu4e-message-field} to shield you from some of the implementation
details that are subject to change; and see the other convenience functions in
@file{mu4e-message.el}.
This s-expression forms a property list (@t{plist}), and we can get
values from it using @t{plist-get}; for example @code{(plist-get msg
:subject)} would get you the message subject. However, it's better to
use the function @code{mu4e-message-field} to shield you from some of
the implementation details that are subject to change; and see the other
convenience functions in @file{mu4e-message.el}.
Some notes on the format:
@itemize
@item The address fields are @emph{lists} of pairs @code{(name . email)},
@item The address fields are @emph{lists} of @t{plists} of the form @code{(:name <name> :email <email>)},
where @t{name} can be @t{nil}.
@item The date is in format Emacs uses (for example in
@code{current-time}).@footnote{Emacs 32-bit integers have only 29 bits
available for the actual number; the other bits are use by
Emacs for internal purposes. Therefore, we need to split
@t{time_t} in two numbers.}
@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
MIME-type, if any) and @t{:size} (the size in bytes, if any).
@item Messages in the @ref{Headers view} come from the database and do not have
@t{:attachments}. @t{:body-txt} or @t{:body-html} fields. Message in the
@ref{Message view} use the actual message file, and do include these fields.
available for the actual number; the other bits are use by Emacs for
internal purposes. Therefore, we need to split @t{time_t} in two
numbers.}
@end itemize
@subsection Example: ping-pong
@ -4573,8 +4565,8 @@ to 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
started). It calls @t{mu4e-server-ping}, and registers a (lambda) function for
@t{mu4e-server-pong-func}, to handle the response.
started). It calls @t{mu4e-server-ping}, and registers a (lambda)
function for @t{mu4e-server-pong-func}, to handle the response.
@verbatim
-> (ping)
@ -4589,8 +4581,9 @@ they differ.
@node Debugging
@appendix Debugging
As explained in @ref{How it works}, @t{mu4e} communicates with its backend
(@t{mu server}) by sending commands and receiving responses (s-expressions).
As explained in @ref{How it works}, @t{mu4e} communicates with its
backend (@t{mu server}) by sending commands and receiving responses
(s-expressions).
For debugging purposes, it can be very useful to see this data. For
this reason, @t{mu4e} can log all these messages. Note that the