mirror of
https://github.com/ruby/ruby.git
synced 2025-08-26 22:45:03 +02:00
parent
164e486225
commit
acffb0b068
1 changed files with 33 additions and 31 deletions
|
@ -177,41 +177,43 @@ module Reline
|
||||||
Reline::IOGate.get_screen_size
|
Reline::IOGate.get_screen_size
|
||||||
end
|
end
|
||||||
|
|
||||||
|
DEFAULT_DIALOG_PROC_AUTOCOMPLETE = ->() {
|
||||||
|
# autocomplete
|
||||||
|
if just_cursor_moving and completion_journey_data.nil?
|
||||||
|
# Auto complete starts only when edited
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
pre, target, post= retrieve_completion_block(true)
|
||||||
|
if target.nil? or target.empty?# or target.size <= 3
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
if completion_journey_data and completion_journey_data.list
|
||||||
|
result = completion_journey_data.list.dup
|
||||||
|
result.shift
|
||||||
|
pointer = completion_journey_data.pointer - 1
|
||||||
|
else
|
||||||
|
result = call_completion_proc_with_checking_args(pre, target, post)
|
||||||
|
pointer = nil
|
||||||
|
end
|
||||||
|
if result and result.size == 1 and result[0] == target
|
||||||
|
result = nil
|
||||||
|
end
|
||||||
|
target_width = Reline::Unicode.calculate_width(target)
|
||||||
|
x = cursor_pos.x - target_width
|
||||||
|
if x < 0
|
||||||
|
x = screen_width + x
|
||||||
|
y = -1
|
||||||
|
else
|
||||||
|
y = 0
|
||||||
|
end
|
||||||
|
[Reline::CursorPos.new(x, y), result, pointer]
|
||||||
|
}
|
||||||
|
|
||||||
def readmultiline(prompt = '', add_hist = false, &confirm_multiline_termination)
|
def readmultiline(prompt = '', add_hist = false, &confirm_multiline_termination)
|
||||||
unless confirm_multiline_termination
|
unless confirm_multiline_termination
|
||||||
raise ArgumentError.new('#readmultiline needs block to confirm multiline termination')
|
raise ArgumentError.new('#readmultiline needs block to confirm multiline termination')
|
||||||
end
|
end
|
||||||
@dialog_proc = ->() {
|
@dialog_proc = DEFAULT_DIALOG_PROC_AUTOCOMPLETE
|
||||||
# autocomplete
|
|
||||||
if just_cursor_moving and completion_journey_data.nil?
|
|
||||||
# Auto complete starts only when edited
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
pre, target, post= retrieve_completion_block(true)
|
|
||||||
if target.nil? or target.empty?
|
|
||||||
return nil
|
|
||||||
end
|
|
||||||
if completion_journey_data and completion_journey_data.list
|
|
||||||
result = completion_journey_data.list.dup
|
|
||||||
result.shift
|
|
||||||
pointer = completion_journey_data.pointer - 1
|
|
||||||
else
|
|
||||||
result = call_completion_proc_with_checking_args(pre, target, post)
|
|
||||||
pointer = nil
|
|
||||||
end
|
|
||||||
if result and result.size == 1 and result[0] == target
|
|
||||||
result = nil
|
|
||||||
end
|
|
||||||
target_width = Reline::Unicode.calculate_width(target)
|
|
||||||
x = cursor_pos.x - target_width
|
|
||||||
if x < 0
|
|
||||||
x = screen_width + x
|
|
||||||
y = -1
|
|
||||||
else
|
|
||||||
y = 0
|
|
||||||
end
|
|
||||||
[Reline::CursorPos.new(x, y), result, pointer]
|
|
||||||
}
|
|
||||||
inner_readline(prompt, add_hist, true, &confirm_multiline_termination)
|
inner_readline(prompt, add_hist, true, &confirm_multiline_termination)
|
||||||
|
|
||||||
whole_buffer = line_editor.whole_buffer.dup
|
whole_buffer = line_editor.whole_buffer.dup
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue