]> git.notmuchmail.org Git - notmuch/blobdiff - vim/notmuch.vim
vim: trivial cleanup
[notmuch] / vim / notmuch.vim
index 11ea4fd363467865e973a0571b18c9c7bfcc39c6..9a45300f2683e210cbd21bf0446585819d74492d 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: ')
@@ -193,6 +208,9 @@ endfunction
 
 function! s:search_search_prompt()
        let text = input('Search: ')
+       if text == ""
+         return
+       endif
        setlocal modifiable
 ruby << EOF
        $cur_search = VIM::evaluate('text')
@@ -258,12 +276,14 @@ function! s:show_next_thread()
 endfunction
 
 function! s:kill_this_buffer()
-       ruby $curbuf.close
-       bdelete!
 ruby << EOF
-       $buf_queue.pop
-       b = $buf_queue.last
-       VIM::command("buffer #{b}") if b
+       if $buf_queue.size > 1
+               $curbuf.close
+               VIM::command("bdelete!")
+               $buf_queue.pop
+               b = $buf_queue.last
+               VIM::command("buffer #{b}") if b
+       end
 EOF
 endfunction
 
@@ -302,7 +322,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)
@@ -397,20 +417,21 @@ function! s:set_defaults()
        endif
 endfunction
 
-function! s:NotMuch()
+function! s:NotMuch(...)
        call s:set_defaults()
 
 ruby << EOF
        require 'notmuch'
        require 'rubygems'
        require 'tempfile'
+       require 'socket'
        begin
                require 'mail'
        rescue LoadError
        end
 
        $db_name = nil
-       $email_address = nil
+       $email = $email_name = $email_address = nil
        $searches = []
        $buf_queue = []
        $threads = []
@@ -435,7 +456,9 @@ ruby << EOF
                end
 
                $db_name = $config['database.path']
-               $email_address = "%s <%s>" % [$config['user.name'], $config['user.primary_email']]
+               $email_name = $config['user.name']
+               $email_address = $config['user.primary_email']
+               $email = "%s <%s>" % [$email_name, $email_address]
        end
 
        def vim_puts(s)
@@ -473,6 +496,14 @@ ruby << EOF
                end
        end
 
+       def generate_message_id
+               t = Time.now
+               random_tag = sprintf('%x%x_%x%x%x',
+                       t.to_i, t.tv_usec,
+                       $$, Thread.current.object_id.abs, rand(255))
+               return "<#{random_tag}@#{Socket.gethostname}.notmuch>"
+       end
+
        def open_reply(orig)
                help_lines = [
                        'Notmuch-Help: Type in your message here; to help you use these bindings:',
@@ -485,7 +516,8 @@ ruby << EOF
                                m.to = [orig[:from].to_s, orig[:to].to_s]
                        end
                        m.cc = orig[:cc]
-                       m.from = $email_address
+                       m.from = $email
+                       m.message_id = generate_message_id
                        m.charset = 'utf-8'
                        m.content_transfer_encoding = '7bit'
                end
@@ -534,7 +566,7 @@ ruby << EOF
 
                        f.flush
 
-                       VIM::command("let s:reply_from='%s'" % reply.from.first.to_s)
+                       VIM::command("let s:reply_from='%s'" % $email_address)
                        VIM::command("call s:new_file_buffer('compose', '#{f.path}')")
                        VIM::command("call cursor(#{old_count}, 0)")
                end
@@ -848,9 +880,13 @@ ruby << EOF
 
        get_config
 EOF
-       call s:folders()
+       if a:0
+         call s:search(join(a:000))
+       else
+         call s:folders()
+       endif
 endfunction
 
-command NotMuch :call s:NotMuch()
+command -nargs=* NotMuch call s:NotMuch(<f-args>)
 
 " vim: set noexpandtab: