X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=vim%2Fnotmuch.vim;h=4bd5f131aa564a9f4176d2f527ef511a03c32443;hb=6ff607d6a01b78db123e9751fdeddd65d76da11d;hp=72bf73b312e9a30ab661849f94a12eb2cd7008f9;hpb=85b3dc9f0f33f7af1acb111738d3a1b37befcc01;p=notmuch diff --git a/vim/notmuch.vim b/vim/notmuch.vim index 72bf73b3..4bd5f131 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -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()', \ '': '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: ') @@ -258,12 +273,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 +319,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,7 +414,7 @@ function! s:set_defaults() endif endfunction -function! s:NotMuch() +function! s:NotMuch(...) call s:set_defaults() ruby << EOF @@ -410,7 +427,7 @@ ruby << EOF end $db_name = nil - $email_address = nil + $email = $email_name = $email_address = nil $searches = [] $buf_queue = [] $threads = [] @@ -435,7 +452,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) @@ -485,7 +504,7 @@ 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.charset = 'utf-8' m.content_transfer_encoding = '7bit' end @@ -557,6 +576,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 +584,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 @@ -846,9 +867,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() " vim: set noexpandtab: