Go to file
Jonas Bernoulli 173deff6a0 editorconfig: Don't misconfigure indentation for Emacs lisp files
1) It is fairly safe to assume that almost all edits to Emacs lisp
   files will be done using the Emacs editor, so there is no need
   to configure this in a way understood by other editors.

2) Trying to configure the intention of lisp code using editorconfig
   causes the indention to be wrong.  Here "wrong" does not mean, "it
   uses tabs when everyone knows that spaces is the true path" (or
   vice-versa), but in the sense of "in lisp indentation is subject to
   the outer expression, and it has been like that for decades, but we
   are just going to ignore that completely and pretend this is
   actually python code".

For example, if we insert a new line character between the 1 and 2
in (progn (progn 1 2) then there are only two ways to intend that
correctly.

(We use "." to represent a leading space and "<-->" to represent
leading tabs.  "<------>" for a tab when it is shown eight characters
wide or "<>" if only two.)

First correct way:

  (setq-local indent-tabs-mode t)

  (progn (progn 1
  <------>......2))

Second correct way:

  (setq-local indent-tabs-mode nil)

  (progn (progn 1
  ..............2))

With the old editorconfig configuration,

  [*.el]
  indent_style                = tab
  indent_size                 = 2
  max_line_length             = 100

we get:

  (progn (progn 1
  <><><><>.2))

This is not how `progn' is indented.  No special indentation rules are
defined for it so all arguments are supposed to be aligned.  For
`prog1' however special indentation are defined and if we replaced the
second `progn' in this example with a `prog1', then this would
actually be correct.  This just demonstrate that it is wrong to indent
everything the same for lisp; the reason that `progn' and `prog1' are
indented differently communicates different meanings to the reader.

I had faint hope that without setting `indent_size' things would work
correctly, but no,

  [*.el]
  indent_style                = tab
  max_line_length             = 100

gives us:

  (progn (progn 1
  <------>.......2))

That doesn't even make sense if we pretend to be looking at python
code.  Turns out that `indent_size' defaults to 2 even for lisp code
as can be demonstrated by additionally doing,

  (setq-local tab-width 2)

which gives us:

  (progn (progn 1
  <>.......2))

which at least makes some sense.
2020-02-17 14:27:54 +01:00
.github Create issue_template.md 2016-03-28 17:54:09 +03:00
build-aux build: add dummy config.rpath 2018-05-29 10:59:20 +03:00
contrib Support gmime 3.0 2017-07-30 16:47:38 +02:00
guile Fix typos 2019-11-06 16:13:39 +01:00
lib mu-msg-part: clean up error paths 2020-02-15 14:10:59 +02:00
m4 configure.ac: Add (optional) readline support 2020-01-18 13:39:58 +02:00
man mu: implement init, info commands 2020-02-08 14:28:55 +02:00
mu server: explicitly flush after indexing 2020-02-15 18:26:45 +02:00
mu4e mu4e: set better default for mu4e-compose-reply-ignore-address 2020-02-15 22:36:00 +02:00
toys update for lib/utils split 2019-12-22 15:26:45 +02:00
www web: update index.md 2019-04-13 12:08:51 +03:00
.editorconfig editorconfig: Don't misconfigure indentation for Emacs lisp files 2020-02-17 14:27:54 +01:00
.gitignore gitignore: update 2020-02-17 11:29:49 +01:00
.travis.yml Travis: use recent autoconf 2.69 and recent autoconf-archive 2016-12-14 01:57:33 +01:00
AUTHORS * initial import of mu - the next generation 2009-11-25 22:55:06 +02:00
COPYING * initial import of mu - the next generation 2009-11-25 22:55:06 +02:00
ChangeLog Fix incorrect ChangeLog. 2015-08-08 08:54:33 +07:00
HACKING Fix typos 2019-11-06 16:13:39 +01:00
Makefile.am mu: use new command-parser 2020-01-22 11:42:15 +02:00
NEWS Add the missing NEWS 2015-06-09 21:08:02 +03:00
NEWS.org NEWS.org: update documentation 2020-02-09 03:53:01 +02:00
README README: remove README.org 2020-01-01 15:56:47 +02:00
TODO * update TODO 2012-12-02 22:57:47 +02:00
autogen.sh Fix typos 2019-11-06 16:13:39 +01:00
c.cfg Fix typos 2019-11-06 16:13:39 +01:00
configure.ac mu: add memcheck script for valgrinding 2020-02-15 14:09:30 +02:00
gtest.mk mu: allow for code-coverage reports 2020-01-01 15:56:48 +02:00

README

Welcome to mu & mu4e!

Given the enormous amounts of e-mail many people gather and the importance of e-mail message in our
work-flows, it's essential to quickly deal with all that mail - in particular, to instantly find
that one important e-mail you need right now, and quickly file away message for later use.

`mu` is a tool for dealing with e-mail messages stored in the Maildir-format. `mu`'s purpose in life
is to help you to quickly find the messages you need; in addition, it allows you to view messages,
extract attachments, create new maildirs, and so on. See the [mu cheatsheet] for some examples. =mu=
is fully documented.

After indexing your messages into a [Xapian](http://www.xapian.org)-database, you can search them
using a custom query language. You can use various message fields or words in the body text to find
the right messages.

Built on top of `mu` are some extensions (included in this package):

  * mu4e: a full-featured e-mail client that runs inside emacs

  * mu-guile: bindings for the Guile/Scheme programming language (version 2.2 and later)

`mu` is written in C and C++; `mu4e` is written in elisp, and `mu-guile` in a mix of C and Scheme.

Note, `mu` is available in Linux distributions (e.g. Debian/Ubuntu and Fedora) under the name
`maildir-utils`; apparently because they don't like short names.