InputHandler // Bring cursor jump to the marking mode.

* Certain models of ThinkPad USB Keyboard don't support Alt+Shift+→, hence the choice of Command key as the alternative modifier key for this function.
This commit is contained in:
ShikiSuen 2023-03-12 00:08:49 +08:00
parent c5b3083b48
commit 03913cb71c
1 changed files with 28 additions and 10 deletions

View File

@ -195,10 +195,14 @@ extension InputHandler {
// Shift + Left
if input.isCursorBackward, input.isShiftHold {
if compositor.marker > 0 {
if input.isCommandHold || input.isOptionHold {
compositor.jumpCursorBySpan(to: .rear, isMarker: true)
} else {
compositor.marker -= 1
if isCursorCuttingChar(isMarker: true) {
compositor.jumpCursorBySpan(to: .rear, isMarker: true)
}
}
var marking = IMEState.ofMarking(
displayTextSegments: state.displayTextSegments,
markedReadings: Array(compositor.keys[currentMarkedRange()]),
@ -216,10 +220,14 @@ extension InputHandler {
// Shift + Right
if input.isCursorForward, input.isShiftHold {
if compositor.marker < compositor.length {
if input.isCommandHold || input.isOptionHold {
compositor.jumpCursorBySpan(to: .front, isMarker: true)
} else {
compositor.marker += 1
if isCursorCuttingChar(isMarker: true) {
compositor.jumpCursorBySpan(to: .front, isMarker: true)
}
}
var marking = IMEState.ofMarking(
displayTextSegments: state.displayTextSegments,
markedReadings: Array(compositor.keys[currentMarkedRange()]),
@ -644,10 +652,15 @@ extension InputHandler {
if input.isShiftHold {
// Shift + Right
if compositor.cursor < compositor.length {
compositor.marker = compositor.cursor + 1
compositor.marker = compositor.cursor
if input.isCommandHold || input.isOptionHold {
compositor.jumpCursorBySpan(to: .front, isMarker: true)
} else {
compositor.marker += 1
if isCursorCuttingChar(isMarker: true) {
compositor.jumpCursorBySpan(to: .front, isMarker: true)
}
}
var marking = IMEState.ofMarking(
displayTextSegments: compositor.walkedNodes.values,
markedReadings: Array(compositor.keys[currentMarkedRange()]),
@ -659,7 +672,7 @@ extension InputHandler {
} else {
delegate.callError("BB7F6DB9")
}
} else if input.isOptionHold {
} else if input.isOptionHold, !input.isShiftHold {
if input.isControlHold {
return handleEnd()
}
@ -703,10 +716,15 @@ extension InputHandler {
if input.isShiftHold {
// Shift + left
if compositor.cursor > 0 {
compositor.marker = compositor.cursor - 1
compositor.marker = compositor.cursor
if input.isCommandHold || input.isOptionHold {
compositor.jumpCursorBySpan(to: .rear, isMarker: true)
} else {
compositor.marker -= 1
if isCursorCuttingChar(isMarker: true) {
compositor.jumpCursorBySpan(to: .rear, isMarker: true)
}
}
var marking = IMEState.ofMarking(
displayTextSegments: compositor.walkedNodes.values,
markedReadings: Array(compositor.keys[currentMarkedRange()]),
@ -718,7 +736,7 @@ extension InputHandler {
} else {
delegate.callError("D326DEA3")
}
} else if input.isOptionHold {
} else if input.isOptionHold, !input.isShiftHold {
if input.isControlHold { return handleHome() }
//
if !compositor.jumpCursorBySpan(to: .rear) {