-if exists("g:loaded_notmuch_rb")
+if exists("g:loaded_notmuch")
finish
endif
finish
endif
-let g:loaded_notmuch_rb = "yep"
+let g:loaded_notmuch = "yep"
-let g:notmuch_rb_folders_maps = {
+let g:notmuch_folders_maps = {
\ '<Enter>': 'folders_show_search()',
\ 's': 'folders_search_prompt()',
\ '=': 'folders_refresh()',
+ \ 'c': 'compose()',
\ }
-let g:notmuch_rb_search_maps = {
+let g:notmuch_search_maps = {
\ 'q': 'kill_this_buffer()',
\ '<Enter>': 'search_show_thread(1)',
\ '<Space>': 'search_show_thread(2)',
\ 's': 'search_search_prompt()',
\ '=': 'search_refresh()',
\ '?': 'search_info()',
+ \ 'c': 'compose()',
\ }
-let g:notmuch_rb_show_maps = {
+let g:notmuch_show_maps = {
\ 'q': 'kill_this_buffer()',
\ 'A': 'show_tag("-inbox -unread")',
\ 'I': 'show_tag("-unread")',
\ 'r': 'show_reply()',
\ '?': 'show_info()',
\ '<Tab>': 'show_next_msg()',
+ \ 'c': 'compose()',
\ }
-let g:notmuch_rb_compose_maps = {
+let g:notmuch_compose_maps = {
\ ',s': 'compose_send()',
\ ',q': 'compose_quit()',
\ }
-let s:notmuch_rb_folders_default = [
+let s:notmuch_folders_default = [
\ [ 'new', 'tag:inbox and tag:unread' ],
\ [ 'inbox', 'tag:inbox' ],
\ [ 'unread', 'tag:unread' ],
\ ]
-let s:notmuch_rb_date_format_default = '%d.%m.%y'
-let s:notmuch_rb_datetime_format_default = '%d.%m.%y %H:%M:%S'
-let s:notmuch_rb_reader_default = 'mutt -f %s'
-let s:notmuch_rb_sendmail_default = 'sendmail'
-let s:notmuch_rb_folders_count_threads_default = 0
-
-if !exists('g:notmuch_rb_date_format')
- let g:notmuch_rb_date_format = s:notmuch_rb_date_format_default
-endif
-
-if !exists('g:notmuch_rb_datetime_format')
- let g:notmuch_rb_datetime_format = s:notmuch_rb_datetime_format_default
-endif
-
-if !exists('g:notmuch_rb_reader')
- let g:notmuch_rb_reader = s:notmuch_rb_reader_default
-endif
-
-if !exists('g:notmuch_rb_sendmail')
- let g:notmuch_rb_sendmail = s:notmuch_rb_sendmail_default
-endif
-
-if !exists('g:notmuch_rb_folders_count_threads')
- let g:notmuch_rb_folders_count_threads = s:notmuch_rb_folders_count_threads_default
-endif
+let s:notmuch_date_format_default = '%d.%m.%y'
+let s:notmuch_datetime_format_default = '%d.%m.%y %H:%M:%S'
+let s:notmuch_reader_default = 'mutt -f %s'
+let s:notmuch_sendmail_default = 'sendmail'
+let s:notmuch_folders_count_threads_default = 0
function! s:new_file_buffer(type, fname)
exec printf('edit %s', a:fname)
execute printf('set filetype=notmuch-%s', a:type)
execute printf('set syntax=notmuch-%s', a:type)
ruby $curbuf.init(VIM::evaluate('a:type'))
- ruby $buf_queue.push($curbuf.number)
endfunction
-function! s:compose_unload()
+function! s:on_compose_delete()
if b:compose_done
return
endif
function! s:compose_send()
let b:compose_done = 1
let fname = expand('%')
+ let lines = getline(5, '$')
- " remove headers
- 0,4d
- write
+ruby << EOF
+ # Generate proper mail to send
+ text = VIM::evaluate('lines').join("\n")
+ fname = VIM::evaluate('fname')
+ transport = Mail.new(text)
+ transport.message_id = generate_message_id
+ transport.charset = 'utf-8'
+ File.write(fname, transport.to_s)
+EOF
let cmdtxt = g:notmuch_sendmail . ' -t -f ' . s:reply_from . ' < ' . fname
let out = system(cmdtxt)
let err = v:shell_error
if err
- undo
- write
echohl Error
echo 'Eeek! unable to send mail'
echo out
function! s:show_reply()
ruby open_reply get_message.mail
let b:compose_done = 0
- call s:set_map(g:notmuch_rb_compose_maps)
- autocmd BufUnload <buffer> call s:compose_unload()
+ call s:set_map(g:notmuch_compose_maps)
+ autocmd BufDelete <buffer> call s:on_compose_delete()
+ startinsert!
+endfunction
+
+function! s:compose()
+ ruby open_compose
+ let b:compose_done = 0
+ call s:set_map(g:notmuch_compose_maps)
+ autocmd BufDelete <buffer> call s:on_compose_delete()
startinsert!
endfunction
ruby << EOF
m = get_message
mbox = File.expand_path('~/.notmuch/vim_mbox')
- cmd = VIM::evaluate('g:notmuch_rb_reader') % mbox
+ cmd = VIM::evaluate('g:notmuch_reader') % mbox
system "notmuch show --format=mbox id:#{m.message_id} > #{mbox} && #{cmd}"
EOF
endfunction
function! s:kill_this_buffer()
ruby << EOF
- if $buf_queue.size > 1
- $curbuf.close
- VIM::command("bdelete!")
- $buf_queue.pop
- b = $buf_queue.last
- VIM::command("buffer #{b}") if b
- end
+ $curbuf.close
+ VIM::command("bdelete!")
EOF
endfunction
execute printf('set filetype=notmuch-%s', a:type)
execute printf('set syntax=notmuch-%s', a:type)
ruby $curbuf.init(VIM::evaluate('a:type'))
- ruby $buf_queue.push($curbuf.number)
endfunction
function! s:set_menu_buffer()
part = m.find_first_text
nm_m = Message.new(msg, m)
$messages << nm_m
- date_fmt = VIM::evaluate('g:notmuch_rb_datetime_format')
+ date_fmt = VIM::evaluate('g:notmuch_datetime_format')
date = Time.at(msg.date).strftime(date_fmt)
nm_m.start = b.count
b << "%s %s (%s)" % [msg['from'], date, msg.tags]
end
EOF
setlocal nomodifiable
- call s:set_map(g:notmuch_rb_show_maps)
+ call s:set_map(g:notmuch_show_maps)
endfunction
function! s:search_show_thread(mode)
search_render($cur_search)
EOF
call s:set_menu_buffer()
- call s:set_map(g:notmuch_rb_search_maps)
+ call s:set_map(g:notmuch_search_maps)
autocmd CursorMoved <buffer> call s:show_cursor_moved()
endfunction
call s:new_buffer('folders')
ruby folders_render()
call s:set_menu_buffer()
- call s:set_map(g:notmuch_rb_folders_maps)
+ call s:set_map(g:notmuch_folders_maps)
endfunction
"" root
function! s:set_defaults()
- if exists('g:notmuch_rb_custom_search_maps')
- call extend(g:notmuch_rb_search_maps, g:notmuch_rb_custom_search_maps)
+ if !exists('g:notmuch_date_format')
+ if exists('g:notmuch_rb_date_format')
+ let g:notmuch_date_format = g:notmuch_rb_date_format
+ else
+ let g:notmuch_date_format = s:notmuch_date_format_default
+ endif
+ endif
+
+ if !exists('g:notmuch_datetime_format')
+ if exists('g:notmuch_rb_datetime_format')
+ let g:notmuch_datetime_format = g:notmuch_rb_datetime_format
+ else
+ let g:notmuch_datetime_format = s:notmuch_datetime_format_default
+ endif
+ endif
+
+ if !exists('g:notmuch_reader')
+ if exists('g:notmuch_rb_reader')
+ let g:notmuch_reader = g:notmuch_rb_reader
+ else
+ let g:notmuch_reader = s:notmuch_reader_default
+ endif
endif
- if exists('g:notmuch_rb_custom_show_maps')
- call extend(g:notmuch_rb_show_maps, g:notmuch_rb_custom_show_maps)
+ if !exists('g:notmuch_sendmail')
+ if exists('g:notmuch_rb_sendmail')
+ let g:notmuch_sendmail = g:notmuch_rb_sendmail
+ else
+ let g:notmuch_sendmail = s:notmuch_sendmail_default
+ endif
+ endif
+
+ if !exists('g:notmuch_folders_count_threads')
+ if exists('g:notmuch_rb_count_threads')
+ let g:notmuch_count_threads = g:notmuch_rb_count_threads
+ else
+ let g:notmuch_folders_count_threads = s:notmuch_folders_count_threads_default
+ endif
+ endif
+
+ if !exists('g:notmuch_custom_search_maps') && exists('g:notmuch_rb_custom_search_maps')
+ let g:notmuch_custom_search_maps = g:notmuch_rb_custom_search_maps
+ endif
+
+ if !exists('g:notmuch_custom_show_maps') && exists('g:notmuch_rb_custom_show_maps')
+ let g:notmuch_custom_show_maps = g:notmuch_rb_custom_show_maps
+ endif
+
+ if exists('g:notmuch_custom_search_maps')
+ call extend(g:notmuch_search_maps, g:notmuch_custom_search_maps)
+ endif
+
+ if exists('g:notmuch_custom_show_maps')
+ call extend(g:notmuch_show_maps, g:notmuch_custom_show_maps)
endif
- " TODO for now lets check the old folders too
- if !exists('g:notmuch_rb_folders')
- if exists('g:notmuch_folders')
- let g:notmuch_rb_folders = g:notmuch_folders
+ if !exists('g:notmuch_folders')
+ if exists('g:notmuch_rb_folders')
+ let g:notmuch_folders = g:notmuch_rb_folders
else
- let g:notmuch_rb_folders = s:notmuch_rb_folders_default
+ let g:notmuch_folders = s:notmuch_folders_default
endif
endif
endfunction
$db_name = nil
$email = $email_name = $email_address = nil
$searches = []
- $buf_queue = []
$threads = []
$messages = []
$config = {}
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 = []
reply.body = body_lines.join("\n")
- lines += reply.to_s.lines.map { |e| e.chomp }
+ lines += reply.present.lines.map { |e| e.chomp }
lines << ""
cur = lines.count - 1
open_compose_helper(lines, cur)
end
+ def open_compose()
+ lines = []
+
+ lines << "From: #{$email}"
+ lines << "To: "
+ cur = lines.count
+
+ lines << "Cc: "
+ lines << "Bcc: "
+ lines << "Subject: "
+ lines << ""
+ lines << ""
+ lines << ""
+
+ open_compose_helper(lines, cur)
+ end
+
def folders_render()
$curbuf.render do |b|
- folders = VIM::evaluate('g:notmuch_rb_folders')
- count_threads = VIM::evaluate('g:notmuch_rb_folders_count_threads')
+ folders = VIM::evaluate('g:notmuch_folders')
+ count_threads = VIM::evaluate('g:notmuch_folders_count_threads') == 1
$searches.clear
folders.each do |name, search|
q = $curbuf.query(search)
end
def search_render(search)
- date_fmt = VIM::evaluate('g:notmuch_rb_date_format')
+ date_fmt = VIM::evaluate('g:notmuch_date_format')
q = $curbuf.query(search)
q.sort = Notmuch::SORT_NEWEST_FIRST
$threads.clear
if mime_type != "text/html"
text = decoded
else
- IO.popen("elinks --dump", "w+") do |pipe|
+ IO.popen(VIM::evaluate('exists("g:notmuch_html_converter") ? ' +
+ 'g:notmuch_html_converter : "elinks --dump"'), "w+") do |pipe|
pipe.write(decode_body)
pipe.close_write
text = pipe.read
end
text
end
+
+ def present
+ buffer = ''
+ header.fields.each do |f|
+ buffer << "%s: %s\r\n" % [f.name, f.to_s]
+ end
+ buffer << "\r\n"
+ buffer << body.to_s
+ buffer
+ end
end
end