Commit graph

3209 commits

Author SHA1 Message Date
Carl Worth
5dbe1c0307 notmuch.el: Fix indentation.
This line was indented incorrectly which can be confusing.
2010-02-10 12:40:18 -08:00
Carl Worth
ca16b2225d notmuch.el: Avoid infinite loop marking up message with no parts.
The infinite loop was triggered by a message consisting of a single
attachment within the body, (and no "part") tags.

We need to do things in response to this bug (beyond this specific
fix):

1. Create a test suite that exercises our emacs frontend so that bugs
   like this do not come back to haunt us after we fix them once.

2. Switch from our ad-hoc regexp based search of message-part delimeters
   to known-good code for parsing a structured document, (for example,
   the outstanding JSON patches).
2010-02-10 11:44:15 -08:00
Alexander Botero-Lowry
b611cc2319 Reintroduce HTML inlining, with a much needed optimization
Now instead of requiring every single message be parsed, we now check
the Content-type in the parsed headers and only do HTML inlining if it's
text/html
2010-02-09 18:16:23 -08:00
Carl Worth
e0a8dee8bc Fix printf for when uint64_t != unsigned long long int
Thanks to Michal Sojka <sojkam1@fel.cvut.cz> for pointing out the
correct fix, which I verified in the freely-available WG14/N1124 draft
(from the C99 working group) which is available here:

http://www.open-std.org/JTC1/SC22/wg14/www/docs/n1124.pdf
2010-02-09 11:14:16 -08:00
Carl Worth
9439b217c3 Switch from random to sequential thread identifiers.
The sequential identifiers have the advantage of being guaranteed to
be unique (until we overflow a 64-bit unsigned integer), and also take
up half as much space in the "notmuch search" output (16 columns
rather than 32).

This change also has the side effect of fixing a bug where notmuch
could block on /dev/random at startup (waiting for some entropy to
appear). This bug was hit hard by the test suite, (which could easily
exhaust the available entropy on common systems---resulting in large
delays of the test suite).
2010-02-09 11:14:11 -08:00
Carl Worth
0d58d46f7a TODO: Add some recently discussed items.
These were collected either from the mailing list of from IRC
conversations. The good ideas probably aren't mine, and the mistakes
probably are.
2010-02-09 11:02:18 -08:00
Keith Packard
79d3f9773c Allow folders with no messages to be elided from list
This makes it easier to see folders with messages.
Eliding empty folders is togged with the 'e' binding.

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-02-08 14:40:25 -08:00
Keith Packard
b16a767f51 Look at whitespace to separate folder name from count
This allows folder names to contain any non-blank characters

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-02-08 14:35:29 -08:00
Keith Packard
b58dcfb702 Add 'm' and ' ' bindings to notmuch-folder view
This allows the user to compose new mail from the folder view, and
also to use <space> to show the current folder.

Signed-off-by: Keith Packard <keithp@keithp.com>
2010-02-08 14:35:08 -08:00
Kan-Ru Chen
0a1e37a8c9 emacs: Use font-lock-comment-face to highlight citation button
Signed-off-by: Kan-Ru Chen <kanru@kanru.info>
2010-02-08 14:29:29 -08:00
David Bremner
9b93717a6d notmuch.el: show some of citation even when hiding.
- rename notmuch-show-citation-lines-min to n-s-c-l-prefix
- call forward-line with the appropriate parameter to adjust
  region to be hidden.
- change citation button text so that it makes (some) sense when citation is shown

Reviewed-by: Kan-Ru Chen <kanru@kanru.info>
2010-02-08 14:24:34 -08:00
David Bremner
24b2f7699f notmuch.el: Refactor citation markup. Variables for minimum size, button text.
This is a fairly intrusive rewrite.

- I pulled the common code for the signature and citation case out
  into a separate function. This is not so much shorter, but I think it
  will be easier to maintain.

- I replaced the sequence of (looking-at blah) (forward-line)  with a single
  re-search-forward per citation.

New variables

- notmuch-show-signature-button-format, notmuch-show-citation-button-format
  Allow customization of button text.

- notmuch-show-citation-lines-min
  Do not buttonize citations below the given threshold.

Reviewed-by: Kan-Ru Chen <kanru@kanru.info>
2010-02-08 14:24:11 -08:00
Carl Worth
7a9bacac67 notmuch.h: Fix a couple of typos in the documentation.
Obviously, the spell-checker isn't able to catch every mistake
I make.
2010-02-05 17:31:40 -08:00
Carl Worth
069cb5a73a notmuch restore: Don't waste time with messages with unchanged tags.
It's a simple optimization to look at a message and check that the
existing tags are actually different than the tags we are setting
before we do anything.

For my mail store this takes a "notmuch restore" that does nothing
from about 10 minutes down to 1 minute, so there's a significant
speedup here.
2010-02-05 17:29:56 -08:00
Carl Worth
ef8a74944c notmuch-test: Add basic tests for "notmuch dump" and "notmuch restore"
Our test-suite coverage keeps improving, (slowly).
2010-02-05 17:28:25 -08:00
Carl Worth
b918e04ee8 notmuch-test: Fix misalignment in output.
Clean output is just so much easier to read (and validate).
2010-02-05 17:27:22 -08:00
Kan-Ru Chen
d9c9e56912 notmuch.el: Use emacs built-in forward-button and backward-button
There are built-ins, so why not use them?

Signed-off-by: Kan-Ru Chen <kanru@kanru.info>
2010-02-05 11:31:38 -08:00
Carl Worth
78c85f053b Use forward-line instead of next-line
We do this all the time, but at least emacs is kind enough to remind us,
(when compiling), that next-line is only intended for interactive use,
and we should use forward-line inside of lisp code.
2010-02-05 11:31:38 -08:00
Carl Worth
ee3e7416f0 notmuch.el: Add missing documentation for the new 'h' keybinding.
Without this, our help screen displayed 'h' with no description of
what it does.
2010-02-05 11:31:38 -08:00
Kan-Ru Chen
b0ccc88146 notmuch.el: Add keybinding to toggle display of message body and headers.
I really missed this feature. Added notmuch-show-toggle-current-body and
notmuch-show-toggle-current-header and bind them to 'b' and 'h'.

Signed-off-by: Kan-Ru Chen <kanru@kanru.info>
2010-02-05 11:10:13 -08:00
Carl Worth
a47bf6e7dc notmuch-test: Add test to verify that uuencoded data is not indexed.
As recently promised, no new features are being accepted to notmuch
without corresponding new tests for the test suite.
2010-02-05 10:33:11 -08:00
Carl Worth
bc79dc9d6c notmuch-test: Add several tests of "notmuch search"
These tests were surprisingly simple to write---not much code at all
and most of them worked the first time even with hand-prepared
versions of the expected output.
2010-02-05 10:33:06 -08:00
Carl Worth
5c938e51b2 notmuch-test: Add a new add_message function.
The previous generate_message function is what's needed when testing
"notmuch new". But after that, we never want to generate a message
without also adding it to the index. So create a new add_message
function with this convenience.
2010-02-04 17:34:48 -08:00
Carl Worth
2bc0af15aa Eliminate some useless gobject boilerplate.
If we had external users of this filter then they might expect some of
these macros to exist. But since this is just internal, that's just
unneeded noise.
2010-02-04 17:26:00 -08:00
Carl Worth
3767c6f9f9 notmuch new: Don't index uuencoded data.
With modern MIME attachments, we're already avoiding indexing the
attachments. But for old-school uuencoded data in the mail, we have
been directly indexing the encoded data as terms, (which is not useful
at all---nobody will ever ytry to search based on the seemingly random
uuencoded data).

Additionally, indexing a modestly large uuencoded file seems to make
Xapian go insane, (consuming *lots* of memory).

