mirror of
https://github.com/Llewellynvdm/fzf.git
synced 2024-12-23 03:19:01 +00:00
Synchronize getch calls to reduce screen glitches
This commit is contained in:
parent
d66b02b0cd
commit
86a66da04d
23
fzf
23
fzf
@ -82,6 +82,7 @@ class FZF
|
||||
@mouse = true
|
||||
@filter = nil
|
||||
@pending = nil
|
||||
@mutex = Mutex.new
|
||||
|
||||
argv =
|
||||
if opts = ENV['FZF_DEFAULT_OPTS']
|
||||
@ -721,8 +722,10 @@ class FZF
|
||||
Thread.new do
|
||||
begin
|
||||
while blk = @queue.shift
|
||||
blk.call
|
||||
refresh
|
||||
@mutex.synchronize do
|
||||
blk.call
|
||||
refresh
|
||||
end
|
||||
end
|
||||
rescue Exception => e
|
||||
@main.raise e
|
||||
@ -766,7 +769,7 @@ class FZF
|
||||
elsif (nch = num_unicode_bytes(ch)) > 1
|
||||
chs = [ch]
|
||||
(nch - 1).times do |i|
|
||||
chs << C.getch
|
||||
chs << getch_nb
|
||||
end
|
||||
# UTF-8 TODO Ruby 1.8
|
||||
ch = chs.pack('C*').force_encoding('UTF-8')
|
||||
@ -776,6 +779,10 @@ class FZF
|
||||
ch.is_a?(String) && ch =~ /[[:print:]]/ && ch
|
||||
end
|
||||
|
||||
def getch_nb
|
||||
@mutex.synchronize { C.getch }
|
||||
end
|
||||
|
||||
def getch
|
||||
if pending = @pending
|
||||
@pending = nil
|
||||
@ -784,10 +791,10 @@ class FZF
|
||||
|
||||
C.stdscr.timeout = -1
|
||||
c = C.getch
|
||||
C.stdscr.timeout = 0
|
||||
if ch = to_printable(c)
|
||||
chs = [ch]
|
||||
C.stdscr.timeout = 0 if AFTER_1_9
|
||||
while AFTER_1_9 && c = C.getch
|
||||
while AFTER_1_9 && c = getch_nb
|
||||
if ch = to_printable(c)
|
||||
chs << ch
|
||||
else
|
||||
@ -868,7 +875,7 @@ class FZF
|
||||
|
||||
case ch = getch
|
||||
when C::KEY_MOUSE
|
||||
if m = C.getmouse
|
||||
if m = @mutex.synchronize { C.getmouse }
|
||||
st = m.bstate
|
||||
if test_mouse(st, C::BUTTON1_PRESSED, C::BUTTON1_RELEASED)
|
||||
if m.y == cursor_y
|
||||
@ -897,9 +904,9 @@ class FZF
|
||||
when 27
|
||||
C.stdscr.timeout = 0
|
||||
ch = # Typeahead arrow keys
|
||||
case ch2 = C.getch
|
||||
case ch2 = getch_nb
|
||||
when '[', 91
|
||||
case ch3 = C.getch
|
||||
case ch3 = getch_nb
|
||||
when 'D', 68 then ctrl(:b)
|
||||
when 'C', 67 then ctrl(:f)
|
||||
when 'B', 66 then ctrl(:j)
|
||||
|
Loading…
Reference in New Issue
Block a user