diff --git a/src/main/java/haus/nightmare/a3270/ui/TerminalView.kt b/src/main/java/haus/nightmare/a3270/ui/TerminalView.kt index 2373940..19f3d19 100644 --- a/src/main/java/haus/nightmare/a3270/ui/TerminalView.kt +++ b/src/main/java/haus/nightmare/a3270/ui/TerminalView.kt @@ -221,8 +221,23 @@ fun TerminalView( if (faPos >= 0) { val fa = buf.getDisplayCell(faPos)?.fa?.toInt()?.and(0xFF) ?: 0 if (faIsSelectable(fa) && !faIsZero(fa)) { - onLightPenSelect?.invoke(clickAddr) - isDetectable = true + val size = buf.displayRows * buf.displayCols + val desPos = if (size > 0) (faPos + 1) % size else -1 + val desCell = if (desPos >= 0) buf.getDisplayCell(desPos) else null + val desAscii = desCell?.ucs4 ?: 0.toChar() + val desEbcdic = desCell?.ec?.toInt()?.and(0xFF) ?: 0 + + val isToggleField = (desEbcdic == 0x6F || desAscii == '?' || desAscii == '\uFF1F' || + desEbcdic == 0x6E || desAscii == '>' || desAscii == '\uFF1E') + val isEnterField = (desEbcdic == 0x50 || desAscii == '&' || desAscii == '\uFF06') + + // Automatic tap selection applies only to toggle (?/>) and enter (&) fields. + // Standard text fields (space/null designators) must not trigger light-pen selection + // so normal cursor positioning and editing work as expected. + if (isToggleField || isEnterField) { + onLightPenSelect?.invoke(clickAddr) + isDetectable = true + } } } }