notmuch.git
14 years agoemacs: Add more functions to clean up text/plain parts
David Edmondson [Thu, 22 Apr 2010 12:26:06 +0000 (13:26 +0100)]
emacs: Add more functions to clean up text/plain parts

Add:
- notmuch-wash-wrap-long-lines: Wrap lines longer than the width of
  the current window whilst maintaining any citation prefix.
- notmuch-wash-tidy-citations: Tidy up citations by:
  - compress repeated otherwise blank citation lines,
  - remove otherwise blank citation lines at the head and tail of a
    citation and remove blank lines between attribution statements and
    the citation,
- notmuch-wash-compress-blanks: Compress repeated blank lines and
  remove leading and trailing blank lines.

Enable `notmuch-wash-tidy-citations' and
`notmuch-wash-compress-blanks' by default by adding them to
`notmuch-show-insert-text/plain-hook'. `notmuch-wash-wrap-long-lines'
is not enabled by default.

If `notmuch-wash-wrap-long-lines' is enabled, word wrapping of the
buffer leads to an unappealing display of text, so provide a function
to disable it and add it to the list of `notmuch-show-mode' hook
functions.

14 years agoemacs: Fix i-search to open up invisible citations as necessary
David Edmondson [Fri, 23 Apr 2010 17:39:33 +0000 (18:39 +0100)]
emacs: Fix i-search to open up invisible citations as necessary

Add an `isearch-open-invisible' property to the overlays used to hide
citations and signatures, together with an appropriate function to
leave the invisible text visible should that be required.

14 years agolib: Ensure notmuch_query_search_messages returns NULL on an exception.
Carl Worth [Sat, 24 Apr 2010 14:25:12 +0000 (07:25 -0700)]
lib: Ensure notmuch_query_search_messages returns NULL on an exception.

Previously, this function may have segfaulted immediately after
reporting the exception.

14 years agolib: Document that notmuch_query_count_messages may return 0 if an exception occurs
Carl Worth [Sat, 24 Apr 2010 14:24:01 +0000 (07:24 -0700)]
lib: Document that notmuch_query_count_messages may return 0 if an exception occurs

This isn't a behavioral change---just a calrification in the documentation.

14 years agolib: Audit all notmuch_database call for Xapian exception handling.
Carl Worth [Sat, 24 Apr 2010 14:22:34 +0000 (07:22 -0700)]
lib: Audit all notmuch_database call for Xapian exception handling.

Our current approach is for top-level entry poitns in the library
to have try/catch blocks that catch any Xapian exception and print
a message. Add a few missing blocks and fix up the documentation.

14 years agolib: Audit calls to notmuch_message_get_header to handle NULL return
Carl Worth [Sat, 24 Apr 2010 13:46:43 +0000 (06:46 -0700)]
lib: Audit calls to notmuch_message_get_header to handle NULL return

Sebastian Spaeth reported [*] a segfault within libnotmuch when
running notmuch operations while an asyncronous offlineimap job had
removed some files from the mail store. Avoid this by handling all
cases where notmuch_message_get_header could return NULL.

[*] See message id:87d3xqti3o.fsf@SSpaeth.de on notmuch@notmuchmail.org

14 years agolib: Simplify code to set subject from matched message.
Carl Worth [Sat, 24 Apr 2010 13:45:51 +0000 (06:45 -0700)]
lib: Simplify code to set subject from matched message.

Simply moving the code from _add_matched_message to a new
_set_subject_from_message function.

14 years agonotmuch reply: Handle notmuch_message_get_header returning NULL.
Carl Worth [Sat, 24 Apr 2010 13:33:32 +0000 (06:33 -0700)]
notmuch reply: Handle notmuch_message_get_header returning NULL.

This seems a rather unlikely case, (replying to a message that
disappears out from under us half way through the reply), but
notmuch_message_get_header is documented to return NULL in error
cases, so we might as well deal sanely with that (rather than just
crashing).

14 years agoemacs: Make notmuch-hello jumpt to search bar by default.
Carl Worth [Sat, 24 Apr 2010 13:15:09 +0000 (06:15 -0700)]
emacs: Make notmuch-hello jumpt to search bar by default.

This isn't ideal for me personally, since I usually want to inovke a
saved search rather than entering a new search textually. But it's at
least better than just putting point in the upper-left corner where it
doesn't do anything.

14 years agoemacs: Rename notmuch-show-headers to notmuch-message-headers
Carl Worth [Sat, 24 Apr 2010 13:11:57 +0000 (06:11 -0700)]
emacs: Rename notmuch-show-headers to notmuch-message-headers

And similarly for notmuch-show-headers-visible to
notmuch-message-headers-visible.

I've never liked notmuch-show as a namespace prefix, but it looks
especially bad when it appears as "Notmuch Show Headers Visible" in
the customize buffer. Give nicer names to these variables which are
exported for user manipulation.

14 years agoemacs: Don't display From header by default.
Carl Worth [Sat, 24 Apr 2010 13:06:12 +0000 (06:06 -0700)]
emacs: Don't display From header by default.

This header is redundant with the summary-line of each message which
contains the same information.

14 years agoemacs: Allow user to customize which headers are visible.
Carl Worth [Sat, 24 Apr 2010 13:04:59 +0000 (06:04 -0700)]
emacs: Allow user to customize which headers are visible.

Continuing our tradition of making more and more of the notmuch
functionality configurable fromt eh customize interface.

14 years agoemacs: Change message headers (To, CC, From, and Date) to be visible by default
Carl Worth [Sat, 24 Apr 2010 12:48:04 +0000 (05:48 -0700)]
emacs: Change message headers (To, CC, From, and Date) to be visible by default

Users can still toggle these to be hidden by default, and can still
toggle visibility of headers for a single message with the 'h'
command.

14 years agoemacs: Allow headers to be shown by default in show mode
David Edmondson [Fri, 23 Apr 2010 11:54:21 +0000 (12:54 +0100)]
emacs: Allow headers to be shown by default in show mode

Add `notmuch-show-headers-visible' which, when set `t', causes headers
to be shown by default.

