]> 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 c8a27ad7cc2c310a38a8961e1bcfb6ad924769d2..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
@@ -521,7 +524,6 @@ function! s:NM_show_advance_marking_read_and_archiving()
                 endfor
 
                 let filter = ['('] + advance_tags + [')', 'AND', '('] + ids + [')']
-echo 'NM_add_remove_tags ALL filter=' . string(filter)
                 call <SID>NM_add_remove_tags(filter, '-', advance_tags)
                 call <SID>NM_show_next(1, 1)
                 return
@@ -532,8 +534,6 @@ echo 'NM_add_remove_tags ALL filter=' . string(filter)
                 echo "No bottom visible message."
         endif
 
-        echo 'top=' . msg_top['id'] . '  bot=' . msg_top['id']
-
         " if entire message fits on the screen, read/archive it, move to the next one
         if msg_top['id'] != msg_bot['id'] || msg_top['end'] <= vis_bot
                 call <SID>NM_add_remove_tags_on_screen(msg_top['start'], '-', advance_tags)
@@ -543,7 +543,6 @@ echo 'NM_add_remove_tags ALL filter=' . string(filter)
                         redraw
                         " do this last to hide the latency
                         let filter = ['('] + advance_tags + [')', 'AND', msg_top['id']]
-echo 'NM_add_remove_tags 1 filter=' . string(filter)
                         call <SID>NM_add_remove_tags(filter, '-', advance_tags)
                 endif
                 return
@@ -919,14 +918,12 @@ function! s:NM_add_remove_tags(filter, prefix, tags)
         if !len(filter)
                 echoe 'Eeek! I couldn''t find the thead id!'
         endif
-        echo 'filter = ' . string(filter) . ' ... ' . string(type(filter))
         call map(a:tags, 'a:prefix . v:val')
-        " TODO: handle errors
         let args = ['tag']
         call extend(args, a:tags)
         call add(args, '--')
         call extend(args, filter)
-        echo 'NUM_run( ' . string(args) . ' )'
+        " TODO: handle errors
         call <SID>NM_run(args)
 endfunction
 
@@ -982,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>
@@ -1003,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:]