Commit graph

3144 commits

Author SHA1 Message Date
Carl Worth
2cc3165163 notmuch.el: Don't use literal control characters in strings.
Avoding these is nicer to users, text editors, and our poor little
notmuch.el code itself that would get confused when seeing a copy of
itself in email. (Of course, we should still fix that bug, but this
workaround is good nonetheless.)
2009-11-20 13:09:58 +01:00
Carl Worth
0a575c9580 Makefile: Hard-code emacs_lispdir if emacs pkg-config file not available
Using pkg-config to find this variable is nice if it works. Go back to
the previously used value if it doesn't.
2009-11-20 13:07:42 +01:00
Carl Worth
1ddba66a3f Makefile: Remove unused variable emacs_startdir
This was added in a prelimnary version of a previous commit that would
automatically load notmuch.el for anyone running emacs. It's not used
at all in the current Makefile.
2009-11-20 12:58:42 +01:00
Carl Worth
31b54bc787 Avoid access of a Xapian iterator's object when there's nothing there.
This eliminates a crash when a message (either corrupted or a non-mail
file that wasn't properly detected as not being mail) has no In-Reply-To
header, (and so few terms that trying to skip to the prefix of the
In-Reply-To terms actually brings us to the end of the termlist).
2009-11-20 12:06:11 +01:00
Carl Worth
f6ca697e27 Revert inadvertently committed code.
This was accidentally included with commit:

	ddac17343a

(It was a dirty chunk in my directory that I accidentally amended into
the submitted patch.)
2009-11-20 11:12:42 +01:00
Jeffrey C. Ollie
c05c3f1584 notmuch build: add a RPM spec file
Add a spec file for building RPM packages.

Signed-off-by: Jeffrey C. Ollie <jeff@ocjtech.us>
2009-11-20 10:37:38 +01:00
Jeffrey C. Ollie
dad3dd64b7 Add a .desktop file entry.
This will add an entry in your window manager's menus that will create
up a new emacs process and start notmuch.

Signed-off-by: Jeffrey C. Ollie <jeff@ocjtech.us>
2009-11-20 10:36:15 +01:00
Jeffrey C. Ollie
d98718d104 Improve installation of emacs mode.
1) Add a separate targets to build and install emacs mode.

2) Don't hardcode the installation directory, instead use emacs'
   pkg-config module.

3) Install a byte compiled version of the emacs mode.

4) Install the emacs mode in emacs' site-lisp directory.  Put
   "(require 'notmuch)" in your .emacs to load it automatically.

5) Ignore byte-compiled emacs files.

Signed-off-by: Jeffrey C. Ollie <jeff@ocjtech.us>
Reviewed-by: Ingmar Vanhassel <ingmar@exherbo.org>
Reviewed-by: Keith Packard <keithp@keithp.com>
2009-11-20 10:34:29 +01:00
Rolland Santimano
19d951ee16 Have git ignore tags & cscope files 2009-11-20 10:30:05 +01:00
Peter Wang
ddac17343a Put $(LDFLAGS) after the list of object files.
Some linkers on some systems are particularly picky about the order of
arguments in order to properly linkt. So this fixes failures on some
systems.
2009-11-19 18:05:22 +01:00
Aneesh Kumar K.V
3f52f59c1e notmuch: Add search mode hook
This patch add notmuch-search-hook that gets run when we
after displaying search results

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Cc:Keith Packard <keithp@keithp.com>
2009-11-19 14:01:49 +01:00
Ingmar Vanhassel
aa8c2224ee Makefile: Create elisp install directory explicitly
When doing a DESTDIR install, this directory likely won't exist, and
installing notmuch.el will fail.

See 0d4b5292
2009-11-19 12:24:11 +01:00
Ingmar Vanhassel
ec7a47d756 bash-completion: Complete options for notmuch search 2009-11-19 11:31:44 +01:00
Ingmar Vanhassel
82da15be3b bash-completion: Localize variables, use more consistent variable names 2009-11-19 11:31:44 +01:00
Ingmar Vanhassel
829dac9a1b bash-completion: Whitespace fix
Signed-off-by: Ingmar Vanhassel <ingmar@exherbo.org>
2009-11-19 11:31:44 +01:00
Ingmar Vanhassel
4033d87fdd bash-completion: Bash has & should use [[ == ]]
Signed-off-by: Ingmar Vanhassel <ingmar@exherbo.org>
2009-11-19 11:31:44 +01:00
Adrian Perez
e5da2b701f Allow lone "not" search operators
As suggested by Keith in FLAG_PURE_NOT allows for expressions like:

  notmuch search NOT tag:inbox

Note that this way a search like:

  notmuch search foobar NOT tag:inbox

should not be written instead:

  notmuch search foobar AND NOT tag:inbox

