[ANN] notmuch-labeler: Improves notmuch way of displaying labels
Hi Damien. Damien Cassou writes: > Hi, > > On Fri, Oct 12, 2012 at 7:07 PM, David Bremner wrote: >> It seeems like a nice UI enchancement, and people would not have to use >> it if they didn't like it, so in principle I guess we should work >> towards integrating it into notmuch upstream. > > > does anyone else agrees? Should I spend time on that or does nobody care? > I do agree! Would be nice to have this feature integrated into notmuch. Regards, Dmitry > >> I'm not an elisp expert, but I did find it strange to use use defadvice >> on your own code. Maybe I'm just too conservative. > > > I let myself advise my own code only when no duplication is involved > and when the dependencies between the modules that contain the > function and its pieces of advice are well defined. I have no problem > using a different mechanism (such a function variable and calling > funcall) if integration into notmuch is desired but not defadvice. > > >> At some point we should probably get a patch series against notmuch >> mainline; I'll let other people comment on whether yes, now is the time >> (and thereby volunteering to review the patches ;). > > Anyone interested in notmuch-labeler? > https://github.com/DamienCassou/notmuch-labeler (there are screenshots > there) > > -- > Damien Cassou > http://damiencassou.seasidehosting.st > > "Success is the ability to go from one failure to another without > losing enthusiasm." > Winston Churchill > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [ANN] notmuch-labeler: Improves notmuch way of displaying labels
Hi Damien. Damien Cassou damien.cas...@gmail.com writes: Hi, On Fri, Oct 12, 2012 at 7:07 PM, David Bremner da...@tethera.net wrote: It seeems like a nice UI enchancement, and people would not have to use it if they didn't like it, so in principle I guess we should work towards integrating it into notmuch upstream. does anyone else agrees? Should I spend time on that or does nobody care? I do agree! Would be nice to have this feature integrated into notmuch. Regards, Dmitry I'm not an elisp expert, but I did find it strange to use use defadvice on your own code. Maybe I'm just too conservative. I let myself advise my own code only when no duplication is involved and when the dependencies between the modules that contain the function and its pieces of advice are well defined. I have no problem using a different mechanism (such a function variable and calling funcall) if integration into notmuch is desired but not defadvice. At some point we should probably get a patch series against notmuch mainline; I'll let other people comment on whether yes, now is the time (and thereby volunteering to review the patches ;). Anyone interested in notmuch-labeler? https://github.com/DamienCassou/notmuch-labeler (there are screenshots there) -- Damien Cassou http://damiencassou.seasidehosting.st Success is the ability to go from one failure to another without losing enthusiasm. Winston Churchill ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 2/3] test: Add a test for HTML email with inline images
Austin Clements writes: > Quoth Dmitry Kurochkin on Oct 03 at 1:35 pm: >> Hi Austin. >> >> Austin Clements writes: >> >> > Currently this test passes in Emacs 23 but fails in Emacs 24 (at least >> > on some Linux distributions). >> >> The test fails for me on Emacs 23.4.1 (Debian unstable): >> >> FAIL Rendering HTML mail with images >> --- emacs.51.OUTPUT 2012-10-03 09:31:33.383529764 + >> +++ emacs.51.EXPECTED 2012-10-03 09:31:33.383529764 + >> @@ -6,4 +6,3 @@ >> [ multipart/related ] >> [ text/html ] >> * >> - >> >> Did not look into details. > > Yes. This test is (in hindsight, unsurprisingly) sensitive to > whatever HTML renderer Emacs chooses. It looks like you're probably > using html2text, which outputs nothing for an image. Unfortunately, > none of the built-in renderers in Emacs 23 are aware of content > references, which makes this test rather pointless on Emacs 23 unless > we depend on an external renderer. > > The best solution I can think of dynamically chooses shr on Emacs 24 > (since that's really what we're trying to test) and gives up on Emacs > 23 and forcibly selects html2text (test patch below). Alternatively, > we could cycle through all of the available renderers, test everything > that we can, and just ignore everything that we can't run, though that > would make the test environment-sensitive. > Perhaps the test should be skipped if shr is not available, like we do for missing binaries? Regards, Dmitry > diff --git a/test/emacs b/test/emacs > index 1f84b91..2ef78bf 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -756,7 +756,7 @@ add_message '[subject]="HTML mail with images"' \ > '[body]="--abcd > Content-Type: text/html > > - > + smiley > > --abcd > Content-Type: image/gif > @@ -766,10 +766,13 @@ Content-ID: <330 at goomoji.gmail> > R0lGODlhDAAMAKIFAF5LAP/zxNyuAP/gaP///wAAACH5BAEAAAUALAAMAAwAAAMl > WLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7 > --abcd--"' > -test_emacs "(notmuch-show \"id:${gen_msg_id}\") > +test_emacs "(let ((mm-text-html-renderer > + (if (assq 'shr mm-text-html-renderer-alist) > + 'shr 'html2text))) > + (notmuch-show \"id:${gen_msg_id}\")) > (test-output)" > # Normalize output for Emacs 23 and Emacs 24 > -sed -i 's/\[cid\]/*/' OUTPUT > +sed -i 's/^ smiley/* smiley/' OUTPUT > cat <EXPECTED > Notmuch Test Suite (2001-01-05) (inbox) > Subject: HTML mail with images > @@ -778,7 +781,7 @@ Date: Fri, 05 Jan 2001 15:43:57 + > > [ multipart/related ] > [ text/html ] > -* > +* smiley > EOF > test_expect_equal_file OUTPUT EXPECTED >
[PATCH 2/3] test: Add a test for HTML email with inline images
Hi Austin. Austin Clements writes: > Currently this test passes in Emacs 23 but fails in Emacs 24 (at least > on some Linux distributions). The test fails for me on Emacs 23.4.1 (Debian unstable): FAIL Rendering HTML mail with images --- emacs.51.OUTPUT 2012-10-03 09:31:33.383529764 + +++ emacs.51.EXPECTED 2012-10-03 09:31:33.383529764 + @@ -6,4 +6,3 @@ [ multipart/related ] [ text/html ] * - Did not look into details. Regards, Dmitry
Re: [PATCH 2/3] test: Add a test for HTML email with inline images
Hi Austin. Austin Clements amdra...@mit.edu writes: Currently this test passes in Emacs 23 but fails in Emacs 24 (at least on some Linux distributions). The test fails for me on Emacs 23.4.1 (Debian unstable): FAIL Rendering HTML mail with images --- emacs.51.OUTPUT 2012-10-03 09:31:33.383529764 + +++ emacs.51.EXPECTED 2012-10-03 09:31:33.383529764 + @@ -6,4 +6,3 @@ [ multipart/related ] [ text/html ] * - Did not look into details. Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 2/3] test: Add a test for HTML email with inline images
Austin Clements amdra...@mit.edu writes: Quoth Dmitry Kurochkin on Oct 03 at 1:35 pm: Hi Austin. Austin Clements amdra...@mit.edu writes: Currently this test passes in Emacs 23 but fails in Emacs 24 (at least on some Linux distributions). The test fails for me on Emacs 23.4.1 (Debian unstable): FAIL Rendering HTML mail with images --- emacs.51.OUTPUT 2012-10-03 09:31:33.383529764 + +++ emacs.51.EXPECTED 2012-10-03 09:31:33.383529764 + @@ -6,4 +6,3 @@ [ multipart/related ] [ text/html ] * - Did not look into details. Yes. This test is (in hindsight, unsurprisingly) sensitive to whatever HTML renderer Emacs chooses. It looks like you're probably using html2text, which outputs nothing for an image. Unfortunately, none of the built-in renderers in Emacs 23 are aware of content references, which makes this test rather pointless on Emacs 23 unless we depend on an external renderer. The best solution I can think of dynamically chooses shr on Emacs 24 (since that's really what we're trying to test) and gives up on Emacs 23 and forcibly selects html2text (test patch below). Alternatively, we could cycle through all of the available renderers, test everything that we can, and just ignore everything that we can't run, though that would make the test environment-sensitive. Perhaps the test should be skipped if shr is not available, like we do for missing binaries? Regards, Dmitry diff --git a/test/emacs b/test/emacs index 1f84b91..2ef78bf 100755 --- a/test/emacs +++ b/test/emacs @@ -756,7 +756,7 @@ add_message '[subject]=HTML mail with images' \ '[body]=--abcd Content-Type: text/html -img src=cid:330@goomoji.gmail +img src=cid:330@goomoji.gmail smiley --abcd Content-Type: image/gif @@ -766,10 +766,13 @@ Content-ID: 330@goomoji.gmail R0lGODlhDAAMAKIFAF5LAP/zxNyuAP/gaP///wAAACH5BAEAAAUALAAMAAwAAAMl WLPcGjDKFYi9lxKBOaGcF35DhWHamZUW0K4mAbiwWtuf0uxFAgA7 --abcd--' -test_emacs (notmuch-show \id:${gen_msg_id}\) +test_emacs (let ((mm-text-html-renderer + (if (assq 'shr mm-text-html-renderer-alist) + 'shr 'html2text))) + (notmuch-show \id:${gen_msg_id}\)) (test-output) # Normalize output for Emacs 23 and Emacs 24 -sed -i 's/\[cid\]/*/' OUTPUT +sed -i 's/^ smiley/* smiley/' OUTPUT cat EOF EXPECTED Notmuch Test Suite test_su...@notmuchmail.org (2001-01-05) (inbox) Subject: HTML mail with images @@ -778,7 +781,7 @@ Date: Fri, 05 Jan 2001 15:43:57 + [ multipart/related ] [ text/html ] -* +* smiley EOF test_expect_equal_file OUTPUT EXPECTED ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] Add notmuch-remove-duplicates.py script to contrib.
Michal Nazarewicz writes: >>> On Tue, Sep 04 2012, Dmitry Kurochkin wrote: >>>> +class MailComparator: >>>> +"""Checks if mail files are duplicates.""" >>>> +def __init__(self, filename): >>>> +self.filename = filename >>>> +self.mail = self.readFile(self.filename) >>>> + >>>> +def isDuplicate(self, filename): >>>> +return self.mail == self.readFile(filename) >>>> + >>>> +@staticmethod >>>> +def readFile(filename): >>>> +with open(filename) as f: >>>> +data = "" >>>> +while True: >>>> +line = f.readline() >>>> + for header in IGNORED_HEADERS: >>>> +if line.startswith(header): > >> Michal Nazarewicz writes: >>> Case of headers should be ignored, but this does not ignore it. > > On Tue, Sep 04 2012, Dmitry Kurochkin wrote: >> It does. > > Wait, how? If line is ?received:? how does it starts with ?Received:?? > Sorry, I misunderstood your comment. It does not ignore the case indeed. >>>> +if os.path.realpath(comparator.filename) == >>>> os.path.realpath(filename): >>>> +print "Message '%s' has filenames pointing to the >>>> same file: '%s' '%s'" % (msg.get_message_id(), comparator.filename, >>>> filename) >>> >>> So why aren't those removed? >>> >> >> Because it is the same file indexed twice (probably because of >> symlinks). We do not want to remove the only message file. > > Ah, right, with symlinks this is troublesome, but than again, we can > check if there is at least one non-symlink. If there is, delete > everything else, if there is not, delete all but one arbitrarily chosen > symlink. > Sure, we could do that. >>>> +elif comparator.isDuplicate(filename): >>>> +os.remove(filename) >>>> +duplicates_count += 1 >>>> +else: >>>> +#print "Potential duplicates: %s" % msg.get_message_id() >>>> +suspected_duplicates_count += 1 >>>> + >>>> +new_timestamp = time.time() >>>> +if new_timestamp - timestamp > 1: >>>> +timestamp = new_timestamp >>>> +sys.stdout.write("\rProcessed %s messages, removed %s >>>> duplicates..." % (msg_count, duplicates_count)) >>>> +sys.stdout.flush() >>>> + >>>> +print "\rFinished. Processed %s messages, removed %s duplicates." % >>>> (msg_count, duplicates_count) >>>> +if duplicates_count > 0: >>>> +print "You might want to run 'notmuch new' now." >>>> + >>>> +if suspected_duplicates_count > 0: >>>> +print >>>> +print "Found %s messages with duplicate IDs but different content." % >>>> suspected_duplicates_count >>>> +print "Perhaps we should ignore more headers." >>> >>> Please consider the following instead (not tested): > >> Thanks for reviewing my poor python code :) I am afraid I do not have >> enough interest in improving it. I just implemented a simple solution >> for my problem. Though it looks like you already took time to rewrite >> the script. Would be great if you send it as a proper patch obsoleting >> this one. > > Bah, I'll probably won't have time to properly test it. > Same problem :) Regards, Dmitry > -- > Best regards, _ _ > .o. | Liege of Serenely Enlightened Majesty of o' \,=./ `o > ..o | Computer Science, Micha? ?mina86? Nazarewicz(o o) > ooo +--ooO--(_)--Ooo--
[PATCH] Add notmuch-remove-duplicates.py script to contrib.
Hi Michal. Michal Nazarewicz writes: > On Tue, Sep 04 2012, Dmitry Kurochkin wrote: >> The script removes duplicate message files. It takes no options. >> >> Files are assumed duplicates if their content is the same except for >> ignored headers. Currently, the only ignored header is Received:. >> --- >> contrib/notmuch-remove-duplicates.py | 95 >> ++ >> 1 file changed, 95 insertions(+) >> create mode 100755 contrib/notmuch-remove-duplicates.py >> >> diff --git a/contrib/notmuch-remove-duplicates.py >> b/contrib/notmuch-remove-duplicates.py >> new file mode 100755 >> index 000..dbe2e25 >> --- /dev/null >> +++ b/contrib/notmuch-remove-duplicates.py >> @@ -0,0 +1,95 @@ >> +#!/usr/bin/env python >> + >> +import sys >> + >> +IGNORED_HEADERS = [ "Received:" ] >> + >> +if len(sys.argv) != 1: >> +print "Usage: %s" % sys.argv[0] >> +print >> +print "The script removes duplicate message files. Takes no options." >> +print "Requires notmuch python module." >> +print >> +print "Files are assumed duplicates if their content is the same" >> +print "except for the following headers: %s." % ", >> ".join(IGNORED_HEADERS) >> +exit(1) > > It's much better put inside a main() function, which is than called only > if the script is run directly. > Good point. My python skill is pretty low :) >> + >> +import notmuch >> +import os >> +import time >> + >> +class MailComparator: >> +"""Checks if mail files are duplicates.""" >> +def __init__(self, filename): >> +self.filename = filename >> +self.mail = self.readFile(self.filename) >> + >> +def isDuplicate(self, filename): >> +return self.mail == self.readFile(filename) >> + >> +@staticmethod >> +def readFile(filename): >> +with open(filename) as f: >> +data = "" >> +while True: >> +line = f.readline() >> +for header in IGNORED_HEADERS: >> +if line.startswith(header): > > Case of headers should be ignored, but this does not ignore it. > It does. >> +# skip header continuation lines >> +while True: >> +line = f.readline() >> +if len(line) == 0 or line[0] not in [" ", "\t"]: >> +break >> +break > > This will ignore line just after the ignored header. > The first header line is ignored as well because line is added to data in else block. >> +else: >> +data += line >> +if line == "\n": >> +break >> +data += f.read() >> +return data >> + >> +db = notmuch.Database() >> +query = db.create_query('*') >> +print "Number of messages: %s" % query.count_messages() >> + >> +files_count = 0 >> +for root, dirs, files in os.walk(db.get_path()): >> +if not root.startswith(os.path.join(db.get_path(), ".notmuch/")): >> +files_count += len(files) >> +print "Number of files: %s" % files_count >> +print "Estimated number of duplicates: %s" % (files_count - >> query.count_messages()) >> + >> +msgs = query.search_messages() >> +msg_count = 0 >> +suspected_duplicates_count = 0 >> +duplicates_count = 0 >> +timestamp = time.time() >> +for msg in msgs: >> +msg_count += 1 >> +if len(msg.get_filenames()) > 1: >> +filenames = msg.get_filenames() >> +comparator = MailComparator(filenames.next()) >> +for filename in filenames: > > Strictly speaking, you need to compare each file to each file, and not > just every file to the first file. > >> +if os.path.realpath(comparator.filename) == >> os.path.realpath(filename): >> +print "Message '%s' has filenames pointing to the >> same file: '%s' '%s'" % (msg.get_message_id(), comparator.filename, >> filename) > > So why aren't those removed? > Because it is the same file indexed twice (probably because of symlinks). We do not want to remove the only message file. >> +elif comparator.isDuplicate(filen
[PATCH] Add notmuch-remove-duplicates.py script to contrib.
The script removes duplicate message files. It takes no options. Files are assumed duplicates if their content is the same except for ignored headers. Currently, the only ignored header is Received:. --- contrib/notmuch-remove-duplicates.py | 95 ++ 1 file changed, 95 insertions(+) create mode 100755 contrib/notmuch-remove-duplicates.py diff --git a/contrib/notmuch-remove-duplicates.py b/contrib/notmuch-remove-duplicates.py new file mode 100755 index 000..dbe2e25 --- /dev/null +++ b/contrib/notmuch-remove-duplicates.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python + +import sys + +IGNORED_HEADERS = [ "Received:" ] + +if len(sys.argv) != 1: +print "Usage: %s" % sys.argv[0] +print +print "The script removes duplicate message files. Takes no options." +print "Requires notmuch python module." +print +print "Files are assumed duplicates if their content is the same" +print "except for the following headers: %s." % ", ".join(IGNORED_HEADERS) +exit(1) + +import notmuch +import os +import time + +class MailComparator: +"""Checks if mail files are duplicates.""" +def __init__(self, filename): +self.filename = filename +self.mail = self.readFile(self.filename) + +def isDuplicate(self, filename): +return self.mail == self.readFile(filename) + +@staticmethod +def readFile(filename): +with open(filename) as f: +data = "" +while True: +line = f.readline() +for header in IGNORED_HEADERS: +if line.startswith(header): +# skip header continuation lines +while True: +line = f.readline() +if len(line) == 0 or line[0] not in [" ", "\t"]: +break +break +else: +data += line +if line == "\n": +break +data += f.read() +return data + +db = notmuch.Database() +query = db.create_query('*') +print "Number of messages: %s" % query.count_messages() + +files_count = 0 +for root, dirs, files in os.walk(db.get_path()): +if not root.startswith(os.path.join(db.get_path(), ".notmuch/")): +files_count += len(files) +print "Number of files: %s" % files_count +print "Estimated number of duplicates: %s" % (files_count - query.count_messages()) + +msgs = query.search_messages() +msg_count = 0 +suspected_duplicates_count = 0 +duplicates_count = 0 +timestamp = time.time() +for msg in msgs: +msg_count += 1 +if len(msg.get_filenames()) > 1: +filenames = msg.get_filenames() +comparator = MailComparator(filenames.next()) +for filename in filenames: +if os.path.realpath(comparator.filename) == os.path.realpath(filename): +print "Message '%s' has filenames pointing to the same file: '%s' '%s'" % (msg.get_message_id(), comparator.filename, filename) +elif comparator.isDuplicate(filename): +os.remove(filename) +duplicates_count += 1 +else: +#print "Potential duplicates: %s" % msg.get_message_id() +suspected_duplicates_count += 1 + +new_timestamp = time.time() +if new_timestamp - timestamp > 1: +timestamp = new_timestamp +sys.stdout.write("\rProcessed %s messages, removed %s duplicates..." % (msg_count, duplicates_count)) +sys.stdout.flush() + +print "\rFinished. Processed %s messages, removed %s duplicates." % (msg_count, duplicates_count) +if duplicates_count > 0: +print "You might want to run 'notmuch new' now." + +if suspected_duplicates_count > 0: +print +print "Found %s messages with duplicate IDs but different content." % suspected_duplicates_count +print "Perhaps we should ignore more headers." -- 1.7.10.4
[PATCH] cli: notmuch-show with framing newlines between threads in JSON.
Hi Mark. Mark Walters writes: > Add newlines between complete threads to make asynchronous parsing > of the JSON easier. > --- > > notmuch-pick uses the JSON output of notmuch show but, in many cases, > for many threads. This can take quite a long time when displaying a > large number of messages (say 20 seconds for the 10,000 messages in > the notmuch archive). Thus it is desirable to display results > incrementally in the same way that search currently does. > > To make this easier this patch adds newlines between each toplevel > thread. So the ouput becomes > > [ > thread1 > , thread2 > , thread3 > ... > , last_thread > ] > > Thus the parser can easily tell if it has enough data to do some more > parsing. > > Obviously, this changes the JSON output. This should not break any > consumer as the JSON parsers should not mind. However, it does break > several tests. I think this should be part of the commit message since it explains the rationale behind the change. Regards, Dmitry > Obviously, I will fix these but I wanted to check if > people were basically happy with the change first. > > Also, should devel/schemata be updated? It seems a little unclear as > this is not really a "JSON" change as the JSON does not care about the > newlines. > > Best wishes > > Mark > > > notmuch-show.c |5 + > 1 files changed, 5 insertions(+), 0 deletions(-) > > diff --git a/notmuch-show.c b/notmuch-show.c > index 195e318..4a1d699 100644 > --- a/notmuch-show.c > +++ b/notmuch-show.c > @@ -942,6 +942,8 @@ do_show (void *ctx, > > if (format->message_set_start) > fputs (format->message_set_start, stdout); > +if (format == _json) > + fputs ("\n", stdout); > > for (threads = notmuch_query_search_threads (query); >notmuch_threads_valid (threads); > @@ -963,6 +965,9 @@ do_show (void *ctx, > if (status && !res) > res = status; > > + if (format == _json) > + fputs ("\n", stdout); > + > notmuch_thread_destroy (thread); > > } > -- > 1.7.9.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH] cli: notmuch-show with framing newlines between threads in JSON.
Hi Mark. Mark Walters markwalters1...@gmail.com writes: Add newlines between complete threads to make asynchronous parsing of the JSON easier. --- notmuch-pick uses the JSON output of notmuch show but, in many cases, for many threads. This can take quite a long time when displaying a large number of messages (say 20 seconds for the 10,000 messages in the notmuch archive). Thus it is desirable to display results incrementally in the same way that search currently does. To make this easier this patch adds newlines between each toplevel thread. So the ouput becomes [ thread1 , thread2 , thread3 ... , last_thread ] Thus the parser can easily tell if it has enough data to do some more parsing. Obviously, this changes the JSON output. This should not break any consumer as the JSON parsers should not mind. However, it does break several tests. I think this should be part of the commit message since it explains the rationale behind the change. Regards, Dmitry Obviously, I will fix these but I wanted to check if people were basically happy with the change first. Also, should devel/schemata be updated? It seems a little unclear as this is not really a JSON change as the JSON does not care about the newlines. Best wishes Mark notmuch-show.c |5 + 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/notmuch-show.c b/notmuch-show.c index 195e318..4a1d699 100644 --- a/notmuch-show.c +++ b/notmuch-show.c @@ -942,6 +942,8 @@ do_show (void *ctx, if (format-message_set_start) fputs (format-message_set_start, stdout); +if (format == format_json) + fputs (\n, stdout); for (threads = notmuch_query_search_threads (query); notmuch_threads_valid (threads); @@ -963,6 +965,9 @@ do_show (void *ctx, if (status !res) res = status; + if (format == format_json) + fputs (\n, stdout); + notmuch_thread_destroy (thread); } -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
FreeBSD Support Patches
Mike Kelly writes: > On Fri, May 25, 2012 at 10:15 AM, Dmitry Kurochkin > wrote: >> Why do we need to explicitly declare Emacs dependency for tests? ?There >> should be no need for it. ?We have "implicit" dependencies which are >> declared once (see test_declare_external_prereq calls at the end of >> test-lib.sh) and are automatically handled when a test tries to use a >> missing binary. ?Explicit dependencies are hard to maintain (e.g. your >> patch adds explicit emacs dependency for crypto test but misses gpg). >> With rare exceptions we should not use explicit dependencies. > > Because not every test actually has those implicit dependencies. For > example, some of the crypto tests depend upon emacs_deliver_message > working correctly for subsequents tests. Those emacs_deliver_message > tests are skipped, but not the ones after it that try to do something > with that injected message. > > For the emacs-* test files, there are some tests that act the same > way. These subtests do not directly depend on Emacs. They depend on other subtests. Currently, we do not support such dependencies. But what you propose is not the solution. We have two options here: make all subtests independent or introduce proper subtests dependencies. The former might require many changes to existing tests and may be hard to enforce. The latter is not trivial as well but is doable. I planned to implement subtests dependencies but never really got to it (and I do not think I will anytime soon). > However, it is also a minor speed improvement to say that, > obviously, none of the emacs tests are going to work, so just don't > bother. > I do not think maintaining an explicit list of dependencies worth a minor speed improvement. Given all above, I understand that your patches fix a common problem in a simple way. And it does not look like we would get proper solution anytime soon. So I am ok with these patches with two comments: * Provide a proper commit message to explain the issue in more detail. * Add an XXX comment for each explicit dependency, something like: // XXX: Workaround for subtests that depend on other subtests (and, // hence, indirectly depend on emacs). Should be removed when we // have proper subtests dependencies. Regards, Dmitry > -- > Mike Kelly
FreeBSD Support Patches
Hi Mike. Mike Kelly writes: > Hi, > > These patches add some changes necessary for a clean build on FreeBSD, > and for most of the tests to pass. > > Also mixed in are a few patches to disable emacs tests when you don't > have emacs, along with tests that depend upon emacs. I could split those > off onto a separate branch if required. > Why do we need to explicitly declare Emacs dependency for tests? There should be no need for it. We have "implicit" dependencies which are declared once (see test_declare_external_prereq calls at the end of test-lib.sh) and are automatically handled when a test tries to use a missing binary. Explicit dependencies are hard to maintain (e.g. your patch adds explicit emacs dependency for crypto test but misses gpg). With rare exceptions we should not use explicit dependencies. Regards, Dmitry > You can find the latest version of these patches on my github repo's > fbsd-support branch: > > https://github.com/pioto/notmuch/compare/master...fbsd-support > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] test: remove "Testing" from test description in emacs-hello and emacs-show
"Testing" is printed by test/test-lib.sh, so having "Testing" in test description results in duplicate "Testing" in console output. --- test/emacs-hello |2 +- test/emacs-show |2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/emacs-hello b/test/emacs-hello index a998dc4..48d1420 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -1,6 +1,6 @@ #!/usr/bin/env bash -test_description="Testing emacs notmuch-hello view" +test_description="emacs notmuch-hello view" . test-lib.sh EXPECTED=$TEST_DIRECTORY/emacs.expected-output diff --git a/test/emacs-show b/test/emacs-show index 5700d2e..2498564 100755 --- a/test/emacs-show +++ b/test/emacs-show @@ -1,6 +1,6 @@ #!/usr/bin/env bash -test_description="Testing emacs notmuch-show view" +test_description="emacs notmuch-show view" . test-lib.sh test_begin_subtest "Hiding Original Message region at beginning of a message" -- 1.7.10
[PATCH] test: remove Testing from test description in emacs-hello and emacs-show
Testing is printed by test/test-lib.sh, so having Testing in test description results in duplicate Testing in console output. --- test/emacs-hello |2 +- test/emacs-show |2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/emacs-hello b/test/emacs-hello index a998dc4..48d1420 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -1,6 +1,6 @@ #!/usr/bin/env bash -test_description=Testing emacs notmuch-hello view +test_description=emacs notmuch-hello view . test-lib.sh EXPECTED=$TEST_DIRECTORY/emacs.expected-output diff --git a/test/emacs-show b/test/emacs-show index 5700d2e..2498564 100755 --- a/test/emacs-show +++ b/test/emacs-show @@ -1,6 +1,6 @@ #!/usr/bin/env bash -test_description=Testing emacs notmuch-show view +test_description=emacs notmuch-show view . test-lib.sh test_begin_subtest Hiding Original Message region at beginning of a message -- 1.7.10 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: FreeBSD Support Patches
Hi Mike. Mike Kelly pi...@pioto.org writes: Hi, These patches add some changes necessary for a clean build on FreeBSD, and for most of the tests to pass. Also mixed in are a few patches to disable emacs tests when you don't have emacs, along with tests that depend upon emacs. I could split those off onto a separate branch if required. Why do we need to explicitly declare Emacs dependency for tests? There should be no need for it. We have implicit dependencies which are declared once (see test_declare_external_prereq calls at the end of test-lib.sh) and are automatically handled when a test tries to use a missing binary. Explicit dependencies are hard to maintain (e.g. your patch adds explicit emacs dependency for crypto test but misses gpg). With rare exceptions we should not use explicit dependencies. Regards, Dmitry You can find the latest version of these patches on my github repo's fbsd-support branch: https://github.com/pioto/notmuch/compare/master...fbsd-support ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: FreeBSD Support Patches
Mike Kelly pi...@pioto.org writes: On Fri, May 25, 2012 at 10:15 AM, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Why do we need to explicitly declare Emacs dependency for tests? There should be no need for it. We have implicit dependencies which are declared once (see test_declare_external_prereq calls at the end of test-lib.sh) and are automatically handled when a test tries to use a missing binary. Explicit dependencies are hard to maintain (e.g. your patch adds explicit emacs dependency for crypto test but misses gpg). With rare exceptions we should not use explicit dependencies. Because not every test actually has those implicit dependencies. For example, some of the crypto tests depend upon emacs_deliver_message working correctly for subsequents tests. Those emacs_deliver_message tests are skipped, but not the ones after it that try to do something with that injected message. For the emacs-* test files, there are some tests that act the same way. These subtests do not directly depend on Emacs. They depend on other subtests. Currently, we do not support such dependencies. But what you propose is not the solution. We have two options here: make all subtests independent or introduce proper subtests dependencies. The former might require many changes to existing tests and may be hard to enforce. The latter is not trivial as well but is doable. I planned to implement subtests dependencies but never really got to it (and I do not think I will anytime soon). However, it is also a minor speed improvement to say that, obviously, none of the emacs tests are going to work, so just don't bother. I do not think maintaining an explicit list of dependencies worth a minor speed improvement. Given all above, I understand that your patches fix a common problem in a simple way. And it does not look like we would get proper solution anytime soon. So I am ok with these patches with two comments: * Provide a proper commit message to explain the issue in more detail. * Add an XXX comment for each explicit dependency, something like: // XXX: Workaround for subtests that depend on other subtests (and, // hence, indirectly depend on emacs). Should be removed when we // have proper subtests dependencies. Regards, Dmitry -- Mike Kelly ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/2] test: add Emacs notmuch-hello tests for custom tags and queries section.
The tests use default values from customization widgets to make sure that these customization widgets work (at least on basic level). The custom queries section test is currently broken. --- test/emacs-hello| 15 +++ .../notmuch-hello-empty-custom-queries-section |3 +++ .../notmuch-hello-empty-custom-tags-section |5 + 3 files changed, 23 insertions(+) create mode 100644 test/emacs.expected-output/notmuch-hello-empty-custom-queries-section create mode 100644 test/emacs.expected-output/notmuch-hello-empty-custom-tags-section diff --git a/test/emacs-hello b/test/emacs-hello index be66ba4..936d00e 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -44,6 +44,21 @@ test_emacs "(let ((notmuch-hello-sections (test-output))" test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts +test_begin_subtest "Empty custom tags section" +test_emacs "(let* ((widget (widget-create 'notmuch-hello-tags-section)) + (notmuch-hello-sections (list (widget-value widget + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-empty-custom-tags-section + +test_begin_subtest "Empty custom queries section" +test_subtest_known_broken +test_emacs "(let* ((widget (widget-create 'notmuch-hello-query-section)) + (notmuch-hello-sections (list (widget-value widget + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-empty-custom-queries-section + test_begin_subtest "Column alignment for tag/queries with long names" tag=a-very-long-tag # length carefully calculated for 80 characters window width notmuch tag +$tag '*' diff --git a/test/emacs.expected-output/notmuch-hello-empty-custom-queries-section b/test/emacs.expected-output/notmuch-hello-empty-custom-queries-section new file mode 100644 index 000..cd0fdf0 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-empty-custom-queries-section @@ -0,0 +1,3 @@ +: [hide] + + diff --git a/test/emacs.expected-output/notmuch-hello-empty-custom-tags-section b/test/emacs.expected-output/notmuch-hello-empty-custom-tags-section new file mode 100644 index 000..b56fd67 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-empty-custom-tags-section @@ -0,0 +1,5 @@ +: [hide] + + 4 attachment 7 signed + 52 inbox 52 unread + -- 1.7.10
[PATCH 1/2] test: add Emacs notmuch-hello tests for custom tags and queries section.
The tests use default values from customization widgets to make sure that these customization widgets work (at least on basic level). The custom queries section test is currently broken. --- test/emacs-hello| 15 +++ .../notmuch-hello-empty-custom-queries-section |3 +++ .../notmuch-hello-empty-custom-tags-section |5 + 3 files changed, 23 insertions(+) create mode 100644 test/emacs.expected-output/notmuch-hello-empty-custom-queries-section create mode 100644 test/emacs.expected-output/notmuch-hello-empty-custom-tags-section diff --git a/test/emacs-hello b/test/emacs-hello index be66ba4..936d00e 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -44,6 +44,21 @@ test_emacs (let ((notmuch-hello-sections (test-output)) test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts +test_begin_subtest Empty custom tags section +test_emacs (let* ((widget (widget-create 'notmuch-hello-tags-section)) + (notmuch-hello-sections (list (widget-value widget + (notmuch-hello) + (test-output)) +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-empty-custom-tags-section + +test_begin_subtest Empty custom queries section +test_subtest_known_broken +test_emacs (let* ((widget (widget-create 'notmuch-hello-query-section)) + (notmuch-hello-sections (list (widget-value widget + (notmuch-hello) + (test-output)) +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-empty-custom-queries-section + test_begin_subtest Column alignment for tag/queries with long names tag=a-very-long-tag # length carefully calculated for 80 characters window width notmuch tag +$tag '*' diff --git a/test/emacs.expected-output/notmuch-hello-empty-custom-queries-section b/test/emacs.expected-output/notmuch-hello-empty-custom-queries-section new file mode 100644 index 000..cd0fdf0 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-empty-custom-queries-section @@ -0,0 +1,3 @@ +: [hide] + + diff --git a/test/emacs.expected-output/notmuch-hello-empty-custom-tags-section b/test/emacs.expected-output/notmuch-hello-empty-custom-tags-section new file mode 100644 index 000..b56fd67 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-empty-custom-tags-section @@ -0,0 +1,5 @@ +: [hide] + + 4 attachment 7 signed + 52 inbox 52 unread + -- 1.7.10 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 2/2] emacs: fix custom queries section customization widget in notmuch-hello
The customization widget referred to a non-existing function `notmuch-hello-insert-query-list'. The patch changes it to the correct one - `notmuch-hello-insert-searches'. The relevant test is fixed now. --- emacs/notmuch-hello.el |2 +- test/emacs-hello |1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index f10d98d..684bedc 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -187,7 +187,7 @@ This should only be set by `notmuch-hello-insert-search'.) :tag Customized queries section (see docstring for details) :type `(list :tag -(const :tag notmuch-hello-insert-query-list) +(const :tag notmuch-hello-insert-searches) (string :tag Title for this section) (repeat :tag Queries (cons (string :tag Name) (string :tag Query))) diff --git a/test/emacs-hello b/test/emacs-hello index 936d00e..a998dc4 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -52,7 +52,6 @@ test_emacs (let* ((widget (widget-create 'notmuch-hello-tags-section)) test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-empty-custom-tags-section test_begin_subtest Empty custom queries section -test_subtest_known_broken test_emacs (let* ((widget (widget-create 'notmuch-hello-query-section)) (notmuch-hello-sections (list (widget-value widget (notmuch-hello) -- 1.7.10 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2 1/3] Add 'compose' command
Tomi Ollila writes: > On Wed, Apr 18 2012, Felipe Contreras wrote: > >> On Wed, Apr 18, 2012 at 5:20 PM, Jani Nikula wrote: >>> On Wed, 18 Apr 2012 16:34:30 +0300, Felipe Contreras >> gmail.com> wrote: On Wed, Apr 18, 2012 at 4:06 PM, Jani Nikula wrote: > Running "notmuch compose" more than once within a second would result in > identical message ids for the messages, which is not a good idea. That's > not likely in interactive use, but the notmuch cli is highly scriptable, > so someone is bound to hit this. > > Some paranoid might also be worried about "leaking" the time you run > "notmuch compose"... which may be different from the actual time you > send the message. It's still better than the current situation; nothing. In any case, people that have not needed this would not be affected; their UI would override the Message-ID. So do you have a better suggestion for a Message-ID? >>> >>> The easy way would be to just use g_mime_utils_generate_message_id() >>> [1]. It doesn't give you any control of the part before @, but I'm not >>> sure if that really matters. >> >> This is what gmime does: >> g_strdup_printf ("%lu.%lu.%lu@%s", (unsigned long int) time (NULL), >> (unsigned long int) getpid (), count++, fqdn); >> >> Which actually has some of the issues you mentioned. >> >> I can do the same if you want (add pid and count). The advantage of >> using our own format is that not only would it be more unique, but it >> would not have "@fqdn". > > getpid() is good. I guess count is useless (always one). Now some ideas > how to obfuscate time(NULL) (nonce + hash (crc32 good enough?) ? > I think the best would be for notmuch to use the gmime function and change gmime (open a bug, may be provide a patch) to follow the best practice for Message-ID generation (I guess that would be the document pointed by Jani [1]). Regards, Dmitry [1] http://www.jwz.org/doc/mid.html > Tomi > >> >>> Alternatively you can write your own according to e.g. [2]. Glib appears >>> to have decent and portable support for pseudo random number >>> generation. But why bother? I'd go with gmime. >> >> But gmime doesn't have anything random. I would actually prefer to >> have something random though. > > > >> >> -- >> Felipe Contreras >> ___ >> notmuch mailing list >> notmuch at notmuchmail.org >> http://notmuchmail.org/mailman/listinfo/notmuch > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2 1/3] Add 'compose' command
Felipe Contreras writes: > On Wed, Apr 18, 2012 at 4:43 PM, Dmitry Kurochkin > wrote: >> Hi Felipe. >> >> Felipe Contreras writes: >> >>> On Wed, Apr 18, 2012 at 4:06 PM, Jani Nikula wrote: >>> >>>> Running "notmuch compose" more than once within a second would result in >>>> identical message ids for the messages, which is not a good idea. That's >>>> not likely in interactive use, but the notmuch cli is highly scriptable, >>>> so someone is bound to hit this. >>>> >>>> Some paranoid might also be worried about "leaking" the time you run >>>> "notmuch compose"... which may be different from the actual time you >>>> send the message. >>> >>> It's still better than the current situation; nothing. In any case, >>> people that have not needed this would not be affected; their UI would >>> override the Message-ID. >>> >> >> I disagree. ?If notmuch CLI generates a Message-ID, it must be a good >> one. ?Otherwise we make users falsely believe that they do have a proper >> Message-ID while in fact they do not. ?And that would bite them sooner >> or later. > > And then they'll report it, and we would fix it. > > Anyway, everything comes from a patch, so, do you have a patch, > pseudo-code, or even a suggestion? > A patch needs some positive reviews to be accepted. Replying to comments with "make a better patch" may not be the best strategy for getting your patches accepted. I do not have a patch. As for a suggestion, I would start with some googling. If you did that, you would probably find the gmime function kindly pointed out by Jani. Regards, Dmitry > -- > Felipe Contreras
[PATCH v2 1/3] Add 'compose' command
Hi Felipe. Felipe Contreras writes: > On Wed, Apr 18, 2012 at 4:06 PM, Jani Nikula wrote: > >> Running "notmuch compose" more than once within a second would result in >> identical message ids for the messages, which is not a good idea. That's >> not likely in interactive use, but the notmuch cli is highly scriptable, >> so someone is bound to hit this. >> >> Some paranoid might also be worried about "leaking" the time you run >> "notmuch compose"... which may be different from the actual time you >> send the message. > > It's still better than the current situation; nothing. In any case, > people that have not needed this would not be affected; their UI would > override the Message-ID. > I disagree. If notmuch CLI generates a Message-ID, it must be a good one. Otherwise we make users falsely believe that they do have a proper Message-ID while in fact they do not. And that would bite them sooner or later. Regards, Dmitry > So do you have a better suggestion for a Message-ID? > > -- > Felipe Contreras > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2 1/3] Add 'compose' command
Hi Felipe. Felipe Contreras felipe.contre...@gmail.com writes: On Wed, Apr 18, 2012 at 4:06 PM, Jani Nikula j...@nikula.org wrote: Running notmuch compose more than once within a second would result in identical message ids for the messages, which is not a good idea. That's not likely in interactive use, but the notmuch cli is highly scriptable, so someone is bound to hit this. Some paranoid might also be worried about leaking the time you run notmuch compose... which may be different from the actual time you send the message. It's still better than the current situation; nothing. In any case, people that have not needed this would not be affected; their UI would override the Message-ID. I disagree. If notmuch CLI generates a Message-ID, it must be a good one. Otherwise we make users falsely believe that they do have a proper Message-ID while in fact they do not. And that would bite them sooner or later. Regards, Dmitry So do you have a better suggestion for a Message-ID? -- Felipe Contreras ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2 1/3] Add 'compose' command
Felipe Contreras felipe.contre...@gmail.com writes: On Wed, Apr 18, 2012 at 4:43 PM, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Hi Felipe. Felipe Contreras felipe.contre...@gmail.com writes: On Wed, Apr 18, 2012 at 4:06 PM, Jani Nikula j...@nikula.org wrote: Running notmuch compose more than once within a second would result in identical message ids for the messages, which is not a good idea. That's not likely in interactive use, but the notmuch cli is highly scriptable, so someone is bound to hit this. Some paranoid might also be worried about leaking the time you run notmuch compose... which may be different from the actual time you send the message. It's still better than the current situation; nothing. In any case, people that have not needed this would not be affected; their UI would override the Message-ID. I disagree. If notmuch CLI generates a Message-ID, it must be a good one. Otherwise we make users falsely believe that they do have a proper Message-ID while in fact they do not. And that would bite them sooner or later. And then they'll report it, and we would fix it. Anyway, everything comes from a patch, so, do you have a patch, pseudo-code, or even a suggestion? A patch needs some positive reviews to be accepted. Replying to comments with make a better patch may not be the best strategy for getting your patches accepted. I do not have a patch. As for a suggestion, I would start with some googling. If you did that, you would probably find the gmime function kindly pointed out by Jani. Regards, Dmitry -- Felipe Contreras ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2 1/3] Add 'compose' command
Tomi Ollila tomi.oll...@iki.fi writes: On Wed, Apr 18 2012, Felipe Contreras felipe.contre...@gmail.com wrote: On Wed, Apr 18, 2012 at 5:20 PM, Jani Nikula j...@nikula.org wrote: On Wed, 18 Apr 2012 16:34:30 +0300, Felipe Contreras felipe.contre...@gmail.com wrote: On Wed, Apr 18, 2012 at 4:06 PM, Jani Nikula j...@nikula.org wrote: Running notmuch compose more than once within a second would result in identical message ids for the messages, which is not a good idea. That's not likely in interactive use, but the notmuch cli is highly scriptable, so someone is bound to hit this. Some paranoid might also be worried about leaking the time you run notmuch compose... which may be different from the actual time you send the message. It's still better than the current situation; nothing. In any case, people that have not needed this would not be affected; their UI would override the Message-ID. So do you have a better suggestion for a Message-ID? The easy way would be to just use g_mime_utils_generate_message_id() [1]. It doesn't give you any control of the part before @, but I'm not sure if that really matters. This is what gmime does: g_strdup_printf (%lu.%lu.%lu@%s, (unsigned long int) time (NULL), (unsigned long int) getpid (), count++, fqdn); Which actually has some of the issues you mentioned. I can do the same if you want (add pid and count). The advantage of using our own format is that not only would it be more unique, but it would not have @fqdn. getpid() is good. I guess count is useless (always one). Now some ideas how to obfuscate time(NULL) (nonce + hash (crc32 good enough?) ? I think the best would be for notmuch to use the gmime function and change gmime (open a bug, may be provide a patch) to follow the best practice for Message-ID generation (I guess that would be the document pointed by Jani [1]). Regards, Dmitry [1] http://www.jwz.org/doc/mid.html Tomi Alternatively you can write your own according to e.g. [2]. Glib appears to have decent and portable support for pseudo random number generation. But why bother? I'd go with gmime. But gmime doesn't have anything random. I would actually prefer to have something random though. -- Felipe Contreras ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[RFC PATCH 3/4] emacs: add notmuch hello refresh hook to display message count change
Jani Nikula writes: > On Tue, 17 Apr 2012 13:13:15 +0400, Dmitry Kurochkin gmail.com> wrote: >> Jani Nikula writes: >> >> > Add a notmuch hello refresh hook to display a message about change in >> > message count in the database since the notmuch-hello buffer was last >> > refreshed manually (no-display is nil). >> >> I like this idea. But IMO we should avoid another call to notmuch >> count. Notmuch-hello buffer already displays the message count on the >> first line. I would propose to implement this functionality not as a >> hook but as part of the section which outputs the first line. We can >> add an option to disable it if you prefer but I do not think it is >> needed. This is less flexible than a hook, but IMO it is not a big >> issue. > > And what if someone has disabled the header section but would want the > message? Well, that is what I meant by "less flexible than a hook". > Also, you'd have to pass no-display there too. Sure, we can pass it to sections. > IMHO one call to > notmuch count is not a big issue, especially for an optional feature. > And having it as a hook very nicely isolates the feature from everything > else. > I think this feature should be enabled by default. I guess you are right that it is not a big issue. I still think we would be better without it (and we still can isolate the feature), but I would not object to having the extra call. Regards, Dmitry > Jani. > > >> >> Regards, >> Dmitry >> >> > --- >> > emacs/notmuch-hello.el | 23 +++ >> > 1 files changed, 23 insertions(+), 0 deletions(-) >> > >> > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el >> > index 0596bbe..13da146 100644 >> > --- a/emacs/notmuch-hello.el >> > +++ b/emacs/notmuch-hello.el >> > @@ -148,6 +148,7 @@ International Bureau of Weights and Measures." >> > (defcustom notmuch-hello-refresh-hook nil >> >"Functions called after updating a `notmuch-hello' buffer." >> >:type 'hook >> > + :options '(notmuch-hello-refresh-status-message) >> >:group 'notmuch-hello >> >:group 'notmuch-hooks) >> > >> > @@ -729,6 +730,28 @@ following: >> > (let ((fill-column (- (window-width) notmuch-hello-indent))) >> >(center-region start (point) >> > >> > +(defvar notmuch-hello-refresh-count 0 >> > + "Number of messages in the database when `notmuch-hello' was last run. >> > + >> > +Used internally by `notmuch-hello-refresh-status-message'.") >> > + >> > +(defun notmuch-hello-refresh-status-message (no-display) >> > + "Hook to display a status message when refreshing notmuch-hello buffer." >> > + (unless no-display >> > +(let* ((new-count >> > + (string-to-number (car (process-lines notmuch-command "count" >> > + (diff-count (- new-count notmuch-hello-refresh-count))) >> > + (if (= notmuch-hello-refresh-count 0) >> > +(message "You have %s messages." >> > + (notmuch-hello-nice-number new-count)) >> > + (if (not (= diff-count 0)) >> > + (if (>= diff-count 0) >> > + (message "You have %s more messages since last refresh." >> > + (notmuch-hello-nice-number diff-count)) >> > +(message "You have %s fewer messages since last refresh." >> > + (notmuch-hello-nice-number (- diff-count)) >> > + (setq notmuch-hello-refresh-count new-count >> > + >> > ;;;###autoload >> > (defun notmuch-hello ( no-display) >> >"Run notmuch and display saved searches, known tags, etc." >> > -- >> > 1.7.1 >> > >> > ___ >> > notmuch mailing list >> > notmuch at notmuchmail.org >> > http://notmuchmail.org/mailman/listinfo/notmuch
[RFC PATCH 2/4] emacs: add no-display arg to notmuch-hello-refresh-hook
Jani Nikula writes: > On Tue, 17 Apr 2012 13:06:13 +0400, Dmitry Kurochkin gmail.com> wrote: >> Can you please give some explanaition why is this needed? Would this >> change break custom hooks that do not expect any arguments? > > For patch 3/4. We don't want to display a message if someone calls > (notmuch-hello-update t) from some script, and notmuch-hello buffer > isn't even visible. > > Yes, it would break custom hooks. And a bunch of tests. But I think it > would be useful for custom hooks too, for the same reason as above. > Makes sense. I think it should be mentioned in the commit message. Especially the fact that it breaks existing hooks. We should mention it in the NEWS later as well. Regards, Dmitry > Jani. > > > >> >> Regards, >> Dmitry >> >> Jani Nikula writes: >> >> > --- >> > emacs/notmuch-hello.el |2 +- >> > 1 files changed, 1 insertions(+), 1 deletions(-) >> > >> > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el >> > index 9cd907a..0596bbe 100644 >> > --- a/emacs/notmuch-hello.el >> > +++ b/emacs/notmuch-hello.el >> > @@ -776,7 +776,7 @@ following: >> > (widget-setup) >> > >> > (goto-char final-target-pos)) >> > - (run-hooks 'notmuch-hello-refresh-hook) >> > + (run-hook-with-args 'notmuch-hello-refresh-hook no-display) >> >(setq notmuch-hello-first-run nil)) >> > >> > (defun notmuch-folder () >> > -- >> > 1.7.1 >> > >> > ___ >> > notmuch mailing list >> > notmuch at notmuchmail.org >> > http://notmuchmail.org/mailman/listinfo/notmuch
[RFC PATCH 4/4] emacs: add notmuch hello refresh hook to place point in a widget
Jani Nikula writes: > Add support for putting point to a widget after refresh through a > hook. This approximates the old behaviour. I may be wrong, but this looks to me like a hack that cannot work well. See my first reply in the thread for ideas on how to better implement this functionality. Regards, Dmitry > --- > emacs/notmuch-hello.el |8 +++- > 1 files changed, 7 insertions(+), 1 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 13da146..07e64d4 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -148,7 +148,8 @@ International Bureau of Weights and Measures." > (defcustom notmuch-hello-refresh-hook nil >"Functions called after updating a `notmuch-hello' buffer." >:type 'hook > - :options '(notmuch-hello-refresh-status-message) > + :options '(notmuch-hello-refresh-status-message > + notmuch-hello-refresh-point-to-widget) >:group 'notmuch-hello >:group 'notmuch-hooks) > > @@ -752,6 +753,11 @@ Used internally by > `notmuch-hello-refresh-status-message'.") > (notmuch-hello-nice-number (- diff-count)) >(setq notmuch-hello-refresh-count new-count > > +(defun notmuch-hello-refresh-point-to-widget (no-display) > + "Hook to place point to widget after notmuch-hello refresh." > + (widget-backward 1) > + (widget-forward 1)) > + > ;;;###autoload > (defun notmuch-hello ( no-display) >"Run notmuch and display saved searches, known tags, etc." > -- > 1.7.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[RFC PATCH 3/4] emacs: add notmuch hello refresh hook to display message count change
Jani Nikula writes: > Add a notmuch hello refresh hook to display a message about change in > message count in the database since the notmuch-hello buffer was last > refreshed manually (no-display is nil). I like this idea. But IMO we should avoid another call to notmuch count. Notmuch-hello buffer already displays the message count on the first line. I would propose to implement this functionality not as a hook but as part of the section which outputs the first line. We can add an option to disable it if you prefer but I do not think it is needed. This is less flexible than a hook, but IMO it is not a big issue. Regards, Dmitry > --- > emacs/notmuch-hello.el | 23 +++ > 1 files changed, 23 insertions(+), 0 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 0596bbe..13da146 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -148,6 +148,7 @@ International Bureau of Weights and Measures." > (defcustom notmuch-hello-refresh-hook nil >"Functions called after updating a `notmuch-hello' buffer." >:type 'hook > + :options '(notmuch-hello-refresh-status-message) >:group 'notmuch-hello >:group 'notmuch-hooks) > > @@ -729,6 +730,28 @@ following: > (let ((fill-column (- (window-width) notmuch-hello-indent))) >(center-region start (point) > > +(defvar notmuch-hello-refresh-count 0 > + "Number of messages in the database when `notmuch-hello' was last run. > + > +Used internally by `notmuch-hello-refresh-status-message'.") > + > +(defun notmuch-hello-refresh-status-message (no-display) > + "Hook to display a status message when refreshing notmuch-hello buffer." > + (unless no-display > +(let* ((new-count > + (string-to-number (car (process-lines notmuch-command "count" > +(diff-count (- new-count notmuch-hello-refresh-count))) > + (if (= notmuch-hello-refresh-count 0) > + (message "You have %s messages." > +(notmuch-hello-nice-number new-count)) > + (if (not (= diff-count 0)) > + (if (>= diff-count 0) > + (message "You have %s more messages since last refresh." > + (notmuch-hello-nice-number diff-count)) > + (message "You have %s fewer messages since last refresh." > +(notmuch-hello-nice-number (- diff-count)) > + (setq notmuch-hello-refresh-count new-count > + > ;;;###autoload > (defun notmuch-hello ( no-display) >"Run notmuch and display saved searches, known tags, etc." > -- > 1.7.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[RFC PATCH 2/4] emacs: add no-display arg to notmuch-hello-refresh-hook
Can you please give some explanaition why is this needed? Would this change break custom hooks that do not expect any arguments? Regards, Dmitry Jani Nikula writes: > --- > emacs/notmuch-hello.el |2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 9cd907a..0596bbe 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -776,7 +776,7 @@ following: > (widget-setup) > > (goto-char final-target-pos)) > - (run-hooks 'notmuch-hello-refresh-hook) > + (run-hook-with-args 'notmuch-hello-refresh-hook no-display) >(setq notmuch-hello-first-run nil)) > > (defun notmuch-folder () > -- > 1.7.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[RFC PATCH 1/4] emacs: simplify point placement in notmuch-hello
Hi Jani. Jani Nikula writes: > notmuch-hello (called also through notmuch-hello-update, bound to '=' > by default) tries to find the widget under or following point before > refresh, and put the point back to the widget afterwards. The code has > gotten a bit complicated, and has at least the following issues: > > 1) All the individual section functions have to include code to >support point placement. If there is no such support, point is >dropped to the search box. Only saved searches and all tags >sections support point placement. > > 2) Point placement is based on widget-value. If there are two widgets >with the same widget-value (for example a saved search with the >same name as a tag) the point is moved to the earlier one. > > 3) When first entering notmuch-hello notmuch-hello-target is nil, and >point is dropped to the search box. > > This patch simplifies the code by removing all point placement based > on widgets. Point is simply saved before refresh, and put back to > where it was. Sometimes, but not very often, this would have the > appearance of moving the point relative to the nearest widgets. IMHO > this is a minor problem compared to the issues listed above. > > A downside is that there's no visual cue (point movement) to indicate > that refresh has finished. Then again, neither was there before, if > point was at the beginning of a widget. Thanks for looking into this. This is an annoying issue indeed. And I was thinking about fixing it myself. I am not sure I like the approach of moving the cursor to the same position. It is common that buffer content would change significantly after a refresh (e.g. after I archived all new mail). That would mean the cursor would just randomly jump somewhere. IMO we should allow smart cursor positioning which means that logic should go to individual sections. I would propose the following plan: 1. Remove special case for search box. No section should be special. Moreover it is possible to remove it (I did it) and in that case the cursor would be left at the end of the buffer. By default, the cursor should be moved to the beginning of the buffer. 2. Replace current cursor positioning logic with section specific code. I.e. `notmuch-hello' would not do any cursor positioning (except for item 1) but queries and tags section would save required state when a button is clicked and the same section would use this state to restore cursor position on refresh. What state should be saved would depend on the section but we should at least save the section name/ID. If during refresh no section set the cursor position, then the cursor is moved to the beginning of the buffer. 3. Provide a custom variable to set the default section to move the cursor to. I.e. set the section name/ID part of the state from item 2. Again, details on what the default position inside the section is would depend on the section. For search box, it would be the input field. For queries/tags it would be the first tag. Item 1 is pretty simple. The rest may be more tricky. What do you think? Regards, Dmitry > --- > emacs/notmuch-hello.el | 70 +++ > 1 files changed, 17 insertions(+), 53 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index 71d37b8..9cd907a 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -154,11 +154,6 @@ International Bureau of Weights and Measures." > (defvar notmuch-hello-url "http://notmuchmail.org; >"The `notmuch' web site.") > > -(defvar notmuch-hello-search-pos nil > - "Position of search widget, if any. > - > -This should only be set by `notmuch-hello-insert-search'.") > - > (defvar notmuch-hello-custom-section-options >'((:filter (string :tag "Filter for each tag")) > (:filter-count (string :tag "Different filter to generate message > counts")) > @@ -209,11 +204,8 @@ function produces a section simply by adding content to > the current > buffer. A section should not end with an empty line, because a > newline will be inserted after each section by `notmuch-hello'. > > -Each function should take no arguments. If the produced section > -includes `notmuch-hello-target' (i.e. cursor should be positioned > -inside this section), the function should return this element's > -position. > -Otherwise, it should return nil. > +Each function should take no arguments. The return value is > +ignored. > > For convenience an element can also be a list of the form (FUNC ARG1 > ARG2 .. ARGN) in which case FUNC will be applied to the rest of the > @@ -240,15 +232,6 @@ supported for \"Customized queries section\" items." > notmuch-hello-query-section > (function :tag "Custom section" > > -(defvar notmuch-hello-target nil > - "Button text at position of point before rebuilding the notmuch-buffer. > - > -This variable contains the text of the
Re: [RFC PATCH 2/4] emacs: add no-display arg to notmuch-hello-refresh-hook
Can you please give some explanaition why is this needed? Would this change break custom hooks that do not expect any arguments? Regards, Dmitry Jani Nikula j...@nikula.org writes: --- emacs/notmuch-hello.el |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 9cd907a..0596bbe 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -776,7 +776,7 @@ following: (widget-setup) (goto-char final-target-pos)) - (run-hooks 'notmuch-hello-refresh-hook) + (run-hook-with-args 'notmuch-hello-refresh-hook no-display) (setq notmuch-hello-first-run nil)) (defun notmuch-folder () -- 1.7.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [RFC PATCH 3/4] emacs: add notmuch hello refresh hook to display message count change
Jani Nikula j...@nikula.org writes: Add a notmuch hello refresh hook to display a message about change in message count in the database since the notmuch-hello buffer was last refreshed manually (no-display is nil). I like this idea. But IMO we should avoid another call to notmuch count. Notmuch-hello buffer already displays the message count on the first line. I would propose to implement this functionality not as a hook but as part of the section which outputs the first line. We can add an option to disable it if you prefer but I do not think it is needed. This is less flexible than a hook, but IMO it is not a big issue. Regards, Dmitry --- emacs/notmuch-hello.el | 23 +++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 0596bbe..13da146 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -148,6 +148,7 @@ International Bureau of Weights and Measures. (defcustom notmuch-hello-refresh-hook nil Functions called after updating a `notmuch-hello' buffer. :type 'hook + :options '(notmuch-hello-refresh-status-message) :group 'notmuch-hello :group 'notmuch-hooks) @@ -729,6 +730,28 @@ following: (let ((fill-column (- (window-width) notmuch-hello-indent))) (center-region start (point) +(defvar notmuch-hello-refresh-count 0 + Number of messages in the database when `notmuch-hello' was last run. + +Used internally by `notmuch-hello-refresh-status-message'.) + +(defun notmuch-hello-refresh-status-message (no-display) + Hook to display a status message when refreshing notmuch-hello buffer. + (unless no-display +(let* ((new-count + (string-to-number (car (process-lines notmuch-command count +(diff-count (- new-count notmuch-hello-refresh-count))) + (if (= notmuch-hello-refresh-count 0) + (message You have %s messages. +(notmuch-hello-nice-number new-count)) + (if (not (= diff-count 0)) + (if (= diff-count 0) + (message You have %s more messages since last refresh. + (notmuch-hello-nice-number diff-count)) + (message You have %s fewer messages since last refresh. +(notmuch-hello-nice-number (- diff-count)) + (setq notmuch-hello-refresh-count new-count + ;;;###autoload (defun notmuch-hello (optional no-display) Run notmuch and display saved searches, known tags, etc. -- 1.7.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [RFC PATCH 4/4] emacs: add notmuch hello refresh hook to place point in a widget
Jani Nikula j...@nikula.org writes: Add support for putting point to a widget after refresh through a hook. This approximates the old behaviour. I may be wrong, but this looks to me like a hack that cannot work well. See my first reply in the thread for ideas on how to better implement this functionality. Regards, Dmitry --- emacs/notmuch-hello.el |8 +++- 1 files changed, 7 insertions(+), 1 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 13da146..07e64d4 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -148,7 +148,8 @@ International Bureau of Weights and Measures. (defcustom notmuch-hello-refresh-hook nil Functions called after updating a `notmuch-hello' buffer. :type 'hook - :options '(notmuch-hello-refresh-status-message) + :options '(notmuch-hello-refresh-status-message + notmuch-hello-refresh-point-to-widget) :group 'notmuch-hello :group 'notmuch-hooks) @@ -752,6 +753,11 @@ Used internally by `notmuch-hello-refresh-status-message'.) (notmuch-hello-nice-number (- diff-count)) (setq notmuch-hello-refresh-count new-count +(defun notmuch-hello-refresh-point-to-widget (no-display) + Hook to place point to widget after notmuch-hello refresh. + (widget-backward 1) + (widget-forward 1)) + ;;;###autoload (defun notmuch-hello (optional no-display) Run notmuch and display saved searches, known tags, etc. -- 1.7.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [RFC PATCH 2/4] emacs: add no-display arg to notmuch-hello-refresh-hook
Jani Nikula j...@nikula.org writes: On Tue, 17 Apr 2012 13:06:13 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Can you please give some explanaition why is this needed? Would this change break custom hooks that do not expect any arguments? For patch 3/4. We don't want to display a message if someone calls (notmuch-hello-update t) from some script, and notmuch-hello buffer isn't even visible. Yes, it would break custom hooks. And a bunch of tests. But I think it would be useful for custom hooks too, for the same reason as above. Makes sense. I think it should be mentioned in the commit message. Especially the fact that it breaks existing hooks. We should mention it in the NEWS later as well. Regards, Dmitry Jani. Regards, Dmitry Jani Nikula j...@nikula.org writes: --- emacs/notmuch-hello.el |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 9cd907a..0596bbe 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -776,7 +776,7 @@ following: (widget-setup) (goto-char final-target-pos)) - (run-hooks 'notmuch-hello-refresh-hook) + (run-hook-with-args 'notmuch-hello-refresh-hook no-display) (setq notmuch-hello-first-run nil)) (defun notmuch-folder () -- 1.7.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [RFC PATCH 3/4] emacs: add notmuch hello refresh hook to display message count change
Jani Nikula j...@nikula.org writes: On Tue, 17 Apr 2012 13:13:15 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Jani Nikula j...@nikula.org writes: Add a notmuch hello refresh hook to display a message about change in message count in the database since the notmuch-hello buffer was last refreshed manually (no-display is nil). I like this idea. But IMO we should avoid another call to notmuch count. Notmuch-hello buffer already displays the message count on the first line. I would propose to implement this functionality not as a hook but as part of the section which outputs the first line. We can add an option to disable it if you prefer but I do not think it is needed. This is less flexible than a hook, but IMO it is not a big issue. And what if someone has disabled the header section but would want the message? Well, that is what I meant by less flexible than a hook. Also, you'd have to pass no-display there too. Sure, we can pass it to sections. IMHO one call to notmuch count is not a big issue, especially for an optional feature. And having it as a hook very nicely isolates the feature from everything else. I think this feature should be enabled by default. I guess you are right that it is not a big issue. I still think we would be better without it (and we still can isolate the feature), but I would not object to having the extra call. Regards, Dmitry Jani. Regards, Dmitry --- emacs/notmuch-hello.el | 23 +++ 1 files changed, 23 insertions(+), 0 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 0596bbe..13da146 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -148,6 +148,7 @@ International Bureau of Weights and Measures. (defcustom notmuch-hello-refresh-hook nil Functions called after updating a `notmuch-hello' buffer. :type 'hook + :options '(notmuch-hello-refresh-status-message) :group 'notmuch-hello :group 'notmuch-hooks) @@ -729,6 +730,28 @@ following: (let ((fill-column (- (window-width) notmuch-hello-indent))) (center-region start (point) +(defvar notmuch-hello-refresh-count 0 + Number of messages in the database when `notmuch-hello' was last run. + +Used internally by `notmuch-hello-refresh-status-message'.) + +(defun notmuch-hello-refresh-status-message (no-display) + Hook to display a status message when refreshing notmuch-hello buffer. + (unless no-display +(let* ((new-count + (string-to-number (car (process-lines notmuch-command count + (diff-count (- new-count notmuch-hello-refresh-count))) + (if (= notmuch-hello-refresh-count 0) +(message You have %s messages. + (notmuch-hello-nice-number new-count)) + (if (not (= diff-count 0)) + (if (= diff-count 0) + (message You have %s more messages since last refresh. + (notmuch-hello-nice-number diff-count)) +(message You have %s fewer messages since last refresh. + (notmuch-hello-nice-number (- diff-count)) + (setq notmuch-hello-refresh-count new-count + ;;;###autoload (defun notmuch-hello (optional no-display) Run notmuch and display saved searches, known tags, etc. -- 1.7.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] emacs: get rid of trailing spaces in notmuch-hello view
David Bremner writes: > Dmitry Kurochkin writes: > >> I am going to remove needs-review tag from this one since there seems to >> be no one interested in reviewing it. The patch itself may not be >> trivial, but it is pretty simple and does not make any critical changes. >> So I believe it is safe to push it. If there are any issues with the >> patch discovered later, I am committed to fix them. > > Sorry, but if I can't take in the patch at a glance, it needs some > review before I am willing to push it. > Ok. Tagged as needs-review again. Let's see if I can attract some attention to the patch on IRC. Regards, Dmitry > d
[PATCH] emacs: get rid of trailing spaces in notmuch-hello view
Hi all. I am going to remove needs-review tag from this one since there seems to be no one interested in reviewing it. The patch itself may not be trivial, but it is pretty simple and does not make any critical changes. So I believe it is safe to push it. If there are any issues with the patch discovered later, I am committed to fix them. Regards, Dmitry
Re: [PATCH] emacs: get rid of trailing spaces in notmuch-hello view
Hi all. I am going to remove needs-review tag from this one since there seems to be no one interested in reviewing it. The patch itself may not be trivial, but it is pretty simple and does not make any critical changes. So I believe it is safe to push it. If there are any issues with the patch discovered later, I am committed to fix them. Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH] emacs: get rid of trailing spaces in notmuch-hello view
David Bremner da...@tethera.net writes: Dmitry Kurochkin dmitry.kuroch...@gmail.com writes: I am going to remove needs-review tag from this one since there seems to be no one interested in reviewing it. The patch itself may not be trivial, but it is pretty simple and does not make any critical changes. So I believe it is safe to push it. If there are any issues with the patch discovered later, I am committed to fix them. Sorry, but if I can't take in the patch at a glance, it needs some review before I am willing to push it. Ok. Tagged as needs-review again. Let's see if I can attract some attention to the patch on IRC. Regards, Dmitry d ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 3/6] emacs: modify notmuch-search-tag to not prompt if tags provided as argument
Jameson Graef Rollins writes: > If the argument is a full string or a list, the function will assume > this is a tag string or list and will not prompt the user. If the > argument is nil or the exact strings "-" or "+" then the user will be > prompted. > > The function doc is updated accordingly. > --- > emacs/notmuch.el | 16 > 1 files changed, 12 insertions(+), 4 deletions(-) > > diff --git a/emacs/notmuch.el b/emacs/notmuch.el > index 0ab8fc2..3b78584 100644 > --- a/emacs/notmuch.el > +++ b/emacs/notmuch.el > @@ -646,13 +646,21 @@ added or removed for all threads in the region from BEG > to END." > (notmuch-update-tags (notmuch-search-get-tags) tag-changes)) > (forward-line)) > > -(defun notmuch-search-tag ( initial-input) > - "Change tags for the currently selected thread or region." > +(defun notmuch-search-tag ( tags) > + "Change tags for the currently selected thread or region. > + > +If TAGS is a string or list it will be interpreted as tags to > +apply to the selected messages. If TAGS is nil or either of the > +strings `-' or `+' the user will be prompted to enter tags (with > +tab completion)." The TAGS argument name may be confusing. Other tagging functions tend to use TAG-CHANGES for these. Can you please change the argument name here for consistency? >(interactive) >(let* ((beg (if (region-active-p) (region-beginning) (point))) >(end (if (region-active-p) (region-end) (point))) > - (search-string (notmuch-search-find-thread-id-region-search beg end)) > - (tags (notmuch-read-tag-changes initial-input search-string))) > + (search-string (notmuch-search-find-thread-id-region-search beg end))) > +(if (string-or-null-p tags) > + (if (or (string= tags "-") (string= tags "+") (eq tags nil)) Should we add a check for an empty string? Please use `null'. > + (setq tags (notmuch-read-tag-changes tags search-string)) > + (setq tags (list tags Should we change `notmuch-tag' to accept strings instead of handling it here? Regards, Dmitry > (apply 'notmuch-search-tag-region beg end tags))) > > (defun notmuch-search-add-tag () > -- > 1.7.9.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 2/6] emacs: have tag-completion return all tags for nil input
Jameson Graef Rollins writes: > Previously the function would fail if the initial input was nil. Now > it will return a list of all tags, which obviously makes much more > sense. > --- > emacs/notmuch.el |2 ++ > 1 files changed, 2 insertions(+), 0 deletions(-) > > diff --git a/emacs/notmuch.el b/emacs/notmuch.el > index 38ae005..0ab8fc2 100644 > --- a/emacs/notmuch.el > +++ b/emacs/notmuch.el > @@ -85,6 +85,8 @@ For example: > `notmuch-read-tag-changes' function.") > > (defun notmuch-tag-completions ( search-terms) > + (if (eq search-terms nil) Please use `null'. Regards, Dmitry > + (setq search-terms (list "*"))) >(split-string > (with-output-to-string > (with-current-buffer standard-output > -- > 1.7.9.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 2/6] emacs: have tag-completion return all tags for nil input
Jameson Graef Rollins jroll...@finestructure.net writes: Previously the function would fail if the initial input was nil. Now it will return a list of all tags, which obviously makes much more sense. --- emacs/notmuch.el |2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 38ae005..0ab8fc2 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -85,6 +85,8 @@ For example: `notmuch-read-tag-changes' function.) (defun notmuch-tag-completions (optional search-terms) + (if (eq search-terms nil) Please use `null'. Regards, Dmitry + (setq search-terms (list *))) (split-string (with-output-to-string (with-current-buffer standard-output -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 3/6] emacs: modify notmuch-search-tag to not prompt if tags provided as argument
Jameson Graef Rollins jroll...@finestructure.net writes: If the argument is a full string or a list, the function will assume this is a tag string or list and will not prompt the user. If the argument is nil or the exact strings - or + then the user will be prompted. The function doc is updated accordingly. --- emacs/notmuch.el | 16 1 files changed, 12 insertions(+), 4 deletions(-) diff --git a/emacs/notmuch.el b/emacs/notmuch.el index 0ab8fc2..3b78584 100644 --- a/emacs/notmuch.el +++ b/emacs/notmuch.el @@ -646,13 +646,21 @@ added or removed for all threads in the region from BEG to END. (notmuch-update-tags (notmuch-search-get-tags) tag-changes)) (forward-line)) -(defun notmuch-search-tag (optional initial-input) - Change tags for the currently selected thread or region. +(defun notmuch-search-tag (optional tags) + Change tags for the currently selected thread or region. + +If TAGS is a string or list it will be interpreted as tags to +apply to the selected messages. If TAGS is nil or either of the +strings `-' or `+' the user will be prompted to enter tags (with +tab completion). The TAGS argument name may be confusing. Other tagging functions tend to use TAG-CHANGES for these. Can you please change the argument name here for consistency? (interactive) (let* ((beg (if (region-active-p) (region-beginning) (point))) (end (if (region-active-p) (region-end) (point))) - (search-string (notmuch-search-find-thread-id-region-search beg end)) - (tags (notmuch-read-tag-changes initial-input search-string))) + (search-string (notmuch-search-find-thread-id-region-search beg end))) +(if (string-or-null-p tags) + (if (or (string= tags -) (string= tags +) (eq tags nil)) Should we add a check for an empty string? Please use `null'. + (setq tags (notmuch-read-tag-changes tags search-string)) + (setq tags (list tags Should we change `notmuch-tag' to accept strings instead of handling it here? Regards, Dmitry (apply 'notmuch-search-tag-region beg end tags))) (defun notmuch-search-add-tag () -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/2] test: add broken test for long names in Emacs notmuch-hello view
Hi all. It has been a while since these patches were posted. They are pretty simple, just a single line (and a single char) is changed in actual code. So I am going to remove the needs-review tag. Regards, Dmitry
Re: [PATCH 1/2] test: add broken test for long names in Emacs notmuch-hello view
Hi all. It has been a while since these patches were posted. They are pretty simple, just a single line (and a single char) is changed in actual code. So I am going to remove the needs-review tag. Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[BUG/PATCH 2/2] emacs: Fix replying from alternate addresses
Adam Wolfe Gordonwrites: > The bug was that notmuch-mua-mail used `mail-header` to check whether > it was passed a "From" header. The implementation of `mail-header` > must try to compare symbols instead of strings when looking for > headers, as it was returning nil when a From header was present. This > is probably because the mail functions construct headers as alists > with symbols for the header names, while our code uses strings for the > header names. > > Since we don't use `mail-header` anywhere else, and `message-mail` is > perfectly happy to accept string header names, the fix is just to use > `assoc` to look for the From header, so that the strings get compared > properly. > --- LGTM. Thanks for fixing this. Regards, Dmitry > emacs/notmuch-mua.el |4 ++-- > test/emacs |1 - > 2 files changed, 2 insertions(+), 3 deletions(-) > > diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el > index 6aae3a0..9805d79 100644 > --- a/emacs/notmuch-mua.el > +++ b/emacs/notmuch-mua.el > @@ -187,7 +187,7 @@ OTHER-ARGS are passed through to `message-mail'." >(when (not (string= "" user-agent)) > (push (cons "User-Agent" user-agent) other-headers > > - (unless (mail-header 'From other-headers) > + (unless (assoc "From" other-headers) > (push (cons "From" (concat > (notmuch-user-name) " <" (notmuch-user-primary-email) > ">")) other-headers)) > > @@ -250,7 +250,7 @@ the From: address first." >(interactive "P") >(let ((other-headers >(when (or prompt-for-sender notmuch-always-prompt-for-sender) > -(list (cons 'From (notmuch-mua-prompt-for-sender)) > +(list (cons "From" (notmuch-mua-prompt-for-sender)) > (notmuch-mua-mail nil nil other-headers))) > > (defun notmuch-mua-new-forward-message ( prompt-for-sender) > diff --git a/test/emacs b/test/emacs > index fa5d706..08db1ee 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -275,7 +275,6 @@ EOF > test_expect_equal_file OUTPUT EXPECTED > > test_begin_subtest "Reply from alternate address within emacs" > -test_subtest_known_broken > add_message '[from]="Sender "' \ >[to]=test_suite_other at notmuchmail.org \ >[subject]=notmuch-reply-test \ > -- > 1.7.5.4 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[BUG/PATCH 1/2] test: Tests for reply from alternate addresses in emacs
Adam Wolfe Gordonwrites: > Since the recent reply changes were pushed, there has been a bug that > causes emacs to always reply from the primary address, even if the > JSON or default CLI reply output uses an alternate address. > > This adds two tests to the emacs test library based on the two "Reply > form..." tests in the reply test library. One is currently marked > broken. > --- > test/emacs | 52 > 1 files changed, 52 insertions(+), 0 deletions(-) > > diff --git a/test/emacs b/test/emacs > index 8a28705..fa5d706 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -274,6 +274,58 @@ Notmuch Test Suite > writes: > EOF > test_expect_equal_file OUTPUT EXPECTED > > +test_begin_subtest "Reply from alternate address within emacs" > +test_subtest_known_broken > +add_message '[from]="Sender "' \ > + [to]=test_suite_other at notmuchmail.org \ > + [subject]=notmuch-reply-test \ > + '[date]="Tue, 05 Jan 2010 15:43:56 -"' \ > + '[body]="reply from alternate address"' Please remove subject, data and body parameters. add_message would provide sane default values. > + > +test_emacs "(notmuch-search \"id:\\\"${gen_msg_id}\\\"\") > + (notmuch-test-wait) > + (notmuch-search-reply-to-thread) > + (test-output)" > +sed -i -e 's/^In-Reply-To: <.*>$/In-Reply-To: /' OUTPUT > +cat +From: Notmuch Test Suite > +To: Sender > +Subject: Re: notmuch-reply-test > +In-Reply-To: > +Fcc: ${MAIL_DIR}/sent > +--text follows this line-- > +Sender writes: > + > +> reply from alternate address > +EOF > +test_expect_equal_file OUTPUT EXPECTED > + > +test_begin_subtest "Reply from address in named group list within emacs" > +add_message '[from]="Sender "' \ > +'[to]=group:test_suite at notmuchmail.org,someone at > example.com\;' \ > + [cc]=test_suite_other at notmuchmail.org \ > + [subject]=notmuch-reply-test \ > +'[date]="Tue, 05 Jan 2010 15:43:56 -"' \ > +'[body]="Reply from address in named group list"' Same here. Regards, Dmitry > + > +test_emacs "(notmuch-search \"id:\\\"${gen_msg_id}\\\"\") > + (notmuch-test-wait) > + (notmuch-search-reply-to-thread) > + (test-output)" > +sed -i -e 's/^In-Reply-To: <.*>$/In-Reply-To: /' OUTPUT > +cat +From: Notmuch Test Suite > +To: Sender , someone at example.com > +Subject: Re: notmuch-reply-test > +In-Reply-To: > +Fcc: ${MAIL_DIR}/sent > +--text follows this line-- > +Sender writes: > + > +> Reply from address in named group list > +EOF > +test_expect_equal_file OUTPUT EXPECTED > + > test_begin_subtest "Reply within emacs to a multipart/mixed message" > test_emacs '(notmuch-show "id:20091118002059.067214ed at hikari") > (notmuch-show-reply) > -- > 1.7.5.4 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [BUG/PATCH 1/2] test: Tests for reply from alternate addresses in emacs
Adam Wolfe Gordon awg+notm...@xvx.ca writes: Since the recent reply changes were pushed, there has been a bug that causes emacs to always reply from the primary address, even if the JSON or default CLI reply output uses an alternate address. This adds two tests to the emacs test library based on the two Reply form... tests in the reply test library. One is currently marked broken. --- test/emacs | 52 1 files changed, 52 insertions(+), 0 deletions(-) diff --git a/test/emacs b/test/emacs index 8a28705..fa5d706 100755 --- a/test/emacs +++ b/test/emacs @@ -274,6 +274,58 @@ Notmuch Test Suite test_su...@notmuchmail.org writes: EOF test_expect_equal_file OUTPUT EXPECTED +test_begin_subtest Reply from alternate address within emacs +test_subtest_known_broken +add_message '[from]=Sender sen...@example.com' \ + [to]=test_suite_ot...@notmuchmail.org \ + [subject]=notmuch-reply-test \ + '[date]=Tue, 05 Jan 2010 15:43:56 -' \ + '[body]=reply from alternate address' Please remove subject, data and body parameters. add_message would provide sane default values. + +test_emacs (notmuch-search \id:\\\${gen_msg_id}) + (notmuch-test-wait) + (notmuch-search-reply-to-thread) + (test-output) +sed -i -e 's/^In-Reply-To: .*$/In-Reply-To: XXX/' OUTPUT +cat EOF EXPECTED +From: Notmuch Test Suite test_suite_ot...@notmuchmail.org +To: Sender sen...@example.com +Subject: Re: notmuch-reply-test +In-Reply-To: XXX +Fcc: ${MAIL_DIR}/sent +--text follows this line-- +Sender sen...@example.com writes: + + reply from alternate address +EOF +test_expect_equal_file OUTPUT EXPECTED + +test_begin_subtest Reply from address in named group list within emacs +add_message '[from]=Sender sen...@example.com' \ +'[to]=group:test_su...@notmuchmail.org,some...@example.com\;' \ + [cc]=test_suite_ot...@notmuchmail.org \ + [subject]=notmuch-reply-test \ +'[date]=Tue, 05 Jan 2010 15:43:56 -' \ +'[body]=Reply from address in named group list' Same here. Regards, Dmitry + +test_emacs (notmuch-search \id:\\\${gen_msg_id}) + (notmuch-test-wait) + (notmuch-search-reply-to-thread) + (test-output) +sed -i -e 's/^In-Reply-To: .*$/In-Reply-To: XXX/' OUTPUT +cat EOF EXPECTED +From: Notmuch Test Suite test_su...@notmuchmail.org +To: Sender sen...@example.com, some...@example.com +Subject: Re: notmuch-reply-test +In-Reply-To: XXX +Fcc: ${MAIL_DIR}/sent +--text follows this line-- +Sender sen...@example.com writes: + + Reply from address in named group list +EOF +test_expect_equal_file OUTPUT EXPECTED + test_begin_subtest Reply within emacs to a multipart/mixed message test_emacs '(notmuch-show id:20091118002059.067214ed@hikari) (notmuch-show-reply) -- 1.7.5.4 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [BUG/PATCH 2/2] emacs: Fix replying from alternate addresses
Adam Wolfe Gordon awg+notm...@xvx.ca writes: The bug was that notmuch-mua-mail used `mail-header` to check whether it was passed a From header. The implementation of `mail-header` must try to compare symbols instead of strings when looking for headers, as it was returning nil when a From header was present. This is probably because the mail functions construct headers as alists with symbols for the header names, while our code uses strings for the header names. Since we don't use `mail-header` anywhere else, and `message-mail` is perfectly happy to accept string header names, the fix is just to use `assoc` to look for the From header, so that the strings get compared properly. --- LGTM. Thanks for fixing this. Regards, Dmitry emacs/notmuch-mua.el |4 ++-- test/emacs |1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/emacs/notmuch-mua.el b/emacs/notmuch-mua.el index 6aae3a0..9805d79 100644 --- a/emacs/notmuch-mua.el +++ b/emacs/notmuch-mua.el @@ -187,7 +187,7 @@ OTHER-ARGS are passed through to `message-mail'. (when (not (string= user-agent)) (push (cons User-Agent user-agent) other-headers - (unless (mail-header 'From other-headers) + (unless (assoc From other-headers) (push (cons From (concat (notmuch-user-name) (notmuch-user-primary-email) )) other-headers)) @@ -250,7 +250,7 @@ the From: address first. (interactive P) (let ((other-headers (when (or prompt-for-sender notmuch-always-prompt-for-sender) -(list (cons 'From (notmuch-mua-prompt-for-sender)) +(list (cons From (notmuch-mua-prompt-for-sender)) (notmuch-mua-mail nil nil other-headers))) (defun notmuch-mua-new-forward-message (optional prompt-for-sender) diff --git a/test/emacs b/test/emacs index fa5d706..08db1ee 100755 --- a/test/emacs +++ b/test/emacs @@ -275,7 +275,6 @@ EOF test_expect_equal_file OUTPUT EXPECTED test_begin_subtest Reply from alternate address within emacs -test_subtest_known_broken add_message '[from]=Sender sen...@example.com' \ [to]=test_suite_ot...@notmuchmail.org \ [subject]=notmuch-reply-test \ -- 1.7.5.4 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] emacs: get rid of trailing spaces in notmuch-hello view
This patch removes trailing spaces in notmuch-hello view. A side effect of this change is that tag/query buttons no longer include a space at the end. This means that pressing RET when the point is at the first character after the tag/query button no longer works (note that this is the standard behavior for buttons). We may change this behavior in the future (without adding trailing spaces back) if people would find this change inconvenient. --- emacs/notmuch-hello.el | 30 test/emacs |2 +- test/emacs.expected-output/notmuch-hello |2 +- .../emacs.expected-output/notmuch-hello-long-names |6 ++-- .../notmuch-hello-new-section |2 +- .../notmuch-hello-section-counts |4 +- .../notmuch-hello-section-hidden-tag |2 +- .../notmuch-hello-section-with-empty |2 +- .../emacs.expected-output/notmuch-hello-with-empty |2 +- 9 files changed, 23 insertions(+), 29 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 28f39f1..17f7edd 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -429,7 +429,8 @@ Such a list can be computed with `notmuch-hello-query-counts'." (let* ((widest (notmuch-hello-longest-label searches)) (tags-and-width (notmuch-hello-tags-per-line widest)) (tags-per-line (car tags-and-width)) -(widest (cdr tags-and-width)) +(column-width (cdr tags-and-width)) +(column-indent 0) (count 0) (reordered-list (notmuch-hello-reflect searches tags-per-line)) ;; Hack the display of the buttons used. @@ -441,32 +442,25 @@ Such a list can be computed with `notmuch-hello-query-counts'." (mapc (lambda (elem) ;; (not elem) indicates an empty slot in the matrix. (when elem + (if (> column-indent 0) + (widget-insert (make-string column-indent ? ))) (let* ((name (first elem)) (query (second elem)) -(msg-count (third elem)) -(formatted-name (format "%s " name))) +(msg-count (third elem))) (widget-insert (format "%8s " (notmuch-hello-nice-number msg-count))) - (if (string= formatted-name notmuch-hello-target) + (if (string= name notmuch-hello-target) (setq found-target-pos (point-marker))) (widget-create 'push-button :notify #'notmuch-hello-widget-search :notmuch-search-terms query - formatted-name) - (unless (eq (% count tags-per-line) (1- tags-per-line)) - ;; If this is not the last tag on the line, insert - ;; enough space to consume the rest of the column. - ;; Because the button for the name is `(1+ (length - ;; name))' long (due to the trailing space) we can - ;; just insert `(- widest (length name))' spaces - the - ;; column separator is included in the button if - ;; `(equal widest (length name)'. - (widget-insert (make-string (max 0 - (- widest (length name))) - ? ) + name) + (setq column-indent + (1+ (max 0 (- column-width (length name))) (setq count (1+ count)) - (if (eq (% count tags-per-line) 0) - (widget-insert "\n"))) + (when (eq (% count tags-per-line) 0) + (setq column-indent 0) + (widget-insert "\n"))) reordered-list) ;; If the last line was not full (and hence did not include a diff --git a/test/emacs b/test/emacs index 29a489c..42780af 100755 --- a/test/emacs +++ b/test/emacs @@ -39,7 +39,7 @@ test_begin_subtest "Navigation of notmuch-hello to search results" test_emacs '(notmuch-hello) (goto-char (point-min)) (re-search-forward "inbox") - (widget-button-press (point)) + (widget-button-press (1- (point))) (notmuch-test-wait) (test-output)' test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-view-inbox diff --git a/test/emacs.expected-output/notmuch-hello b/test/emacs.expected-output/notmuch-hello index 1470790..2d69891 100644 --- a/test/emacs.expected-output/notmuch-hello +++ b/test/emacs.expected-output/notmuch-hello @@ -2,7 +2,7 @@ Saved searches: [edit] - 52 inbox 52 unread + 52 inbox 52 unread Search: . diff --git
[PATCH v2 2/2] test: use subtest name for generated message subject by default
Before the change, messages generated by generate_message() used "Test message #N" for default subject where N is the generated messages counter. Since message subject is commonly present in expected results, there is a chance of breaking other tests when a new generate_message() call is added. The patch changes default subject value for generated messages to subtest name if it is available. If subtest name is not available (i.e. message is generated during test initialization), the old default value is used (in this case it is fine to have the counter in the subject). Another benefit of this change is a sane default value for subject in generated messages, which would allow to simplify code like: test_begin_subtest "test for a cool feature" add_message [subject]="message for test for a cool feature" --- test/encoding|2 +- test/search-folder-coherence |2 +- test/test-lib.sh |6 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/encoding b/test/encoding index 98abf77..2e1326e 100755 --- a/test/encoding +++ b/test/encoding @@ -9,7 +9,7 @@ output=$(notmuch show id:${gen_msg_id} 2>&1 | notmuch_show_sanitize) test_expect_equal "$output" "message{ id:msg-001 at notmuch-test-suite depth:0 match:1 excluded:0 filename:/XXX/mail/msg-001 header{ Notmuch Test Suite (2001-01-05) (inbox unread) -Subject: Test message #1 +Subject: Message with text of unknown charset From: Notmuch Test Suite To: Notmuch Test Suite Date: Fri, 05 Jan 2001 15:43:57 + diff --git a/test/search-folder-coherence b/test/search-folder-coherence index f8119cb..3f6ec76 100755 --- a/test/search-folder-coherence +++ b/test/search-folder-coherence @@ -32,7 +32,7 @@ test_expect_equal_file OUTPUT EXPECTED test_begin_subtest "Test matches folder:spam" output=$(notmuch search folder:spam) -test_expect_equal "$output" "thread:0001 2001-01-05 [1/1] Notmuch Test Suite; Test message #1 (inbox unread)" +test_expect_equal "$output" "thread:0001 2001-01-05 [1/1] Notmuch Test Suite; Single new message (inbox unread)" test_begin_subtest "Remove folder:spam copy of email" rm $dir/spam/$(basename $file_x) diff --git a/test/test-lib.sh b/test/test-lib.sh index 2781506..06aaea2 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -318,7 +318,11 @@ generate_message () fi if [ -z "${template[subject]}" ]; then - template[subject]="Test message #${gen_msg_cnt}" + if [ -n "$test_subtest_name" ]; then + template[subject]="$test_subtest_name" + else + template[subject]="Test message #${gen_msg_cnt}" + fi fi if [ -z "${template[date]}" ]; then -- 1.7.9.1
[PATCH v2 1/2] test: remove "Generate some messages" test from raw
Before the change, the first subtest in raw format tests just generated messages and checked that they are added successfully. This is not really a raw format test, it is creating of environment required for other subtests to run. The patch removes the first subtest from raw and replaces it with bare add_message calls, similar to how it is done in other tests. TODO: we should check that test environment was created successfully. Currently, many tests do add_message(), notmuch new and other calls without checking the results. We should come up with a general solution for this, i.e. if any command during test initialization fails, all tests should be skipped with appropriate error message. --- test/raw |7 ++- 1 files changed, 2 insertions(+), 5 deletions(-) diff --git a/test/raw b/test/raw index 0171e64..de0b867 100755 --- a/test/raw +++ b/test/raw @@ -3,11 +3,8 @@ test_description='notmuch show --format=raw' . ./test-lib.sh -test_begin_subtest "Generate some messages" -generate_message -generate_message -output=$(NOTMUCH_NEW) -test_expect_equal "$output" "Added 2 new messages to the database." +add_message +add_message test_begin_subtest "Attempt to show multiple raw messages" output=$(notmuch show --format=raw "*" 2>&1) -- 1.7.9.1
[PATCH 2/2] emacs: fix off-by-one error in notmuch-hello column alignment
Expected results for few tests are fixed, the relevant test is unmarked broken. --- emacs/notmuch-hello.el |2 +- test/emacs-hello |1 - .../notmuch-hello-new-section |2 +- .../notmuch-hello-section-with-empty |2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index e9caade..28f39f1 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -461,7 +461,7 @@ Such a list can be computed with `notmuch-hello-query-counts'." ;; just insert `(- widest (length name))' spaces - the ;; column separator is included in the button if ;; `(equal widest (length name)'. - (widget-insert (make-string (max 1 + (widget-insert (make-string (max 0 (- widest (length name))) ? ) (setq count (1+ count)) diff --git a/test/emacs-hello b/test/emacs-hello index 9e5d045..be66ba4 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -45,7 +45,6 @@ test_emacs "(let ((notmuch-hello-sections test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts test_begin_subtest "Column alignment for tag/queries with long names" -test_subtest_known_broken tag=a-very-long-tag # length carefully calculated for 80 characters window width notmuch tag +$tag '*' test_emacs '(notmuch-hello) diff --git a/test/emacs.expected-output/notmuch-hello-new-section b/test/emacs.expected-output/notmuch-hello-new-section index c64d712..6a339aa 100644 --- a/test/emacs.expected-output/notmuch-hello-new-section +++ b/test/emacs.expected-output/notmuch-hello-new-section @@ -1,4 +1,4 @@ Test: [hide] - 52 inbox + 52 inbox diff --git a/test/emacs.expected-output/notmuch-hello-section-with-empty b/test/emacs.expected-output/notmuch-hello-section-with-empty index 8209fed..dc2568d 100644 --- a/test/emacs.expected-output/notmuch-hello-section-with-empty +++ b/test/emacs.expected-output/notmuch-hello-section-with-empty @@ -1,4 +1,4 @@ Test-with-empty: [hide] - 52 inbox + 52 inbox -- 1.7.9.1
[PATCH v2 0/2] test: use subtest name for generated message subject
Changes in v2: * rebase on master Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2 2/2] test: use subtest name for generated message subject by default
Before the change, messages generated by generate_message() used Test message #N for default subject where N is the generated messages counter. Since message subject is commonly present in expected results, there is a chance of breaking other tests when a new generate_message() call is added. The patch changes default subject value for generated messages to subtest name if it is available. If subtest name is not available (i.e. message is generated during test initialization), the old default value is used (in this case it is fine to have the counter in the subject). Another benefit of this change is a sane default value for subject in generated messages, which would allow to simplify code like: test_begin_subtest test for a cool feature add_message [subject]=message for test for a cool feature --- test/encoding|2 +- test/search-folder-coherence |2 +- test/test-lib.sh |6 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/test/encoding b/test/encoding index 98abf77..2e1326e 100755 --- a/test/encoding +++ b/test/encoding @@ -9,7 +9,7 @@ output=$(notmuch show id:${gen_msg_id} 21 | notmuch_show_sanitize) test_expect_equal $output message{ id:msg-001@notmuch-test-suite depth:0 match:1 excluded:0 filename:/XXX/mail/msg-001 header{ Notmuch Test Suite test_su...@notmuchmail.org (2001-01-05) (inbox unread) -Subject: Test message #1 +Subject: Message with text of unknown charset From: Notmuch Test Suite test_su...@notmuchmail.org To: Notmuch Test Suite test_su...@notmuchmail.org Date: Fri, 05 Jan 2001 15:43:57 + diff --git a/test/search-folder-coherence b/test/search-folder-coherence index f8119cb..3f6ec76 100755 --- a/test/search-folder-coherence +++ b/test/search-folder-coherence @@ -32,7 +32,7 @@ test_expect_equal_file OUTPUT EXPECTED test_begin_subtest Test matches folder:spam output=$(notmuch search folder:spam) -test_expect_equal $output thread:0001 2001-01-05 [1/1] Notmuch Test Suite; Test message #1 (inbox unread) +test_expect_equal $output thread:0001 2001-01-05 [1/1] Notmuch Test Suite; Single new message (inbox unread) test_begin_subtest Remove folder:spam copy of email rm $dir/spam/$(basename $file_x) diff --git a/test/test-lib.sh b/test/test-lib.sh index 2781506..06aaea2 100644 --- a/test/test-lib.sh +++ b/test/test-lib.sh @@ -318,7 +318,11 @@ generate_message () fi if [ -z ${template[subject]} ]; then - template[subject]=Test message #${gen_msg_cnt} + if [ -n $test_subtest_name ]; then + template[subject]=$test_subtest_name + else + template[subject]=Test message #${gen_msg_cnt} + fi fi if [ -z ${template[date]} ]; then -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] emacs: get rid of trailing spaces in notmuch-hello view
This patch removes trailing spaces in notmuch-hello view. A side effect of this change is that tag/query buttons no longer include a space at the end. This means that pressing RET when the point is at the first character after the tag/query button no longer works (note that this is the standard behavior for buttons). We may change this behavior in the future (without adding trailing spaces back) if people would find this change inconvenient. --- emacs/notmuch-hello.el | 30 test/emacs |2 +- test/emacs.expected-output/notmuch-hello |2 +- .../emacs.expected-output/notmuch-hello-long-names |6 ++-- .../notmuch-hello-new-section |2 +- .../notmuch-hello-section-counts |4 +- .../notmuch-hello-section-hidden-tag |2 +- .../notmuch-hello-section-with-empty |2 +- .../emacs.expected-output/notmuch-hello-with-empty |2 +- 9 files changed, 23 insertions(+), 29 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index 28f39f1..17f7edd 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -429,7 +429,8 @@ Such a list can be computed with `notmuch-hello-query-counts'. (let* ((widest (notmuch-hello-longest-label searches)) (tags-and-width (notmuch-hello-tags-per-line widest)) (tags-per-line (car tags-and-width)) -(widest (cdr tags-and-width)) +(column-width (cdr tags-and-width)) +(column-indent 0) (count 0) (reordered-list (notmuch-hello-reflect searches tags-per-line)) ;; Hack the display of the buttons used. @@ -441,32 +442,25 @@ Such a list can be computed with `notmuch-hello-query-counts'. (mapc (lambda (elem) ;; (not elem) indicates an empty slot in the matrix. (when elem + (if ( column-indent 0) + (widget-insert (make-string column-indent ? ))) (let* ((name (first elem)) (query (second elem)) -(msg-count (third elem)) -(formatted-name (format %s name))) +(msg-count (third elem))) (widget-insert (format %8s (notmuch-hello-nice-number msg-count))) - (if (string= formatted-name notmuch-hello-target) + (if (string= name notmuch-hello-target) (setq found-target-pos (point-marker))) (widget-create 'push-button :notify #'notmuch-hello-widget-search :notmuch-search-terms query - formatted-name) - (unless (eq (% count tags-per-line) (1- tags-per-line)) - ;; If this is not the last tag on the line, insert - ;; enough space to consume the rest of the column. - ;; Because the button for the name is `(1+ (length - ;; name))' long (due to the trailing space) we can - ;; just insert `(- widest (length name))' spaces - the - ;; column separator is included in the button if - ;; `(equal widest (length name)'. - (widget-insert (make-string (max 0 - (- widest (length name))) - ? ) + name) + (setq column-indent + (1+ (max 0 (- column-width (length name))) (setq count (1+ count)) - (if (eq (% count tags-per-line) 0) - (widget-insert \n))) + (when (eq (% count tags-per-line) 0) + (setq column-indent 0) + (widget-insert \n))) reordered-list) ;; If the last line was not full (and hence did not include a diff --git a/test/emacs b/test/emacs index 29a489c..42780af 100755 --- a/test/emacs +++ b/test/emacs @@ -39,7 +39,7 @@ test_begin_subtest Navigation of notmuch-hello to search results test_emacs '(notmuch-hello) (goto-char (point-min)) (re-search-forward inbox) - (widget-button-press (point)) + (widget-button-press (1- (point))) (notmuch-test-wait) (test-output)' test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-view-inbox diff --git a/test/emacs.expected-output/notmuch-hello b/test/emacs.expected-output/notmuch-hello index 1470790..2d69891 100644 --- a/test/emacs.expected-output/notmuch-hello +++ b/test/emacs.expected-output/notmuch-hello @@ -2,7 +2,7 @@ Saved searches: [edit] - 52 inbox 52 unread + 52 inbox 52 unread Search: . diff --git a/test/emacs.expected-output/notmuch-hello-long-names
[PATCH 1/2] test: add broken test for long names in Emacs notmuch-hello view
Currently, the column alignment in Emacs notmuch-hello is broken for tags/queries with long names. --- test/emacs-hello |9 + .../emacs.expected-output/notmuch-hello-long-names | 18 ++ 2 files changed, 27 insertions(+), 0 deletions(-) create mode 100644 test/emacs.expected-output/notmuch-hello-long-names diff --git a/test/emacs-hello b/test/emacs-hello index b235e3a..9e5d045 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -44,4 +44,13 @@ test_emacs (let ((notmuch-hello-sections (test-output)) test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts +test_begin_subtest Column alignment for tag/queries with long names +test_subtest_known_broken +tag=a-very-long-tag # length carefully calculated for 80 characters window width +notmuch tag +$tag '*' +test_emacs '(notmuch-hello) +(test-output)' +notmuch tag -$tag '*' +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-long-names + test_done diff --git a/test/emacs.expected-output/notmuch-hello-long-names b/test/emacs.expected-output/notmuch-hello-long-names new file mode 100644 index 000..be6d2c5 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-long-names @@ -0,0 +1,18 @@ + Welcome to notmuch. You have 52 messages. + +Saved searches: [edit] + + 52 inbox 52 unread + +Search: . + +All tags: [hide] + + 52 a-very-long-tag 52 inbox 52 unread + 4 attachment 7 signed + +Type a search query and hit RET to view matching threads. + Edit saved searches with the `edit' button. + Hit RET or click on a saved search or tag name to view matching threads. + `=' to refresh this screen. `s' to search messages. `q' to quit. + Customize this page. -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 2/2] emacs: fix off-by-one error in notmuch-hello column alignment
Expected results for few tests are fixed, the relevant test is unmarked broken. --- emacs/notmuch-hello.el |2 +- test/emacs-hello |1 - .../notmuch-hello-new-section |2 +- .../notmuch-hello-section-with-empty |2 +- 4 files changed, 3 insertions(+), 4 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index e9caade..28f39f1 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -461,7 +461,7 @@ Such a list can be computed with `notmuch-hello-query-counts'. ;; just insert `(- widest (length name))' spaces - the ;; column separator is included in the button if ;; `(equal widest (length name)'. - (widget-insert (make-string (max 1 + (widget-insert (make-string (max 0 (- widest (length name))) ? ) (setq count (1+ count)) diff --git a/test/emacs-hello b/test/emacs-hello index 9e5d045..be66ba4 100755 --- a/test/emacs-hello +++ b/test/emacs-hello @@ -45,7 +45,6 @@ test_emacs (let ((notmuch-hello-sections test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts test_begin_subtest Column alignment for tag/queries with long names -test_subtest_known_broken tag=a-very-long-tag # length carefully calculated for 80 characters window width notmuch tag +$tag '*' test_emacs '(notmuch-hello) diff --git a/test/emacs.expected-output/notmuch-hello-new-section b/test/emacs.expected-output/notmuch-hello-new-section index c64d712..6a339aa 100644 --- a/test/emacs.expected-output/notmuch-hello-new-section +++ b/test/emacs.expected-output/notmuch-hello-new-section @@ -1,4 +1,4 @@ Test: [hide] - 52 inbox + 52 inbox diff --git a/test/emacs.expected-output/notmuch-hello-section-with-empty b/test/emacs.expected-output/notmuch-hello-section-with-empty index 8209fed..dc2568d 100644 --- a/test/emacs.expected-output/notmuch-hello-section-with-empty +++ b/test/emacs.expected-output/notmuch-hello-section-with-empty @@ -1,4 +1,4 @@ Test-with-empty: [hide] - 52 inbox + 52 inbox -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2] emacs: Pass a copy to notmuch-saved-search-sort-function
On Mon, 5 Mar 2012 22:55:54 +0200, Jani Nikula wrote: > On Mar 5, 2012 5:43 PM, "Dmitry Kurochkin" > wrote: > > > > On Mon, 05 Mar 2012 12:17:43 +0100, Daniel Schoepe > wrote: > > > On Mon, 05 Mar 2012 06:21:52 +0400, Dmitry Kurochkin < > dmitry.kurochkin at gmail.com> wrote: > > > > On Thu, 1 Mar 2012 21:24:38 +0100, Daniel Schoepe > > > schoepe.org> > wrote: > > > > > notmuch-saved-search-sort-function might destructively modify its > > > > > input (`sort' does that, for instance), so it should not be given > > > > > notmuch-saved-searches directly. > > > > > --- > > > > > > > > -1 > > > > > > > > I think we should require `notmuch-saved-search-sort-function' not to > > > > have side effects. Current documentation should be more clear about > > > > this. We need to fix `notmuch-sort-saved-searches' to copy the list > > > > before calling `sort'. But we should not do it in > > > > `notmuch-hello-insert-saved-searches' for any sorting function (which > > > > may not need this copying). > > > > > > My reasoning was that since sort is such a common function, many users > > > will probably use sort for their own sorting functions, not realizing > > > that it has side effects. This will lead to confusing behavior that's > > > not so easy to track down. > > > > > > Copying the list of saved searches when running notmuch-hello does not > > > seem be relevant to performance to me, since it's a) not called that > > > often and b) the list of saved searches will rarely exceed 30 elements. > > > > > > Hence, this way we can avoid some headaches for users who define their > > > own sorting functions at a negligible (performance) cost. Incidentally, > > > this is also how notmuch-hello did it before the user-defined sections > > > patches. > > > > > > > I do not buy the argument that we should help users who implement their > > own sorting functions but do not read documentation for functions they > > use. Apparently, those who implemented the `sort' function had similar > > ideas. And I do not think it is our job to add workarounds for it. > > > > An alternative (and IMO better) solution would be to allow customization > > of compare function used for sorting instead of the sorting function > > itself. > > Providing the customization of the sort function is more powerful than the > compare function. In the case of saved searches I can imagine people might > want to partially use the original order while sort the rest (e.g. > important ones first in predefined order, others sorted). Valid point. > In fact this also > allows dropping out some elements. And renaming. And changing the queries... > > (I had something like that in mind originally but then settled with just > capitalizing the important ones to show them first.) > All of these are invalid usages of `notmuch-saved-search-sort-function'. The function is meant for sorting only (hence the name). So the code might assume that the function does only sorting. I do not understand why we need such functionality (renaming, capitalizing, etc.). You can just rename the query itself if you want to. Should be easier IMO. But if we need such functionality, we should not misuse sorting function for it. We can add `notmuch-saved-searches' function which would return saved searches list (sorted, renamed and mangled in any other way). By default it would return `notmuch-saved-searches' variable as is. Regards, Dmitry > BR, > Jani. > > > > > Regards, > > Dmitry > > > > > Cheers, > > > Daniel > > ___ > > notmuch mailing list > > notmuch at notmuchmail.org > > http://notmuchmail.org/mailman/listinfo/notmuch Non-text part: text/html
[PATCH v2] emacs: Pass a copy to notmuch-saved-search-sort-function
On Mon, 05 Mar 2012 12:17:43 +0100, Daniel Schoepe wrote: > On Mon, 05 Mar 2012 06:21:52 +0400, Dmitry Kurochkin gmail.com> wrote: > > On Thu, 1 Mar 2012 21:24:38 +0100, Daniel Schoepe > > wrote: > > > notmuch-saved-search-sort-function might destructively modify its > > > input (`sort' does that, for instance), so it should not be given > > > notmuch-saved-searches directly. > > > --- > > > > -1 > > > > I think we should require `notmuch-saved-search-sort-function' not to > > have side effects. Current documentation should be more clear about > > this. We need to fix `notmuch-sort-saved-searches' to copy the list > > before calling `sort'. But we should not do it in > > `notmuch-hello-insert-saved-searches' for any sorting function (which > > may not need this copying). > > My reasoning was that since sort is such a common function, many users > will probably use sort for their own sorting functions, not realizing > that it has side effects. This will lead to confusing behavior that's > not so easy to track down. > > Copying the list of saved searches when running notmuch-hello does not > seem be relevant to performance to me, since it's a) not called that > often and b) the list of saved searches will rarely exceed 30 elements. > > Hence, this way we can avoid some headaches for users who define their > own sorting functions at a negligible (performance) cost. Incidentally, > this is also how notmuch-hello did it before the user-defined sections > patches. > I do not buy the argument that we should help users who implement their own sorting functions but do not read documentation for functions they use. Apparently, those who implemented the `sort' function had similar ideas. And I do not think it is our job to add workarounds for it. An alternative (and IMO better) solution would be to allow customization of compare function used for sorting instead of the sorting function itself. Regards, Dmitry > Cheers, > Daniel
[PATCH v2] emacs: Pass a copy to notmuch-saved-search-sort-function
On Thu, 1 Mar 2012 21:24:38 +0100, Daniel Schoepe wrote: > notmuch-saved-search-sort-function might destructively modify its > input (`sort' does that, for instance), so it should not be given > notmuch-saved-searches directly. > --- -1 I think we should require `notmuch-saved-search-sort-function' not to have side effects. Current documentation should be more clear about this. We need to fix `notmuch-sort-saved-searches' to copy the list before calling `sort'. But we should not do it in `notmuch-hello-insert-saved-searches' for any sorting function (which may not need this copying). Regards, Dmitry > emacs/notmuch-hello.el |5 - > 1 files changed, 4 insertions(+), 1 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index aad373d..e089290 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -575,7 +575,10 @@ Complete list of currently available key bindings: >(let ((searches (notmuch-hello-query-counts > (if notmuch-saved-search-sort-function > (funcall notmuch-saved-search-sort-function > - notmuch-saved-searches) > + ;; Use a copy, since the sorting > + ;; function may have side effects, > + ;; e.g. if it just `sort's the input. > + (copy-sequence notmuch-saved-searches)) >notmuch-saved-searches) > :show-empty-searches notmuch-show-empty-saved-searches)) > found-target-pos) > -- > 1.7.9.1 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH] emacs-hello: Do not calculate the count of the messages in hidden sections
Hi Michal. On Sat, 18 Feb 2012 23:12:29 +0100, Michal Sojka wrote: > The result is that hello screen shows much faster when some sections are > hidden. > --- The patch looks good to me. Please do not send new patches as replies to other patch threads. It makes it difficult to track, especially when there are multiple versions. You can always add an id: reference to the related thread. Regards, Dmitry > emacs/notmuch-hello.el | 20 ++-- > 1 files changed, 10 insertions(+), 10 deletions(-) > > diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el > index aad373d..e9caade 100644 > --- a/emacs/notmuch-hello.el > +++ b/emacs/notmuch-hello.el > @@ -695,16 +695,16 @@ Supports the following entries in OPTIONS as a plist: > (notmuch-hello-update)) >"hide")) > (widget-insert "\n") > -(let (target-pos > - (searches (apply 'notmuch-hello-query-counts query-alist options))) > - (when (and (not is-hidden) > -(or (not (plist-get options :hide-if-empty)) > - searches)) > - (widget-insert "\n") > - (setq target-pos > - (notmuch-hello-insert-buttons searches)) > - (indent-rigidly start (point) notmuch-hello-indent) > - target-pos > +(let (target-pos) > + (when (not is-hidden) > + (let ((searches (apply 'notmuch-hello-query-counts query-alist > options))) > + (when (or (not (plist-get options :hide-if-empty)) > + searches) > + (widget-insert "\n") > + (setq target-pos > + (notmuch-hello-insert-buttons searches)) > + (indent-rigidly start (point) notmuch-hello-indent > + target-pos))) > > (defun notmuch-hello-insert-tags-section ( title options) >"Insert a section displaying all tags with message counts. > -- > 1.7.7.3 > > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2] emacs: Pass a copy to notmuch-saved-search-sort-function
On Mon, 05 Mar 2012 12:17:43 +0100, Daniel Schoepe dan...@schoepe.org wrote: On Mon, 05 Mar 2012 06:21:52 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: On Thu, 1 Mar 2012 21:24:38 +0100, Daniel Schoepe dan...@schoepe.org wrote: notmuch-saved-search-sort-function might destructively modify its input (`sort' does that, for instance), so it should not be given notmuch-saved-searches directly. --- -1 I think we should require `notmuch-saved-search-sort-function' not to have side effects. Current documentation should be more clear about this. We need to fix `notmuch-sort-saved-searches' to copy the list before calling `sort'. But we should not do it in `notmuch-hello-insert-saved-searches' for any sorting function (which may not need this copying). My reasoning was that since sort is such a common function, many users will probably use sort for their own sorting functions, not realizing that it has side effects. This will lead to confusing behavior that's not so easy to track down. Copying the list of saved searches when running notmuch-hello does not seem be relevant to performance to me, since it's a) not called that often and b) the list of saved searches will rarely exceed 30 elements. Hence, this way we can avoid some headaches for users who define their own sorting functions at a negligible (performance) cost. Incidentally, this is also how notmuch-hello did it before the user-defined sections patches. I do not buy the argument that we should help users who implement their own sorting functions but do not read documentation for functions they use. Apparently, those who implemented the `sort' function had similar ideas. And I do not think it is our job to add workarounds for it. An alternative (and IMO better) solution would be to allow customization of compare function used for sorting instead of the sorting function itself. Regards, Dmitry Cheers, Daniel ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2] emacs: Pass a copy to notmuch-saved-search-sort-function
On Mon, 5 Mar 2012 22:55:54 +0200, Jani Nikula j...@nikula.org wrote: On Mar 5, 2012 5:43 PM, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: On Mon, 05 Mar 2012 12:17:43 +0100, Daniel Schoepe dan...@schoepe.org wrote: On Mon, 05 Mar 2012 06:21:52 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: On Thu, 1 Mar 2012 21:24:38 +0100, Daniel Schoepe dan...@schoepe.org wrote: notmuch-saved-search-sort-function might destructively modify its input (`sort' does that, for instance), so it should not be given notmuch-saved-searches directly. --- -1 I think we should require `notmuch-saved-search-sort-function' not to have side effects. Current documentation should be more clear about this. We need to fix `notmuch-sort-saved-searches' to copy the list before calling `sort'. But we should not do it in `notmuch-hello-insert-saved-searches' for any sorting function (which may not need this copying). My reasoning was that since sort is such a common function, many users will probably use sort for their own sorting functions, not realizing that it has side effects. This will lead to confusing behavior that's not so easy to track down. Copying the list of saved searches when running notmuch-hello does not seem be relevant to performance to me, since it's a) not called that often and b) the list of saved searches will rarely exceed 30 elements. Hence, this way we can avoid some headaches for users who define their own sorting functions at a negligible (performance) cost. Incidentally, this is also how notmuch-hello did it before the user-defined sections patches. I do not buy the argument that we should help users who implement their own sorting functions but do not read documentation for functions they use. Apparently, those who implemented the `sort' function had similar ideas. And I do not think it is our job to add workarounds for it. An alternative (and IMO better) solution would be to allow customization of compare function used for sorting instead of the sorting function itself. Providing the customization of the sort function is more powerful than the compare function. In the case of saved searches I can imagine people might want to partially use the original order while sort the rest (e.g. important ones first in predefined order, others sorted). Valid point. In fact this also allows dropping out some elements. And renaming. And changing the queries... (I had something like that in mind originally but then settled with just capitalizing the important ones to show them first.) All of these are invalid usages of `notmuch-saved-search-sort-function'. The function is meant for sorting only (hence the name). So the code might assume that the function does only sorting. I do not understand why we need such functionality (renaming, capitalizing, etc.). You can just rename the query itself if you want to. Should be easier IMO. But if we need such functionality, we should not misuse sorting function for it. We can add `notmuch-saved-searches' function which would return saved searches list (sorted, renamed and mangled in any other way). By default it would return `notmuch-saved-searches' variable as is. Regards, Dmitry BR, Jani. Regards, Dmitry Cheers, Daniel ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch Non-text part: text/html ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH] emacs-hello: Do not calculate the count of the messages in hidden sections
Hi Michal. On Sat, 18 Feb 2012 23:12:29 +0100, Michal Sojka sojk...@fel.cvut.cz wrote: The result is that hello screen shows much faster when some sections are hidden. --- The patch looks good to me. Please do not send new patches as replies to other patch threads. It makes it difficult to track, especially when there are multiple versions. You can always add an id: reference to the related thread. Regards, Dmitry emacs/notmuch-hello.el | 20 ++-- 1 files changed, 10 insertions(+), 10 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index aad373d..e9caade 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -695,16 +695,16 @@ Supports the following entries in OPTIONS as a plist: (notmuch-hello-update)) hide)) (widget-insert \n) -(let (target-pos - (searches (apply 'notmuch-hello-query-counts query-alist options))) - (when (and (not is-hidden) -(or (not (plist-get options :hide-if-empty)) - searches)) - (widget-insert \n) - (setq target-pos - (notmuch-hello-insert-buttons searches)) - (indent-rigidly start (point) notmuch-hello-indent) - target-pos +(let (target-pos) + (when (not is-hidden) + (let ((searches (apply 'notmuch-hello-query-counts query-alist options))) + (when (or (not (plist-get options :hide-if-empty)) + searches) + (widget-insert \n) + (setq target-pos + (notmuch-hello-insert-buttons searches)) + (indent-rigidly start (point) notmuch-hello-indent + target-pos))) (defun notmuch-hello-insert-tags-section (optional title rest options) Insert a section displaying all tags with message counts. -- 1.7.7.3 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2] emacs: Pass a copy to notmuch-saved-search-sort-function
On Thu, 1 Mar 2012 21:24:38 +0100, Daniel Schoepe dan...@schoepe.org wrote: notmuch-saved-search-sort-function might destructively modify its input (`sort' does that, for instance), so it should not be given notmuch-saved-searches directly. --- -1 I think we should require `notmuch-saved-search-sort-function' not to have side effects. Current documentation should be more clear about this. We need to fix `notmuch-sort-saved-searches' to copy the list before calling `sort'. But we should not do it in `notmuch-hello-insert-saved-searches' for any sorting function (which may not need this copying). Regards, Dmitry emacs/notmuch-hello.el |5 - 1 files changed, 4 insertions(+), 1 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index aad373d..e089290 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -575,7 +575,10 @@ Complete list of currently available key bindings: (let ((searches (notmuch-hello-query-counts (if notmuch-saved-search-sort-function (funcall notmuch-saved-search-sort-function - notmuch-saved-searches) + ;; Use a copy, since the sorting + ;; function may have side effects, + ;; e.g. if it just `sort's the input. + (copy-sequence notmuch-saved-searches)) notmuch-saved-searches) :show-empty-searches notmuch-show-empty-saved-searches)) found-target-pos) -- 1.7.9.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 1/2] test: remove "Generate some messages" test from raw
Hi David. On Wed, 15 Feb 2012 22:33:51 +0400, Dmitry Kurochkin wrote: > Hi all. > > Are there any objections to these changes? > > Otherwise, I would ask David to push it as "minor, boring and trivial" > changes. > Since there are no objections, I removed the needs-review tag from these patches. David, I believe the patches are good to be pushed. Regards, Dmitry > Regards, > Dmitry
[PATCH v10 1/2] emacs: User-defined sections in notmuch-hello
Hi Michal. On Thu, 01 Mar 2012 15:57:32 +0100, Michal Sojka wrote: > On Thu, 01 Mar 2012, David Bremner wrote: > > > > Pushed, finally. Thanks for both of your hard work on this. > > Hi, > > is anybody willing to review > id:"1329603149-6047-1-git-send-email-sojkam1 at fel.cvut.cz"? I plan to review it soon. Regards, Dmitry > I'd like to > see it merged togetger with these patches as it makes my work with > notmuch-hello much more pleasant. And others > (id:"8762f7etfo.fsf at qmul.ac.uk") would probably like this patch too. > > -Michal
Re: [PATCH v10 1/2] emacs: User-defined sections in notmuch-hello
Hi Michal. On Thu, 01 Mar 2012 15:57:32 +0100, Michal Sojka sojk...@fel.cvut.cz wrote: On Thu, 01 Mar 2012, David Bremner wrote: Pushed, finally. Thanks for both of your hard work on this. Hi, is anybody willing to review id:1329603149-6047-1-git-send-email-sojk...@fel.cvut.cz? I plan to review it soon. Regards, Dmitry I'd like to see it merged togetger with these patches as it makes my work with notmuch-hello much more pleasant. And others (id:8762f7etfo@qmul.ac.uk) would probably like this patch too. -Michal ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 1/2] test: remove Generate some messages test from raw
Hi David. On Wed, 15 Feb 2012 22:33:51 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Hi all. Are there any objections to these changes? Otherwise, I would ask David to push it as minor, boring and trivial changes. Since there are no objections, I removed the needs-review tag from these patches. David, I believe the patches are good to be pushed. Regards, Dmitry Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 6/6] emacs: `notmuch-show-tag-all' sans prefix arg only tags open messages
On Fri, 24 Feb 2012 00:09:14 +0100, Pieter Praet wrote: > * emacs/notmuch-show.el > > (notmuch-show-get-messages-ids): > New optional argument ONLY-OPEN. If non-nil, only return > Message-Id's for messages which are currently visible. > > (notmuch-show-tag-all): > New optional argument IGNORE-VISIBILITY, of which the inverse is > passed as ONLY-OPEN argument to `notmuch-show-get-messages-ids': > If called with a prefix arg, affect *all* messages in the current > buffer. Otherwise, only change tags of visible messages. > > (notmuch-show-archive-thread): > Update wrt changes to `notmuch-show-tag-all'. > > * test/emacs > > - Subtest "notmuch-show: change tags of open messages in current buffer" > is no longer broken. > --- > emacs/notmuch-show.el | 28 > test/emacs|1 - > 2 files changed, 20 insertions(+), 9 deletions(-) > > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index 4b37c77..4499fcd 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1334,13 +1334,17 @@ (defun notmuch-show-get-message-id () >"Return the message id of the current message." >(concat "id:\"" (notmuch-show-get-prop :id) "\"")) > > -(defun notmuch-show-get-messages-ids ( separator) > +(defun notmuch-show-get-messages-ids ( only-open separator) >"Return a list of Message-Id's of all messages in the current buffer. > > +If optional argument ONLY-OPEN is non-nil, only return > +Message-Id's for messages which are currently visible. > + > If provided with optional argument SEPARATOR, return a string > instead, consisting of all Message-Id's separated by SEPARATOR." >(let ((message-ids)) > -(notmuch-show-mapc t > +(notmuch-show-mapc > + `(if only-open (notmuch-show-message-visible-p) t) How about changing ONLY-OPEN to a general optional PREDICATE argument and pass it as is to `notmuch-show-mapc'? Please make it the last argument. Regards, Dmitry > (lambda () (push (notmuch-show-get-message-id) message-ids))) > (if separator > (mapconcat 'identity message-ids separator) > @@ -1628,13 +1632,21 @@ (defun notmuch-show-tag ( initial-input) > initial-input (notmuch-show-get-message-id > (apply 'notmuch-show-tag-message tag-changes))) > > -(defun notmuch-show-tag-all ( tag-changes) > - "Change tags for all messages in the current thread. > +(defun notmuch-show-tag-all ( ignore-visibility tag-changes) > + "Change tags of all open messages in the current buffer. > + > +If optional arg IGNORE-VISIBILITY is non-nil, change tags of > +*all* messages in the current buffer, independent of their > +visibility. > > TAG-CHANGES is a list of tag operations for `notmuch-tag'." > - (interactive (notmuch-read-tag-changes nil notmuch-show-thread-id)) > - (apply 'notmuch-tag (notmuch-show-get-messages-ids " or ") tag-changes) > - (notmuch-show-mapc t > + (interactive (cons current-prefix-arg > + (notmuch-read-tag-changes nil notmuch-show-thread-id))) > + (apply 'notmuch-tag > + (notmuch-show-get-messages-ids (not ignore-visibility) " or ") > + tag-changes) > + (notmuch-show-mapc > + `(if ignore-visibility t (notmuch-show-message-visible-p)) > (lambda () > (let* ((current-tags (notmuch-show-get-tags)) > (new-tags (notmuch-update-tags current-tags tag-changes))) > @@ -1719,7 +1731,7 @@ (defun notmuch-show-archive-thread ( unarchive) > buffer." >(interactive "P") >(let ((op (if unarchive "+" "-"))) > -(notmuch-show-tag-all (concat op "inbox" > +(notmuch-show-tag-all t (concat op "inbox" > > (defun notmuch-show-archive-thread-then-next () >"Archive each message in thread, then show next thread from search." > diff --git a/test/emacs b/test/emacs > index 644ef59..c286ff5 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -152,7 +152,6 @@ notmuch tag +"$del_tag" -"$add_tag" -- "$query" # revert > tag changes > test_expect_equal "$count_changed" "$count_total" # assert that CHANGED == > TOTAL > > test_begin_subtest "notmuch-show: change tags of open messages in current > buffer" > -test_subtest_known_broken > query="$os_x_darwin_thread" > filter="from:Jiang" > add_tag="notmuch-show-tag-all" > -- > 1.7.8.1 >
[PATCH 5/6] emacs: simplify `notmuch-show-get-messages-ids{, -search}'
On Fri, 24 Feb 2012 00:09:13 +0100, Pieter Praet wrote: > * emacs/notmuch-show.el > > (notmuch-show-get-messages-ids): > If provided with optional arg SEPARATOR, return a string consisting > of all Message-Id's, separated by SEPARATOR. Also improve original > docstring wrt default return value. > > (notmuch-show-get-messages-ids-search): > Removed, as its functionality is now in `notmuch-show-get-messages-ids'. > > (notmuch-show-tag-all): > Call `notmuch-show-get-messages-ids' with SEPARATOR arg instead of > `notmuch-show-get-messages-ids-search'. > --- There is another similar case in notmuch.el: `notmuch-show-get-messages-ids' and `notmuch-show-get-messages-ids-search'. There may be more. Please change them as well. Regards, Dmitry > emacs/notmuch-show.el | 18 +- > 1 files changed, 9 insertions(+), 9 deletions(-) > > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index 5fc0e43..4b37c77 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1334,17 +1334,17 @@ (defun notmuch-show-get-message-id () >"Return the message id of the current message." >(concat "id:\"" (notmuch-show-get-prop :id) "\"")) > > -(defun notmuch-show-get-messages-ids () > - "Return all message ids of messages in the current thread." > +(defun notmuch-show-get-messages-ids ( separator) > + "Return a list of Message-Id's of all messages in the current buffer. > + > +If provided with optional argument SEPARATOR, return a string > +instead, consisting of all Message-Id's separated by SEPARATOR." >(let ((message-ids)) > (notmuch-show-mapc t > (lambda () (push (notmuch-show-get-message-id) message-ids))) > -message-ids)) > - > -(defun notmuch-show-get-messages-ids-search () > - "Return a search string for all message ids of messages in the > -current thread." > - (mapconcat 'identity (notmuch-show-get-messages-ids) " or ")) > +(if separator > + (mapconcat 'identity message-ids separator) > + message-ids))) > > ;; dme: Would it make sense to use a macro for many of these? > > @@ -1633,7 +1633,7 @@ (defun notmuch-show-tag-all ( tag-changes) > > TAG-CHANGES is a list of tag operations for `notmuch-tag'." >(interactive (notmuch-read-tag-changes nil notmuch-show-thread-id)) > - (apply 'notmuch-tag (notmuch-show-get-messages-ids-search) tag-changes) > + (apply 'notmuch-tag (notmuch-show-get-messages-ids " or ") tag-changes) >(notmuch-show-mapc t > (lambda () > (let* ((current-tags (notmuch-show-get-tags)) > -- > 1.7.8.1 >
[PATCH 4/6] emacs: add predicate arg to `notmuch-show-mapc'
On Fri, 24 Feb 2012 00:09:12 +0100, Pieter Praet wrote: > * emacs/notmuch-show.el > > (notmuch-show-mapc): > Only call FUNCTION if new argument PREDICATE is satisfied. > Also correct original docstring: 's/thread/buffer/'. > > (notmuch-show-get-messages-ids): > Update wrt changes to `notmuch-show-mapc'. > > (notmuch-show-tag-all): > Update wrt changes to `notmuch-show-mapc'. > --- > emacs/notmuch-show.el | 15 --- > 1 files changed, 8 insertions(+), 7 deletions(-) > > diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el > index aa9ccee..5fc0e43 100644 > --- a/emacs/notmuch-show.el > +++ b/emacs/notmuch-show.el > @@ -1272,13 +1272,14 @@ (defun notmuch-show-goto-message-previous () > (notmuch-show-move-to-message-top) > t)) > > -(defun notmuch-show-mapc (function) > - "Iterate through all messages in the current thread with > -`notmuch-show-goto-message-next' and call FUNCTION for side > -effects." > +(defun notmuch-show-mapc (predicate function) Please make PREDICATE optional to avoid giving t when it is not needed. I would expect PREDICATE to be a function, but perhaps the way you implemented it is common in Emacs. Regards, Dmitry > + "Iterate through all messages in the current buffer with > +`notmuch-show-goto-message-next'. If PREDICATE is satisfied, > +call FUNCTION for side effects." >(save-excursion > (goto-char (point-min)) > -(loop do (funcall function) > +(loop do (if (eval predicate) > + (funcall function)) > while (notmuch-show-goto-message-next > > ;; Functions relating to the visibility of messages and their > @@ -1336,7 +1337,7 @@ (defun notmuch-show-get-message-id () > (defun notmuch-show-get-messages-ids () >"Return all message ids of messages in the current thread." >(let ((message-ids)) > -(notmuch-show-mapc > +(notmuch-show-mapc t > (lambda () (push (notmuch-show-get-message-id) message-ids))) > message-ids)) > > @@ -1633,7 +1634,7 @@ (defun notmuch-show-tag-all ( tag-changes) > TAG-CHANGES is a list of tag operations for `notmuch-tag'." >(interactive (notmuch-read-tag-changes nil notmuch-show-thread-id)) >(apply 'notmuch-tag (notmuch-show-get-messages-ids-search) tag-changes) > - (notmuch-show-mapc > + (notmuch-show-mapc t > (lambda () > (let* ((current-tags (notmuch-show-get-tags)) > (new-tags (notmuch-update-tags current-tags tag-changes))) > -- > 1.7.8.1 >
[PATCH 1/6] test: emacs: new tests "notmuch-show: {add, remove} multiple tags {to, from} single message"
On Fri, 24 Feb 2012 00:09:09 +0100, Pieter Praet wrote: > * test/emacs: > > - Rename subtests "{Add,Remove} tag from notmuch-show view" to > "notmuch-show: {add,remove} single tag {to,from} single message" > to be consistent with the following tests. > > - New subtest "notmuch-show: add multiple tags to single message": > `notmuch-show-add-tag' ("+") can add multiple tags to a message. > > - New subtest "notmuch-show: remove multiple tags from single message": > `notmuch-show-remove-tag' ("-") can remove multiple tags from a message. > --- Would be nice to have another patch that moves notmuch-show tests to emacs-show file. Regards, Dmitry > test/emacs | 16 ++-- > 1 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/test/emacs b/test/emacs > index b74cfa9..ec1dbb0 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -112,18 +112,30 @@ test_emacs "(notmuch-search \"$os_x_darwin_thread\") > output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) > test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, > Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox > unread)" > > -test_begin_subtest "Add tag from notmuch-show view" > +test_begin_subtest "notmuch-show: add single tag to single message" > test_emacs "(notmuch-show \"$os_x_darwin_thread\") > (execute-kbd-macro \"+tag-from-show-view\")" > output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) > test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, > Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox > tag-from-show-view unread)" > > -test_begin_subtest "Remove tag from notmuch-show view" > +test_begin_subtest "notmuch-show: remove single tag from single message" > test_emacs "(notmuch-show \"$os_x_darwin_thread\") > (execute-kbd-macro \"-tag-from-show-view\")" > output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) > test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, > Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox > unread)" > > +test_begin_subtest "notmuch-show: add multiple tags to single message" > +test_emacs "(notmuch-show \"$os_x_darwin_thread\") > + (execute-kbd-macro \"+tag1-from-show-view +tag2-from-show-view\")" > +output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) > +test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, > Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox > tag1-from-show-view tag2-from-show-view unread)" > + > +test_begin_subtest "notmuch-show: remove multiple tags from single message" > +test_emacs "(notmuch-show \"$os_x_darwin_thread\") > + (execute-kbd-macro \"-tag1-from-show-view -tag2-from-show-view\")" > +output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) > +test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, > Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox > unread)" > + > test_begin_subtest "Message with .. in Message-Id:" > add_message [id]=123..456 at example '[subject]="Message with .. in > Message-Id"' > test_emacs '(notmuch-search "id:\"123..456 at example\"") > -- > 1.7.8.1 >
[PATCH v5 00/12] emacs: more flexible and consistent tagging operations
On Fri, 24 Feb 2012 14:30:29 +0400, Dmitry Kurochkin wrote: > On Fri, 24 Feb 2012 00:07:27 +0100, Pieter Praet wrote: > > On Wed, 08 Feb 2012 11:58:32 -0400, David Bremner > > wrote: > > > On Sun, 5 Feb 2012 11:13:41 +0400, Dmitry Kurochkin > > gmail.com> wrote: > > > > Changes: > > > > > > > > v4: > > > > > > > > * rebased on master, no conflicts so no need for another review > > > > > > > > > > I pushed this series. > > > > > > Maybe this was discussed already, but I think ideally * would apply only > > > to open messages. So consider that a feature request if someone is > > > looking for a project. > > > > > > > How about if '*' applies to all messages (as it currently does), > > but 'C-u *' only to open messages? That would make more sense IMHO. > > > > But, conforming to your original request, I've implemented the inverse. > > > > I personally do like '*' as is and do not want to change it's behavior. > Though I am not against adding a prefix argument for it. > Also can you please send new patches (and patch series) in a new separate thread? If they are related to another thread, you can add a reference. But having multiple patch series with multiple versions in a single thread is very confusing IMO. Regards, Dmitry > Regards, > Dmitry > > > Patches follow. > > > > > > > d > > > ___ > > > notmuch mailing list > > > notmuch at notmuchmail.org > > > http://notmuchmail.org/mailman/listinfo/notmuch > > > > > > Peace > > > > -- > > Pieter
[PATCH v5 00/12] emacs: more flexible and consistent tagging operations
On Fri, 24 Feb 2012 00:07:27 +0100, Pieter Praet wrote: > On Wed, 08 Feb 2012 11:58:32 -0400, David Bremner > wrote: > > On Sun, 5 Feb 2012 11:13:41 +0400, Dmitry Kurochkin > gmail.com> wrote: > > > Changes: > > > > > > v4: > > > > > > * rebased on master, no conflicts so no need for another review > > > > > > > I pushed this series. > > > > Maybe this was discussed already, but I think ideally * would apply only > > to open messages. So consider that a feature request if someone is > > looking for a project. > > > > How about if '*' applies to all messages (as it currently does), > but 'C-u *' only to open messages? That would make more sense IMHO. > > But, conforming to your original request, I've implemented the inverse. > I personally do like '*' as is and do not want to change it's behavior. Though I am not against adding a prefix argument for it. Regards, Dmitry > Patches follow. > > > > d > > ___ > > notmuch mailing list > > notmuch at notmuchmail.org > > http://notmuchmail.org/mailman/listinfo/notmuch > > > Peace > > -- > Pieter
Re: [PATCH v5 00/12] emacs: more flexible and consistent tagging operations
On Fri, 24 Feb 2012 00:07:27 +0100, Pieter Praet pie...@praet.org wrote: On Wed, 08 Feb 2012 11:58:32 -0400, David Bremner da...@tethera.net wrote: On Sun, 5 Feb 2012 11:13:41 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Changes: v4: * rebased on master, no conflicts so no need for another review I pushed this series. Maybe this was discussed already, but I think ideally * would apply only to open messages. So consider that a feature request if someone is looking for a project. How about if '*' applies to all messages (as it currently does), but 'C-u *' only to open messages? That would make more sense IMHO. But, conforming to your original request, I've implemented the inverse. I personally do like '*' as is and do not want to change it's behavior. Though I am not against adding a prefix argument for it. Regards, Dmitry Patches follow. d ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch Peace -- Pieter ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v5 00/12] emacs: more flexible and consistent tagging operations
On Fri, 24 Feb 2012 14:30:29 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: On Fri, 24 Feb 2012 00:07:27 +0100, Pieter Praet pie...@praet.org wrote: On Wed, 08 Feb 2012 11:58:32 -0400, David Bremner da...@tethera.net wrote: On Sun, 5 Feb 2012 11:13:41 +0400, Dmitry Kurochkin dmitry.kuroch...@gmail.com wrote: Changes: v4: * rebased on master, no conflicts so no need for another review I pushed this series. Maybe this was discussed already, but I think ideally * would apply only to open messages. So consider that a feature request if someone is looking for a project. How about if '*' applies to all messages (as it currently does), but 'C-u *' only to open messages? That would make more sense IMHO. But, conforming to your original request, I've implemented the inverse. I personally do like '*' as is and do not want to change it's behavior. Though I am not against adding a prefix argument for it. Also can you please send new patches (and patch series) in a new separate thread? If they are related to another thread, you can add a reference. But having multiple patch series with multiple versions in a single thread is very confusing IMO. Regards, Dmitry Regards, Dmitry Patches follow. d ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch Peace -- Pieter ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 1/6] test: emacs: new tests notmuch-show: {add, remove} multiple tags {to, from} single message
On Fri, 24 Feb 2012 00:09:09 +0100, Pieter Praet pie...@praet.org wrote: * test/emacs: - Rename subtests {Add,Remove} tag from notmuch-show view to notmuch-show: {add,remove} single tag {to,from} single message to be consistent with the following tests. - New subtest notmuch-show: add multiple tags to single message: `notmuch-show-add-tag' (+) can add multiple tags to a message. - New subtest notmuch-show: remove multiple tags from single message: `notmuch-show-remove-tag' (-) can remove multiple tags from a message. --- Would be nice to have another patch that moves notmuch-show tests to emacs-show file. Regards, Dmitry test/emacs | 16 ++-- 1 files changed, 14 insertions(+), 2 deletions(-) diff --git a/test/emacs b/test/emacs index b74cfa9..ec1dbb0 100755 --- a/test/emacs +++ b/test/emacs @@ -112,18 +112,30 @@ test_emacs (notmuch-search \$os_x_darwin_thread\) output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) test_expect_equal $output thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) -test_begin_subtest Add tag from notmuch-show view +test_begin_subtest notmuch-show: add single tag to single message test_emacs (notmuch-show \$os_x_darwin_thread\) (execute-kbd-macro \+tag-from-show-view\) output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) test_expect_equal $output thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox tag-from-show-view unread) -test_begin_subtest Remove tag from notmuch-show view +test_begin_subtest notmuch-show: remove single tag from single message test_emacs (notmuch-show \$os_x_darwin_thread\) (execute-kbd-macro \-tag-from-show-view\) output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) test_expect_equal $output thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) +test_begin_subtest notmuch-show: add multiple tags to single message +test_emacs (notmuch-show \$os_x_darwin_thread\) + (execute-kbd-macro \+tag1-from-show-view +tag2-from-show-view\) +output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) +test_expect_equal $output thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox tag1-from-show-view tag2-from-show-view unread) + +test_begin_subtest notmuch-show: remove multiple tags from single message +test_emacs (notmuch-show \$os_x_darwin_thread\) + (execute-kbd-macro \-tag1-from-show-view -tag2-from-show-view\) +output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) +test_expect_equal $output thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) + test_begin_subtest Message with .. in Message-Id: add_message [id]=123..456@example '[subject]=Message with .. in Message-Id' test_emacs '(notmuch-search id:\123..456@example\) -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 4/6] emacs: add predicate arg to `notmuch-show-mapc'
On Fri, 24 Feb 2012 00:09:12 +0100, Pieter Praet pie...@praet.org wrote: * emacs/notmuch-show.el (notmuch-show-mapc): Only call FUNCTION if new argument PREDICATE is satisfied. Also correct original docstring: 's/thread/buffer/'. (notmuch-show-get-messages-ids): Update wrt changes to `notmuch-show-mapc'. (notmuch-show-tag-all): Update wrt changes to `notmuch-show-mapc'. --- emacs/notmuch-show.el | 15 --- 1 files changed, 8 insertions(+), 7 deletions(-) diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index aa9ccee..5fc0e43 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -1272,13 +1272,14 @@ (defun notmuch-show-goto-message-previous () (notmuch-show-move-to-message-top) t)) -(defun notmuch-show-mapc (function) - Iterate through all messages in the current thread with -`notmuch-show-goto-message-next' and call FUNCTION for side -effects. +(defun notmuch-show-mapc (predicate function) Please make PREDICATE optional to avoid giving t when it is not needed. I would expect PREDICATE to be a function, but perhaps the way you implemented it is common in Emacs. Regards, Dmitry + Iterate through all messages in the current buffer with +`notmuch-show-goto-message-next'. If PREDICATE is satisfied, +call FUNCTION for side effects. (save-excursion (goto-char (point-min)) -(loop do (funcall function) +(loop do (if (eval predicate) + (funcall function)) while (notmuch-show-goto-message-next ;; Functions relating to the visibility of messages and their @@ -1336,7 +1337,7 @@ (defun notmuch-show-get-message-id () (defun notmuch-show-get-messages-ids () Return all message ids of messages in the current thread. (let ((message-ids)) -(notmuch-show-mapc +(notmuch-show-mapc t (lambda () (push (notmuch-show-get-message-id) message-ids))) message-ids)) @@ -1633,7 +1634,7 @@ (defun notmuch-show-tag-all (rest tag-changes) TAG-CHANGES is a list of tag operations for `notmuch-tag'. (interactive (notmuch-read-tag-changes nil notmuch-show-thread-id)) (apply 'notmuch-tag (notmuch-show-get-messages-ids-search) tag-changes) - (notmuch-show-mapc + (notmuch-show-mapc t (lambda () (let* ((current-tags (notmuch-show-get-tags)) (new-tags (notmuch-update-tags current-tags tag-changes))) -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 5/6] emacs: simplify `notmuch-show-get-messages-ids{, -search}'
On Fri, 24 Feb 2012 00:09:13 +0100, Pieter Praet pie...@praet.org wrote: * emacs/notmuch-show.el (notmuch-show-get-messages-ids): If provided with optional arg SEPARATOR, return a string consisting of all Message-Id's, separated by SEPARATOR. Also improve original docstring wrt default return value. (notmuch-show-get-messages-ids-search): Removed, as its functionality is now in `notmuch-show-get-messages-ids'. (notmuch-show-tag-all): Call `notmuch-show-get-messages-ids' with SEPARATOR arg instead of `notmuch-show-get-messages-ids-search'. --- There is another similar case in notmuch.el: `notmuch-show-get-messages-ids' and `notmuch-show-get-messages-ids-search'. There may be more. Please change them as well. Regards, Dmitry emacs/notmuch-show.el | 18 +- 1 files changed, 9 insertions(+), 9 deletions(-) diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 5fc0e43..4b37c77 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -1334,17 +1334,17 @@ (defun notmuch-show-get-message-id () Return the message id of the current message. (concat id:\ (notmuch-show-get-prop :id) \)) -(defun notmuch-show-get-messages-ids () - Return all message ids of messages in the current thread. +(defun notmuch-show-get-messages-ids (optional separator) + Return a list of Message-Id's of all messages in the current buffer. + +If provided with optional argument SEPARATOR, return a string +instead, consisting of all Message-Id's separated by SEPARATOR. (let ((message-ids)) (notmuch-show-mapc t (lambda () (push (notmuch-show-get-message-id) message-ids))) -message-ids)) - -(defun notmuch-show-get-messages-ids-search () - Return a search string for all message ids of messages in the -current thread. - (mapconcat 'identity (notmuch-show-get-messages-ids) or )) +(if separator + (mapconcat 'identity message-ids separator) + message-ids))) ;; dme: Would it make sense to use a macro for many of these? @@ -1633,7 +1633,7 @@ (defun notmuch-show-tag-all (rest tag-changes) TAG-CHANGES is a list of tag operations for `notmuch-tag'. (interactive (notmuch-read-tag-changes nil notmuch-show-thread-id)) - (apply 'notmuch-tag (notmuch-show-get-messages-ids-search) tag-changes) + (apply 'notmuch-tag (notmuch-show-get-messages-ids or ) tag-changes) (notmuch-show-mapc t (lambda () (let* ((current-tags (notmuch-show-get-tags)) -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 6/6] emacs: `notmuch-show-tag-all' sans prefix arg only tags open messages
On Fri, 24 Feb 2012 00:09:14 +0100, Pieter Praet pie...@praet.org wrote: * emacs/notmuch-show.el (notmuch-show-get-messages-ids): New optional argument ONLY-OPEN. If non-nil, only return Message-Id's for messages which are currently visible. (notmuch-show-tag-all): New optional argument IGNORE-VISIBILITY, of which the inverse is passed as ONLY-OPEN argument to `notmuch-show-get-messages-ids': If called with a prefix arg, affect *all* messages in the current buffer. Otherwise, only change tags of visible messages. (notmuch-show-archive-thread): Update wrt changes to `notmuch-show-tag-all'. * test/emacs - Subtest notmuch-show: change tags of open messages in current buffer is no longer broken. --- emacs/notmuch-show.el | 28 test/emacs|1 - 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/emacs/notmuch-show.el b/emacs/notmuch-show.el index 4b37c77..4499fcd 100644 --- a/emacs/notmuch-show.el +++ b/emacs/notmuch-show.el @@ -1334,13 +1334,17 @@ (defun notmuch-show-get-message-id () Return the message id of the current message. (concat id:\ (notmuch-show-get-prop :id) \)) -(defun notmuch-show-get-messages-ids (optional separator) +(defun notmuch-show-get-messages-ids (optional only-open separator) Return a list of Message-Id's of all messages in the current buffer. +If optional argument ONLY-OPEN is non-nil, only return +Message-Id's for messages which are currently visible. + If provided with optional argument SEPARATOR, return a string instead, consisting of all Message-Id's separated by SEPARATOR. (let ((message-ids)) -(notmuch-show-mapc t +(notmuch-show-mapc + `(if only-open (notmuch-show-message-visible-p) t) How about changing ONLY-OPEN to a general optional PREDICATE argument and pass it as is to `notmuch-show-mapc'? Please make it the last argument. Regards, Dmitry (lambda () (push (notmuch-show-get-message-id) message-ids))) (if separator (mapconcat 'identity message-ids separator) @@ -1628,13 +1632,21 @@ (defun notmuch-show-tag (optional initial-input) initial-input (notmuch-show-get-message-id (apply 'notmuch-show-tag-message tag-changes))) -(defun notmuch-show-tag-all (rest tag-changes) - Change tags for all messages in the current thread. +(defun notmuch-show-tag-all (optional ignore-visibility rest tag-changes) + Change tags of all open messages in the current buffer. + +If optional arg IGNORE-VISIBILITY is non-nil, change tags of +*all* messages in the current buffer, independent of their +visibility. TAG-CHANGES is a list of tag operations for `notmuch-tag'. - (interactive (notmuch-read-tag-changes nil notmuch-show-thread-id)) - (apply 'notmuch-tag (notmuch-show-get-messages-ids or ) tag-changes) - (notmuch-show-mapc t + (interactive (cons current-prefix-arg + (notmuch-read-tag-changes nil notmuch-show-thread-id))) + (apply 'notmuch-tag + (notmuch-show-get-messages-ids (not ignore-visibility) or ) + tag-changes) + (notmuch-show-mapc + `(if ignore-visibility t (notmuch-show-message-visible-p)) (lambda () (let* ((current-tags (notmuch-show-get-tags)) (new-tags (notmuch-update-tags current-tags tag-changes))) @@ -1719,7 +1731,7 @@ (defun notmuch-show-archive-thread (optional unarchive) buffer. (interactive P) (let ((op (if unarchive + -))) -(notmuch-show-tag-all (concat op inbox +(notmuch-show-tag-all t (concat op inbox (defun notmuch-show-archive-thread-then-next () Archive each message in thread, then show next thread from search. diff --git a/test/emacs b/test/emacs index 644ef59..c286ff5 100755 --- a/test/emacs +++ b/test/emacs @@ -152,7 +152,6 @@ notmuch tag +$del_tag -$add_tag -- $query # revert tag changes test_expect_equal $count_changed $count_total # assert that CHANGED == TOTAL test_begin_subtest notmuch-show: change tags of open messages in current buffer -test_subtest_known_broken query=$os_x_darwin_thread filter=from:Jiang add_tag=notmuch-show-tag-all -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v2 2/4] test: emacs: new test "notmuch-search: replying to a thread (sending)"
On Sun, 19 Feb 2012 21:38:26 +0100, Pieter Praet wrote: > As pointed out in the previous commit, the test for replying from > within Emacs didn't actually submit the reply. This one does. > --- > test/emacs | 41 + > 1 files changed, 41 insertions(+), 0 deletions(-) > > diff --git a/test/emacs b/test/emacs > index 308d749..0f4f42b 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -273,6 +273,47 @@ On 01 Jan 2000 12:00:00 -, Notmuch Test Suite > w > EOF > test_expect_equal_file OUTPUT EXPECTED > > +test_begin_subtest "notmuch-search: replying to a thread (sending)" > +$TEST_DIRECTORY/smtp-dummy sent_message & > +smtp_dummy_pid=$! > +test_emacs \ > +'(let ((message-send-mail-function '\''message-smtpmail-send-it) > + (smtpmail-smtp-server "localhost") > + (smtpmail-smtp-service "25025")) > + (notmuch-search "subject:\"testing message sent via SMTP\"") > + (notmuch-test-wait) > + (notmuch-search-reply-to-thread) > + (end-of-buffer) > + (newline) > + (insert "Reply to a message via Emacs with fake SMTP") > + (message-send-and-exit))' >/dev/null 2>&1 > +wait ${smtp_dummy_pid} > +notmuch new >/dev/null > +sed \ > +-e s',^User-Agent: Notmuch/.* Emacs/.*,User-Agent: Notmuch/XXX > Emacs/XXX,' \ > +-e s',^Message-ID: <.*>$,Message-ID: ,' \ > +-e s',^In-Reply-To: <.*>$,In-Reply-To: ,' \ > +-e s',^References: <.*>$,References: ,' \ > +-e s',^Date: .*$,Date: Fri\, 29 Mar 1974 10:05:00 -,' < sent_message > >OUTPUT This sed command is a (partial) copy past from "Sending a message via (fake) SMTP" test. I suggest adding notmuch_sent_message_sanitize function which would replace common headers with XXX. Replace Date with XXX for Date for consistency with other headers, AFAICT a valid date value is not needed here. Regards, Dmitry > +cat+From: Notmuch Test Suite > +To: user at example.com > +Subject: Re: Testing message sent via SMTP > +In-Reply-To: > +References: > +User-Agent: Notmuch/XXX Emacs/XXX > +Date: Fri, 29 Mar 1974 10:05:00 - > +Message-ID: > +MIME-Version: 1.0 > +Content-Type: text/plain; charset=us-ascii > + > +On 01 Jan 2000 12:00:00 -, Notmuch Test Suite notmuchmail.org> wrote: > +> This is a test that messages are sent via SMTP > + > +Reply to a message via Emacs with fake SMTP > +EOF > +test_expect_equal_file OUTPUT EXPECTED > + > test_begin_subtest "Quote MML tags in reply" > message_id='test-emacs-mml-quoting at message.id' > add_message [id]="$message_id" \ > -- > 1.7.8.1 >
[PATCH v2 4/4] test: emacs: new test "notmuch-search: change tags of all matching messages"
On Sun, 19 Feb 2012 21:38:28 +0100, Pieter Praet wrote: > `notmuch-search-tag-all' (bound to "*") adds and removes tags > to/from all messages which match the query used to populate the > current search buffer. LGTM. But since you will need to send a new version to address Tomi's comments anyway, below are few minor comments. Regards, Dmitry > --- > test/emacs | 32 > 1 files changed, 32 insertions(+), 0 deletions(-) > > diff --git a/test/emacs b/test/emacs > index b0fb760..1db8540 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -124,6 +124,38 @@ test_emacs "(notmuch-show \"$os_x_darwin_thread\") > output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) > test_expect_equal "$output" "thread:XXX 2009-11-18 [4/4] Jjgod Jiang, > Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox > unread)" > > +test_begin_subtest "notmuch-search: change tags of all matching messages" > +old_tag="inbox" > +new_tag="xobni" > +filter="AND from:cworth" > +# Get initial tag counts and prevent false positives/negatives > +old_tag_count_1=$(notmuch count tag:"${old_tag}" "${filter}") > +new_tag_count_1=$(notmuch count tag:"${new_tag}" "${filter}") > +test "${old_tag_count_1}" == "0" && old_tag_count_1="Need 1+ matches!" Consider s/1+/>0/. > +test "${new_tag_count_1}" == "0" || new_tag_count_1="Need 0 matches!" > +# Change tags of all matching messages and get tag counts > +test_emacs "(notmuch-search \"tag:${old_tag} ${filter}\") > + (notmuch-test-wait) > + (notmuch-search-tag-all \"-${old_tag}\" \"+${new_tag}\")" > +old_tag_count_2=$(notmuch count tag:"${old_tag}" "${filter}") > +new_tag_count_2=$(notmuch count tag:"${new_tag}" "${filter}") > +# Revert tag changes and get tag counts > +test_emacs "(notmuch-search \"tag:${new_tag} ${filter}\") > + (notmuch-test-wait) > + (notmuch-search-tag-all \"+${old_tag}\" \"-${new_tag}\")" > +old_tag_count_3=$(notmuch count tag:"${old_tag}" "${filter}") > +new_tag_count_3=$(notmuch count tag:"${new_tag}" "${filter}") > +# ... and verify the results > +output=" > +before: old:${old_tag_count_1} new:${new_tag_count_1} > +after:old:${old_tag_count_2} new:${new_tag_count_2} > +restored: old:${old_tag_count_3} new:${new_tag_count_3}" > +expected=" > +before: old:${old_tag_count_1} new:0 > +after:old:0 new:${old_tag_count_1} > +restored: old:${old_tag_count_1} new:0" > +test_expect_equal "$output" "$expected" > + I would add a newline before every commented block. Regards, Dmitry > test_begin_subtest "Message with .. in Message-Id:" > add_message [id]=123..456 at example '[subject]="Message with .. in > Message-Id"' > test_emacs '(notmuch-search "id:\"123..456 at example\"") > -- > 1.7.8.1 >
[PATCH v2 3/4] test: emacs: new test "notmuch-search: when reply is sent, parent message should be tagged 'replied'"
On Sun, 19 Feb 2012 21:38:27 +0100, Pieter Praet wrote: > When a message is replied to, it should be tagged `replied'. > --- > test/emacs |5 + > 1 files changed, 5 insertions(+), 0 deletions(-) > > diff --git a/test/emacs b/test/emacs > index 0f4f42b..b0fb760 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -314,6 +314,11 @@ Reply to a message via Emacs with fake SMTP > EOF > test_expect_equal_file OUTPUT EXPECTED > > +test_begin_subtest "notmuch-search: when reply is sent, the parent message > should be tagged 'replied'" > +# depends on subtest "notmuch-search: replying to a thread (sending)" > +output=$(notmuch search 'tag:replied' | notmuch_search_sanitize) Add subject:"testing message sent via SMTP" to the query to avoid potential collisions with other tests. Regards, Dmitry > +test_expect_equal "$output" "thread:XXX 2000-01-01 [1/2] Notmuch Test > Suite; Testing message sent via SMTP (inbox replied)" > + > test_begin_subtest "Quote MML tags in reply" > message_id='test-emacs-mml-quoting at message.id' > add_message [id]="$message_id" \ > -- > 1.7.8.1 >
[PATCH v2 1/4] test: emacs: rename subtest "Reply within emacs"
On Sun, 19 Feb 2012 21:38:25 +0100, Pieter Praet wrote: > Rename subtest "Reply within emacs" to "notmuch-search: replying to a > thread (composing)" as its title is misleading: it populates a reply > buffer but doesn't submit it. > --- LGTM Regards, Dmitry > test/emacs |2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/test/emacs b/test/emacs > index b74cfa9..308d749 100755 > --- a/test/emacs > +++ b/test/emacs > @@ -255,7 +255,7 @@ Subject: > EOF > test_expect_equal_file OUTPUT EXPECTED > > -test_begin_subtest "Reply within emacs" > +test_begin_subtest "notmuch-search: replying to a thread (composing)" > test_emacs '(notmuch-search "subject:\"testing message sent via SMTP\"") > (notmuch-test-wait) > (notmuch-search-reply-to-thread) > -- > 1.7.8.1 >
Re: [PATCH v2 1/4] test: emacs: rename subtest Reply within emacs
On Sun, 19 Feb 2012 21:38:25 +0100, Pieter Praet pie...@praet.org wrote: Rename subtest Reply within emacs to notmuch-search: replying to a thread (composing) as its title is misleading: it populates a reply buffer but doesn't submit it. --- LGTM Regards, Dmitry test/emacs |2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/test/emacs b/test/emacs index b74cfa9..308d749 100755 --- a/test/emacs +++ b/test/emacs @@ -255,7 +255,7 @@ Subject: EOF test_expect_equal_file OUTPUT EXPECTED -test_begin_subtest Reply within emacs +test_begin_subtest notmuch-search: replying to a thread (composing) test_emacs '(notmuch-search subject:\testing message sent via SMTP\) (notmuch-test-wait) (notmuch-search-reply-to-thread) -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2 3/4] test: emacs: new test notmuch-search: when reply is sent, parent message should be tagged 'replied'
On Sun, 19 Feb 2012 21:38:27 +0100, Pieter Praet pie...@praet.org wrote: When a message is replied to, it should be tagged `replied'. --- test/emacs |5 + 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/test/emacs b/test/emacs index 0f4f42b..b0fb760 100755 --- a/test/emacs +++ b/test/emacs @@ -314,6 +314,11 @@ Reply to a message via Emacs with fake SMTP EOF test_expect_equal_file OUTPUT EXPECTED +test_begin_subtest notmuch-search: when reply is sent, the parent message should be tagged 'replied' +# depends on subtest notmuch-search: replying to a thread (sending) +output=$(notmuch search 'tag:replied' | notmuch_search_sanitize) Add subject:testing message sent via SMTP to the query to avoid potential collisions with other tests. Regards, Dmitry +test_expect_equal $output thread:XXX 2000-01-01 [1/2] Notmuch Test Suite; Testing message sent via SMTP (inbox replied) + test_begin_subtest Quote MML tags in reply message_id='test-emacs-mml-quot...@message.id' add_message [id]=$message_id \ -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2 4/4] test: emacs: new test notmuch-search: change tags of all matching messages
On Sun, 19 Feb 2012 21:38:28 +0100, Pieter Praet pie...@praet.org wrote: `notmuch-search-tag-all' (bound to *) adds and removes tags to/from all messages which match the query used to populate the current search buffer. LGTM. But since you will need to send a new version to address Tomi's comments anyway, below are few minor comments. Regards, Dmitry --- test/emacs | 32 1 files changed, 32 insertions(+), 0 deletions(-) diff --git a/test/emacs b/test/emacs index b0fb760..1db8540 100755 --- a/test/emacs +++ b/test/emacs @@ -124,6 +124,38 @@ test_emacs (notmuch-show \$os_x_darwin_thread\) output=$(notmuch search $os_x_darwin_thread | notmuch_search_sanitize) test_expect_equal $output thread:XXX 2009-11-18 [4/4] Jjgod Jiang, Alexander Botero-Lowry; [notmuch] Mac OS X/Darwin compatibility issues (inbox unread) +test_begin_subtest notmuch-search: change tags of all matching messages +old_tag=inbox +new_tag=xobni +filter=AND from:cworth +# Get initial tag counts and prevent false positives/negatives +old_tag_count_1=$(notmuch count tag:${old_tag} ${filter}) +new_tag_count_1=$(notmuch count tag:${new_tag} ${filter}) +test ${old_tag_count_1} == 0 old_tag_count_1=Need 1+ matches! Consider s/1+/0/. +test ${new_tag_count_1} == 0 || new_tag_count_1=Need 0 matches! +# Change tags of all matching messages and get tag counts +test_emacs (notmuch-search \tag:${old_tag} ${filter}\) + (notmuch-test-wait) + (notmuch-search-tag-all \-${old_tag}\ \+${new_tag}\) +old_tag_count_2=$(notmuch count tag:${old_tag} ${filter}) +new_tag_count_2=$(notmuch count tag:${new_tag} ${filter}) +# Revert tag changes and get tag counts +test_emacs (notmuch-search \tag:${new_tag} ${filter}\) + (notmuch-test-wait) + (notmuch-search-tag-all \+${old_tag}\ \-${new_tag}\) +old_tag_count_3=$(notmuch count tag:${old_tag} ${filter}) +new_tag_count_3=$(notmuch count tag:${new_tag} ${filter}) +# ... and verify the results +output= +before: old:${old_tag_count_1} new:${new_tag_count_1} +after:old:${old_tag_count_2} new:${new_tag_count_2} +restored: old:${old_tag_count_3} new:${new_tag_count_3} +expected= +before: old:${old_tag_count_1} new:0 +after:old:0 new:${old_tag_count_1} +restored: old:${old_tag_count_1} new:0 +test_expect_equal $output $expected + I would add a newline before every commented block. Regards, Dmitry test_begin_subtest Message with .. in Message-Id: add_message [id]=123..456@example '[subject]=Message with .. in Message-Id' test_emacs '(notmuch-search id:\123..456@example\) -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH v2 2/4] test: emacs: new test notmuch-search: replying to a thread (sending)
On Sun, 19 Feb 2012 21:38:26 +0100, Pieter Praet pie...@praet.org wrote: As pointed out in the previous commit, the test for replying from within Emacs didn't actually submit the reply. This one does. --- test/emacs | 41 + 1 files changed, 41 insertions(+), 0 deletions(-) diff --git a/test/emacs b/test/emacs index 308d749..0f4f42b 100755 --- a/test/emacs +++ b/test/emacs @@ -273,6 +273,47 @@ On 01 Jan 2000 12:00:00 -, Notmuch Test Suite test_su...@notmuchmail.org w EOF test_expect_equal_file OUTPUT EXPECTED +test_begin_subtest notmuch-search: replying to a thread (sending) +$TEST_DIRECTORY/smtp-dummy sent_message +smtp_dummy_pid=$! +test_emacs \ +'(let ((message-send-mail-function '\''message-smtpmail-send-it) + (smtpmail-smtp-server localhost) + (smtpmail-smtp-service 25025)) + (notmuch-search subject:\testing message sent via SMTP\) + (notmuch-test-wait) + (notmuch-search-reply-to-thread) + (end-of-buffer) + (newline) + (insert Reply to a message via Emacs with fake SMTP) + (message-send-and-exit))' /dev/null 21 +wait ${smtp_dummy_pid} +notmuch new /dev/null +sed \ +-e s',^User-Agent: Notmuch/.* Emacs/.*,User-Agent: Notmuch/XXX Emacs/XXX,' \ +-e s',^Message-ID: .*$,Message-ID: XXX,' \ +-e s',^In-Reply-To: .*$,In-Reply-To: XXX,' \ +-e s',^References: .*$,References: XXX,' \ +-e s',^Date: .*$,Date: Fri\, 29 Mar 1974 10:05:00 -,' sent_message OUTPUT This sed command is a (partial) copy past from Sending a message via (fake) SMTP test. I suggest adding notmuch_sent_message_sanitize function which would replace common headers with XXX. Replace Date with XXX for Date for consistency with other headers, AFAICT a valid date value is not needed here. Regards, Dmitry +cat EOF EXPECTED +From: Notmuch Test Suite test_su...@notmuchmail.org +To: u...@example.com +Subject: Re: Testing message sent via SMTP +In-Reply-To: XXX +References: XXX +User-Agent: Notmuch/XXX Emacs/XXX +Date: Fri, 29 Mar 1974 10:05:00 - +Message-ID: XXX +MIME-Version: 1.0 +Content-Type: text/plain; charset=us-ascii + +On 01 Jan 2000 12:00:00 -, Notmuch Test Suite test_su...@notmuchmail.org wrote: + This is a test that messages are sent via SMTP + +Reply to a message via Emacs with fake SMTP +EOF +test_expect_equal_file OUTPUT EXPECTED + test_begin_subtest Quote MML tags in reply message_id='test-emacs-mml-quot...@message.id' add_message [id]=$message_id \ -- 1.7.8.1 ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH 0/3] Make notmuch-show-refresh-view retain state by default
On Sun, 19 Feb 2012 01:22:10 -0500, Austin Clements wrote: > Based on the thread at id:"20120213152858.GO27039 at mit.edu" it seems > like people want show refresh to retain message state by default (I > certainly do), rather than reset it by default. As a nice bonus, this > fixes a broken test. > All three patches look good to me. Regards, Dmitry > ___ > notmuch mailing list > notmuch at notmuchmail.org > http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 0/3] Make notmuch-show-refresh-view retain state by default
On Sun, 19 Feb 2012 01:22:10 -0500, Austin Clements amdra...@mit.edu wrote: Based on the thread at id:20120213152858.go27...@mit.edu it seems like people want show refresh to retain message state by default (I certainly do), rather than reset it by default. As a nice bonus, this fixes a broken test. All three patches look good to me. Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
Re: [PATCH 0/3] Make notmuch-show-refresh-view retain state by default
On Sun, 19 Feb 2012 12:25:41 -0500, Austin Clements amdra...@mit.edu wrote: Quoth Tomi Ollila on Feb 19 at 11:43 am: On Sun, 19 Feb 2012 01:22:10 -0500, Austin Clements amdra...@mit.edu wrote: Based on the thread at id:20120213152858.go27...@mit.edu it seems like people want show refresh to retain message state by default (I certainly do), rather than reset it by default. As a nice bonus, this fixes a broken test. Hmm Every '=' keypress in a thread removes 'unread' tag from next unread message :o Oh dear. It's slightly subtler than that, though. Refreshing will remove the unread tag from the first message matching the query. (I suspect you had tag:unread in your query?) This is particularly confusing for state-retaining refresh because that message might not even be open. That is probably desirable feature when refreshing view without retaining state. Also, probably notmuch-show-refresh-view should be fixed not to mark next message unread when retaining state ? I would argue that refresh should never have side-effects, so neither case should mark anything read. I'll send a v2. I agree. But this looks like a separate issue, no? So why v2 instead of a separate patch/series? Regards, Dmitry ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch ___ notmuch mailing list notmuch@notmuchmail.org http://notmuchmail.org/mailman/listinfo/notmuch
[PATCH v10 2/2] emacs: Tests for user-defined sections
From: Daniel SchoepeA new file was added for notmuch-hello tests. --- test/emacs-hello | 47 test/emacs.expected-output/notmuch-hello |3 +- .../notmuch-hello-new-section |4 ++ .../notmuch-hello-no-saved-searches|3 +- .../notmuch-hello-section-counts |5 ++ .../notmuch-hello-section-hidden-tag |4 ++ .../notmuch-hello-section-with-empty |4 ++ .../emacs.expected-output/notmuch-hello-with-empty |3 +- test/notmuch-test |1 + 9 files changed, 71 insertions(+), 3 deletions(-) create mode 100755 test/emacs-hello create mode 100644 test/emacs.expected-output/notmuch-hello-new-section create mode 100644 test/emacs.expected-output/notmuch-hello-section-counts create mode 100644 test/emacs.expected-output/notmuch-hello-section-hidden-tag create mode 100644 test/emacs.expected-output/notmuch-hello-section-with-empty diff --git a/test/emacs-hello b/test/emacs-hello new file mode 100755 index 000..b235e3a --- /dev/null +++ b/test/emacs-hello @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +test_description="Testing emacs notmuch-hello view" +. test-lib.sh + +EXPECTED=$TEST_DIRECTORY/emacs.expected-output + +add_email_corpus + +test_begin_subtest "User-defined section with inbox tag" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-searches + \"Test\" '((\"inbox\" . \"tag:inbox\"))) + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-new-section + +test_begin_subtest "User-defined section with empty, hidden entry" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-searches + \"Test-with-empty\" + '((\"inbox\" . \"tag:inbox\") + (\"doesnotexist\" . \"tag:doesnotexist\")) + :hide-empty-searches t) + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-with-empty + +test_begin_subtest "User-defined section, unread tag filtered out" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-tags-section + \"Test-with-filtered\" + :hide-tags '(\"unread\")) + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-hidden-tag + +test_begin_subtest "User-defined section, different query for counts" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-tags-section + \"Test-with-counts\" + :filter-count \"tag:signed\") + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts + +test_done diff --git a/test/emacs.expected-output/notmuch-hello b/test/emacs.expected-output/notmuch-hello index 3e59595..1470790 100644 --- a/test/emacs.expected-output/notmuch-hello +++ b/test/emacs.expected-output/notmuch-hello @@ -6,9 +6,10 @@ Saved searches: [edit] Search: . -[Show all tags] +All tags: [show] Type a search query and hit RET to view matching threads. Edit saved searches with the `edit' button. Hit RET or click on a saved search or tag name to view matching threads. `=' to refresh this screen. `s' to search messages. `q' to quit. + Customize this page. diff --git a/test/emacs.expected-output/notmuch-hello-new-section b/test/emacs.expected-output/notmuch-hello-new-section new file mode 100644 index 000..c64d712 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-new-section @@ -0,0 +1,4 @@ +Test: [hide] + + 52 inbox + diff --git a/test/emacs.expected-output/notmuch-hello-no-saved-searches b/test/emacs.expected-output/notmuch-hello-no-saved-searches index ef0e5d0..05475b1 100644 --- a/test/emacs.expected-output/notmuch-hello-no-saved-searches +++ b/test/emacs.expected-output/notmuch-hello-no-saved-searches @@ -2,9 +2,10 @@ Search: . -[Show all tags] +All tags: [show] Type a search query and hit RET to view matching threads. Edit saved searches with the `edit' button. Hit RET or click on a saved search or tag name to view matching threads. `=' to refresh this screen. `s' to search messages. `q' to quit. +
[PATCH v10 1/2] emacs: User-defined sections in notmuch-hello
From: Daniel SchoepeThis patch makes the notmuch-hello screen fully customizable by allowing the user to add and remove arbitrary sections. It also provides some convenience functions for constructing sections, e.g. showing the unread message count for each tag. This is done by specifying a list of functions that will be run when notmuch-hello is invoked. --- emacs/notmuch-hello.el | 625 --- 1 files changed, 425 insertions(+), 200 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index d17a30f..aad373d 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -154,6 +154,108 @@ International Bureau of Weights and Measures." (defvar notmuch-hello-url "http://notmuchmail.org; "The `notmuch' web site.") +(defvar notmuch-hello-search-pos nil + "Position of search widget, if any. + +This should only be set by `notmuch-hello-insert-search'.") + +(defvar notmuch-hello-custom-section-options + '((:filter (string :tag "Filter for each tag")) +(:filter-count (string :tag "Different filter to generate message counts")) +(:initially-hidden (const :tag "Hide this section on startup" t)) +(:show-empty-searches (const :tag "Show queries with no matching messages" t)) +(:hide-if-empty (const :tag "Hide this section if all queries are empty +\(and not shown by show-empty-searches)" t))) + "Various customization-options for notmuch-hello-tags/query-section.") + +(define-widget 'notmuch-hello-tags-section 'lazy + "Customize-type for notmuch-hello tag-list sections." + :tag "Customized tag-list section (see docstring for details)" + :type + `(list :tag "" +(const :tag "" notmuch-hello-insert-tags-section) +(string :tag "Title for this section") +(plist + :inline t + :options + ,(append notmuch-hello-custom-section-options + '((:hide-tags (repeat :tag "Tags that will be hidden" +string))) + +(define-widget 'notmuch-hello-query-section 'lazy + "Customize-type for custom saved-search-like sections" + :tag "Customized queries section (see docstring for details)" + :type + `(list :tag "" +(const :tag "" notmuch-hello-insert-query-list) +(string :tag "Title for this section") +(repeat :tag "Queries" +(cons (string :tag "Name") (string :tag "Query"))) +(plist :inline t :options ,notmuch-hello-custom-section-options))) + +(defcustom notmuch-hello-sections + (list #'notmuch-hello-insert-header + #'notmuch-hello-insert-saved-searches + #'notmuch-hello-insert-search + #'notmuch-hello-insert-recent-searches + #'notmuch-hello-insert-alltags + #'notmuch-hello-insert-footer) + "Sections for notmuch-hello. + +The list contains functions which are used to construct sections in +notmuch-hello buffer. When notmuch-hello buffer is constructed, +these functions are run in the order they appear in this list. Each +function produces a section simply by adding content to the current +buffer. A section should not end with an empty line, because a +newline will be inserted after each section by `notmuch-hello'. + +Each function should take no arguments. If the produced section +includes `notmuch-hello-target' (i.e. cursor should be positioned +inside this section), the function should return this element's +position. +Otherwise, it should return nil. + +For convenience an element can also be a list of the form (FUNC ARG1 +ARG2 .. ARGN) in which case FUNC will be applied to the rest of the +list. + +A \"Customized tag-list section\" item in the customize-interface +displays a list of all tags, optionally hiding some of them. It +is also possible to filter the list of messages matching each tag +by an additional filter query. Similarly, the count of messages +displayed next to the buttons can be generated by applying a +different filter to the tag query. These filters are also +supported for \"Customized queries section\" items." + :group 'notmuch + :type + '(repeat +(choice (function-item notmuch-hello-insert-header) + (function-item notmuch-hello-insert-saved-searches) + (function-item notmuch-hello-insert-search) + (function-item notmuch-hello-insert-recent-searches) + (function-item notmuch-hello-insert-alltags) + (function-item notmuch-hello-insert-footer) + (function-item notmuch-hello-insert-inbox) + notmuch-hello-tags-section + notmuch-hello-query-section + (function :tag "Custom section" + +(defvar notmuch-hello-target nil + "Button text at position of point before rebuilding the notmuch-buffer. + +This variable contains the text of the button, if any, the +point was positioned at before the notmuch-hello buffer was +rebuilt. This should never actually be global and is defined as a +defvar only for
[PATCH v10 0/2] emacs: User-defined sections in notmuch-hello
Found a small bug... Changes: v10: * explicitly return nil from `notmuch-hello-insert-recent-searches', otherwise `indent-rigidly' returns a marker pointing to non-existing buffer and breaks final-target-pos handling in `notmuch-hello' v9: * correctly merge bc267b70b01c79f6bdda52641e9cd7574a151eff * fix :hide-if-empty description: s/and not hidden by show-if-empty/and not shown by show-empty-searches/ * fix typo in `notmuch-hello-target' docstring: s/globaly/global/ * add docstring for notmuch-hello-first-run * fix indentation in `notmuch-hello-insert-saved-searches' * fix indentation in `notmuch-hello-insert-searches' docstring * fix target position calculation in `notmuch-hello-insert-saved-searches' * s/User defined/User-defined/ in tests * move tests to a new emacs-hello file Regards, Dmitry
[PATCH v9 2/2] emacs: Tests for user-defined sections
From: Daniel SchoepeA new file was added for notmuch-hello tests. --- test/emacs-hello | 47 test/emacs.expected-output/notmuch-hello |3 +- .../notmuch-hello-new-section |4 ++ .../notmuch-hello-no-saved-searches|3 +- .../notmuch-hello-section-counts |5 ++ .../notmuch-hello-section-hidden-tag |4 ++ .../notmuch-hello-section-with-empty |4 ++ .../emacs.expected-output/notmuch-hello-with-empty |3 +- test/notmuch-test |1 + 9 files changed, 71 insertions(+), 3 deletions(-) create mode 100755 test/emacs-hello create mode 100644 test/emacs.expected-output/notmuch-hello-new-section create mode 100644 test/emacs.expected-output/notmuch-hello-section-counts create mode 100644 test/emacs.expected-output/notmuch-hello-section-hidden-tag create mode 100644 test/emacs.expected-output/notmuch-hello-section-with-empty diff --git a/test/emacs-hello b/test/emacs-hello new file mode 100755 index 000..b235e3a --- /dev/null +++ b/test/emacs-hello @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +test_description="Testing emacs notmuch-hello view" +. test-lib.sh + +EXPECTED=$TEST_DIRECTORY/emacs.expected-output + +add_email_corpus + +test_begin_subtest "User-defined section with inbox tag" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-searches + \"Test\" '((\"inbox\" . \"tag:inbox\"))) + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-new-section + +test_begin_subtest "User-defined section with empty, hidden entry" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-searches + \"Test-with-empty\" + '((\"inbox\" . \"tag:inbox\") + (\"doesnotexist\" . \"tag:doesnotexist\")) + :hide-empty-searches t) + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-with-empty + +test_begin_subtest "User-defined section, unread tag filtered out" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-tags-section + \"Test-with-filtered\" + :hide-tags '(\"unread\")) + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-hidden-tag + +test_begin_subtest "User-defined section, different query for counts" +test_emacs "(let ((notmuch-hello-sections + (list (lambda () (notmuch-hello-insert-tags-section + \"Test-with-counts\" + :filter-count \"tag:signed\") + (notmuch-hello) + (test-output))" +test_expect_equal_file OUTPUT $EXPECTED/notmuch-hello-section-counts + +test_done diff --git a/test/emacs.expected-output/notmuch-hello b/test/emacs.expected-output/notmuch-hello index 3e59595..1470790 100644 --- a/test/emacs.expected-output/notmuch-hello +++ b/test/emacs.expected-output/notmuch-hello @@ -6,9 +6,10 @@ Saved searches: [edit] Search: . -[Show all tags] +All tags: [show] Type a search query and hit RET to view matching threads. Edit saved searches with the `edit' button. Hit RET or click on a saved search or tag name to view matching threads. `=' to refresh this screen. `s' to search messages. `q' to quit. + Customize this page. diff --git a/test/emacs.expected-output/notmuch-hello-new-section b/test/emacs.expected-output/notmuch-hello-new-section new file mode 100644 index 000..c64d712 --- /dev/null +++ b/test/emacs.expected-output/notmuch-hello-new-section @@ -0,0 +1,4 @@ +Test: [hide] + + 52 inbox + diff --git a/test/emacs.expected-output/notmuch-hello-no-saved-searches b/test/emacs.expected-output/notmuch-hello-no-saved-searches index ef0e5d0..05475b1 100644 --- a/test/emacs.expected-output/notmuch-hello-no-saved-searches +++ b/test/emacs.expected-output/notmuch-hello-no-saved-searches @@ -2,9 +2,10 @@ Search: . -[Show all tags] +All tags: [show] Type a search query and hit RET to view matching threads. Edit saved searches with the `edit' button. Hit RET or click on a saved search or tag name to view matching threads. `=' to refresh this screen. `s' to search messages. `q' to quit. +
[PATCH v9 1/2] emacs: User-defined sections in notmuch-hello
From: Daniel SchoepeThis patch makes the notmuch-hello screen fully customizable by allowing the user to add and remove arbitrary sections. It also provides some convenience functions for constructing sections, e.g. showing the unread message count for each tag. This is done by specifying a list of functions that will be run when notmuch-hello is invoked. --- emacs/notmuch-hello.el | 624 1 files changed, 424 insertions(+), 200 deletions(-) diff --git a/emacs/notmuch-hello.el b/emacs/notmuch-hello.el index d17a30f..89c5637 100644 --- a/emacs/notmuch-hello.el +++ b/emacs/notmuch-hello.el @@ -154,6 +154,108 @@ International Bureau of Weights and Measures." (defvar notmuch-hello-url "http://notmuchmail.org; "The `notmuch' web site.") +(defvar notmuch-hello-search-pos nil + "Position of search widget, if any. + +This should only be set by `notmuch-hello-insert-search'.") + +(defvar notmuch-hello-custom-section-options + '((:filter (string :tag "Filter for each tag")) +(:filter-count (string :tag "Different filter to generate message counts")) +(:initially-hidden (const :tag "Hide this section on startup" t)) +(:show-empty-searches (const :tag "Show queries with no matching messages" t)) +(:hide-if-empty (const :tag "Hide this section if all queries are empty +\(and not shown by show-empty-searches)" t))) + "Various customization-options for notmuch-hello-tags/query-section.") + +(define-widget 'notmuch-hello-tags-section 'lazy + "Customize-type for notmuch-hello tag-list sections." + :tag "Customized tag-list section (see docstring for details)" + :type + `(list :tag "" +(const :tag "" notmuch-hello-insert-tags-section) +(string :tag "Title for this section") +(plist + :inline t + :options + ,(append notmuch-hello-custom-section-options + '((:hide-tags (repeat :tag "Tags that will be hidden" +string))) + +(define-widget 'notmuch-hello-query-section 'lazy + "Customize-type for custom saved-search-like sections" + :tag "Customized queries section (see docstring for details)" + :type + `(list :tag "" +(const :tag "" notmuch-hello-insert-query-list) +(string :tag "Title for this section") +(repeat :tag "Queries" +(cons (string :tag "Name") (string :tag "Query"))) +(plist :inline t :options ,notmuch-hello-custom-section-options))) + +(defcustom notmuch-hello-sections + (list #'notmuch-hello-insert-header + #'notmuch-hello-insert-saved-searches + #'notmuch-hello-insert-search + #'notmuch-hello-insert-recent-searches + #'notmuch-hello-insert-alltags + #'notmuch-hello-insert-footer) + "Sections for notmuch-hello. + +The list contains functions which are used to construct sections in +notmuch-hello buffer. When notmuch-hello buffer is constructed, +these functions are run in the order they appear in this list. Each +function produces a section simply by adding content to the current +buffer. A section should not end with an empty line, because a +newline will be inserted after each section by `notmuch-hello'. + +Each function should take no arguments. If the produced section +includes `notmuch-hello-target' (i.e. cursor should be positioned +inside this section), the function should return this element's +position. +Otherwise, it should return nil. + +For convenience an element can also be a list of the form (FUNC ARG1 +ARG2 .. ARGN) in which case FUNC will be applied to the rest of the +list. + +A \"Customized tag-list section\" item in the customize-interface +displays a list of all tags, optionally hiding some of them. It +is also possible to filter the list of messages matching each tag +by an additional filter query. Similarly, the count of messages +displayed next to the buttons can be generated by applying a +different filter to the tag query. These filters are also +supported for \"Customized queries section\" items." + :group 'notmuch + :type + '(repeat +(choice (function-item notmuch-hello-insert-header) + (function-item notmuch-hello-insert-saved-searches) + (function-item notmuch-hello-insert-search) + (function-item notmuch-hello-insert-recent-searches) + (function-item notmuch-hello-insert-alltags) + (function-item notmuch-hello-insert-footer) + (function-item notmuch-hello-insert-inbox) + notmuch-hello-tags-section + notmuch-hello-query-section + (function :tag "Custom section" + +(defvar notmuch-hello-target nil + "Button text at position of point before rebuilding the notmuch-buffer. + +This variable contains the text of the button, if any, the +point was positioned at before the notmuch-hello buffer was +rebuilt. This should never actually be global and is defined as a +defvar only for