summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authoraycabta <aycabta@gmail.com>2019-05-26 00:00:03 +0900
committeraycabta <aycabta@gmail.com>2019-05-26 00:00:19 +0900
commitd9c41f2dec7af7f44b4545f4111498c8af3569fe (patch)
tree2c63b95b3f2d8c331b784496dfc81687579c9c98 /lib
parentada64aa9e7f1e087b9fd536d9bc512de401f42a0 (diff)
Use Reline.completer_word_break_characters to complete
Diffstat (limited to 'lib')
-rw-r--r--lib/reline/line_editor.rb18
1 files changed, 16 insertions, 2 deletions
diff --git a/lib/reline/line_editor.rb b/lib/reline/line_editor.rb
index 38a06a6a42..b069a0d912 100644
--- a/lib/reline/line_editor.rb
+++ b/lib/reline/line_editor.rb
@@ -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)