1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-12-25 06:43:24 +03:00

* NvimView+UiBridge.swift: set lastImSource when exit from insert mode

This commit is contained in:
georgealbert 2022-02-08 21:48:00 +08:00 committed by GitHub
parent e031c7deb2
commit 359b2b582f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,6 +8,7 @@ import Cocoa
import Foundation
import MessagePack
import NvimServerTypes
import os
import RxPack
import RxSwift
@ -49,25 +50,6 @@ extension NvimView {
}
}
private func activateIm(enabled: Bool) {
if (self.asciiImSource == nil) {
self.asciiImSource = TISCopyCurrentASCIICapableKeyboardInputSource().takeRetainedValue()
// self.asciiImSource = TISCopyCurrentASCIICapableKeyboardInputSource().takeUnretainedValue()
self.bridgeLogger.info("ascii IME id: \(asciiImSource!.id), source: \(asciiImSource)")
}
if enabled {
// In insert mode, set ime to last ime source
TISSelectInputSource(self.lastImSource)
} else {
// In normal mode, se ime to ascii input source
self.lastImSource = TISCopyCurrentKeyboardInputSource().takeRetainedValue()
TISSelectInputSource(self.asciiImSource)
}
self.bridgeLogger.debug("lastImSource id: \(lastImSource!.id), source: \(lastImSource)")
}
final func modeChange(_ value: MessagePackValue) {
guard let mode = MessagePackUtils.value(
from: value, conversion: { v -> CursorModeShape? in
@ -79,8 +61,8 @@ extension NvimView {
return
}
self.bridgeLogger.debug(self.name(ofCursorMode: mode))
// self.bridgeLogger.info(self.name(ofCursorMode: mode))
// self.bridgeLogger.debug(self.name(ofCursorMode: mode))
self.bridgeLogger.info(self.name(ofCursorMode: mode))
gui.async {
self.mode = mode
self.markForRender(
@ -92,6 +74,7 @@ extension NvimView {
}
if self.name(ofCursorMode: mode) == "Insert" {
self.is_insert_mode = true
self.activateIm(enabled: true)
}
}
@ -415,6 +398,34 @@ extension NvimView {
return min(0, top)
}
private func activateIm(enabled: Bool) {
if (self.asciiImSource == nil) {
self.asciiImSource = TISCopyCurrentASCIICapableKeyboardInputSource().takeRetainedValue()
// self.asciiImSource = TISCopyCurrentASCIICapableKeyboardInputSource().takeUnretainedValue()
self.bridgeLogger.info("ascii IME id: \(asciiImSource!.id), source: \(asciiImSource)")
}
if enabled {
// In insert mode, set ime to last ime source
TISSelectInputSource(self.lastImSource)
} else {
// In normal mode, set ime to ascii input source
if self.is_insert_mode {
self.lastImSource = TISCopyCurrentKeyboardInputSource().takeRetainedValue()
self.bridgeLogger.info("lastImSource id: \(lastImSource!.id), source: \(lastImSource)")
// Set is_insert_mode flag to avoid copy the wrong input source.
// We could enter Normal mode from Visual and OperaterPending mode.
self.is_insert_mode = false
}
TISSelectInputSource(self.asciiImSource)
}
// self.bridgeLogger.info("lastImSource id: \(lastImSource!.id), source: \(lastImSource)")
// os_log("lastImSource id: %@, source: %@", log: self.bridgeLogger, type: .debug, lastImSource!.id, lastImSource!.sourceLanguages)
}
}
// MARK: - Simple