function! s:search_search_prompt()
let text = input('Search: ')
+ if text == ""
+ return
+ endif
setlocal modifiable
ruby << EOF
$cur_search = VIM::evaluate('text')
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 = []
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)
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')
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')