We fix both problems by detecting uuencoded content and not performing
any indexing of it.
2010-02-04 17:08:11 -08:00
Carl Worth
d111c720ba notmuch reply: Rename the mailing_list_munged_reply_to function
This function detects whether the address in the Reply-To header
already appears in either To or Cc. So give it a name that reflects
what it does (reply_to_header_is_redundant) rather than the old name
which described one possible use of the function, (as a simple
heuristic for detecting whether a mailing list had applied reply-to
munging).
2010-02-04 12:42:09 -08:00
Carl Worth
62379f3dee notmuch reply: Prevent GMIME assertion complaints for empty Reply-to header.
Apparently, GMime doesn't want to create a valid address list object
for an empty string. That's annoying, but it's easy enough to test for
the empty string and avoid the problem.
2010-02-04 12:42:09 -08:00
Carl Worth
82e47ec92b notmuch reply: Use strstr instead of strcasestr for portability.
This change was already recommended in a comment in the original
implementation of this patch. If someone really wants to support
un-munging in the case of To: and Reply-To: having the same address
but different case, then they can provide a portable approach for
that.
2010-02-04 12:42:09 -08:00
Carl Worth
aea35aa5c6 notmuch reply: Fix the support for reply-to un-munging.
The condition was using a reversed sense for the test of the return
value of strcasestr, (perhaps confusing it with the usage of strcmp?).
2010-02-04 12:42:09 -08:00
Carl Worth
9953e9a5a8 notmuch-reply: Add missing whitespace.
Some recently-added functions were to hard for me to read without
the expected whitespace. Fix these.
2010-02-04 12:42:09 -08:00
Carl Worth
9041c1389c notmuch-test: Test "notmuch reply" with a reply-to-munged mail
This is a test for the recently added feature where we detect that the
reply-to address already exists in the To: or Cc: header so will
already be replied to. In this case we want to include the From:
address in our reply, (where, otherwise we would use the Reply-To
address *instead* of the address in the From header).
2010-02-04 12:42:03 -08:00
Jed Brown
fddd3d831b notmuch-reply.c: Handle munged `Reply-To' headers.
Some mailing lists engage in the evil practice of changing the Reply-To
header so that replies from all mailers go to the list by default, at
the expense of not responding to the person who actually sent the
message.  When this is detected, we reply to `From' and remove the
duplicate response to the mailing list.  Consider a reply to the
following message.

  From: Some User <some.user@example.com>
  To: Sample users list <sample-users@sample.org>
  Reply-To: Sample users list <sample-users@sample.org>

