notmuch clon
Find a file
Austin Clements a2d78fba20 emacs: Use a single buffer invisibility spec to fix quadratic search cost.
Buffer redisplay requires traversing the buffer's invisibility spec
for every part of the display that has an 'invisible text or overlay
property.  Previously, the search buffer's invisibility spec list
contained roughly one entry for each search result.  As a result,
redisplay took O(NM) time where N is the number of visible lines and M
is the total number of results.  On a slow computer, this is enough to
make even buffer motion noticeably slow.  Worse, during a search
operation, redisplay is triggered for each search result (even if
there are no visible buffer changes), so search was quadratic
(O(NM^2)) in the number of search results.

This change switches to using a single element buffer invisibility
spec.  To un-hide authors, instead of removing an entry from the
invisibility spec, it simply removes the invisibility overlay from
those authors.

I tested using a query with 6633 results on a 9 year old machine.
Before this patch, Emacs took 70 seconds to fill the search buffer;
toward the end of the search, Emacs consumed 10-20x as much CPU as
notmuch; and moving point in the buffer took about a second.  With
this patch, the same query takes 40 seconds, Emacs consumes ~3x the
CPU of notmuch by the end, and there's no noticeable lag to moving
point.  (There's still some source of non-linearity, because Emacs and
notmuch consume roughly the same amount of CPU early in the search.)
2011-11-12 09:21:03 -05:00
bindings version: bump to 0.9 2011-10-11 21:50:56 -03:00
compat fix sum moar typos [text files] 2011-06-23 15:40:50 -07:00
completion fix sum moar typos [build scripts, Makefiles] 2011-06-23 15:44:59 -07:00
contrib/notmuch-deliver notmuch-deliver: update gitignore 2011-11-05 01:12:35 +02:00
debian debian: update build dependency on dtach instead of screen 2011-11-11 18:31:44 -05:00
emacs emacs: Use a single buffer invisibility spec to fix quadratic search cost. 2011-11-12 09:21:03 -05:00
lib lib/database.cc: use flush Xapian method instead of commit 2011-11-02 20:38:22 -03:00
packaging fix sum moar typos [text files] 2011-06-23 15:40:50 -07:00
test smtp-dummy: clear sockaddr_in structure before use in bind() 2011-11-12 07:48:00 -05:00
util remove GCC visibility pragmas 2011-10-31 09:05:07 -03:00
vim vim: fix citation/signature fold lengths 2011-07-16 21:57:38 +03:00
.dir-locals.el Add dir-locals style variables for C++, Elisp, and shell code. 2011-06-23 16:34:57 -07:00
.gitignore python: add a .gitignore file and refine the toplevel one 2011-09-29 09:04:50 +02:00
AUTHORS Drop date.c file, (use identical function from GMime instead). 2009-11-02 14:36:33 -08:00
configure Separate Emacs misc. files dir. from Emacs code dir. 2011-10-28 14:07:44 -03:00
COPYING Add copy of GNU General Public License (version 3). 2009-10-21 16:25:08 -07:00
COPYING-GPL-3 Add copy of GNU General Public License (version 3). 2009-10-21 16:25:08 -07:00
debugger.c notmuch-new: Only install SIGALRM if not running under gdb 2009-11-22 05:36:36 +01:00
gmime-filter-headers.c notmuch: Fix off-by-one errors if a header is >200 characters long. 2010-06-01 16:09:29 -07:00
gmime-filter-headers.h fix sum moar typos [comments in source code] 2011-06-23 15:58:39 -07:00
gmime-filter-reply.c Filter out carriage-returns in show and reply output. 2009-11-18 23:34:43 +01:00
gmime-filter-reply.h Typsos 2009-11-18 03:21:36 -08:00
INSTALL INSTALL/README: Clean up the description of how to run the emacs interface. 2010-06-01 10:51:42 -07:00
json.c json_quote_chararray: Always return a newly talloced array 2010-04-20 08:55:31 -07:00
Makefile xutil.c: remove duplicate copies, create new library libutil.a to contain xutil. 2011-10-30 23:09:49 -03:00
Makefile.local xutil.c: remove duplicate copies, create new library libutil.a to contain xutil. 2011-10-30 23:09:49 -03:00
NEWS NEWS: tentative news item about requiring screen to run the test suite. 2011-11-05 22:10:51 -03:00
notmuch-client.h Improve handling of message/rfc822 parts by adding a new header_message_part function to the formating structure. 2011-09-05 22:58:52 -03:00
notmuch-config.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-count.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-dump.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-new.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-reply.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-restore.c xregcomp: don't consider every regex compilation failure an internal error. 2011-10-30 23:10:38 -03:00
notmuch-search.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-setup.c notmuch setup: Don't prompt about maildir synchronization 2010-11-11 03:53:14 -08:00
notmuch-show.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-tag.c cli: change argument parsing convention for subcommands 2011-10-22 19:42:54 -03:00
notmuch-time.c Add some const correctness to talloc 'ctx' parameter. 2009-11-17 19:10:37 -08:00
notmuch.1 docs: Update news, man page, and online help for restore --accumulate 2011-10-23 10:27:57 -03:00
notmuch.c docs: Update news, man page, and online help for restore --accumulate 2011-10-23 10:27:57 -03:00
notmuch.desktop notmuch.desktop: Clarify that this is the emacs interface to notmuch. 2010-01-24 07:30:08 +13:00
query-string.c notmuch: Break notmuch.c up into several smaller files. 2009-11-10 12:03:05 -08:00
README INSTALL/README: Clean up the description of how to run the emacs interface. 2010-06-01 10:51:42 -07:00
RELEASING add note about updating the debian symbols file to the RELEASE file 2011-06-01 13:08:26 -07:00
show-message.c Improve handling of message/rfc822 parts by adding a new header_message_part function to the formating structure. 2011-09-05 22:58:52 -03:00
TODO TODO: Add note to fix race condition with directory mtime. 2011-06-29 14:07:06 -07:00
version version: bump to 0.9 2011-10-11 21:50:56 -03:00

