From 625f3c3308cd7dab01ad7ff898c4eefb487f33eb Mon Sep 17 00:00:00 2001 From: matthias314 <56549971+matthias314@users.noreply.github.com> Date: Wed, 27 May 2026 09:53:45 -0400 Subject: [PATCH] prevent `edit_move_right` from extending an active region (#61378) fixes #61377 See there for description and explanation of the bug. --- stdlib/REPL/src/LineEdit.jl | 3 ++- stdlib/REPL/test/lineedit.jl | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/stdlib/REPL/src/LineEdit.jl b/stdlib/REPL/src/LineEdit.jl index ca832b9aaeb..90dd85691f9 100644 --- a/stdlib/REPL/src/LineEdit.jl +++ b/stdlib/REPL/src/LineEdit.jl @@ -304,7 +304,7 @@ for f in Union{Symbol,Expr}[ end for f in [:edit_insert, :edit_insert_newline, :edit_backspace, :edit_move_left, - :edit_move_right, :edit_move_word_left, :edit_move_word_right] + :edit_move_word_left, :edit_move_word_right] # :edit_move_right is handled separately @eval function ($f)(s::MIState, args...) set_action!(s, $(Expr(:quote, f))) $(f)(state(s), args...) @@ -911,6 +911,7 @@ function edit_move_right(buf::IOBuffer) return false end function edit_move_right(m::MIState) + set_action!(m, :edit_move_right) s = state(m) buf = s.input_buffer if edit_move_right(s.input_buffer) diff --git a/stdlib/REPL/test/lineedit.jl b/stdlib/REPL/test/lineedit.jl index 4b641e687b7..891271c7c07 100644 --- a/stdlib/REPL/test/lineedit.jl +++ b/stdlib/REPL/test/lineedit.jl @@ -525,6 +525,24 @@ end @test LineEdit.region(s) == (0=>9) @inferred Union{Bool, LineEdit.InputAreaState} LineEdit.edit_shift_move(s, LineEdit.edit_move_right) @test LineEdit.region(s) == (2=>9) + + # issue #61377 + for edit_move in [LineEdit.edit_insert_newline, LineEdit.edit_backspace, + LineEdit.edit_move_left, LineEdit.edit_move_right, + LineEdit.edit_move_word_left, LineEdit.edit_move_word_right, + LineEdit.edit_move_up, LineEdit.edit_move_down] + s = new_state() + edit_insert(s, "abcd\nefgh\nijkl") + s.current_action = :unknown + LineEdit.edit_move_up(s) + s.current_action = :unknown + LineEdit.edit_shift_move(s, LineEdit.edit_move_left) + s.current_action = :unknown + LineEdit.edit_shift_move(s, LineEdit.edit_move_left) + s.current_action = :unknown + edit_move(s) + @test !LineEdit.is_region_active(s) + end end @testset "tab/backspace alignment feature" begin