Browse Source

Use iconv() only if +iconv is enabled. (#921)

TODO: Avoid iconv() for commands using ascii only.
Jan Edmund Lazo 6 years ago
parent
commit
b2aa5724c0
1 changed files with 11 additions and 6 deletions
  1. 11 6
      plug.vim

+ 11 - 6
plug.vim

@@ -184,8 +184,8 @@ function! s:define_commands()
   endif
   if !has('nvim')
     \ && (has('win32') || has('win32unix'))
-    \ && (!has('multi_byte') || !has('iconv'))
-    return s:err('Vim needs +iconv, +multi_byte features on Windows to run shell commands.')
+    \ && !has('multi_byte')
+    return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.')
   endif
   command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
   command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate  call s:update(<bang>0, [<f-args>])
@@ -400,14 +400,19 @@ if s:is_win
   endfunction
 
   " Copied from fzf
-  let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
   function! s:wrap_cmds(cmds)
-    return map([
+    let cmds = [
       \ '@echo off',
       \ 'setlocal enabledelayedexpansion']
     \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds])
-    \ + ['endlocal'],
-    \ printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
+    \ + ['endlocal']
+    if has('iconv')
+      if !exists('s:codepage')
+        let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0)
+      endif
+      return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage))
+    endif
+    return map(cmds, 'v:val."\r"')
   endfunction
 
   function! s:batchfile(cmd)