Go to file
djcb b75f9f508b lib: implement new query parser
mu's query parser is the piece of software that turns your queries
into something the Xapian database can understand. So, if you query
"maildir:/inbox and subject:bla" this must be translated into a
Xapian::Query object which will retrieve the sought after messages.

Since mu's beginning, almost a decade ago, this parser was based on
Xapian's default Xapian::QueryParser. It works okay, but wasn't really
designed for the mu use-case, and had a bit of trouble with anything
that's not A..Z (think: spaces, special characters, unicode etc.).

Over the years, mu added quite a bit of pre-processing trickery to
deal with that. Still, there were corner cases and bugs that were
practically unfixable.

The solution to all of this is to have a custom query processor that
replaces Xapian's, and write it from the ground up to deal with the
special characters etc. I wrote one, as part of my "future, post-1.0
mu" reseach project, and I have now backported it to the mu 0.9.19.

From a technical perspective, this is a major cleanup, and allows us
to get rid of much of the fragile preprocessing both for indexing and
querying. From and end-user perspective this (hopefully) means that
many of the little parsing issues are gone, and it opens the way for
some new features.

From an end-user perspective:
- better support for special characters.
- regexp search! yes, you can now search for regular expressions, e.g.
      subject:/h.ll?o/
  will find subjects with hallo, hello, halo,  philosophy, ...

  As you can imagine, this can be a _heavy_ operation on the database,
  and might take quite a bit longer than a normal query; but it can be
  quite useful.
2017-10-24 22:55:35 +03:00
.github Create issue_template.md 2016-03-28 17:54:09 +03:00
contrib gmime-test: dump (unencode) body, too. 2017-05-06 13:12:38 +03:00
guile Add --expr flag to constrain search when looking for duplicates 2016-07-25 20:52:27 +01:00
lib lib: implement new query parser 2017-10-24 22:55:35 +03:00
m4 buildsys: remove some stray files 2016-12-31 16:55:35 +02:00
man Add support for specifying --muhome via MU_HOME in the environment 2017-02-17 11:28:45 +01:00
mu mu: cosmetics 2017-07-02 10:46:08 +03:00
mu4e cosmetic 2017-09-17 14:02:14 +03:00
perl perl: Add a .gitignore file with the MYMETA build assets 2017-02-17 14:43:16 +01:00
toys toys: fix compiler warnings 2017-10-24 09:17:27 +03:00
www www: update 2016-12-11 18:34:14 +02:00
.gitignore .gitignore: Update for the change made in ea409398 2017-02-17 14:40:59 +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 HACKING: update build instructions 2016-12-15 08:21:25 +02:00
Makefile.am disable perl for now to unbreak make dist 2016-11-06 10:48:45 +02:00
NEWS Add the missing NEWS 2015-06-09 21:08:02 +03:00
NEWS.org mu4e: Added new mu4e-split-view mode: single-window 2017-05-31 20:52:59 -07:00
README Two minor fixes to README 2016-12-17 13:28:05 +00:00
README.org Two minor fixes to README 2016-12-17 13:28:05 +00:00
TODO * update TODO 2012-12-02 22:57:47 +02:00
autogen.sh autogen.sh: enable config-cache 2016-12-28 16:32:03 +02:00
c.cfg Add uncrustify configuration for C code 2014-10-20 15:00:53 +03:00
configure.ac configure.ac: improve autoconf-archive warning 2017-02-12 12:00:59 +02:00
gtest.mk * gtest.mk: fix for magical cd 2012-07-20 11:56:07 +03:00

README

                                README
                                ======
 
Welcome to mu! 
---------------

  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.
  
  [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]-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):

  - mu-for-emacs ([mu4e]): a full-featured e-mail client that runs inside emacs
  - [mu-guile]: bindings for the Guile/Scheme programming language (version 2.0
    and later)
  - a toy GTK+-interface called 'mug' (in the 'toys/' subdir)

  =mu= is written in C and a bit of C++ (to interface with Xapian), with =mu4e=
  written in [Emacs-Lisp] and =mu-guile= in a mix of C and Scheme.
  
  Note, =mu= is available in Debian/Ubuntu under the name =maildir-utils=;
  apparently because they don't like short names. It's also possible to confuse
  that name with the [GNU Mailutils] project (which is totally unrelated) - but
  now you have been warned.
  

  [mu]: http://www.djcbsoftware.nl/code/mu
  [mu cheatsheet]: http://www.djcbsoftware.nl/code/mu/cheatsheet.html
  [Xapian]: http://www.xapian.org
  [mu4e]: http://www.djcbsoftware.nl/code/mu/mu4e.html
  [mu-guile]: http://www.djcbsoftware.nl/code/mu/mu-guile.html
  [Emacs-Lisp]: http://en.wikipedia.org/wiki/Emacs-Lisp
  [GNU Mailutils]: http://mailutils.org/