" --- --- bindings for search screen {{{2
let g:notmuch_search_maps = {
- \ '<Enter>': ':call <SID>NM_search_show_thread()<CR>',
+ \ '<Space>': ':call <SID>NM_search_show_thread(0)<CR>',
+ \ '<Enter>': ':call <SID>NM_search_show_thread(1)<CR>',
\ '<C-]>': ':call <SID>NM_search_expand(''<cword>'')<CR>',
\ 'a': ':call <SID>NM_search_archive_thread()<CR>',
\ 'f': ':call <SID>NM_search_filter()<CR>',
\ '<C-N>': ':call <SID>NM_show_next(1, 0)<CR>',
\ '<C-]>': ':call <SID>NM_search_expand(''<cword>'')<CR>',
\ 'q': ':call <SID>NM_kill_this_buffer()<CR>',
+ \ 's': ':call <SID>NM_search_prompt()<CR>',
\
\ 'b': ':call <SID>NM_show_fold_toggle(''b'', ''bdy'', !g:notmuch_show_fold_bodies)<CR>',
\ 'c': ':call <SID>NM_show_fold_toggle(''c'', ''cit'', !g:notmuch_show_fold_citations)<CR>',
\ 'h': ':call <SID>NM_show_fold_toggle(''h'', ''hdr'', !g:notmuch_show_fold_headers)<CR>',
- \ 's': ':call <SID>NM_show_fold_toggle(''s'', ''sig'', !g:notmuch_show_fold_signatures)<CR>',
+ \ 'i': ':call <SID>NM_show_fold_toggle(''s'', ''sig'', !g:notmuch_show_fold_signatures)<CR>',
\
\ 'a': ':call <SID>NM_show_archive_thread()<CR>',
\ 'A': ':call <SID>NM_show_mark_read_then_archive_thread()<CR>',
function! s:NM_cmd_folders(words)
if len(a:words)
- throw 'Not exapecting any arguments for folders command.'
+ throw 'Not expecting any arguments for folders command.'
endif
let cmd = ['count']
let disp = []
" --- --- search screen action functions {{{2
-function! s:NM_search_show_thread()
- let id = <SID>NM_search_thread_id()
- if id != ''
- let words = [id]
- if exists('b:nm_search_words')
- let words = ['('] + b:nm_search_words + [')', 'AND', id]
- endif
- if len(words)
- call <SID>NM_cmd_show(words)
- endif
+function! s:NM_search_show_thread(everything)
+ let words = [ <SID>NM_search_thread_id() ]
+ if !a:everything && exists('b:nm_search_words')
+ call extend(words, ['AND', '('])
+ call extend(words, b:nm_search_words)
+ call add(words, ')')
endif
+ call <SID>NM_cmd_show(words)
+ let b:nm_show_everything = a:everything
endfunction
function! s:NM_search_prompt()
function! s:NM_cmd_show(words)
let prev_bufnr = bufnr('%')
- let data = s:NM_run(['show'] + a:words)
+ let data = s:NM_run(['show', '--entire-thread'] + a:words)
let lines = split(data, "\n")
let info = s:NM_cmd_show_parse(lines)
endfunction
function! s:NM_show_previous(can_change_thread, find_matching)
+ let everything = exists('b:nm_show_everything') ? b:nm_show_everything : 0
let info = b:nm_raw_info
let lnum = line('.')
for msg in reverse(copy(info['msgs']))
call <SID>NM_kill_this_buffer()
if line('.') > 1
norm k
- call <SID>NM_search_show_thread()
+ call <SID>NM_search_show_thread(everything)
norm G
call <SID>NM_show_previous(0, a:find_matching)
else
endfunction
function! s:NM_show_next_thread()
+ let everything = exists('b:nm_show_everything') ? b:nm_show_everything : 0
call <SID>NM_kill_this_buffer()
if line('.') != line('$')
norm j
- call <SID>NM_search_show_thread()
+ call <SID>NM_search_show_thread(everything)
else
echo 'No more messages.'
endif
endfunction
function! s:NM_show_reply()
- echo 'not implemented'
+ let cmd = ['reply']
+ call add(cmd, <SID>NM_show_message_id())
+ call add(cmd, 'AND')
+ call extend(cmd, <SID>NM_get_search_words())
+
+ let data = <SID>NM_run(cmd)
+ let lines = split(data, "\n")
+ call <SID>NM_newComposeBuffer(lines, 0)
endfunction
function! s:NM_show_view_all_mime_parts()
let act = 'close'
endif
for fld in info['folds']
- if fld[0] == a:type
- exec printf('%dfold%s', fld[1], act)
+ if fld[0] != a:type
+ continue
+ endif
+ "let idx = fld[3]
+ "let msg = info['msgs'][idx]
+ "if has_key(msg,'match') && msg['match'] == '0'
+ " continue
+ "endif
+ let cls = foldclosed(fld[1])
+ if cls != -1 && cls != fld[1]
+ continue
endif
+ exec printf('%dfold%s', fld[1], act)
endfor
exec printf('nnoremap <buffer> %s :call <SID>NM_show_fold_toggle(''%s'', ''%s'', %d)<CR>', a:key, a:key, a:type, !a:fold)
endfunction