]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: added searching for word under cursor with ^]
[notmuch] / vim / plugin / notmuch.vim
index f134e6522e327db068479317f734e7d16e15a663..3bb9d363d382ff3dd262e7f4879bff74986c70e0 100644 (file)
@@ -82,9 +82,8 @@ let s:notmuch_folders_defaults = [
 " --- --- bindings for folders mode {{{2
 
 let g:notmuch_folders_maps = {
-        \ 's':          ':call <SID>NM_folders_notmuch_search()<CR>',
+        \ 's':          ':call <SID>NM_search_prompt()<CR>',
         \ 'q':          ':call <SID>NM_kill_this_buffer()<CR>',
-        \ '<':          ':call <SID>NM_folders_beginning_of_buffer()<CR>',
         \ '=':          ':call <SID>NM_folders_refresh_view()<CR>',
         \ '<Enter>':    ':call <SID>NM_folders_show_search()<CR>',
         \ }
@@ -92,6 +91,7 @@ let g:notmuch_folders_maps = {
 " --- --- 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>',
@@ -110,6 +110,7 @@ let g:notmuch_search_maps = {
 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>',
@@ -163,20 +164,11 @@ endfunction
 
 " --- --- folders screen action functions {{{2
 
-function! s:NM_folders_notmuch_search()
-        echo 'not implemented'
-endfunction
-
-function! s:NM_kill_this_buffer()
-        echo 'not implemented'
-endfunction
-
-function! s:NM_folders_beginning_of_buffer()
-        echo 'not implemented'
-endfunction
-
-function! s:NM_folders_notmuch_folder()
-        echo 'not implemented'
+function! s:NM_folders_refresh_view()
+        let lno = line('.')
+        setlocal bufhidden=delete
+        call s:NM_cmd_folders([])
+        exec printf('norm %dG', lno)
 endfunction
 
 function! s:NM_folders_show_search()
@@ -222,16 +214,13 @@ function! s:NM_cmd_search_fmtline(line)
         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
@@ -251,8 +240,18 @@ function! s:NM_search_prompt()
         else
                 let tags = s:notmuch_initial_search_words_defaults
         endif
-        setlocal bufhidden=delete
+        if b:nm_type == 'search'
+                " TODO: we intend to replace the current buffer,
+                "       ... maybe we could just clear it
+                let prev_bufnr = b:nm_prev_bufnr
+                setlocal bufhidden=delete
+        else
+                let prev_bufnr = bufnr('%')
+                setlocal bufhidden=hide
+        endif
         call <SID>NM_cmd_search(tags)
+        setlocal bufhidden=delete
+        let b:nm_prev_bufnr = prev_bufnr
 endfunction
 
 function! s:NM_search_edit()
@@ -713,14 +712,15 @@ endfunction
 
 " --- notmuch helper functions {{{1
 
-function! s:NM_newBuffer(ft, content)
+function! s:NM_newBuffer(type, content)
         enew
         setlocal buftype=nofile readonly modifiable
         silent put=a:content
         keepjumps 0d
         setlocal nomodifiable
-        execute printf('set filetype=notmuch-%s', a:ft)
-        execute printf('set syntax=notmuch-%s', a:ft)
+        execute printf('set filetype=notmuch-%s', a:type)
+        execute printf('set syntax=notmuch-%s', a:type)
+        let b:nm_type = a:type
 endfunction
 
 function! s:NM_run(args)
@@ -760,6 +760,15 @@ function! s:NM_kill_this_buffer()
         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 == ''
@@ -796,6 +805,7 @@ function! NM_set_defaults(force)
                         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