Skip to content

Commit 31f1c8b

Browse files
vtjnashjohanmon
authored andcommitted
fix JuliaLang#39982, remove cursor artifacts in REPL after JuliaLang#40411 (JuliaLang#40452)
1 parent 64c5aea commit 31f1c8b

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

stdlib/REPL/src/LineEdit.jl

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -786,25 +786,30 @@ function edit_insert(s::PromptState, c::StringLike)
786786
after = options(s).auto_refresh_time_delay
787787
termbuf = terminal(s)
788788
w = width(termbuf)
789-
delayup = !eof(buf) || old_wait
790789
offset = s.ias.curs_row == 1 || s.indent < 0 ?
791790
sizeof(prompt_string(s.p.prompt)::String) : s.indent
792791
offset += position(buf) - beginofline(buf) # size of current line
793-
spinner = true
794-
if offset + textwidth(str) <= w
792+
spinner = '\0'
793+
delayup = !eof(buf) || old_wait
794+
if offset + textwidth(str) <= w && !(after == 0 && delayup)
795795
# Avoid full update when appending characters to the end
796796
# and an update of curs_row isn't necessary (conservatively estimated)
797797
write(termbuf, str)
798-
spinner = false
798+
spinner = ' ' # temporarily clear under the cursor
799799
elseif after == 0
800800
refresh_line(s)
801801
delayup = false
802-
else
802+
else # render a spinner for each key press
803+
if old_wait || length(str) != 1
804+
spinner = spin_seq[mod1(position(buf) - w, length(spin_seq))]
805+
else
806+
spinner = str[end]
807+
end
803808
delayup = true
804809
end
805810
if delayup
806-
if spinner
807-
write(termbuf, spin_seq[mod1(position(buf) - w, length(spin_seq))])
811+
if spinner != '\0'
812+
write(termbuf, spinner)
808813
cmove_left(termbuf)
809814
end
810815
s.refresh_wait = Timer(after) do t

0 commit comments

Comments
 (0)