mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-12-22 17:34:54 +01:00
vim: add a line splitter that understands quotes
this makes it possible to tokenise expressions like :NotMuch compose 'subject: one two three' to:bart@jukie.net
This commit is contained in:
parent
480903adac
commit
bbca6e03c6
1 changed files with 43 additions and 3 deletions
|
@ -863,6 +863,46 @@ function! s:NM_shell_escape(word)
|
||||||
return '''' . word . ''''
|
return '''' . word . ''''
|
||||||
endfunction
|
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)
|
function! s:NM_run(args)
|
||||||
let words = a:args
|
let words = a:args
|
||||||
call map(words, 's:NM_shell_escape(v:val)')
|
call map(words, 's:NM_shell_escape(v:val)')
|
||||||
|
@ -996,12 +1036,12 @@ function! NotMuch(args)
|
||||||
let args = 'folders'
|
let args = 'folders'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let words = split(args)
|
let words = <SID>NM_shell_split(args)
|
||||||
if words[0] == 'folders'
|
if words[0] == 'folders' || words[0] == 'f'
|
||||||
let words = words[1:]
|
let words = words[1:]
|
||||||
call <SID>NM_cmd_folders(words)
|
call <SID>NM_cmd_folders(words)
|
||||||
|
|
||||||
elseif words[0] == 'search'
|
elseif words[0] == 'search' || words[0] == 's'
|
||||||
if len(words) > 1
|
if len(words) > 1
|
||||||
let words = words[1:]
|
let words = words[1:]
|
||||||
elseif exists('b:nm_search_words')
|
elseif exists('b:nm_search_words')
|
||||||
|
|
Loading…
Reference in a new issue