Fix Ruby installer on macOS system Vim

- Do not use io/console
- Interrupting threads crashes Vim, so don't do it

Close #592
Related #537, #538
This commit is contained in:
Junegunn Choi 2017-02-11 11:17:06 +09:00
parent d1ac3cdd1f
commit e80a93d5d0
No known key found for this signature in database
GPG key ID: 254BC280FEF9C627

View file

@ -1768,6 +1768,7 @@ function! s:update_ruby()
tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1
nthr = VIM::evaluate('s:update.threads').to_i
maxy = VIM::evaluate('winheight(".")').to_i
vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/
cd = iswin ? 'cd /d' : 'cd'
tot = VIM::evaluate('len(s:update.todo)') || 0
bar = ''
@ -1857,11 +1858,17 @@ function! s:update_ruby()
main = Thread.current
threads = []
watcher = Thread.new {
require 'io/console' # >= Ruby 1.9
nil until IO.console.getch == 3.chr
if vim7
while VIM::evaluate('getchar(1)')
sleep 0.1
end
else
require 'io/console' # >= Ruby 1.9
nil until IO.console.getch == 3.chr
end
mtx.synchronize do
running = false
threads.each { |t| t.raise Interrupt }
threads.each { |t| t.raise Interrupt } unless vim7
end
threads.each { |t| t.join rescue nil }
main.kill