diff --git a/platform/execution-impl/src/com/intellij/terminal/TerminalExecutionConsole.java b/platform/execution-impl/src/com/intellij/terminal/TerminalExecutionConsole.java index b95b5313023b..331e32780547 100644 --- a/platform/execution-impl/src/com/intellij/terminal/TerminalExecutionConsole.java +++ b/platform/execution-impl/src/com/intellij/terminal/TerminalExecutionConsole.java @@ -170,7 +170,8 @@ public class TerminalExecutionConsole implements ConsoleView, ObservableConsoleV if (myFirstOutput.compareAndSet(false, true) && contentType == ConsoleViewContentType.SYSTEM_OUTPUT && - getProcess() instanceof WinConPtyProcess) { + getProcess() instanceof WinConPtyProcess winConPtyProcess && + !winConPtyProcess.isConPtyInheritCursor()) { moveScreenToScrollbackBufferAndShowAllOutput(); } } diff --git a/platform/platform-util-io-impl/src/com/intellij/execution/process/LocalProcessServiceImpl.kt b/platform/platform-util-io-impl/src/com/intellij/execution/process/LocalProcessServiceImpl.kt index 01e04b25a052..02a131d7acc8 100644 --- a/platform/platform-util-io-impl/src/com/intellij/execution/process/LocalProcessServiceImpl.kt +++ b/platform/platform-util-io-impl/src/com/intellij/execution/process/LocalProcessServiceImpl.kt @@ -51,6 +51,7 @@ class LocalProcessServiceImpl : LocalProcessService { .setWindowsAnsiColorEnabled(!SystemProperties.getBooleanProperty("pty4j.win.disable.ansi.in.console.mode", false)) .setUnixOpenTtyToPreserveOutputAfterTermination(SystemProperties.getBooleanProperty("pty4j.open.child.tty", SystemInfo.isMac)) .setSpawnProcessUsingJdkOnMacIntel(Registry.`is`("run.processes.using.pty.helper.on.mac.intel", true)) + .setConPtyInheritCursor(options.winConPtyInheritCursor) if(options.winSuspendedProcessCallback != null) { builder.setWindowsSuspendedProcessCallback(options.winSuspendedProcessCallback!!) diff --git a/platform/platform-util-io/api-dump.txt b/platform/platform-util-io/api-dump.txt index b52ab67967a0..1f5a1c58b32a 100644 --- a/platform/platform-util-io/api-dump.txt +++ b/platform/platform-util-io/api-dump.txt @@ -263,6 +263,7 @@ f:com.intellij.execution.process.LocalPtyOptions - f:getInitialRows():I - f:getUseCygwinLaunch():Z - f:getUseWinConPty():Z +- f:getWinConPtyInheritCursor():Z - f:getWinSuspendedProcessCallback():java.util.function.LongConsumer f:com.intellij.execution.process.LocalPtyOptions$Builder - f:build():com.intellij.execution.process.LocalPtyOptions @@ -275,6 +276,8 @@ f:com.intellij.execution.process.LocalPtyOptions$Builder - f:set(com.intellij.execution.process.LocalPtyOptions):com.intellij.execution.process.LocalPtyOptions$Builder - f:useCygwinLaunch():Z - f:useCygwinLaunch(Z):com.intellij.execution.process.LocalPtyOptions$Builder +- f:winConPtyInheritCursor():Z +- f:winConPtyInheritCursor(Z):com.intellij.execution.process.LocalPtyOptions$Builder - f:winSuspendedProcessCallback():java.util.function.LongConsumer - f:winSuspendedProcessCallback(java.util.function.LongConsumer):com.intellij.execution.process.LocalPtyOptions$Builder f:com.intellij.execution.process.LocalPtyOptions$Companion diff --git a/platform/platform-util-io/src/com/intellij/execution/process/LocalPtyOptions.kt b/platform/platform-util-io/src/com/intellij/execution/process/LocalPtyOptions.kt index 353ed26c6719..eaa575686b0e 100644 --- a/platform/platform-util-io/src/com/intellij/execution/process/LocalPtyOptions.kt +++ b/platform/platform-util-io/src/com/intellij/execution/process/LocalPtyOptions.kt @@ -13,19 +13,20 @@ class LocalPtyOptions private constructor(val consoleMode: Boolean, val initialColumns: Int, val initialRows: Int, val useWinConPty: Boolean, - val winSuspendedProcessCallback: LongConsumer?) { + val winSuspendedProcessCallback: LongConsumer?, + val winConPtyInheritCursor: Boolean) { override fun toString(): String { - return "consoleMode=$consoleMode, useCygwinLaunch=$useCygwinLaunch, initialColumns=$initialColumns, initialRows=$initialRows, useWinConPty=$useWinConPty" + return "consoleMode=$consoleMode, useCygwinLaunch=$useCygwinLaunch, initialColumns=$initialColumns, initialRows=$initialRows, useWinConPty=$useWinConPty, conPtyInheritCursor=$winConPtyInheritCursor" } fun builder(): Builder { - return Builder(consoleMode, useCygwinLaunch, initialColumns, initialRows, useWinConPty, winSuspendedProcessCallback) + return Builder(consoleMode, useCygwinLaunch, initialColumns, initialRows, useWinConPty, winSuspendedProcessCallback, winConPtyInheritCursor) } companion object { @JvmStatic - fun defaults(): LocalPtyOptions = LocalPtyOptions(false, false, -1, -1, shouldUseWinConPty(), null) + fun defaults(): LocalPtyOptions = LocalPtyOptions(false, false, -1, -1, shouldUseWinConPty(), null, false) @JvmStatic @Internal @@ -37,7 +38,8 @@ class LocalPtyOptions private constructor(val consoleMode: Boolean, private var initialColumns: Int, private var initialRows: Int, private var useWinConPty: Boolean, - private var winSuspendedProcessCallback: LongConsumer?) { + private var winSuspendedProcessCallback: LongConsumer?, + private var winConPtyInheritCursor: Boolean) { private val LOG: Logger = Logger.getInstance(Builder::class.java) /** @@ -82,7 +84,10 @@ class LocalPtyOptions private constructor(val consoleMode: Boolean, @Internal fun useWinConPty(): Boolean = useWinConPty - fun build(): LocalPtyOptions = LocalPtyOptions(consoleMode, useCygwinLaunch, initialColumns, initialRows, useWinConPty, winSuspendedProcessCallback) + fun winConPtyInheritCursor(inheritCursor: Boolean): Builder = apply { this.winConPtyInheritCursor = inheritCursor } + fun winConPtyInheritCursor(): Boolean = winConPtyInheritCursor + + fun build(): LocalPtyOptions = LocalPtyOptions(consoleMode, useCygwinLaunch, initialColumns, initialRows, useWinConPty, winSuspendedProcessCallback, winConPtyInheritCursor) fun set(options: LocalPtyOptions): Builder = apply { consoleMode = options.consoleMode @@ -91,6 +96,7 @@ class LocalPtyOptions private constructor(val consoleMode: Boolean, initialRows = options.initialRows useWinConPty = options.useWinConPty winSuspendedProcessCallback = options.winSuspendedProcessCallback + winConPtyInheritCursor = options.winConPtyInheritCursor } override fun toString(): String {