implement sort order for notmuch show
authorJesse Rosenthal <jrosenthal@jhu.edu>
Sat, 27 Mar 2010 23:02:44 +0000 (00:02 +0100)
committerJesse Rosenthal <jrosenthal@jhu.edu>
Sat, 27 Mar 2010 23:02:44 +0000 (00:02 +0100)
cnotmuch/message.py
notmuch

index 7274c6da62de68d3854d93199afd63aadd9481b0..6a68c92d3ca1b1e8686131e9b580a9ea080b8df5 100644 (file)
@@ -721,7 +721,7 @@ class Message(object):
         easy to change to a new format when the format changes."""
 
         format = self.format_message_internal()
-        output = "\n\fmessage{ id:%s depth:%d match:%d filename:%s" \
+        output = "\fmessage{ id:%s depth:%d match:%d filename:%s" \
                  % (format['id'], indent, format['match'], format['filename'])
         output += "\n\fheader{"
 
@@ -729,7 +729,7 @@ class Message(object):
         output += "\n%s (%s) (" % (format["headers"]["from"],
                                    format["headers"]["date"])
         output += ", ".join(format["tags"])
-        output += ")\n"
+        output += ")"
 
         output += "\nSubject: %s" % format["headers"]["subject"]
         output += "\nFrom: %s" % format["headers"]["from"]
@@ -739,7 +739,7 @@ class Message(object):
         if format["headers"]["bcc"]:
             output += "\nBcc: %s" % format["headers"]["bcc"]
         output += "\nDate: %s" % format["headers"]["date"]
-        output += "\nheader}\f"
+        output += "\n\fheader}"
 
         output += "\n\fbody{"
 
@@ -748,7 +748,7 @@ class Message(object):
         for p in parts:
             if not p.has_key("filename"):
                 output += "\n\fpart{ "
-                output += "ID: %d, Content-type:%s\n" % (p["id"], 
+                output += "ID: %d, Content-type: %s\n" % (p["id"], 
                                                          p["content_type"])
                 if p.has_key("content"):
                     output += "\n%s\n" % p["content"]
@@ -763,7 +763,7 @@ class Message(object):
                 output += "\n\fattachment}\n"
 
         output += "\n\fbody}\n"
-        output += "\n\fmessage}\n"
+        output += "\n\fmessage}"
 
         return output
 
diff --git a/notmuch b/notmuch
index c01dab34905a0703a6492d1cd3691b462530503f..2bb496f3132c08d29f5c8dac1b7a909b24f0325e 100755 (executable)
--- a/notmuch
+++ b/notmuch
@@ -290,16 +290,34 @@ if __name__ == '__main__':
    #-------------------------------------
    elif sys.argv[1] == 'search':
       db = Database()
-      if len(sys.argv) == 2:
-         #no further search term
-         querystr=''
-      else:
-         #mangle arguments wrapping terms with spaces in quotes
-         querystr = quote_query_line(sys.argv[2:])
+      query_string = ''
+      sort_order="newest-first"
+      first_search_term = None
+      for (i, arg) in enumerate(sys.argv[1:]):
+         if arg.startswith('--sort='):
+            sort_order=arg.split("=")[1]
+            if not sort_order in ("oldest-first", "newest-first"):
+               raise Exception("unknown sort order")
+         elif not arg.startswith('--'):
+              #save the position of the first sys.argv that is a search term
+              first_search_term = i+1
+
+      if first_search_term:
+          #mangle arguments wrapping terms with spaces in quotes
+          querystr = quote_query_line(sys.argv[first_search_term:])
+
+      
       logging.debug("search "+querystr)
-      t = Query(db,querystr).search_threads()
+      qry = Query(db,querystr)
+      if sort_order == "oldest-first":
+        qry.set_sort(Query.SORT.OLDEST_FIRST)
+      else:
+        qry.set_sort(Query.SORT.NEWEST_FIRST)
+      t = qry.search_threads()
+
       for thread in t:
-         print(str(thread))
+        print(str(thread))
+
    #-------------------------------------
    elif sys.argv[1] == 'show':
       entire_thread = False
@@ -344,7 +362,7 @@ if __name__ == '__main__':
 
          first_toplevel = False
 
-         msgs.print_messages(out_format, 0, True)
+         msgs.print_messages(out_format, 0, entire_thread)
 
       if out_format.lower() == "json":
          sys.stdout.write("]")