TODO: Remove many items that have been completed recently.
[notmuch] / TODO
1 Fix the things that are causing the most pain to new users
2 ----------------------------------------------------------
3 1. A new import is tagging all messages as "inbox" -- total pain
4
5 2. Allow an easy way to get tags from directory names (if the user has them)
6
7 Emacs interface (notmuch.el)
8 ----------------------------
9 Enhance '+' and '-' in the search view to operate on an entire region
10 if set.
11
12 Fix '*' to work by simply calling '+' or '-' on a region consisting of
13 the entire buffer.
14
15 Add a global keybinding table for notmuch, and then view-specific
16 tables that add to it.
17         
18 Add a '|' binding from the search view.
19
20 Add support for choosing from one of the user's configured email
21 addresses for the From line.
22
23 Make 'notmuch-show-pipe-message have a private history.
24
25 Add support for a delete keybinding that adds a "deleted" tag to the
26 current message/thread and make searches not return deleted messages
27 by default, (unless the user asks explicitly for deleted messags in
28 the search query).
29
30 Add support to "mute" a thread (add a "muted" tag and then don't
31 display threads in searches by default where any message of the thread
32 has the "muted" tag).
33
34 Fix i-search to open up invisible citations as necessary.
35
36 Portability
37 -----------
38 Fix configure script to test each compiler warning we want to use.
39
40 Completion
41 ----------
42 Fix bash completion to complete multiple search options (both --first
43 and *then* --max-threads), and also complete value for --sort=
44 (oldest-first or newest-first).
45
46 notmuch command-line tool
47 -------------------------
48 Fix the --format=json option to not imply --entire-thread.
49
50 Implement "notmuch search --exclude-threads=<search-terms>" to allow
51 for excluding muted threads, (and any other negative, thread-based
52 filtering that the user wants to do).
53
54 Fix "notmuch show" so that the UI doesn't fail to show a thread that
55 is visible in a search buffer, but happens to no longer match the
56 current search. (Perhaps add a --matching=<secondary-search-terms>
57 option (or similar) to "notmuch show".) For now, this is being worked
58 around in the emacs interface by noticing that "notmuch show" returns
59 nothing and re-rerunning the command without the extra arguments.
60
61 Teach "notmuch search" to return many different kinds of results. Some
62 ideas:
63
64         notmuch search --output=threads # Default if no --output is given
65         notmuch search --output=messages
66         notmuch search --output=tags
67         notmuch search --output=addresses
68         notmuch search --output=terms
69
70 Add a "--format" option to "notmuch search", (something printf-like
71 for selecting what gets printed).
72
73 Add a "--count-only" (or so?) option to "notmuch search" for returning
74 the count of search results.
75
76 Give "notmuch restore" some progress indicator.
77
78 Fix "notmuch restore" to operate in a single pass much like "notmuch
79 dump" does, rather than doing N searches into the database, each
80 matching 1/N messages.
81
82 Add a "-f <filename>" option to select an alternate configuration
83 file.
84
85 Allow configuration for filename patterns that should be ignored when
86 indexing.
87
88 notmuch library
89 ---------------
90 Provide a sane syntax for date ranges. First, we don't want to require
91 both endpoints to be specified. For example it would be nice to be
92 able to say things like "since:2009-01-1" or "until:2009-01-1" and
93 have the other endpoint be implicit. Second we'd like to support
94 relative specifications of time such as "since:'2 months ago'". To do
95 any of this we're probably going to need to break down an write our
96 own parser for the query string rather than using Xapian's QueryParser
97 class.
98
99 Make failure to read a file (such as a permissions problem) a warning
100 rather than an error (should be similar to the existing warning for a
101 non-mail file).
102
103 Actually compile and install a libnotmuch shared library.
104
105 Fix to use the *last* Message-ID header if multiple such headers are
106 encountered, (I noticed this is one thing that kept me from seeing the
107 same message-ID values as sup).
108
109 Add support for the user to specify custom headers to be indexed.
110
111 Add support for configuring "virtual tags" which are a tuple of
112 (tag-name, search-specification). The database is responsible for
113 ensuring that the virtual tag is always consistent.
114
115 Indicate to the user if two files with the same message ID have
116 content that is actually different in some interesting way. Perhaps
117 notmuch initially sees all changes as interesting, and quickly learns
118 from the user which changes are not interesting (such as the very
119 common mailing-list footer).
120
121 Fix notmuch_query_count_messages to share code with
122 notmuch_query_search_messages rather than duplicating code. (And
123 consider renaming it as well.)
124
125 Provide a mechanism for doing automatic address completion based on
126 notmuch searches. Here was one proposal made in IRC:
127
128         <cworth> I guess all it would really have to be would be a way
129                  to configure a series of searches to try in turn,
130                  (presenting ambiguities at a given single level, and
131                  advancing to the next level only if one level
132                  returned no matches).
133         <cworth> So then I might have a series that looks like this:
134         <cworth> notmuch search --output=address_from tag:address_book_alias
135         <cworth> notmuch search --output=address_to tag:sent
136         <cworth> notmuch search --output=address_from
137         <cworth> I think I might like that quite a bit.
138         <cworth> And then we have a story for an address book for
139                  non-emacs users.
140
141 Provide a ~me Xapian synonym for all of the user's configured email
142 addresses.
143
144 General
145 -------
146 Audit everything for dealing with out-of-memory (and drop xutil.c).
147
148 Achieve 100% test coverage with the test suite.
149
150 Investigate why the notmuch database is slightly larger than the sup
151 database for the same corpus of email.