X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=b70c6edcb8e32c618527703e657ad499635ce5b0;hp=99be62612907f17bd258394ef5d55cf2dd9dc0eb;hb=9012c652827be6ac4d748de50be5c93a6d4e97eb;hpb=0aa5f7d250a5a157fce51c1769c95c7fb5a2056b diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index 99be6261..b70c6edc 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -53,6 +53,8 @@ let s:notmuch_defaults = { \ \ 'g:notmuch_show_citation_regexp': '^\s*>' , \ + \ 'g:notmuch_compose_insert_mode_start': 1 , + \ 'g:notmuch_compose_header_help': 1 , \ 'g:notmuch_compose_temp_file_dir': '~/.notmuch/compose/' , \ } @@ -158,6 +160,16 @@ let g:notmuch_show_maps = { \ '?': ':echo NM_show_message_id() . '' @ '' . join(NM_show_search_words())', \ } +" --- --- bindings for compose screen {{{2 +let g:notmuch_compose_nmaps = { + \ ',s': ':call NM_compose_send()', + \ ',a': ':call NM_compose_attach()', + \ ',q': ':call NM_kill_this_buffer()', + \ '': ':call NM_compose_next_entry_area()', + \ } +let g:notmuch_compose_imaps = { + \ '': '=NM_compose_next_entry_area()', + \ } " --- implement folders screen {{{1 @@ -369,8 +381,7 @@ endfunction function! s:NM_search_thread_id() if !exists('b:nm_raw_lines') - echoe 'no b:nm_raw_lines' - return '' + throw 'Eeek! no b:nm_raw_lines' endif let mnum = line('.') - 1 if len(b:nm_raw_lines) <= mnum @@ -609,8 +620,7 @@ endfunction function! s:NM_show_message_id() if !exists('b:nm_raw_info') - echoe 'no b:nm_raw_info' - return '' + throw 'Eeek! no b:nm_raw_info' endif let msg = NM_show_get_message_for_line(line('.')) if has_key(msg,'id') @@ -621,8 +631,7 @@ endfunction function! s:NM_show_search_words() if !exists('b:nm_words') - echoe 'no b:nm_words' - return [] + throw 'Eeek! no b:nm_words' endif return b:nm_words endfunction @@ -866,7 +875,13 @@ endfunction " --- implement compose screen {{{1 function! s:NM_cmd_compose(words, body_lines) - let lines = [] + let lines = !g:notmuch_compose_header_help ? [] : [ + \ 'Notmuch-Help: Type in your message here; to help you use these bindings:', + \ 'Notmuch-Help: ,a - attach a file', + \ 'Notmuch-Help: ,s - send the message (Notmuch-Help lines will be removed)', + \ 'Notmuch-Help: ,q - abort the message', + \ 'Notmuch-Help: - skip through header lines', + \ ] let start_on_line = 0 let hdrs = { } @@ -922,22 +937,57 @@ function! s:NM_cmd_compose(words, body_lines) \ 'compose', lines) setlocal bufhidden=hide - call NM_cmd_compose_mksyntax() call NM_set_map('n', g:notmuch_compose_nmaps) call NM_set_map('i', g:notmuch_compose_imaps) - exec printf('norm %dG', start_on_line) - startinsert! + call cursor(start_on_line, strlen(start_on_line) + 1) + if g:notmuch_compose_insert_mode_start + startinsert! + endif echo 'Type your message, use to jump to next header and then body.' endfunction -function! s:NM_cmd_compose_mksyntax() - silent! setlocal syntax=mail -endfunction function! s:NM_compose_send() echo 'not implemented' endfunction +function! s:NM_compose_attach() + echo 'not implemented' +endfunction + +function! s:NM_compose_next_entry_area() + let lnum = line('.') + let hdr_end = NM_compose_find_line_match(1,'^$',1) + echo 'header end = ' . string(hdr_end) + if lnum < hdr_end + let lnum = lnum + 1 + let line = getline(lnum) + if match(line, '^\([^:]\+\):\s*$') == -1 + call cursor(lnum, strlen(line) + 1) + return '' + endif + while match(getline(lnum+1), '^\s') != -1 + let lnum = lnum + 1 + endwhile + call cursor(lnum, strlen(getline(lnum)) + 1) + return '' + + elseif lnum == hdr_end + call cursor(lnum+1, strlen(getline(lnum+1)) + 1) + return '' + endif + if mode() == 'i' + if !getbufvar(bufnr('.'), '&et') + return "\t" + endif + let space = '' + let shiftwidth = a:shiftwidth + let shiftwidth = shiftwidth - ((virtcol('.')-1) % shiftwidth) + " we assume no one has shiftwidth set to more than 40 :) + return ' '[0:shiftwidth] + endif +endfunction + " --- --- compose screen helper functions {{{2 function! s:NM_compose_get_user_email() @@ -948,6 +998,18 @@ function! s:NM_compose_get_user_email() return name . '@' . fqdn endfunction +function! s:NM_compose_find_line_match(start, pattern, failure) + let lnum = a:start + let lend = line('$') + while lnum < lend + if match(getline(lnum), a:pattern) != -1 + return lnum + endif + let lnum = lnum + 1 + endwhile + return a:failure +endfunction + " --- notmuch helper functions {{{1