Notmuch - thread-based email index, search and tagging.

Notmuch is a system for indexing, searching, reading, and tagging
large collections of email messages in maildir or mh format. It uses
the Xapian library to provide fast, full-text search with a convenient
search syntax.

Notmuch is free software, released under the GNU General Public
License version 3 (or later).

Building notmuch
----------------
See the INSTALL file for notes on compiling and installing notmuch.

Running notmuch
---------------
After installing notmuch, start by running "notmuch setup" which will
interactively prompt for configuration information such as your name,
email address, and the directory which contains your mail archive to
be indexed. You can change any answers later by running "notmuch
setup" again or by editing the .notmuch-config file in your home
directory.

With notmuch configured you should next run "notmuch new" which will
index all of your existing mail. This can take a long time, (several
hours) if you have a lot of email, (hundreds of thousands of
files). When new mail is delivered to your mail archive in the future,
you will want to run "notmuch new" again. These runs will be much
faster as they will only index new messages.

Finally, you can prove to yourself that things are working by running
some command-line searches such as "notmuch search
from:someone@example.com" or "notmuch search subject:topic". See
"notmuch help search-terms" for more details on the available search
syntax.

The command-line search output is not expected to be particularly
friendly for day-to-day usage. Instead, it is expected that you will
use an email interface that builds on the notmuch command-line tool or
the libnotmuch library.

Notmuch installs a full-featured email interface for use within
emacs. To use this, first add the following line to your .emacs file:

	(require 'notmuch)

Then, either run "emacs -f notmuch" or execute the command "M-x
notmuch" from within a running emacs.

If you're interested in a non-emacs-based interface to notmuch, then
please join the notmuch community. Various other interfaces are
already in progress, (an interface within vim, a curses interface,
graphical interfaces based on evolution, and various web-based
interfaces). The authors of these interfaces would love further
testing or contribution. See contact information below.

Contacting users and developers
-------------------------------
The website for Notmuch is:

	http://notmuchmail.org

The mailing list address for the notmuch community is:

	notmuch@notmuchmail.org

We welcome any sort of questions, comments, kudos, or code there.

Subscription is not required, (but if you do subscribe you'll avoid
any delay due to moderation). See the website for subscription
information.

There is also an IRC channel dedicated to talk about using and
developing notmuch:

	IRC server:	irc.freenode.net
	Channel:	#notmuch