]> git.notmuchmail.org Git - notmuch/blobdiff - vim/plugin/notmuch.vim
vim: fix shell escaping for () in search terms
[notmuch] / vim / plugin / notmuch.vim
index 0addd76aca9bd1f9716fb52daf7cfa8e86988836..47bb4caf06e62312235c92262d9ada8149ddedce 100644 (file)
@@ -218,7 +218,7 @@ function! s:NM_cmd_search_fmtline(line)
         if strlen(from) >= max
                 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])
+        return printf('%-20s %-20s | %s (%s)', m[2], from, m[4], m[5])
 endfunction
 function! s:NM_cmd_search_mksyntax()
         syntax clear nmSearchFrom
@@ -296,7 +296,7 @@ function! s:NM_search_filter_helper(prompt, prefix, joiner)
                         let idx = idx - 1
                 endwhile
         endif
-        let tags = b:nm_search_words + ['and', '''('] + tags + [')''']
+        let tags = b:nm_search_words + ['and', '('] + tags + [')']
 
         let prev_bufnr = bufnr('%')
         setlocal bufhidden=hide
@@ -757,8 +757,15 @@ function! s:NM_newBuffer(type, content)
         let b:nm_type = a:type
 endfunction
 
+function! s:NM_shell_escape(word)
+        let word = substitute(a:word, '''', '\\''', 'g')
+        return '''' . word . ''''
+endfunction
+
 function! s:NM_run(args)
-        let cmd = g:notmuch_cmd . ' ' . join(a:args) . '< /dev/null'
+        let words = a:args
+        call map(words, 's:NM_shell_escape(v:val)')
+        let cmd = g:notmuch_cmd . ' ' . join(words) . '< /dev/null'
 
         let start = reltime()
         let out = system(cmd)