Work around separator issues

Use split() instead of substitute(), since the latter simply parses strings
and doesn't understand the notion of path separators. Backslashes would be
interpreted as beginning escape sequences.

Using split() works around this problem.

Closes #163.
This commit is contained in:
Marco Hinz 2015-06-04 09:51:48 +02:00
parent 8c5ad74a7b
commit 021b801eb4

View File

@ -135,9 +135,9 @@ endfunction
" Function: s:expand_cmd {{{1 " Function: s:expand_cmd {{{1
function! s:expand_cmd(cmd, path) abort function! s:expand_cmd(cmd, path) abort
let cmd = substitute(a:cmd, '%f', a:path, '') let cmd = s:replace(a:cmd, '%f', a:path)
let cmd = substitute(cmd, '%d', s:difftool, '') let cmd = s:replace(cmd, '%d', s:difftool)
let cmd = substitute(cmd, '%n', s:devnull, '') let cmd = s:replace(cmd, '%n', s:devnull)
let b:sy_info.cmd = cmd let b:sy_info.cmd = cmd
return cmd return cmd
endfunction endfunction
@ -159,6 +159,16 @@ function! s:run(cmd, path, do_switch_dir)
return system(cmd) return system(cmd)
endfunction endfunction
" Function: s:replace {{{1
function! s:replace(cmd, pat, sub)
let tmp = split(a:cmd, a:pat, 1)
if len(tmp) > 1
return tmp[0] . a:sub . tmp[1]
else
return a:cmd
endif
endfunction
" Variables {{{1 " Variables {{{1
let s:difftool = get(g:, 'signify_difftool', 'diff') let s:difftool = get(g:, 'signify_difftool', 'diff')
if executable(s:difftool) if executable(s:difftool)