In my opinion, the latter feels more natural and is somewhat more explicit.
It gives a better clue of what the search is about instead of assuming that
an implicit AND operator is there.
2009-11-19 01:42:31 +01:00
Ingmar Vanhassel
b6c4978fda .gitignore: Add common editor droppings 2009-11-19 01:39:31 +01:00
Carl Worth
0c0a401f70 notmuch new: Restore printout of total files counted.
This was more fallout from the recent re-shuffling of this code.
2009-11-19 00:32:21 +01:00
Carl Worth
3687472d45 notmuch new: Fix countdown timer on first run.
A recent shuffling of this code accidentally disabled the timer,
(making the time spent counting the files totally useless).
2009-11-19 00:29:52 +01:00
Carl Worth
0d4b529297 Makefile: Actually install the emacs mode.
Should have been doing this a long time ago.
2009-11-19 00:27:34 +01:00
Carl Worth
83a2ed3c2f notmuch.el: Add a reply binding ('r') to search mode to reply to a whole thread.
This is basically right, (I get a message buffer with all the mails
quoted), but somehow notmuch reply is reversing the messages. That's a
nuisance.
2009-11-19 00:21:24 +01:00
Chris Wilson
f52528a344 reply: Pointer mismatch.
Apparently typeof (size_t) != unsigned int on my x86-64.
2009-11-19 00:20:24 +01:00
Chris Wilson
4a6a1ed654 Makefile: evaluate pkg-config once
Currently the same `pkg-config ...` is executed for every target, so
just store the results in a variable.
2009-11-19 00:20:20 +01:00
Keith Packard
394cb1c46d Make reply/show/tag all require at least one search term
In particular, notmuch tag -inbox "" tended to take a long time to
run, happened if you hit 'a' on a blank line in the search view and
probably didn't have the desired effect.

Signed-off-by: Keith Packard <keithp@keithp.com>
2009-11-18 23:37:35 +01:00
Keith Packard
956917915f Have git ignore etags file 2009-11-18 23:36:52 +01:00
Keith Packard
469d786c25 Filter out carriage-returns in show and reply output.
Thanks, windows mail clients.

Signed-off-by: Keith Packard <keithp@keithp.com>
2009-11-18 23:34:43 +01:00
Keith Packard
1a75f88d8b We use the message mail system for new mail, let emacs know.
This makes things like the goto-address system bring up the right
message composition window.

Signed-off-by: Keith Packard <keithp@keithp.com>
2009-11-18 23:32:39 +01:00
Keith Packard
adbdafbde2 Create a default notmuch-show-hook that highlights URLs and uses word-wrap
I created the notmuch-show-hook precisely so I could add these two
options, but I suspect most people will want them, so I just made them
the default. If you don't want them, you can use remove-hook to get
rid of this.

Signed-off-by: Keith Packard <keithp@keithp.com>
2009-11-18 23:30:10 +01:00
Keith Packard
86f7ee24d6 Set truncate-lines variable for search buffers.
This keeps them from wrapping.

Signed-off-by: Keith Packard <keithp@keithp.com>
2009-11-18 23:29:55 +01:00
Keith Packard
6caf631ebf Add notmuch-show-hook to allow customization of show windows
I wanted to enable got-address-mode and visual-line-mode in my show
windows to make messages easier to read and URLs easier to
follow. This hook allows the user to run arbitrary code each time a
message is shown.

Signed-off-by: Keith Packard <keithp@keithp.com>
2009-11-18 23:29:44 +01:00
Stewart Smith
fca070f8ce count_files: sort directory in inode order before statting
Carl says: This has similar performance benefits as the previous
patch, and I fixed similar style issues here as well, (including
missing more of a commit message than the one-line summary).
2009-11-18 22:31:57 +01:00
Carl Worth
22759fb279 Minor style fixups for the previous fix.
Use consistent whitespace, a slightly less abbreviated identifier, and
avoid a C99 declaration after statement.
2009-11-18 22:31:50 +01:00
Stewart Smith
a45ff8c361 Read mail directory in inode number order
This gives a rather decent reduction in number of seeks required when
reading a Maildir that isn't in pagecache.

Most filesystems give some locality on disk based on inode numbers.
In ext[234] this is the inode tables, in XFS groups of sequential inode
numbers are together on disk and the most significant bits indicate
allocation group (i.e inode 1,000,000 is always after inode 1,000).

With this patch, we read in the whole directory, sort by inode number
before stat()ing the contents.

Ideally, directory is sequential and then we make one scan through the
file system stat()ing.

Since the universe is not ideal, we'll probably seek during reading the
directory and a fair bit while reading the inodes themselves.

However... with readahead, and stat()ing in inode order, we should be
in the best place possible to hit the cache.

In a (not very good) benchmark of "how long does it take to find the first
15,000 messages in my Maildir after 'echo 3 > /proc/sys/vm/drop_caches'",
this patch consistently cut at least 8 seconds off the scan time.

Without patch: 50 seconds
With patch: 38-42 seconds.

(I did this in a previous maildir reading project and saw large improvements too)
2009-11-18 22:25:41 +01:00
Carl Worth
0656fb518d Make '?" bring up a list of bindings.
Just using describe-mode for now, (though something more specialized
would be better).
2009-11-18 19:12:13 +01:00
Stewart Smith
b032cf98f5 Fix linking with gcc to use g++ to link in C++ libs.
Previously, Ubuntu 9.10, gcc 4.4.1 was getting:

/usr/bin/ld: lib/notmuch.a(database.o): in function global
constructors keyed to BOOLEAN_PREFIX_INTERNAL:database.cc(.text+0x3a):
error: undefined reference to 'std::ios_base::Init::Init()'
2009-11-18 05:34:02 -08:00
Carl Worth
fe6d3b79b0 notmuch main(): Remove stale comment.
The code this comment was referring to has since been deleted.
2009-11-18 05:22:14 -08:00
Lars Kellogg-Stedman
9d69e332fa notmuch help: Print to stdout, not to stderr.
Let usage() take a FILE * argument so that you can output to stderr in
response to usage errors, and stdout in response to an explicit
request.
2009-11-18 05:21:06 -08:00
Carl Worth
306635c27d notmuch search: Avoid infinite stream of exceptions from "notmuch search"
That is, give a nice error message and exit if no search terms are
provided. Thanks to Priit Laes <plaes@plaes.org> for reporting the
error and providing an early version of the fix.
2009-11-18 03:29:30 -08:00
Carl Worth
26a4741b9c README: Mention the actual mailing list address now that it exists.
Much better than telling people to mail me individually.
2009-11-18 03:24:27 -08:00
Ingmar Vanhassel
2ce25b93a7 Typsos 2009-11-18 03:21:36 -08:00
Jan Janak
835e3a6977 Older versions of install do not support -C.
Do not use -C cmdline option of install, older versions, commonly found in
distributions like Debian, do not seem to support it. Running make install
on such systems (tested on Debian Lenny) fails.

Signed-off-by: Jan Janak <jan@ryngle.com>
2009-11-18 02:41:15 -08:00
Carl Worth
fc3a3be337 linke_message: Avoid segfault when In-Reply-to header is empty.
This was recently introduced in commit:

	64c03ae97f

which was adding extra checks to avoid adding a self-referencing
message.

How many times am I going to fix a dumb regression like this and say
"we really need a test suite" before I actually sit down and write the
test suite?
2009-11-18 01:36:30 -08:00
Carl Worth
024cdf8e3c notmuch-completion.bash: Update for new commands and help.
Would be nice to add the options for "notmuch search" too.
2009-11-18 01:29:19 -08:00
Carl Worth
533d0f5382 notmuch help: Update documentation (following recent text from notmuch.1)
We take the recently created text from the notmuch manual page and
update the "notmuch help" command to use similar text. In particular,
we add a new "notmuch help search-terms" for documenting the search
syntax that is common to several commands.
2009-11-17 23:37:21 -08:00
Carl Worth
d6faef5b76 notmuch.1: Fix a couple of typos.
Little things I noticed while using this text as reference for the
"notmuch help" documentation.
2009-11-17 23:36:44 -08:00
Carl Worth
4443bb15e6 man.1: A big update of the notmuch manual page.
I set out merely to add documentation for the recently-added options
for "notmuch search" (--first, --max-threads, and --sort), but ended
up revamping a lot. A significant change is a new SEARCH SYNTAX
section separate from "notmuch search" that is referred to in the
documentation of search, show, reply, and tag.

Also many sections were updated to reflect recent changes, (such as
the dropping of the NOTMUCH_BASE environment variable, the addition of
the .notmuch-config file, etc.)
2009-11-17 22:16:35 -08:00
Carl Worth
544df2f517 Makefile: Fix missing dependency for notmuch.1 manual page.
The Makefile was failing to regnerate the notmuch.1.gz file when
notmuch.1 was updated, (so stale documentation could potentially be
installed).
2009-11-17 21:04:31 -08:00
Carl Worth
3334865725 notmuch search: Change default search order to be newest messages first.
This is what most people want for a _search_ command. It's often
different for actually reading mail in an inbox, (where it makes more
sense to have results displayed in chronological order), but in such a
case, ther user is likely using an interface that can simply pass the
--sort=oldest-first option to "notmuch search".

Here we're also change the sort enum from NOTMUCH_SORT_DATE and
NOTMUCH_SORT_DATE_REVERSE to NOTMUCH_SORT_OLDEST_FIRST and
NOTMUCH_SORT_NEWEST_FIRST. Similarly we replace the --reverse option
to "notmuch search" with two options: --sort=oldest-first and
--sort=newest-first.

Finally, these changes are all tracked in the emacs interface, (which
has no change in its behavior).
2009-11-17 20:58:30 -08:00
Carl Worth
5dec429f45 notmuch search: Return first 100 results as quickly as possible.
This is one of those cases where total time is not the metric of
interest. We increase the total time of the search, (by doing some
redundant work for the initial threads). But more significantly, we
give the user *some* results nearly instantaneously, (so that the user
might see the result of interest without ever even waiting for the
complete results to come in).
2009-11-17 19:11:05 -08:00