]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: allow for different types of mappings not just normal mode ones
[notmuch] / vim / plugin / notmuch.vim
index e1822a41c241978bb086b43e03734393019f6360..15958f18c02c407d93056717aa858b825c4cfc47 100644 (file)
@@ -161,7 +161,7 @@ function! s:NM_cmd_folders(words)
         let b:nm_timestamp = reltime()
 
         call <SID>NM_cmd_folders_mksyntax()
-        call <SID>NM_set_map(g:notmuch_folders_maps)
+        call <SID>NM_set_map('n', g:notmuch_folders_maps)
         setlocal cursorline
         setlocal nowrap
 endfunction
@@ -209,7 +209,7 @@ function! s:NM_cmd_search(words)
         let b:nm_search_words = a:words
 
         call <SID>NM_cmd_search_mksyntax()
-        call <SID>NM_set_map(g:notmuch_search_maps)
+        call <SID>NM_set_map('n', g:notmuch_search_maps)
         setlocal cursorline
         setlocal nowrap
 endfunction
@@ -254,7 +254,7 @@ function! s:NM_search_prompt()
                 let tags = s:notmuch_initial_search_words_defaults
         endif
         let prev_bufnr = bufnr('%')
-        if b:nm_type == 'search'
+        if b:nm_type == 'search' && exists('b:nm_prev_bufnr')
                 " TODO: we intend to replace the current buffer,
                 "       ... maybe we could just clear it
                 let prev_bufnr = b:nm_prev_bufnr
@@ -351,12 +351,15 @@ function! s:NM_search_thread_id()
         if !exists('b:nm_raw_lines')
                 echoe 'no b:nm_raw_lines'
                 return ''
-        else
-                let line = line('.')
-                let info = b:nm_raw_lines[line-1]
-                let what = split(info, '\s\+')[0]
-                return what
         endif
+        let mnum = line('.') - 1
+        if len(b:nm_raw_lines) <= mnum
+                return ''
+        endif
+        echo 'len=' . string(len(b:nm_raw_lines)) . '  mnum=' . string(mnum)
+        let info = b:nm_raw_lines[mnum]
+        let what = split(info, '\s\+')[0]
+        return what
 endfunction
 
 function! s:NM_search_add_remove_tags(prompt, prefix, intags)
@@ -392,7 +395,7 @@ function! s:NM_cmd_show(words)
 
         call <SID>NM_cmd_show_mkfolds()
         call <SID>NM_cmd_show_mksyntax()
-        call <SID>NM_set_map(g:notmuch_show_maps)
+        call <SID>NM_set_map('n', g:notmuch_show_maps)
         setlocal foldtext=NM_cmd_show_foldtext()
         setlocal fillchars=
         setlocal foldcolumn=6
@@ -976,10 +979,10 @@ endif
 
 " --- assign keymaps {{{1
 
-function! s:NM_set_map(maps)
+function! s:NM_set_map(type, maps)
         nmapclear
         for [key, code] in items(a:maps)
-                exec printf('nnoremap <buffer> %s %s', key, code)
+                exec printf('%snoremap <buffer> %s %s', a:type, key, code)
         endfor
         " --- this is a hack for development :)
         nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim<CR>:call NotMuch('')<CR>
@@ -997,6 +1000,7 @@ function! NotMuch(args)
         if words[0] == 'folders'
                 let words = words[1:]
                 call <SID>NM_cmd_folders(words)
+
         elseif words[0] == 'search'
                 if len(words) > 1
                         let words = words[1:]