[ruby/reline] Fix completion dialog position when completed part is
wordwrapped (https://github.com/ruby/reline/pull/692) https://github.com/ruby/reline/commit/2d9acd16fe
This commit is contained in:
parent
d7ba0fec49
commit
614187f8c2
@ -225,17 +225,20 @@ module Reline
|
|||||||
journey_data = completion_journey_data
|
journey_data = completion_journey_data
|
||||||
return unless journey_data
|
return unless journey_data
|
||||||
|
|
||||||
target = journey_data.list[journey_data.pointer]
|
target = journey_data.list.first
|
||||||
|
completed = journey_data.list[journey_data.pointer]
|
||||||
result = journey_data.list.drop(1)
|
result = journey_data.list.drop(1)
|
||||||
pointer = journey_data.pointer - 1
|
pointer = journey_data.pointer - 1
|
||||||
return if target.empty? || (result == [target] && pointer < 0)
|
return if completed.empty? || (result == [completed] && pointer < 0)
|
||||||
|
|
||||||
target_width = Reline::Unicode.calculate_width(target)
|
target_width = Reline::Unicode.calculate_width(target)
|
||||||
x = cursor_pos.x - target_width
|
completed_width = Reline::Unicode.calculate_width(completed)
|
||||||
if x < 0
|
if cursor_pos.x <= completed_width - target_width
|
||||||
x = screen_width + x
|
# When target is rendered on the line above cursor position
|
||||||
|
x = screen_width - completed_width
|
||||||
y = -1
|
y = -1
|
||||||
else
|
else
|
||||||
|
x = [cursor_pos.x - completed_width, 0].max
|
||||||
y = 0
|
y = 0
|
||||||
end
|
end
|
||||||
cursor_pos_to_render = Reline::CursorPos.new(x, y)
|
cursor_pos_to_render = Reline::CursorPos.new(x, y)
|
||||||
|
@ -1185,7 +1185,36 @@ begin
|
|||||||
assert_screen(<<~'EOC')
|
assert_screen(<<~'EOC')
|
||||||
Multiline REPL.
|
Multiline REPL.
|
||||||
prompt> St
|
prompt> St
|
||||||
r String
|
r
|
||||||
|
String
|
||||||
|
Struct
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_autocomplete_target_at_end_of_line
|
||||||
|
start_terminal(20, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
||||||
|
write(' ')
|
||||||
|
write('Str')
|
||||||
|
write("\C-i")
|
||||||
|
close
|
||||||
|
assert_screen(<<~'EOC')
|
||||||
|
Multiline REPL.
|
||||||
|
prompt> Str
|
||||||
|
ing String
|
||||||
|
Struct
|
||||||
|
EOC
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_autocomplete_completed_input_is_wrapped
|
||||||
|
start_terminal(20, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl --autocomplete}, startup_message: 'Multiline REPL.')
|
||||||
|
write(' ')
|
||||||
|
write('Str')
|
||||||
|
write("\C-i")
|
||||||
|
close
|
||||||
|
assert_screen(<<~'EOC')
|
||||||
|
Multiline REPL.
|
||||||
|
prompt> Stri
|
||||||
|
ng String
|
||||||
Struct
|
Struct
|
||||||
EOC
|
EOC
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user