Skip to content

Commit 5b305b5

Browse files
load Pkg when hitting Pkg repl history
1 parent 81abb6d commit 5b305b5

File tree

1 file changed

+25
-18
lines changed

1 file changed

+25
-18
lines changed

stdlib/REPL/src/REPL.jl

Lines changed: 25 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ function history_move(s::Union{LineEdit.MIState,LineEdit.PrefixSearchState}, his
717717
hist.last_mode = nothing
718718
hist.last_buffer = IOBuffer()
719719
else
720-
if haskey(hist.mode_mapping, hist.modes[idx])
720+
if haskey(hist.mode_mapping, hist.modes[idx]) || hist.modes[idx] == :pkg && !isnothing(load_pkg())
721721
LineEdit.transition(s, hist.mode_mapping[hist.modes[idx]]) do
722722
LineEdit.replace_line(s, hist.history[idx])
723723
end
@@ -1130,25 +1130,23 @@ function setup_interface(
11301130
end,
11311131
']' => function (s::MIState,o...)
11321132
if isempty(s) || position(LineEdit.buffer(s)) == 0
1133-
pkgid = Base.PkgId(Base.UUID("44cfe95a-1eb2-52ea-b672-e2afdf69b78f"), "Pkg")
1134-
if Base.locate_package(pkgid) !== nothing # Only try load Pkg if we can find it
1135-
Pkg = Base.require(pkgid)
1136-
# Pkg should have loaded its REPL mode by now, let's find it so we can transition to it.
1137-
pkg_mode = nothing
1138-
for mode in repl.interface.modes
1139-
if mode isa LineEdit.Prompt && mode.complete isa Pkg.REPLMode.PkgCompletionProvider
1140-
pkg_mode = mode
1141-
break
1142-
end
1133+
Pkg = load_pkg()
1134+
Pkg === nothing && return
1135+
# Pkg should have loaded its REPL mode by now, let's find it so we can transition to it.
1136+
pkg_mode = nothing
1137+
for mode in repl.interface.modes
1138+
if mode isa LineEdit.Prompt && mode.complete isa Pkg.REPLMode.PkgCompletionProvider
1139+
pkg_mode = mode
1140+
break
11431141
end
1144-
# TODO: Cache the `pkg_mode`?
1145-
if pkg_mode !== nothing
1146-
buf = copy(LineEdit.buffer(s))
1147-
transition(s, pkg_mode) do
1148-
LineEdit.state(s, pkg_mode).input_buffer = buf
1149-
end
1150-
return
1142+
end
1143+
# TODO: Cache the `pkg_mode`?
1144+
if pkg_mode !== nothing
1145+
buf = copy(LineEdit.buffer(s))
1146+
transition(s, pkg_mode) do
1147+
LineEdit.state(s, pkg_mode).input_buffer = buf
11511148
end
1149+
return
11521150
end
11531151
end
11541152
edit_insert(s, ']')
@@ -1337,6 +1335,15 @@ function setup_interface(
13371335
return ModalInterface(allprompts)
13381336
end
13391337

1338+
function load_pkg()
1339+
pkgid = Base.PkgId(Base.UUID("44cfe95a-1eb2-52ea-b672-e2afdf69b78f"), "Pkg")
1340+
if Base.locate_package(pkgid) !== nothing # Only try load Pkg if we can find it
1341+
Pkg = Base.require(pkgid)
1342+
return Pkg
1343+
end
1344+
return nothing
1345+
end
1346+
13401347
function run_frontend(repl::LineEditREPL, backend::REPLBackendRef)
13411348
repl.frontend_task = current_task()
13421349
d = REPLDisplay(repl)

0 commit comments

Comments
 (0)