14 years agoremoved unused variables
Dirk Hohndel [Fri, 23 Apr 2010 03:26:46 +0000 (20:26 -0700)]
removed unused variables

trivial compiler warning fix

Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
14 years agoemacs: Add notmuch-address.el for address completion using notmuch
David Edmondson [Thu, 22 Apr 2010 09:03:43 +0000 (10:03 +0100)]
emacs: Add notmuch-address.el for address completion using notmuch

A tool `notmuch-addresses' is required to produce addresses which
match a query string. An example of a suitable script can be found in
the git repository at
    http://jkr.acm.jhu.edu/git/notmuch_addresses.git
There are no doubt others.

14 years agoemacs: Rename notmuch-show-toggle-all to notmuch-show-open-or-close-all
Carl Worth [Sat, 24 Apr 2010 00:27:14 +0000 (17:27 -0700)]
emacs: Rename notmuch-show-toggle-all to notmuch-show-open-or-close-all

The function was named and documented incorrectly before, saying that
it would "change the visibility of all messages". Instead it only
opens the messages that are closed---it doesn't simultanesously close
the messages that are open. (Granted, nobody would *want* that
behavior I don't think, but the naming was confusing before.)

14 years agoemacs/notmuch-show.el: Add `notmuch-show-toggle-all' bound to M-RET
David Edmondson [Thu, 22 Apr 2010 08:24:03 +0000 (09:24 +0100)]
emacs/notmuch-show.el: Add `notmuch-show-toggle-all' bound to M-RET

`notmuch-show-toggle-all' changes the visibility all of the messages
in the current thread. By default it makes all of the messages
visible. With a prefix argument, it makes them all not visible.

14 years agofix expected test result to include Bcc lines
Dirk Hohndel [Wed, 21 Apr 2010 21:55:58 +0000 (14:55 -0700)]
fix expected test result to include Bcc lines

