From e80a93d5d0c0849dcde8407b75fcb2462fd17ff7 Mon Sep 17 00:00:00 2001 From: Junegunn Choi Date: Sat, 11 Feb 2017 11:17:06 +0900 Subject: [PATCH] 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 --- plug.vim | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/plug.vim b/plug.vim index f7564ea..4d0bb77 100644 --- a/plug.vim +++ b/plug.vim @@ -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