]> git.cworth.org Git - notmuch/blobdiff - vim/notmuch.vim
vim: refactor open_reply()
[notmuch] / vim / notmuch.vim
index aa1b7ef6677b7543728b180a08f3e635f190e77e..8383fd65a5448b3610fee105235720419d5f4464 100644 (file)
@@ -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')