X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=vim%2Fnotmuch.vim;h=8383fd65a5448b3610fee105235720419d5f4464;hb=de74431cfeb24ca72f6dfa4df93130ba49c59219;hp=aa1b7ef6677b7543728b180a08f3e635f190e77e;hpb=a760e4ab47e152a9d3b4fa9b733f82723ebaaefe;p=notmuch diff --git a/vim/notmuch.vim b/vim/notmuch.vim index aa1b7ef6..8383fd65 100644 --- a/vim/notmuch.vim +++ b/vim/notmuch.vim @@ -208,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') @@ -421,13 +424,14 @@ 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 = [] @@ -452,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) @@ -490,57 +496,26 @@ ruby << EOF end end - def open_reply(orig) + 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_compose_helper(lines, cur) help_lines = [ 'Notmuch-Help: Type in your message here; to help you use these bindings:', 'Notmuch-Help: ,s - send the message (Notmuch-Help lines will be removed)', 'Notmuch-Help: ,q - abort the message', ] - reply = orig.reply do |m| - # fix headers - if not m[:reply_to] - m.to = [orig[:from].to_s, orig[:to].to_s] - end - m.cc = orig[:cc] - m.from = $email_address - m.charset = 'utf-8' - m.content_transfer_encoding = '7bit' - end dir = File.expand_path('~/.notmuch/compose') FileUtils.mkdir_p(dir) Tempfile.open(['nm-', '.mail'], dir) do |f| - lines = [] - - lines += help_lines - lines << '' - - body_lines = [] - if $mail_installed - addr = Mail::Address.new(orig[:from].value) - name = addr.name - name = addr.local + "@" if name.nil? && !addr.local.nil? - else - name = orig[:from] - end - name = "somebody" if name.nil? - - body_lines << "%s wrote:" % name - part = orig.find_first_text - part.convert.each_line do |l| - body_lines << "> %s" % l.chomp - end - body_lines << "" - body_lines << "" - body_lines << "" - - reply.body = body_lines.join("\n") - - lines += reply.to_s.lines.map { |e| e.chomp } - lines << "" - - old_count = lines.count - 1 - + f.puts(help_lines) + f.puts f.puts(lines) sig_file = File.expand_path('~/.signature') @@ -551,12 +526,58 @@ ruby << EOF f.flush - VIM::command("let s:reply_from='%s'" % reply.from.first.to_s) + cur += help_lines.size + 1 + + 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)") + VIM::command("call cursor(#{cur}, 0)") end end + def open_reply(orig) + reply = orig.reply do |m| + # fix headers + if not m[:reply_to] + m.to = [orig[:from].to_s, orig[:to].to_s] + end + m.cc = orig[:cc] + m.from = $email + m.message_id = generate_message_id + m.charset = 'utf-8' + m.content_transfer_encoding = '7bit' + end + + lines = [] + + body_lines = [] + if $mail_installed + addr = Mail::Address.new(orig[:from].value) + name = addr.name + name = addr.local + "@" if name.nil? && !addr.local.nil? + else + name = orig[:from] + end + name = "somebody" if name.nil? + + body_lines << "%s wrote:" % name + part = orig.find_first_text + part.convert.each_line do |l| + body_lines << "> %s" % l.chomp + end + body_lines << "" + body_lines << "" + body_lines << "" + + reply.body = body_lines.join("\n") + + lines += reply.to_s.lines.map { |e| e.chomp } + lines << "" + + cur = lines.count - 1 + + open_compose_helper(lines, cur) + end + def folders_render() $curbuf.render do |b| folders = VIM::evaluate('g:notmuch_rb_folders')