@@ -1127,15 +1127,38 @@ type internal FsiConsolePrompt(fsiOptions: FsiCommandLineOptions, fsiConsoleOutp
11271127 // A prompt gets "printed ahead" at start up. Tells users to start type while initialisation completes.
11281128 // A prompt can be skipped by "silent directives", e.g. ones sent to FSI by VS.
11291129 let mutable dropPrompt = 0
1130+ let mutable showPrompt = true
1131+
11301132 // NOTE: SERVER-PROMPT is not user displayed, rather it's a prefix that code elsewhere
11311133 // uses to identify the prompt, see service\FsPkgs\FSharp.VS.FSI\fsiSessionToolWindow.fs
1132- let prompt = if fsiOptions.UseServerPrompt then " SERVER-PROMPT>\n " else " > "
11331134
1134- member _.Print () = if dropPrompt = 0 then fsiConsoleOutput.uprintf " %s " prompt else dropPrompt <- dropPrompt - 1
1135+ let prompt =
1136+ if fsiOptions.UseServerPrompt then
1137+ " SERVER-PROMPT>" + Environment.NewLine
1138+ else
1139+ " > "
1140+
1141+ member _.Print () =
1142+ if showPrompt then
1143+ if dropPrompt = 0 then
1144+ fsiConsoleOutput.uprintf " %s " prompt
1145+ else
1146+ dropPrompt <- dropPrompt - 1
1147+
1148+ member _.PrintAhead () =
1149+ if showPrompt then
1150+ dropPrompt <- dropPrompt + 1
1151+ fsiConsoleOutput.uprintf " %s " prompt
11351152
1136- member _.PrintAhead () = dropPrompt <- dropPrompt + 1 ; fsiConsoleOutput.uprintf " %s " prompt
1153+ // Can be turned off when executing blocks of code using:
1154+ // # silentPrompt
1155+ member _.ShowPrompt
1156+ with get () = showPrompt
1157+ and set ( value ) = showPrompt <- value
11371158
1138- member _.SkipNext () = dropPrompt <- dropPrompt + 1
1159+ member _.SkipNext () =
1160+ if showPrompt then
1161+ dropPrompt <- dropPrompt + 1
11391162
11401163 member _.FsiOptions = fsiOptions
11411164
@@ -2772,6 +2795,15 @@ type FsiInteractionProcessor
27722795 fsiConsolePrompt.SkipNext() (* "silent" directive *)
27732796 istate, Completed None
27742797
2798+ | ParsedHashDirective( " interactiveprompt" , ParsedHashDirectiveArguments [ " show" | " hide" | " skip" as showPrompt], m) ->
2799+ match showPrompt with
2800+ | " show" -> fsiConsolePrompt.ShowPrompt <- true
2801+ | " hide" -> fsiConsolePrompt.ShowPrompt <- false
2802+ | " skip" -> fsiConsolePrompt.SkipNext()
2803+ | _ -> error( Error(( FSComp.SR.fsiInvalidDirective( " prompt" , String.concat " " [ showPrompt])), m))
2804+
2805+ istate, Completed None
2806+
27752807 | ParsedHashDirective( " dbgbreak" , [], _) ->
27762808 let istate = { istate with debugBreak = true }
27772809 istate, Completed None
@@ -3072,7 +3104,7 @@ type FsiInteractionProcessor
30723104
30733105 // After we've unblocked and got something to run we switch
30743106 // over to the run-thread (e.g. the GUI thread)
3075- let res = istate |> runCodeOnMainThread ( fun ctok istate -> ExecuteParsedInteractionOnMainThread ( ctok, diagnosticsLogger, action, istate, cancellationToken))
3107+ let res = istate |> runCodeOnMainThread ( fun ctok istate -> ExecuteParsedInteractionOnMainThread ( ctok, diagnosticsLogger, action, istate, cancellationToken))
30763108
30773109 if progress then fprintfn fsiConsoleOutput.Out " Just called runCodeOnMainThread, res = %O ..." res
30783110 res)
0 commit comments