[platform, terminal] Fix IJPL-231940: Add support for ConPTY inherit cursor option

- Updated `WinConPtyProcess` logic to check and handle the inherit cursor setting.
- Extended `LocalPtyOptions` to include the ConPTY inherit cursor configuration.

#IJPL-231940 Fixed

GitOrigin-RevId: 6c5785713c8aa1a65a2a05c87ac6c46c9777990c
This commit is contained in:
Sergey.Vardanyan
2026-02-06 16:45:29 +00:00
committed by intellij-monorepo-bot
parent 8e584f335c
commit 4e087cf3bf
4 changed files with 18 additions and 7 deletions
@@ -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();
}
}
@@ -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!!)
+3
View File
@@ -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
@@ -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 {