diff --git a/fzf b/fzf index 414bac0..3c80a47 100755 --- a/fzf +++ b/fzf @@ -701,6 +701,20 @@ class FZF update_list false end + def num_unicode_bytes chr + # http://en.wikipedia.org/wiki/UTF-8 + if chr & 0b10000000 > 0 + bytes = 0 + 7.downto(2) do |shift| + break if (chr >> shift) & 0x1 == 0 + bytes += 1 + end + bytes + else + 1 + end + end + def start_loop got = nil begin @@ -797,22 +811,19 @@ class FZF ch2 end when Fixnum - bytes = 1 - if (ch >> 7) == 1 - 6.downto(2) do |shift| - if (ch >> shift) & 0x1 == 0 - break - end - bytes += 1 - end - end - if bytes > 1 + # Ruby 1.8 + if (ch.chr rescue nil) && ch.chr =~ /[[:print:]]/ + ch = ch.chr + else chs = [ch] - (bytes - 1).times do + (num_unicode_bytes(ch) - 1).times do |i| chs << C.getch end - # TODO: ruby 1.8 - ch = chs.pack('C*').force_encoding('UTF-8') + + # UTF-8 TODO Ruby 1.8 + if chs.length > 1 + ch = chs.pack('C*').force_encoding('UTF-8') + end end end