notmuch clon
Find a file
Austin Clements 88cce8c6a4 emacs: Fix "no such file or directory" error
Occasionally, when the user killed the search buffer when the CLI
process was still running, Emacs would run the
notmuch-start-notmuch-sentinel sentinel twice.  The first call would
process and delete the error output file and the second would fail
with an "Opening input file: no such file or directory, ..." error
when attempting to access the error file.

Emacs isn't supposed to run the sentinel twice.  The reason it does is
rather subtle (and probably a bug in Emacs):

1) When the user kills the search buffer, Emacs invokes
kill_buffer_processes, which sends a SIGHUP to notmuch, but doesn't do
anything else.  Meanwhile, suppose the notmuch search process has
printed some more output, but Emacs hasn't consumed it yet (this is
critical and is why this error only happens sometimes).

2) Emacs gets a SIGCHLD from the dying notmuch process, which invokes
handle_child_signal, which sets the new process status, but can't do
anything else because it's a signal handler.

3) Emacs returns to its idle loop, which calls status_notify, which
sees that the notmuch process has a new status.  This is where things
get interesting.

3.1) Emacs guarantees that it will run process filters on any
unconsumed output before running the process sentinel, so
status_notify calls read_process_output, which consumes the final
output and calls notmuch-search-process-filter.

3.1.1) notmuch-search-process-filter checks if the search buffer is
still alive and, since it's not, it calls delete-process.

3.1.1.1) delete-process correctly sees that the process is already
dead and doesn't try to send another signal, *but* it still modifies
the status to "killed".  To deal with the new status, it calls
status_notify.  Dun dun dun.  We've seen this function before.

3.1.1.1.1) The *recursive* status_notify invocation sees that the
process has a new status and doesn't have any more output to consume,
so it invokes our sentinel and returns.

3.2) The outer status_notify call (which we're still in) is now done
flushing pending process output, so it *also* invokes our sentinel.

This patch addresses this problem at step 3.1.1, where the filter
calls delete-process, since this is a strange and redundant thing to
do anyway.
2013-06-12 23:53:27 +09:00
bindings bindings/go: Start a .gitignore for go bindings. 2013-06-03 08:07:22 -03:00
compat Extend compat/README 2012-09-27 12:51:01 -03:00
completion completion: update README about bash completion dependencies 2013-03-30 18:31:01 -04:00
contrib contrib: pick: remove unnecessary funcall 2013-06-04 09:02:59 -03:00
debian debian: update build dependency to require ruby-dev 1:1.9.3 2013-06-04 09:11:15 -03:00
devel TODO: keybindings for next/previous thread done 2013-05-31 21:51:54 -03:00
emacs emacs: Fix "no such file or directory" error 2013-06-12 23:53:27 +09:00
lib cli: Guard deprecated g_type_init calls 2013-06-08 20:42:33 -03:00
man man: documented --stderr=FILE in notmuch.1 manual page 2013-05-29 20:06:45 -03:00
packaging packaging: fedora: add ruby bindings 2013-06-02 08:03:47 -03:00
parse-time-string parse-time-string: add a date/time parser to notmuch 2012-10-31 16:42:29 -03:00
performance-test build: fix out-of-tree builds 2013-05-26 18:49:04 -03:00
test emacs: Use streaming S-expr parser for search 2013-06-01 09:00:40 -03:00
util string-util: Disallow empty prefixes in parse_boolean_term 2013-01-07 20:55:21 -04:00
vim vim: use the old vim plugin function name 2013-06-02 19:49:49 -05:00
.dir-locals.el .dir-locals.el: changed one-char comment prefix '; ' to two; '; ; ' 2012-01-22 08:41:37 -04:00
.gitignore emacs: update .gitignore 2013-06-02 20:44:26 -03:00
AUTHORS Drop date.c file, (use identical function from GMime instead). 2009-11-02 14:36:33 -08:00
command-line-arguments.c cli: make the command line parser's errors more informative. 2012-09-01 23:03:36 -03:00
command-line-arguments.h command-line-arguments.[ch]: make arrays of keyword descriptors const 2011-12-13 00:00:44 -04:00
configure configure: grab CPPFLAGS from the environment. 2013-06-02 20:45:56 -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
crypto.c cli: crypto: abstract gpg context creation for clarity 2013-04-01 15:39:22 -04:00
debugger.c notmuch-new: Only install SIGALRM if not running under gdb 2009-11-22 05:36:36 +01:00
dump-restore-private.h notmuch-dump: add --format=(batch-tag|sup) 2012-12-08 10:40:54 -04: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
hooks.c cli: introduce the concept of user defined hooks 2011-12-11 13:57:31 -04:00
INSTALL Recommend libgmime-2.6-dev in INSTALL 2012-05-24 21:54:30 -03:00
Makefile build: fix out-of-tree builds 2013-05-26 18:49:04 -03:00
Makefile.local build: pass CPPFLAGS to C and C++ compilers 2013-06-02 20:49:19 -03:00
mime-node.c cli: mime node: fix compiler warning when building against gmime 2.4 2013-04-14 19:49:16 -03:00
NEWS news: Be louder about s/v/o/| on part buttons going away 2013-06-04 08:42:27 -03:00
notmuch-client.h cli: add global option --stderr=FILE 2013-05-29 20:00:52 -03:00
notmuch-config.c cli: config: fix config file save when the file does not exist 2013-05-12 07:46:44 -03:00
notmuch-count.c cli: add --batch option to notmuch count 2013-04-01 09:36:09 -04:00
notmuch-dump.c cli: move config open/close to main() from subcommands 2013-03-08 07:54:41 -04:00
notmuch-new.c cli: move config open/close to main() from subcommands 2013-03-08 07:54:41 -04:00
notmuch-reply.c cli: move config open/close to main() from subcommands 2013-03-08 07:54:41 -04:00
notmuch-restore.c cli: move config open/close to main() from subcommands 2013-03-08 07:54:41 -04:00
notmuch-search.c cli: add --exclude=all option to notmuch-search.c 2013-05-13 21:32:14 -03:00
notmuch-setup.c cli: move config open/close to main() from subcommands 2013-03-08 07:54:41 -04:00
notmuch-show.c cli: conform to same conditional build style as elsewhere in notmuch-show 2013-04-01 15:39:41 -04:00
notmuch-tag.c cli: add --remove-all option to "notmuch tag" 2013-03-30 18:33:59 -04:00
notmuch-time.c Add some const correctness to talloc 'ctx' parameter. 2009-11-17 19:10:37 -08:00
notmuch.c cli: Guard deprecated g_type_init calls 2013-06-08 20:42:33 -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
sprinter-json.c sprinters: bugfix when NULL passed for a string. 2012-08-12 21:25:01 +02:00
sprinter-sexp.c Adding an S-expression structured output printer. 2012-12-08 09:26:29 -04:00
sprinter-text.c sprinter: add text0 formatter for null character separated text 2012-12-18 17:03:34 -04:00
sprinter.h sprinter: add text0 formatter for null character separated text 2012-12-18 17:03:34 -04:00
tag-util.c cli: make caller check tag count in parse_tag_command_line 2013-03-30 18:33:40 -04:00
tag-util.h notmuch-tag.c: convert to use tag-util 2013-01-07 20:42:21 -04:00
version bump versions to 0.15.2 2013-02-17 11:39:46 -04: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