From b078a0c8c2ce72e1273bed87627e25dcd833a967 Mon Sep 17 00:00:00 2001 From: Bart Trojanowski Date: Thu, 26 Nov 2009 22:32:02 -0500 Subject: [PATCH] vim: add support for in compose mode this will skip to the next header in insert and normal modes, and behave like otherwise. --- vim/plugin/notmuch.vim | 55 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index 99be6261..d3e31353 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -158,6 +158,15 @@ 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()', + \ ',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 @@ -938,6 +947,40 @@ function! s:NM_compose_send() 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 + echo 'mode=' . mode() + 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 +991,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 -- 2.43.0