1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

Use Reline.completer_word_break_characters to complete

This commit is contained in:
aycabta 2019-05-26 00:00:03 +09:00
parent ada64aa9e7
commit d9c41f2dec

View file

@ -653,13 +653,15 @@ class Reline::LineEditor
@first_char = false
completion_occurs = false
if @config.editing_mode_is?(:emacs, :vi_insert) and key.char == "\C-i".ord
result = @completion_proc&.(@line)
slice = retrieve_completion_slice
result = @completion_proc.(slice) if @completion_proc and slice
if result.is_a?(Array)
completion_occurs = true
complete(result)
end
elsif @config.editing_mode_is?(:vi_insert) and ["\C-p".ord, "\C-n".ord].include?(key.char)
result = @completion_proc&.(@line)
slice = retrieve_completion_slice
result = @completion_proc.(slice) if @completion_proc and slice
if result.is_a?(Array)
completion_occurs = true
move_completed_list(result, "\C-p".ord == key.char ? :up : :down)
@ -674,6 +676,18 @@ class Reline::LineEditor
end
end
def retrieve_completion_slice
word_break_regexp = /\A[#{Regexp.escape(Reline.completer_word_break_characters)}]/
before = @line.byteslice(0, @byte_pointer)
rest = nil
(0..@byte_pointer).each do |i|
if @line.byteslice(i, @byte_pointer) =~ word_break_regexp
rest = $'
end
end
rest ? rest : before
end
def confirm_multiline_termination
temp_buffer = @buffer_of_lines.dup
if @previous_line_index and @line_index == (@buffer_of_lines.size - 1)