]> git.notmuchmail.org Git - notmuch/blobdiff - vim/notmuch.vim
vim: add option to save the patches of a patch series
[notmuch] / vim / notmuch.vim
index 72bf73b312e9a30ab661849f94a12eb2cd7008f9..9cfa795d3d36e2d1652709b057d4f6aa802f38ca 100644 (file)
@@ -34,6 +34,7 @@ let g:notmuch_rb_show_maps = {
        \ 'o':          'show_open_msg()',
        \ 'e':          'show_extract_msg()',
        \ 's':          'show_save_msg()',
+       \ 'p':          'show_save_patches()',
        \ 'r':          'show_reply()',
        \ '?':          'show_info()',
        \ '<Tab>':      'show_next_msg()',
@@ -181,6 +182,20 @@ ruby << EOF
 EOF
 endfunction
 
+function! s:show_save_patches()
+ruby << EOF
+       q = $curbuf.query($cur_thread)
+       t = q.search_threads.first
+       n = 0
+       t.toplevel_messages.first.replies.each do |m|
+               next if not m['subject'] =~ /^\[PATCH.*\]/
+               file = "%04d.patch" % [n += 1]
+               system "notmuch show --format=mbox id:#{m.message_id} > #{file}"
+       end
+       vim_puts "Saved #{n} patches"
+EOF
+endfunction
+
 function! s:show_tag(intags)
        if empty(a:intags)
                let tags = input('tags: ')
@@ -302,7 +317,7 @@ ruby << EOF
        $messages.clear
        $curbuf.render do |b|
                q = $curbuf.query(get_cur_view)
-               q.sort = 0
+               q.sort = Notmuch::SORT_OLDEST_FIRST
                msgs = q.search_messages
                msgs.each do |msg|
                        m = Mail.read(msg.filename)
@@ -557,6 +572,7 @@ ruby << EOF
        def search_render(search)
                date_fmt = VIM::evaluate('g:notmuch_rb_date_format')
                q = $curbuf.query(search)
+               q.sort = Notmuch::SORT_NEWEST_FIRST
                $threads.clear
                t = q.search_threads
 
@@ -564,10 +580,11 @@ ruby << EOF
                        items.each do |e|
                                authors = e.authors.to_utf8.split(/[,|]/).map { |a| author_filter(a) }.join(",")
                                date = Time.at(e.newest_date).strftime(date_fmt)
+                               subject = e.messages.first['subject']
                                if $mail_installed
-                                       subject = Mail::Field.new("Subject: " + e.subject).to_s
+                                       subject = Mail::Field.new("Subject: " + subject).to_s
                                else
-                                       subject = e.subject.force_encoding('utf-8')
+                                       subject = subject.force_encoding('utf-8')
                                end
                                b << "%-12s %3s %-20.20s | %s (%s)" % [date, e.matched_messages, authors, subject, e.tags]
                                $threads << e.thread_id