this test actually tests behavior that I consider as broken.
The Bcc should be to the same address as used in the From line,
otherwise we are creating a potential information leak as email
that is related to one email account (say, work) is copied to
a different account

Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
Reviewed-by: Carl Worth <cworth@cworth.org>
These tests don't actually pass yet, since the feature being tested
has not been merged. But gettting these tests in first will let us
more easily test that the feature actually works, (and will help us
ensure we don't forget the feature before the next release).

14 years agoadd From guessing tests to test suite
Dirk Hohndel [Wed, 21 Apr 2010 21:55:57 +0000 (14:55 -0700)]
add From guessing tests to test suite

right now these are not trying to be overly fancy
simply one test per strategy that we apply to figure out the best
from address - including the fallback if there's nothing to go on

Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
14 years agoemacs: Use single-quote not double-quote when constructing search
Carl Worth [Fri, 23 Apr 2010 23:39:18 +0000 (16:39 -0700)]
emacs: Use single-quote not double-quote when constructing search

Commit 44982ab33295009137e3740e644e793a08629762 added some extra
quoting when constructing a search. A previous version of this patch
had used single-quotation marks (') while this version used
double-quotation marks (").

The intent of the extra quoting was to allow notmuch-command to be set
to a script invoking ssh.

What actually happens, however is that the extra quotation marks make
it all the way into the query string seen by Xapian. And the double
quotes trigger phrase searching, (which isn't desired here). The
side-effect of that is that the emacs code would fallback to an
unqalified query and display all threads with all messages open.

We fix that side-effect now by using single-quote characters, but
we'll want a better fix in the future to avoid Xapian seeing these
characters at all I think.

14 years agoemacs: Re-arrange message sending code
David Edmondson [Thu, 22 Apr 2010 09:03:32 +0000 (10:03 +0100)]
emacs: Re-arrange message sending code

Define a new `mail-user-agent' (`notmuch-user-agent') and use it by
default. Re-arrange various routines that send mail to use this
(compose, reply, forward). Insert a `User-Agent:' header by default.

This is the real commit for this functionality this time. The
previous attempt to merge this code:

commit 57926bc7b0f784cbacb620fda0ee5157e2e0ff27

was botched (by Carl Worth, not David) to include only the Makefile
change. So the build was broken until this commit that actually adds
the new file.

14 years agotest: Set fixed time zone
Michal Sojka [Fri, 23 Apr 2010 07:36:45 +0000 (09:36 +0200)]
test: Set fixed time zone

When the test suite is run in a different time zone that where Carl
lives, some tests may fail depending on the time when the test suite is
run. For example, just now I get:

     Search for all messages ("*"):... FAIL
    --- test-031.expected 2010-04-23 09:33:47.898634822 +0200
    +++ test-031.output 2010-04-23 09:33:47.898634822 +0200
    @@ -1,5 +1,5 @@
    -thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Test message #6 (inbox unread)
    -thread:XXX   2001-01-05 [1/1] Notmuch Test Suite; Test message #14 (inbox unread)
    +thread:XXX   2001-01-06 [1/1] Notmuch Test Suite; Test message #6 (inbox unread)
    +thread:XXX   2001-01-06 [1/1] Notmuch Test Suite; Test message #14 (inbox unread)
     thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; body search (inbox unread)
     thread:XXX   2000-01-01 [1/1] searchbyfrom; search by from (inbox unread)
     thread:XXX   2000-01-01 [1/1] Notmuch Test Suite; search by to (inbox unread)

By setting a fixed time zone in the test script, these problems should
be eliminated.

Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
14 years agoemacs: Push the cursor to point-max on `n' or `N' at the end of a thread
David Edmondson [Thu, 22 Apr 2010 11:20:16 +0000 (12:20 +0100)]
emacs: Push the cursor to point-max on `n' or `N' at the end of a thread

Sebastian pointed out that the pre-JSON UI would move the cursor to
the end of the buffer if `n' or `N' is hit when on the last (unread)
message. Mimic that behaviour in the new UI.

14 years agoemacs: Re-arrange message sending code
David Edmondson [Thu, 22 Apr 2010 09:03:32 +0000 (10:03 +0100)]
emacs: Re-arrange message sending code

Define a new `mail-user-agent' (`notmuch-user-agent') and use it by
default. Re-arrange various routines that send mail to use this
(compose, reply, forward). Insert a `User-Agent:' header by default.

14 years agoemacs: Fix some compilation warnings.
Carl Worth [Fri, 23 Apr 2010 19:57:22 +0000 (12:57 -0700)]
emacs: Fix some compilation warnings.

Fix missing argumen in declaration of notmuch-search function and add
a definition of notmuch-search-continuation to avoid warning about
assignment to a free variable.

14 years agoemacs: Add notmuch-hello.el, a friendly frontend to notmuch
David Edmondson [Thu, 22 Apr 2010 08:27:33 +0000 (09:27 +0100)]
emacs: Add notmuch-hello.el, a friendly frontend to notmuch

This is based on the prototype that Carl Worth described in the TODO
file. It provides a search bar as well as support for recent searches,
saved searches, and a list of all tags in the database (as well as the
number of messages with each tag).

14 years agoemacs: Remove `notmuch-search-authors-width' and fix the use of `notmuch-search-resul...
David Edmondson [Fri, 23 Apr 2010 10:24:09 +0000 (11:24 +0100)]
emacs: Remove `notmuch-search-authors-width' and fix the use of `notmuch-search-result-format' accordingly

The width of the authors field in search output was previously
specified in two places:
 - `notmuch-search-authors-width': the limit beyond which the authors
   names are truncated,
 - `notmuch-search-result-format': the layout of the search results.

Changing the configuration of one of these may have required the user
to know about and adapt the other accordingly. This led to confusion.

Instead, remove `notmuch-search-authors-width' and perform truncation
based on the relevant field in `notmuch-search-result-format'.

Approved-By: Jameson Rollins <jrollins@finestructure.net>
14 years agoReintroduce patch to quote args in notmuch-show to facilitate remote use
Jesse Rosenthal [Wed, 21 Apr 2010 21:22:08 +0000 (17:22 -0400)]
Reintroduce patch to quote args in notmuch-show to facilitate remote use

This reintroduces the patch committed in 9193455fa1, which was
reverted during the upgrade to the JSON emacs UI.

14 years agonotmuch setup: Prompt for tags to set on new messages.
Carl Worth [Fri, 23 Apr 2010 17:30:40 +0000 (10:30 -0700)]
notmuch setup: Prompt for tags to set on new messages.

Our "notmuch setup" command is only really helpful if it guides the
user through all the possible options. So add this one.

14 years agoconfig: Rename messages.new_tags to just new.tags
Carl Worth [Fri, 23 Apr 2010 17:29:28 +0000 (10:29 -0700)]
config: Rename messages.new_tags to just new.tags

I think one configuration group for each top-level command makes a lot
of sense. And this makes the existing naming of set_new_tags and
get_new_tags also very reasonable.

14 years agoClarify the documentation for the new_tags configuration option.
Carl Worth [Fri, 23 Apr 2010 16:28:45 +0000 (09:28 -0700)]
Clarify the documentation for the new_tags configuration option.

Specifically mentioning that it's a list separated by ';' and use
"will" instead of "should".

14 years agonotmuch setup: Fix new configuration-file groups to get comments
Carl Worth [Fri, 23 Apr 2010 16:20:40 +0000 (09:20 -0700)]
notmuch setup: Fix new configuration-file groups to get comments

Our intent has always been that when new configuration-file settings
are created by notmuch, that they get created with comments telling
the user how to use them. But this was only working before when the
entire configuration file was created.

We fix this so that when a new group is added, (such as the recently-
added [messages] section) that it gets its documentation.

14 years agoSprinkle some const-correctness around new_tags.
Carl Worth [Fri, 23 Apr 2010 16:19:52 +0000 (09:19 -0700)]
Sprinkle some const-correctness around new_tags.

To eliminate a compiler warning.

14 years agonotmuch-config: make new message tags configurable
Ben Gamari [Fri, 12 Mar 2010 22:13:26 +0000 (17:13 -0500)]
notmuch-config: make new message tags configurable

Add a new_tags option in the [messages] section of the configuration
file to allow the user to specify which tags should be added to new
messages by notmuch new.

14 years agopython: Add UNSORTED as Query.SORT option
Sebastian Spaeth [Fri, 23 Apr 2010 11:37:08 +0000 (13:37 +0200)]
python: Add UNSORTED as Query.SORT option

Keep up to date with the libnotmuch.so API.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
14 years agopython: Delete unused files
Sebastian Spaeth [Fri, 23 Apr 2010 11:34:38 +0000 (13:34 +0200)]
python: Delete unused files

No more .hg files needed in the git repo.
No stock notmuch-test suite needed in a subdirectory.
We have the real one in this repository

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
14 years agotest: Put the json tests into their own section.
Carl Worth [Fri, 23 Apr 2010 00:17:11 +0000 (17:17 -0700)]
test: Put the json tests into their own section.

Not that the sections actually mean anything yet, but it makes for
clean output.

14 years agonotmuch search: Fix timezone of timestamp in --format=json output
Carl Worth [Fri, 23 Apr 2010 00:06:25 +0000 (17:06 -0700)]
notmuch search: Fix timezone of timestamp in --format=json output

This is one of those cases that I move love. Deleting code fixes
a bug, (test suite now passes again).

14 years agoFirst tests for JSON output and UTF-8 in mail body and subject
Gregor Hoffleit [Tue, 13 Apr 2010 16:37:57 +0000 (18:37 +0200)]
First tests for JSON output and UTF-8 in mail body and subject

The test suite doesn't yet cover --format=json output nor UTF-8 in
subject or body.

This patch starts with test cases for 'search --format=json' and
'show --format=json'.

Furthermore, it has test cases for a search for a UTF-8 string in a mail
body for a UTF-8 string in a mail subject.

Finally, it has a test case for --format=json with UTF-8 messages,
demonstrating the fix in 1267697893-sup-4538@sam.mediasupervision.de.

Reviewed-by: Carl Worth <cworth@cworth.org>
Updated tests to current implementation of the test suite.
These tests demonstrate a bug in the current implementation
of "notmuch show --format=json", (timestamp output is changed
depending on current timezone).

14 years agotest: Make existing "notmuch show" test more resilient
Carl Worth [Fri, 23 Apr 2010 00:08:08 +0000 (17:08 -0700)]
test: Make existing "notmuch show" test more resilient

If future updates to the test suite add more messages to the database
before this "notmuch show" test, then the message-ID numbers in the
expected output will all change. But we can at least compute the
numbers so that this test will continue to pass.

14 years agojson: Replace `date_unix' with `timestamp' in show output
David Edmondson [Fri, 16 Apr 2010 11:47:49 +0000 (12:47 +0100)]
json: Replace `date_unix' with `timestamp' in show output

Search output was already using `timestamp' for a very similar field,
so follow that.

14 years agoemacs: Add customize treatment and rename refresh-script to notmuch-poll-script
Carl Worth [Thu, 22 Apr 2010 21:46:15 +0000 (14:46 -0700)]
emacs: Add customize treatment and rename refresh-script to notmuch-poll-script

With defcustom the user can easily find this variable (and its
documentation) within "M-x customize-group" "notmuch" (though finding
*that* is still tricky).

The new name of notmuch-poll-script is also easier to remember, (for
me at least).

14 years agoemacs: Use consistent naming for the two new poll functions.
Carl Worth [Thu, 22 Apr 2010 21:24:37 +0000 (14:24 -0700)]
emacs: Use consistent naming for the two new poll functions.

Emacs scoping rules strongly encourage us to have fully-namespaced
function names. A prefix like "notmuch-search" is a pretty ugly
namespace name, but it's what we have for now.

14 years agoAdd 'G' keybinding to folder and search view that triggers external poll
Dirk Hohndel [Fri, 9 Apr 2010 19:53:26 +0000 (12:53 -0700)]
Add 'G' keybinding to folder and search view that triggers external poll

The new functions first check if an external poll script has been defined in
the variable 'notmuch-external-refresh-script and if yes, runs that script
before executing the existing refresh function (which is bound to '=')

This can be used to have 'G' mimic the mutt behavior of polling an external
mail server - or if the mail polling is already automatic, it can trigger
the call to notmuch new and any necessary automatic tagging of new email.

Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
14 years agoRevert "thread: Simplify code for assigning the subject."
Carl Worth [Thu, 22 Apr 2010 21:00:44 +0000 (14:00 -0700)]
Revert "thread: Simplify code for assigning the subject."

This reverts commit 36e4459a328b8449b3e9d510be81a332a9b35aaa.

With the two previous reverts, this fixes the recent message-sorting
regression, so the test suite now passes again.

14 years agoRevert "thread: Fix sort of search when constructing threads."
Carl Worth [Thu, 22 Apr 2010 21:00:33 +0000 (14:00 -0700)]
Revert "thread: Fix sort of search when constructing threads."

This reverts commit f43990ce134d838cdb2cdd5d0752a602e81cfdd9.

14 years agoRevert "thread: Removed unsed sort argument from _thread_add_matched_message"
Carl Worth [Thu, 22 Apr 2010 21:00:17 +0000 (14:00 -0700)]
Revert "thread: Removed unsed sort argument from _thread_add_matched_message"

This reverts commit 7fb56f9dc5d8e66f717f5e48ecbfbc11c8190182.

14 years agotest: Add a test to demonstrate message-sorting regression.
Carl Worth [Thu, 22 Apr 2010 20:26:37 +0000 (13:26 -0700)]
test: Add a test to demonstrate message-sorting regression.

In the recent change to rename threads based on changing subject
lines, I broke message ordering within "notmuch show" output. But our
test suite didn't catch that regressions, because we didn't have any
tests of "notmuch show".

This adds one "notmuch show" test along with the thread-naming
tests. It's not a whole suite of "notmuch show" testing, but it does
catch this regression at least.

14 years agotest: When a test fails, show diff only (save complete output to a file)
Carl Worth [Thu, 22 Apr 2010 20:22:08 +0000 (13:22 -0700)]
test: When a test fails, show diff only (save complete output to a file)

We're starting to get test output that's fairly long, so it's much
kinder to just show a diff rather than displaying the complete
expected and actual output. To allow the user to investigate things
after the fact, we save the expected and actual output to files named
test-${test_number}.expected and test-${test_number}.output .

14 years agotest: Improve grammar in test-message subjects.
Carl Worth [Thu, 22 Apr 2010 20:21:15 +0000 (13:21 -0700)]
test: Improve grammar in test-message subjects.

Before codifying these in any expected test output, I'd like them to
at least resemble English.

14 years agoFix help message for "show"
Jameson Rollins [Wed, 21 Apr 2010 15:49:21 +0000 (11:49 -0400)]
Fix help message for "show"

Help message for "show" mistakenly refers to '--output' instead of
'--format'.

14 years agoMerge Sebastian Spaeth's python bindings into bindings/python
Carl Worth [Thu, 22 Apr 2010 00:29:48 +0000 (17:29 -0700)]
Merge Sebastian Spaeth's python bindings into bindings/python

Sebastian offered to maintain these bindings within the notmuch
repository and offered them in the following repository:

git://github.com/spaetz/python-notmuch.git

These are the bindings formerly known as "cnotmuch" and now known
simply as "notmuch" from within python.

The bindings are not yet integrated into the build system and
packaging of the primary ntomuch repository.

14 years agoMove everything down into a bindings/python directory.
Carl Worth [Thu, 22 Apr 2010 00:23:49 +0000 (17:23 -0700)]
Move everything down into a bindings/python directory.

In preparation for merging the python bindings into the notmuch
repository.

14 years agothread: Removed unsed sort argument from _thread_add_matched_message
Carl Worth [Thu, 22 Apr 2010 00:05:16 +0000 (17:05 -0700)]
thread: Removed unsed sort argument from _thread_add_matched_message

The reworked solution for naming a thread based on the subject of
oldest/newest matching message no longer needs this argument.

14 years agoemacs: Move definition of notmuch-folders to earlier in the file.
Carl Worth [Thu, 22 Apr 2010 00:04:36 +0000 (17:04 -0700)]
emacs: Move definition of notmuch-folders to earlier in the file.

To avoid a warning about a free variable from the emacs compiler.

14 years agoemacs: Try to name search buffers using info in notmuch-folders
Servilio Afre Puentes [Mon, 19 Apr 2010 03:55:50 +0000 (23:55 -0400)]
emacs: Try to name search buffers using info in notmuch-folders

As the user has already defined aliases for certain searches in
notmuch-folders, search buffer names that use these aliases will
be easier to identify.

14 years agonotmuch-tag: don't sort messages before applying tag changes
Sebastian Spaeth [Fri, 16 Apr 2010 06:38:48 +0000 (08:38 +0200)]
notmuch-tag: don't sort messages before applying tag changes

It's not neccessary to sort the results before we apply tags. Xapian
contributor Olly Betts says that savings might be bigger with a cold
file cache and (as unsorted implies really sorted by document id) a better
cache locality when applying tags to messages.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
14 years agoquery.cc: allow to return query results unsorted
Sebastian Spaeth [Fri, 16 Apr 2010 06:38:46 +0000 (08:38 +0200)]
query.cc: allow to return query results unsorted

Previously, we always sorted the returned results by some string value,
(newest-to-oldest by default), however in some cases (as when applying
tags to a search result) we are not interested in any special order.

This introduces a NOTMUCH_SORT_UNSORTED value that does just that. It is
not used at the moment anywhere in the code.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
14 years agonotmuch: Abort if specified configuration file is not found.
Carl Worth [Wed, 21 Apr 2010 22:54:03 +0000 (15:54 -0700)]
notmuch: Abort if specified configuration file is not found.

When there is no configuration file at all, (and none specified),
notmuch works correctly by assuming correct default values. But when
the user specifies a configuration file (with the NOTMUCH_CONFIG
environment variable) and that file doesn't exist, then notmuch should
aboirt and let the user know about the problem.

14 years agothread: Fix sort of search when constructing threads.
Carl Worth [Wed, 21 Apr 2010 22:52:28 +0000 (15:52 -0700)]
thread: Fix sort of search when constructing threads.

The thread-naming feature depends on the matched messages being passed
down in a precise order, (the order of the top-level search). We fix
the feature by passing that sort order down.

14 years agotest: Add tests for naming threads with changing subjects.
Carl Worth [Wed, 21 Apr 2010 22:50:33 +0000 (15:50 -0700)]
test: Add tests for naming threads with changing subjects.

We recently added a feature to name threads based on the messages that
actually matched the search, (as opposed to simply the oldest or
newest message in the thread whether it matched or not). So add tests
for that, and (surprise, surprise!) the feature does not entirely
work.

14 years agothread: Simplify code for assigning the subject.
Carl Worth [Wed, 21 Apr 2010 22:06:02 +0000 (15:06 -0700)]
thread: Simplify code for assigning the subject.

We know that matched messages are always added in order, so we can
always just grab the subject from the first message. This is the same
approach that was used previously in _thread_add_message. That is, the
recent feature of renaming a thread based on the subject of the
"first" matched message is as simple as moving the subject assignment
from _thread_add_message to _thread_add_matched_message.

14 years agoName thread based on matching msgs instead of first msg.
Jesse Rosenthal [Sat, 17 Apr 2010 17:59:22 +0000 (13:59 -0400)]
Name thread based on matching msgs instead of first msg.

At the moment all threads are named based on the name of the first message
in the thread. However, this can cause problems if people either start
new threads by replying-all (as unfortunately, many out there do) or
change the subject of their mails to reflect a shift in a thread on a
list.

This patch names threads based on (a) matches for the query, and (b) the
search order. If the search order is oldest-first (as in the default
inbox) it chooses the oldest matching message as the subject. If the
search order is newest-first it chooses the newest one.

Reply prefixes ("Re: ", "Aw: ", "Sv: ", "Vs: ") are ignored
(case-insensitively) so a Re: won't change the subject.

Note that this adds a "sort" argument to _notmuch_thread_create and
_thread_add_matched_message, so that when constructing the thread we can
be aware of the sort order.

Signed-off-by: Jesse Rosenthal <jrosenthal@jhu.edu>
14 years agoconfigure: Print version of Xapian found during configure check.
Carl Worth [Wed, 21 Apr 2010 21:18:56 +0000 (14:18 -0700)]
configure: Print version of Xapian found during configure check.

This might be handy to know, (since there are important performance
considerations that depend on the Xapian version).

14 years agoconfigure: Generalize the GMime configure checks.
Carl Worth [Wed, 21 Apr 2010 21:14:36 +0000 (14:14 -0700)]
configure: Generalize the GMime configure checks.

This way when GMime 2.8 comes out we can simply add it to the list
rather than adding an additional block of conditional code for it.
Also GMime 2.6 is now preferred over GMime 2.4.

14 years agoconfigure: Add support for GMime 2.6
Adrien Bustany [Thu, 15 Apr 2010 23:41:55 +0000 (19:41 -0400)]
configure: Add support for GMime 2.6

Notmuch compiles just fine with GMime 2.6, so accept it in the configure
script.

14 years agoemacs: Fix notmuch-search-authors-width declaration.
Carl Worth [Wed, 21 Apr 2010 21:16:20 +0000 (14:16 -0700)]
emacs: Fix notmuch-search-authors-width declaration.

Our defcustom call was missing the 'notmuch group, which emacs was
nice enough to warn about during compilation.

14 years agoemacs: Support for customizing search result display
David Edmondson [Mon, 12 Apr 2010 07:51:30 +0000 (08:51 +0100)]
emacs: Support for customizing search result display

This patch helps in customizing search result display similar to
mutt's index_format. The customization is done by defining an alist as
below:

(setq notmuch-search-result-format '(("date" . "%s ")
     ("authors" . "%-40s ")
     ("subject" . "%s ")))

The supported keywords are date, count, authors, subject and tags.

Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@gmail.com>
Signed-off-by: David Edmondson <dme@dme.org>
14 years agoemacs/notmuch-show.el: Part headers are real buttons that save the part
Carl Worth [Wed, 21 Apr 2010 20:19:19 +0000 (13:19 -0700)]
emacs/notmuch-show.el: Part headers are real buttons that save the part

Convert the part headers into buttons that save the part when
activated.

14 years agoemacs: Display all body parts using `notmuch part --part=<n>'
David Edmondson [Thu, 1 Apr 2010 17:33:46 +0000 (18:33 +0100)]
emacs: Display all body parts using `notmuch part --part=<n>'

Use the `notmuch part' command to access body parts not currently
included in the JSON output and display those body parts
appropriately.

14 years agoemacs: Use mailcap.el to guess the type of application/octet-stream parts
David Edmondson [Tue, 23 Mar 2010 11:54:05 +0000 (11:54 +0000)]
emacs: Use mailcap.el to guess the type of application/octet-stream parts

Use the mailcap functionality to guess a MIME type for attachments of
type application/octet-stream and, presuming successful, feed the
attachment back into the display code with the determine type.

This is mostly useless at the moment, as the JSON output from notmuch
does not include the content of application/octet-stream parts, so
they cannot be displayed even if the guess is a good one.

14 years agoemacs: Use `mm-display-part' when possible
David Edmondson [Tue, 23 Mar 2010 11:54:05 +0000 (11:54 +0000)]
emacs: Use `mm-display-part' when possible

For parts that the mm-decode/mm-view functions can inline and we have
the content, use `mm-display-part' to insert the part in the
buffer.

14 years agoemacs/notmuch-show.el: Improved part labelling
David Edmondson [Tue, 23 Mar 2010 10:06:00 +0000 (10:06 +0000)]
emacs/notmuch-show.el: Improved part labelling

If a text/plain part is not the first part in a message, add a label
in order that a user can see that multiple parts are present.

If a part has a 'filename' attribute, include it in any label
describing the part.

14 years agoemacs: Move body markup to a separate file
David Edmondson [Mon, 22 Mar 2010 16:49:16 +0000 (16:49 +0000)]
emacs: Move body markup to a separate file

Move the citation and signature markup for text/plain parts to a new
file (notmuch-wash.el) and call it using a hook mechanism rather than
directly.

14 years agoemacs: Rename body-invis-spec to message-invis-spec
Carl Worth [Wed, 21 Apr 2010 19:50:10 +0000 (12:50 -0700)]
emacs: Rename body-invis-spec to message-invis-spec

This is more consistent with the related names (toggle-message,
:message-visible, etc.)

14 years agoemacs: Remove the notmuch-show-toggle-body command (with "b" binding)
Carl Worth [Wed, 21 Apr 2010 19:32:29 +0000 (12:32 -0700)]
emacs: Remove the notmuch-show-toggle-body command (with "b" binding)

In the recent switch to a JSON-based emacs interface, RET now toggles
message visibility anywhere in the message, (rather than only on the
summary line). So we no longer need this separate "b" binding for this.

Additionally, the body toggle was implemented independently from RET,
so after hiding a message with "b" one could not make it visible with
RET. This confusing state is now no longer possible, (since the
:body-visible property is removed entirely).

14 years agoemacs: JSON based implementation
David Edmondson [Sun, 11 Apr 2010 07:58:43 +0000 (08:58 +0100)]
emacs: JSON based implementation

Re-implement notmuch-show.el using the JSON output format of the
notmuch command. Most functionality is retained - HTML display is
noticeably missing.

14 years agojson_quote_chararray: Always return a newly talloced array
Anthony [Tue, 20 Apr 2010 15:55:31 +0000 (08:55 -0700)]
json_quote_chararray: Always return a newly talloced array

The special case for len==0 was wrong---the normal code path is to
talloc to get a newly allocated, editable string, that might be
talloc_free'd later. It makes more sense just to let the len==0
behaviour fall through into the normal case code.

Reviewed-by: Carl Worth <cworth@cworth.org>
This results in the same value being returned, but with the proper
memory handling.

14 years agojson: Avoid calling strlen(NULL)
David Edmondson [Tue, 6 Apr 2010 07:24:00 +0000 (08:24 +0100)]
json: Avoid calling strlen(NULL)

MIME parts may have no filename, which previously resulted in calling
strlen(NULL).

14 years agopython: Adapt README somewhat
Sebastian Spaeth [Mon, 19 Apr 2010 19:36:14 +0000 (21:36 +0200)]
python: Adapt README somewhat

14 years agopython: Rename notmuch binary to notmuch.py
Sebastian Spaeth [Mon, 19 Apr 2010 19:30:43 +0000 (21:30 +0200)]
python: Rename notmuch binary to notmuch.py

If we have it in the toplevel directory we can run it without having
to install the library, which is great for testing purposes.

--HG--
rename : docs/notmuch => notmuch.py

14 years agoRemove all traces of cnotmuch
Sebastian Spaeth [Mon, 19 Apr 2010 19:29:40 +0000 (21:29 +0200)]
Remove all traces of cnotmuch

import cnotmuch.notmuch is dead. Long live import notmuch!

14 years agopython: adapt docs to the notmuch module renaming
Sebastian Spaeth [Mon, 19 Apr 2010 19:25:05 +0000 (21:25 +0200)]
python: adapt docs to the notmuch module renaming

14 years agorename module to just 'notmuch'
Sebastian Spaeth [Mon, 19 Apr 2010 19:21:38 +0000 (21:21 +0200)]
rename module to just 'notmuch'

So you need to do e.g. 'from notmuch import Database' rather than the
previous from cnotmuch.notmuch import Database.

Alse recreate our fake python 'notmuch' binary in the docs directory for now

--HG--
rename : notmuch/notmuch.py => notmuch/__init__.py

14 years agocnotmuch -> notmuch
Sebastian Spaeth [Mon, 19 Apr 2010 19:14:47 +0000 (21:14 +0200)]
cnotmuch -> notmuch

and GPL v3+ boilerplate code to each source file.

--HG--
rename : cnotmuch/__init__.py => notmuch/__init__.py
rename : cnotmuch/database.py => notmuch/database.py
rename : cnotmuch/globals.py => notmuch/globals.py
rename : cnotmuch/message.py => notmuch/message.py
rename : cnotmuch/notmuch.py => notmuch/notmuch.py
rename : cnotmuch/tag.py => notmuch/tag.py
rename : cnotmuch/thread.py => notmuch/thread.py

14 years agoemacs/notmuch.el: Enable `hl-line-mode' in `notmuch-search-mode'
David Edmondson [Wed, 24 Mar 2010 15:50:11 +0000 (15:50 +0000)]
emacs/notmuch.el: Enable `hl-line-mode' in `notmuch-search-mode'

14 years agoemacs/notmuch-show.el: Avoid passing unintended format strings to `message'
David Edmondson [Mon, 22 Mar 2010 14:50:20 +0000 (14:50 +0000)]
emacs/notmuch-show.el: Avoid passing unintended format strings to `message'

If the text being stashed included %, `message' was unhappy and
complained.

14 years agodebian: Make git ignore several intermediate files.
Carl Worth [Mon, 19 Apr 2010 17:13:29 +0000 (10:13 -0700)]
debian: Make git ignore several intermediate files.

The "make release" target doesn't cause these to be left around, but
manually doing something like ./debian/rules/build can.

14 years agomake release: Add Debian package building and upload 0.2
Carl Worth [Fri, 16 Apr 2010 20:13:12 +0000 (13:13 -0700)]
make release: Add Debian package building and upload

Finally, a single button to push to do all the uploading.

14 years agoIncrement version to 0.2.
Carl Worth [Fri, 16 Apr 2010 20:02:03 +0000 (13:02 -0700)]
Increment version to 0.2.

Only minor features added this time--nothing that merits a 1.0.

14 years agomake release: Add a check that version and debian/changelog are consistent
Carl Worth [Fri, 16 Apr 2010 20:00:35 +0000 (13:00 -0700)]
make release: Add a check that version and debian/changelog are consistent

Eventually I'd like to automate this so that one or the other of these
files is canonical and the other is generated from it. Until then, add
this check to the release process to avoid a skewed release being
shipped.

14 years agoMakefile: Avoid complaining about .first-build-message not existing
Carl Worth [Fri, 16 Apr 2010 19:10:23 +0000 (12:10 -0700)]
Makefile: Avoid complaining about .first-build-message not existing

This cleans up a few spurious warnings from the build.

14 years agoFix final link of notmuch binary to use C compiler if possible.
Carl Worth [Fri, 16 Apr 2010 18:51:56 +0000 (11:51 -0700)]
Fix final link of notmuch binary to use C compiler if possible.

On Linux, a C program that depends on a C library which in turn
depends on a C++ can be linked with the C compiler, (avoiding a direct
link from the program to the C++ runtime libraries).

Other platforms with less fancy linkers need to use the C++ compiler
for this linking.

14 years agodebian: Remove watch file.
Carl Worth [Fri, 16 Apr 2010 18:35:33 +0000 (11:35 -0700)]
debian: Remove watch file.

We're switching to a native package, where we build the upstream and
debian releases simultaneously, so there's no need for a watch file.

14 years agodebian: Switch to "3.0 (native)" source format.
Carl Worth [Fri, 16 Apr 2010 18:32:41 +0000 (11:32 -0700)]
debian: Switch to "3.0 (native)" source format.

To keep lintian happy.

14 years agoMakefile: Fix conditionals to avoid calling git when no .git is present
Carl Worth [Fri, 16 Apr 2010 18:24:43 +0000 (11:24 -0700)]
Makefile: Fix conditionals to avoid calling git when no .git is present

Otherwise, building from a tar-file snapshot or release caused a bunch
of error messages from unnecessary git invocations.

14 years agoMakefile: Add a top-level "make snapshot" target.
Carl Worth [Fri, 16 Apr 2010 18:08:56 +0000 (11:08 -0700)]
Makefile: Add a top-level "make snapshot" target.

Useful for verifying that our tar-file creation works. The tar-file
name can't easily be used as a target directly since it depends on the
current git revision.

14 years agoMakefile: Rework the version checks slightly.
Carl Worth [Fri, 16 Apr 2010 18:03:25 +0000 (11:03 -0700)]
Makefile: Rework the version checks slightly.

Theese were previously pointing to "make VERSION=X.Y release", but
we've recently changed to an alternate scheme involving the updated
version in a file named "version".

14 years agoRELEASING: Add a step to upgrade the version in the "version" file.
Carl Worth [Fri, 16 Apr 2010 17:58:53 +0000 (10:58 -0700)]
RELEASING: Add a step to upgrade the version in the "version" file.

It is annoying to have an extra step here, but it does at least mean
that we are back to just "make release" rather than "make VERSION=X.Y
release".