X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=vim%2Fplugin%2Fnotmuch.vim;h=8e3a92abcfd82e9bef2310fc8552a5603aede88a;hp=e41daed162a6981759b1b1425fcff9b14a6bc78d;hb=5bb149aab27b68d48b165f1e0dae19d1a83cc6f2;hpb=7a7be482f79b13130fa2b053df9fdea6b86d4c95 diff --git a/vim/plugin/notmuch.vim b/vim/plugin/notmuch.vim index e41daed1..8e3a92ab 100644 --- a/vim/plugin/notmuch.vim +++ b/vim/plugin/notmuch.vim @@ -161,7 +161,7 @@ function! s:NM_cmd_folders(words) let b:nm_timestamp = reltime() call NM_cmd_folders_mksyntax() - call NM_set_map(g:notmuch_folders_maps) + call 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 NM_cmd_search_mksyntax() - call NM_set_map(g:notmuch_search_maps) + call NM_set_map('n', g:notmuch_search_maps) setlocal cursorline setlocal nowrap endfunction @@ -395,7 +395,7 @@ function! s:NM_cmd_show(words) call NM_cmd_show_mkfolds() call NM_cmd_show_mksyntax() - call NM_set_map(g:notmuch_show_maps) + call NM_set_map('n', g:notmuch_show_maps) setlocal foldtext=NM_cmd_show_foldtext() setlocal fillchars= setlocal foldcolumn=6 @@ -847,12 +847,10 @@ endfunction function! s:NM_newBuffer(type, content) enew - setlocal buftype=nofile readonly modifiable + setlocal buftype=nofile readonly modifiable scrolloff=0 sidescrolloff=0 silent put=a:content keepjumps 0d setlocal nomodifiable - set scrolloff=0 - set sidescrolloff=0 execute printf('set filetype=notmuch-%s', a:type) execute printf('set syntax=notmuch-%s', a:type) let b:nm_type = a:type @@ -863,6 +861,46 @@ function! s:NM_shell_escape(word) return '''' . word . '''' endfunction +" this function was taken from git.vim, then fixed up +" http://github.com/motemen/git-vim +function! s:NM_shell_split(cmd) + let l:split_cmd = [] + let cmd = a:cmd + let iStart = 0 + while 1 + let t = match(cmd, '\S', iStart) + if t < iStart + break + endif + let iStart = t + + let iSpace = match(cmd, '\v(\s|$)', iStart) + if iSpace < iStart + break + endif + + let iQuote1 = match(cmd, '\(^["'']\|[^\\]\@<=["'']\)', iStart) + if iQuote1 > iSpace || iQuote1 < iStart + let iEnd = iSpace - 1 + let l:split_cmd += [ cmd[iStart : iEnd] ] + else + let q = cmd[iQuote1] + let iQuote2 = match(cmd, '[^\\]\@<=[' . q . ']', iQuote1 + 1) + if iQuote2 < iQuote1 + throw 'No matching ' . q . ' quote' + endif + let iEnd = iQuote2 + let l:split_cmd += [ cmd[iStart+1 : iEnd-1 ] ] + endif + + + let iStart = iEnd + 1 + endwhile + + return l:split_cmd +endfunction + + function! s:NM_run(args) let words = a:args call map(words, 's:NM_shell_escape(v:val)') @@ -979,10 +1017,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 %s %s', key, code) + exec printf('%snoremap %s %s', a:type, key, code) endfor " --- this is a hack for development :) nnoremap ,nmr :source ~/.vim/plugin/notmuch.vim:call NotMuch('') @@ -996,12 +1034,12 @@ function! NotMuch(args) let args = 'folders' endif - let words = split(args) - if words[0] == 'folders' + let words = NM_shell_split(args) + if words[0] == 'folders' || words[0] == 'f' let words = words[1:] call NM_cmd_folders(words) - elseif words[0] == 'search' + elseif words[0] == 'search' || words[0] == 's' if len(words) > 1 let words = words[1:] elseif exists('b:nm_search_words')