\ '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()',
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: ')
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
$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)
endif
endfunction
-function! s:NotMuch()
+function! s:NotMuch(...)
call s:set_defaults()
ruby << EOF
end
$db_name = nil
- $email_address = nil
+ $email = $email_name = $email_address = nil
$searches = []
$buf_queue = []
$threads = []
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)
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
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
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
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: