Skip to content

Commit 8ef534e

Browse files
authored
Enter newline if cursor position is middle of input (#802)
* Enter newline if cursor position is middle of input * Add ed_force_submit to allow input confirmation on non-final lines
1 parent f09e7b1 commit 8ef534e

File tree

2 files changed

+27
-12
lines changed

2 files changed

+27
-12
lines changed

lib/reline/line_editor.rb

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1673,24 +1673,22 @@ def finish
16731673
finish
16741674
end
16751675
else
1676-
if @line_index == (@buffer_of_lines.size - 1)
1677-
if confirm_multiline_termination
1678-
finish
1679-
else
1680-
key_newline(key)
1681-
end
1682-
else
1683-
# should check confirm_multiline_termination to finish?
1684-
@line_index = @buffer_of_lines.size - 1
1685-
@byte_pointer = current_line.bytesize
1676+
if @line_index == @buffer_of_lines.size - 1 && confirm_multiline_termination
16861677
finish
1678+
else
1679+
key_newline(key)
16871680
end
16881681
end
16891682
else
16901683
finish
16911684
end
16921685
end
16931686

1687+
private def ed_force_submit(_key)
1688+
process_insert(force: true)
1689+
finish
1690+
end
1691+
16941692
private def em_delete_prev_char(key, arg: 1)
16951693
arg.times do
16961694
if @byte_pointer == 0 and @line_index > 0

test/reline/yamatanooroti/test_rendering.rb

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -813,13 +813,30 @@ def test_autowrap_in_the_middle_of_a_line
813813
close
814814
end
815815

816-
def test_terminate_in_the_middle_of_lines
816+
def test_newline_in_the_middle_of_lines
817817
start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.')
818818
write("def hoge\n 1\n 2\n 3\n 4\nend\n")
819819
write("\C-p\C-p\C-p\C-e\n")
820820
assert_screen(<<~EOC)
821+
prompt> def hoge
822+
prompt> 1
823+
prompt> 2
821824
prompt> 3
822-
prompt> 4
825+
prompt>
826+
EOC
827+
close
828+
end
829+
830+
def test_ed_force_submit_in_the_middle_of_lines
831+
write_inputrc <<~LINES
832+
"\\C-a": ed_force_submit
833+
LINES
834+
start_terminal(5, 20, %W{ruby -I#{@pwd}/lib #{@pwd}/test/reline/yamatanooroti/multiline_repl}, startup_message: 'Multiline REPL.')
835+
write("def hoge\nend")
836+
write("\C-p\C-a")
837+
assert_screen(<<~EOC)
838+
Multiline REPL.
839+
prompt> def hoge
823840
prompt> end
824841
=> :hoge
825842
prompt>

0 commit comments

Comments
 (0)