Prior to this patch, `notmuch reply' produces

  To: Sample users list <sample-users@sample.org>,
      Sample users list <sample-users@sample.org>

and after the patch,

  To: Some User <some.user@example.com>,
      Sample users list <sample-users@sample.org>

Signed-off-by: Jed Brown <jed@59A2.org>
2010-02-04 12:10:43 -08:00
Jed Brown
fb50f31048 notmuch-reply.c: Factor adding recipients into common function
This code was already duplicated. We move it to a new, shared
add_recipients_from_message function, in preparation for more
sophisticated mailing list logic.

Signed-off-by: Jed Brown <jed@59A2.org>
2010-02-04 12:10:43 -08:00
Carl Worth
bcba87a3e2 notmuch-test: Test "notmuch reply" with multiple recipients
The feature tested here is that we reply to both the sender and to
others addresses on the To: line of the original message, but that we
don't reply to our own address.
2010-02-04 12:10:43 -08:00
Carl Worth
fbe595e3b9 notmuch-test: Add test for "notmuch reply" with a CC header.
A simple test to help round out the set of tested features.
2010-02-04 12:10:43 -08:00
Carl Worth
96134fc723 notmuch-test: Add "notmuch reply" test for reply-to support.
This is the standard support of reply-to, (replying to that address
rather than the from address). It has nothing to do with the proposed
feature for extra-clever handling of a mail from a mailing-list that
has munged the reply-to header.
2010-02-04 12:10:43 -08:00
Carl Worth
33f55e43e1 notmuch-test: Test "notmuch reply" from alternate address.
When reply to a message addresses to an address configured in the
other_email setting in the configuration file, the reply should use
that address in the From header. Test this.
2010-02-04 12:10:43 -08:00
Carl Worth
4e66b777cf notmuch-test: Add a basic test of "notmuch reply"
Simply ensuring that the reply template is formatted as expected.
2010-02-04 12:10:42 -08:00
Carl Worth
5a4532860c notmuch-test: Eliminate sleeps to speed up test suite run
We were sleeping merely to ensure that our updates to the mail store
would result in the mtime of the appropriate directories being
updated. We make the test suite run faster by not sleeping, but
instead explicitly updating the mtime of the directory to a future
time with touch.

We're careful to ensure that the time is not merely in the future
compared to the current time, but also later than any previous update
to the same directory mtime.
2010-02-04 12:10:42 -08:00
Carl Worth
a821ba5737 notmuch-test: Allow custom headers when generating messages
This provides the control that future tests will need, (for example,
adding a CC field to ensure proper handling with "notmuch reply",
etc.)
2010-02-04 08:44:05 -08:00
Carl Worth
0d67c52f4d notmuch-test: Use named-parameters for generate_message function
This makes the test suite bash-specific, but that's not much of
an issue for me, (if somebody else would prefer some other language
then they can rewrite the test suite and maintain it).

The advantage here is that we'll now be able to easily generate
custom messages for testing operations that depend on the message
content, (such as "notmuch reply", etc.).
2010-02-04 08:44:05 -08:00
Carl Worth
8d37b2f982 Add actual testing to notmuch-test
We verify that each command creates output exactly as expected (after
ignoring variable output such as the report of how long an operation
took).
2010-02-04 08:44:05 -08:00
martin f. krafft
c2904e9842 Add suggestion to vim-addon-manager.
Signed-off-by: martin f. krafft <madduck@debian.org>
2010-01-26 09:52:58 +13:00
Carl Worth
a2d919eb2f Add a very rough beginning of a test suite.
This notmuch-test script simply runs a few different notmuch operations,
(things that I found were useful while testing the rename-support code).

It's not useful as a test suite yet, since it doesn't actually check
the results of any operation, (the user of the suite has to know what
the results should be and must manually verify them. So there's no
integration with the build system yet, (no "make test" target).

But I didn't want to lose what I had so far, so here it is.
2010-01-24 07:36:39 +13:00
Carl Worth
4e051f8d95 notmuch.desktop: Clarify that this is the emacs interface to notmuch.
And the name is notmuch not not much.
2010-01-24 07:30:08 +13:00
Jeffrey C. Ollie
1bf121924d Add install target for notmuch.desktop file.
Add an install target that uses desktop-file-install to install the
desktop file in the appropriate location.  The location of the install
can be modified by changing the desktop_dir variable.

Signed-off-by: Jeffrey C. Ollie <jeff@ocjtech.us>
2010-01-24 07:29:54 +13:00
Carl Worth
c25bc03dc6 Fix misspelling of DT_UNKNOWN.
How foolish of me to advertise the fact that I pushed a commit without
compiling it first...
2010-01-23 22:45:23 +13:00
Carl Worth
184625ac9b README: Tighten up the text a bit.
As Keith pointed out, (with a humorous citation from Mark Twain),
the two uses of "very" added nothing to the description. Also,
"large collection of email" was repeated uselessly.
2010-01-23 19:00:25 +13:00
Carl Worth
344c48a47d Add some comments to document the recently-fixed handling of d_type.
The fix was subtle, (requiring less code than originally expected), so
it behooves us to document it well.
2010-01-23 18:58:30 +13:00
Geo Carncross
c5416b6f1b notmuch new: Fix to work on filesystems returning DT_UNKNOWN
Such as reiserfs or xfs. This has been broken since the merge of
support for rename and deletion of files from the mail store.

Here's the original justification for the patch:

A review of notmuch-new.c shows three uses of ->d_type:

Near line 153, in _entries_resemble_maildir() we can simply allow for
DT_UNKNOWN. This would fail if people have MH-style folders which have
three folders called "new" "cur" and "tmp", but that seems unlikely, in
which case the "tmp" folder would simply not be scanned.

Near line 273 in add_files_recursive() we have another check. If
DT_UNKNOWN, we fall through, then add_files_recursive() does a stat
almost immediately, returning with success if the path isn't a
directory.

Thus, the fallback is already written.

Finally, near line 343, in add_files_recursive() (a long function) we
have another check. Here we can simply treat DT_UNKNOWN as DT_LNK, since
the logic for the stat() results are the same.
2010-01-23 18:52:30 +13:00