mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Disable auto indent when move cursor up or down
This commit suppresses a strange behavior below: if true 1[cursor] end and press down key if true 1 end
This commit is contained in:
parent
e4cafa393f
commit
c4c47b792d
1 changed files with 25 additions and 20 deletions
|
@ -784,29 +784,34 @@ class Reline::LineEditor
|
||||||
@completion_state = CompletionState::NORMAL
|
@completion_state = CompletionState::NORMAL
|
||||||
end
|
end
|
||||||
if @is_multiline and @auto_indent_proc
|
if @is_multiline and @auto_indent_proc
|
||||||
if @previous_line_index
|
process_auto_indent
|
||||||
new_lines = whole_lines(index: @previous_line_index, line: @line)
|
|
||||||
else
|
|
||||||
new_lines = whole_lines
|
|
||||||
end
|
|
||||||
new_indent = @auto_indent_proc.(new_lines, @line_index, @byte_pointer, @check_new_auto_indent)
|
|
||||||
if new_indent
|
|
||||||
md = @buffer_of_lines[@line_index].match(/\A */)
|
|
||||||
prev_indent = md[0].count(' ')
|
|
||||||
if @check_new_auto_indent
|
|
||||||
@buffer_of_lines[@line_index] = ' ' * new_indent + @buffer_of_lines[@line_index].gsub(/\A */, '')
|
|
||||||
@cursor = new_indent
|
|
||||||
@byte_pointer = new_indent
|
|
||||||
else
|
|
||||||
@line = ' ' * new_indent + @line.gsub(/\A */, '')
|
|
||||||
@cursor -= prev_indent - new_indent
|
|
||||||
@byte_pointer -= prev_indent - new_indent
|
|
||||||
end
|
|
||||||
end
|
|
||||||
@check_new_auto_indent = false
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
private def process_auto_indent
|
||||||
|
return if not @check_new_auto_indent and @previous_line_index # move cursor up or down
|
||||||
|
if @previous_line_index
|
||||||
|
new_lines = whole_lines(index: @previous_line_index, line: @line)
|
||||||
|
else
|
||||||
|
new_lines = whole_lines
|
||||||
|
end
|
||||||
|
new_indent = @auto_indent_proc.(new_lines, @line_index, @byte_pointer, @check_new_auto_indent)
|
||||||
|
if new_indent
|
||||||
|
md = @buffer_of_lines[@line_index].match(/\A */)
|
||||||
|
prev_indent = md[0].count(' ')
|
||||||
|
if @check_new_auto_indent
|
||||||
|
@buffer_of_lines[@line_index] = ' ' * new_indent + @buffer_of_lines[@line_index].gsub(/\A */, '')
|
||||||
|
@cursor = new_indent
|
||||||
|
@byte_pointer = new_indent
|
||||||
|
else
|
||||||
|
@line = ' ' * new_indent + @line.gsub(/\A */, '')
|
||||||
|
@cursor -= prev_indent - new_indent
|
||||||
|
@byte_pointer -= prev_indent - new_indent
|
||||||
|
end
|
||||||
|
end
|
||||||
|
@check_new_auto_indent = false
|
||||||
|
end
|
||||||
|
|
||||||
def retrieve_completion_block
|
def retrieve_completion_block
|
||||||
word_break_regexp = /\A[#{Regexp.escape(Reline.completer_word_break_characters)}]/
|
word_break_regexp = /\A[#{Regexp.escape(Reline.completer_word_break_characters)}]/
|
||||||
quote_characters_regexp = /\A[#{Regexp.escape(Reline.completer_quote_characters)}]/
|
quote_characters_regexp = /\A[#{Regexp.escape(Reline.completer_quote_characters)}]/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue