" --- --- bindings for search screen {{{2
let g:notmuch_search_maps = {
\ '<Enter>': ':call <SID>NM_search_show_thread()<CR>',
+ \ '<C-]>': ':call <SID>NM_search_expand(''<cword>'')<CR>',
\ 'a': ':call <SID>NM_search_archive_thread()<CR>',
\ 'f': ':call <SID>NM_search_filter()<CR>',
\ 'm': ':call <SID>NM_new_mail()<CR>',
let g:notmuch_show_maps = {
\ '<C-P>': ':call <SID>NM_show_previous(1)<CR>',
\ '<C-N>': ':call <SID>NM_show_next(1)<CR>',
+ \ '<C-]>': ':call <SID>NM_search_expand(''<cword>'')<CR>',
\ 'q': ':call <SID>NM_kill_this_buffer()<CR>',
\
\ 'b': ':call <SID>NM_show_fold_toggle(''b'', ''bdy'', !g:notmuch_show_fold_bodies)<CR>',
let max = g:notmuch_search_from_column_width
let from = m[3]
if strlen(from) >= max
- let from = m[3][0:max-4] . '...'
+ let from = substitute(m[3][0:max-4], '[^A-Za-z1-9_]*$', '', '') . '...'
endif
return printf('%s %-20s | %s (%s)', m[2], from, m[4], m[5])
endfunction
function! s:NM_cmd_search_mksyntax()
syntax clear nmSearchFrom
- "syntax region nmSearchFrom start='\]\@<=' end='.'me=e+5,he=e+5,re=e+5 oneline contained
- "syntax match nmSearchFrom /\]\@<=.\{10\}/ oneline contained
exec printf('syntax match nmSearchFrom /\(\] \)\@<=.\{%d\}/ oneline contained', g:notmuch_search_from_column_width)
- "exec printf('syntax region nmSearchFrom start=''\%%%dv'' end=''\%%%dv'' oneline contained', 20, 30)
endfunction
" --- --- search screen action functions {{{2
elseif mode_type == 'cit'
if part_end || match(line, g:notmuch_show_citation_regexp) == -1
let outlnum = len(info['disp'])
- if mode_start != outlnum
- let foldinfo = [ mode_type, mode_start, outlnum-1,
- \ printf('[ %d-line citation. Press "c" to show. ]', outlnum - mode_start) ]
- endif
+ let foldinfo = [ mode_type, mode_start, outlnum-1,
+ \ printf('[ %d-line citation. Press "c" to show. ]', outlnum - mode_start) ]
let mode_type = ''
endif
elseif mode_type == 'sig'
if (outlnum - mode_start) > g:notmuch_show_signature_lines_max
let mode_type = ''
elseif part_end
- if mode_start != outlnum
- let foldinfo = [ mode_type, mode_start, outlnum-1,
- \ printf('[ %d-line signature. Press "s" to show. ]', outlnum - mode_start) ]
- endif
+ let foldinfo = [ mode_type, mode_start, outlnum-1,
+ \ printf('[ %d-line signature. Press "s" to show. ]', outlnum - mode_start) ]
let mode_type = ''
endif
endif
if part_end
" FIXME: this is a hack for handling two folds being added for one line
" we should handle addinga fold in a function
- if len(foldinfo)
+ if len(foldinfo) && foldinfo[1] < foldinfo[2]
call add(info['folds'], foldinfo[0:2])
let info['foldtext'][foldinfo[1]] = foldinfo[3]
endif
endif
endif
- if len(foldinfo)
+ if len(foldinfo) && foldinfo[1] < foldinfo[2]
call add(info['folds'], foldinfo[0:2])
let info['foldtext'][foldinfo[1]] = foldinfo[3]
endif
endif
endfunction
+function! s:NM_search_expand(arg)
+ let word = expand(a:arg)
+ let prev_bufnr = bufnr('%')
+ setlocal bufhidden=hide
+ call <SID>NM_cmd_search([word])
+ setlocal bufhidden=delete
+ let b:nm_prev_bufnr = prev_bufnr
+endfunction
+
function! s:NM_add_remove_tags(prefix, tags)
let id = <SID>NM_search_find_thread_id()
if id == ''
let cmd = printf('let %s = %d', key, dflt)
elseif type(dflt) == type('')
let cmd = printf('let %s = ''%s''', key, dflt)
+ " FIXME: not sure why this didn't work when dflt is an array
"elseif type(dflt) == type([])
" let cmd = printf('let %s = %s', key, string(dflt))
else