Repo // Deprecating IMKCandidates.
* This is the only one big obstacle that hinders vChewing from being migratable as a cross-platform (macOS & iOS) app. Plus, IMKCandidates is buggy. It is not likely to be completely fixed by Apple, and its devs are not allowed to talk about it to non-Apple individuals. That's why it is enough.
This commit is contained in:
parent
2ea94c8886
commit
006192db87
|
@ -61,39 +61,3 @@ public extension NSWindow {
|
|||
return result
|
||||
}
|
||||
}
|
||||
|
||||
public extension IMKCandidates {
|
||||
/// 設定選字窗的顯示位置。
|
||||
///
|
||||
/// 需注意:該函式會藉由設定選字窗左上角頂點的方式、使選字窗始終位於某個螢幕之內。
|
||||
///
|
||||
/// - Parameters:
|
||||
/// - windowTopLeftPoint: 給定的視窗顯示位置。
|
||||
/// - heightDelta: 為了「防止選字窗抻出螢幕下方」而給定的預留高度。
|
||||
func set(windowTopLeftPoint: NSPoint, bottomOutOfScreenAdjustmentHeight heightDelta: Double, useGCD: Bool) {
|
||||
func doSet() {
|
||||
DispatchQueue.main.async { [self] in
|
||||
guard var screenFrame = NSScreen.main?.visibleFrame else { return }
|
||||
var adjustedPoint = windowTopLeftPoint
|
||||
let windowSize = candidateFrame().size
|
||||
var delta = heightDelta
|
||||
for frame in NSScreen.screens.map(\.visibleFrame).filter({ $0.contains(windowTopLeftPoint) }) {
|
||||
screenFrame = frame
|
||||
break
|
||||
}
|
||||
|
||||
if delta > screenFrame.size.height / 2.0 { delta = 0.0 }
|
||||
|
||||
if adjustedPoint.y < screenFrame.minY + windowSize.height {
|
||||
adjustedPoint.y = windowTopLeftPoint.y + windowSize.height + delta
|
||||
}
|
||||
adjustedPoint.y = min(adjustedPoint.y, screenFrame.maxY - 1.0)
|
||||
adjustedPoint.x = min(max(adjustedPoint.x, screenFrame.minX), screenFrame.maxX - windowSize.width - 1.0)
|
||||
|
||||
setCandidateFrameTopLeft(adjustedPoint)
|
||||
}
|
||||
}
|
||||
|
||||
if useGCD { doSet() } else { DispatchQueue.main.async { doSet() } }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -14,7 +14,6 @@ public protocol CtlCandidateDelegate {
|
|||
func candidatePairHighlightChanged(at index: Int)
|
||||
func candidatePairRightClicked(at index: Int, action: CandidateContextMenuAction)
|
||||
func candidates(_ sender: Any!) -> [Any]!
|
||||
func deductCandidateIndex(from candidateString: String) -> Int
|
||||
func resetCandidateWindowOrigin()
|
||||
@discardableResult func reverseLookup(for value: String) -> [String]
|
||||
var selectionKeys: String { get }
|
||||
|
|
|
@ -11,7 +11,6 @@ import Foundation
|
|||
public protocol PrefMgrProtocol {
|
||||
var isDebugModeEnabled: Bool { get set }
|
||||
var failureFlagForUOMObservation: Bool { get set }
|
||||
var failureFlagForIMKCandidates: Bool { get set }
|
||||
var deltaOfCalendarYears: Int { get set }
|
||||
var mostRecentInputMode: String { get set }
|
||||
var useExternalFactoryDict: Bool { get set }
|
||||
|
@ -46,7 +45,6 @@ public protocol PrefMgrProtocol {
|
|||
var clientsIMKTextInputIncapable: [String: Bool] { get set }
|
||||
var onlyLoadFactoryLangModelsIfNeeded: Bool { get set }
|
||||
var useSpaceToCommitHighlightedSCPCCandidate: Bool { get set }
|
||||
var useIMKCandidateWindow: Bool { get set }
|
||||
var enableSwiftUIForTDKCandidates: Bool { get set }
|
||||
var enableMouseScrollingForTDKCandidatesCocoa: Bool { get set }
|
||||
var disableSegmentedThickUnderlineInMarkingModeForManagedClients: Bool { get set }
|
||||
|
|
|
@ -14,7 +14,6 @@ import SwiftExtension
|
|||
public enum UserDef: String, CaseIterable {
|
||||
case kIsDebugModeEnabled = "_DebugMode"
|
||||
case kFailureFlagForUOMObservation = "_FailureFlag_UOMObservation"
|
||||
case kFailureFlagForIMKCandidates = "_FailureFlag_IMKCandidates"
|
||||
case kDeltaOfCalendarYears = "DeltaOfCalendarYears"
|
||||
case kMostRecentInputMode = "MostRecentInputMode"
|
||||
case kCassettePath = "CassettePath"
|
||||
|
@ -75,7 +74,6 @@ public enum UserDef: String, CaseIterable {
|
|||
case kClassicHaninKeyboardSymbolModeShortcutEnabled = "ClassicHaninKeyboardSymbolModeShortcutEnabled"
|
||||
|
||||
case kUseSpaceToCommitHighlightedSCPCCandidate = "UseSpaceToCommitHighlightedSCPCCandidate"
|
||||
case kUseIMKCandidateWindow = "UseIMKCandidateWindow"
|
||||
case kEnableSwiftUIForTDKCandidates = "EnableSwiftUIForTDKCandidates"
|
||||
case kEnableMouseScrollingForTDKCandidatesCocoa = "EnableMouseScrollingForTDKCandidatesCocoa"
|
||||
case kDisableSegmentedThickUnderlineInMarkingModeForManagedClients
|
||||
|
|
|
@ -1,10 +1 @@
|
|||
#import <InputMethodKit/InputMethodKit.h>
|
||||
|
||||
@interface IMKCandidates(vChewing) {}
|
||||
|
||||
- (unsigned long long)windowLevel API_AVAILABLE(macosx(10.14));
|
||||
- (void)setWindowLevel:(unsigned long long)level API_AVAILABLE(macosx(10.14));
|
||||
- (BOOL)handleKeyboardEvent:(NSEvent *)event API_AVAILABLE(macosx(10.14));
|
||||
- (void)setFontSize:(double)fontSize API_AVAILABLE(macosx(10.14));
|
||||
|
||||
@end
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import FolderMonitor
|
||||
import Shared
|
||||
import Uninstaller
|
||||
|
@ -51,21 +52,6 @@ public extension AppDelegate {
|
|||
NSUserNotificationCenter.default.delegate = self
|
||||
PrefMgr.shared.fixOddPreferences()
|
||||
|
||||
if PrefMgr.shared.failureFlagForIMKCandidates {
|
||||
DispatchQueue.main.async {
|
||||
PrefMgr.shared.failureFlagForIMKCandidates = false
|
||||
PrefMgr.shared.useIMKCandidateWindow = false
|
||||
let userNotification = NSUserNotification()
|
||||
userNotification.title = NSLocalizedString("vChewing", comment: "")
|
||||
userNotification.informativeText = NSLocalizedString(
|
||||
"IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments.",
|
||||
comment: ""
|
||||
)
|
||||
userNotification.soundName = NSUserNotificationDefaultSoundName
|
||||
NSUserNotificationCenter.default.deliver(userNotification)
|
||||
}
|
||||
}
|
||||
|
||||
// 一旦發現與使用者半衰模組的觀察行為有關的崩潰標記被開啟:
|
||||
// 如果有開啟 Debug 模式的話,就將既有的半衰記憶資料檔案更名+打上當時的時間戳。
|
||||
// 如果沒有開啟 Debug 模式的話,則將半衰記憶資料直接清空。
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import LangModelAssembly
|
||||
import Megrez
|
||||
import Shared
|
||||
|
@ -72,7 +73,6 @@ public protocol InputHandlerDelegate {
|
|||
func setInlineDisplayWithCursor()
|
||||
func updatePopupDisplayWithCursor()
|
||||
func performUserPhraseOperation(addToFilter: Bool) -> Bool
|
||||
func deductCandidateIndex(from candidateString: String) -> Int
|
||||
}
|
||||
|
||||
// MARK: - 核心 (Kernel).
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
import CandidateWindow
|
||||
import CocoaExtension
|
||||
import InputMethodKit
|
||||
import Shared
|
||||
|
||||
// MARK: - § 對選字狀態進行調度 (Handle Candidate State).
|
||||
|
@ -24,17 +25,10 @@ extension InputHandler {
|
|||
let state = delegate.state
|
||||
guard state.isCandidateContainer else { return false } // 會自動判斷「isEmpty」。
|
||||
guard ctlCandidate.visible else { return false }
|
||||
var input = input
|
||||
|
||||
var imkC: CtlCandidateIMK? {
|
||||
prefs.useIMKCandidateWindow ? (ctlCandidate as? CtlCandidateIMK) : nil
|
||||
}
|
||||
|
||||
// MARK: 選字窗內使用熱鍵升權、降權、刪詞。
|
||||
|
||||
manipulator: if (delegate as? CtlCandidateDelegate)?.isCandidateContextMenuEnabled ?? false {
|
||||
// 目前沒有任何手段可以藉由 IMKCandidates 獲取正確的「當前候選字詞位置」在這裡正確使用,故不對 IMK 選字窗開放。
|
||||
if prefs.useIMKCandidateWindow { break manipulator }
|
||||
let candidates = state.candidates
|
||||
let highlightedIndex = ctlCandidate.highlightedIndex
|
||||
if !(0 ..< candidates.count).contains(ctlCandidate.highlightedIndex) { break manipulator }
|
||||
|
@ -92,11 +86,7 @@ extension InputHandler {
|
|||
// MARK: 批次集中處理某些常用功能鍵
|
||||
|
||||
func confirmHighlightedCandidate() {
|
||||
if let imkC = imkC, let enterEvent = KeyCode.kCarriageReturn.toEvent() {
|
||||
imkC.process(event: enterEvent)
|
||||
} else {
|
||||
delegate.candidateSelectionConfirmedByInputHandler(at: ctlCandidate.highlightedIndex)
|
||||
}
|
||||
delegate.candidateSelectionConfirmedByInputHandler(at: ctlCandidate.highlightedIndex)
|
||||
}
|
||||
|
||||
if let keyCodeType = KeyCode(rawValue: input.keyCode) {
|
||||
|
@ -154,19 +144,11 @@ extension InputHandler {
|
|||
}
|
||||
return true
|
||||
case .kHome:
|
||||
if let imkC = imkC, let nsEvent = input as? NSEvent {
|
||||
imkC.process(event: nsEvent)
|
||||
return true
|
||||
}
|
||||
_ =
|
||||
(ctlCandidate.highlightedIndex == 0)
|
||||
? delegate.callError("9B6EDE8D") : (ctlCandidate.highlightedIndex = 0)
|
||||
return true
|
||||
case .kEnd:
|
||||
if let imkC = imkC, let nsEvent = input as? NSEvent {
|
||||
imkC.process(event: nsEvent)
|
||||
return true
|
||||
}
|
||||
let maxIndex = state.candidates.count - 1
|
||||
_ =
|
||||
(ctlCandidate.highlightedIndex == maxIndex)
|
||||
|
@ -176,28 +158,9 @@ extension InputHandler {
|
|||
}
|
||||
}
|
||||
|
||||
// MARK: 針對 IMKCandidates,將數字小鍵盤的事件置換掉
|
||||
|
||||
input = {
|
||||
guard imkC != nil else { return input }
|
||||
guard let eventToDeal = input as? NSEvent else { return input }
|
||||
return CtlCandidateIMK.replaceNumPadKeyCodes(target: eventToDeal) ?? eventToDeal
|
||||
}()
|
||||
|
||||
// MARK: 聯想詞處理 (Associated Phrases) 以及標準選字處理
|
||||
|
||||
if state.type == .ofAssociates {
|
||||
if !input.isShiftHold {
|
||||
return false
|
||||
}
|
||||
// 將 input 訊號翻譯成去掉 Shift 的 NSEvent,然後再投餵給 IMKCandidates。
|
||||
if let imkC = imkC, let inputEvent = input as? NSEvent,
|
||||
let inputEventShifted = CtlCandidateIMK.giveSelectionKeySansModifiers(from: inputEvent)
|
||||
{
|
||||
imkC.process(event: inputEventShifted)
|
||||
return true
|
||||
}
|
||||
}
|
||||
if state.type == .ofAssociates, !input.isShiftHold { return false }
|
||||
|
||||
var index: Int?
|
||||
var shaltShiftHold = [.ofAssociates].contains(state.type)
|
||||
|
@ -213,18 +176,9 @@ extension InputHandler {
|
|||
}
|
||||
|
||||
// 標準選字處理
|
||||
if let index = index {
|
||||
if let imkC = imkC, let oldEvent = input as? NSEvent {
|
||||
if input.isShiftHold, let newEvent = CtlCandidateIMK.giveSelectionKeySansModifiers(from: oldEvent) {
|
||||
imkC.process(event: newEvent)
|
||||
} else {
|
||||
imkC.process(event: oldEvent)
|
||||
}
|
||||
return true
|
||||
} else if let candidateIndex = ctlCandidate.candidateIndexAtKeyLabelIndex(index) {
|
||||
delegate.candidateSelectionConfirmedByInputHandler(at: candidateIndex)
|
||||
return true
|
||||
}
|
||||
if let index = index, let candidateIndex = ctlCandidate.candidateIndexAtKeyLabelIndex(index) {
|
||||
delegate.candidateSelectionConfirmedByInputHandler(at: candidateIndex)
|
||||
return true
|
||||
}
|
||||
|
||||
if state.type == .ofAssociates { return false }
|
||||
|
|
|
@ -279,10 +279,7 @@ extension InputHandler {
|
|||
|
||||
if !isStrokesFull {
|
||||
var result = generateStateOfInputting()
|
||||
if !calligrapher.isEmpty, var fetched = currentLM.cassetteQuickSetsFor(key: calligrapher)?.split(separator: "\t") {
|
||||
if prefs.useIMKCandidateWindow {
|
||||
fetched = fetched.deduplicated.filter { $0.description != currentLM.nullCandidateInCassette }
|
||||
}
|
||||
if !calligrapher.isEmpty, let fetched = currentLM.cassetteQuickSetsFor(key: calligrapher)?.split(separator: "\t") {
|
||||
result.candidates = fetched.enumerated().map {
|
||||
(keyArray: [($0.offset + 1).description], value: $0.element.description)
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
/// 該檔案乃輸入調度模組的用以承載「根據按鍵行為來調控模式」的各種成員函式的部分。
|
||||
|
||||
import AppKit
|
||||
import Megrez
|
||||
import Shared
|
||||
import Tekkon
|
||||
|
@ -525,10 +526,7 @@ extension InputHandler {
|
|||
switch isConsideredEmptyForNow {
|
||||
case false:
|
||||
var result = generateStateOfInputting()
|
||||
if prefs.cassetteEnabled, var fetched = currentLM.cassetteQuickSetsFor(key: calligrapher)?.split(separator: "\t") {
|
||||
if prefs.useIMKCandidateWindow {
|
||||
fetched = fetched.deduplicated.filter { $0.description != currentLM.nullCandidateInCassette }
|
||||
}
|
||||
if prefs.cassetteEnabled, let fetched = currentLM.cassetteQuickSetsFor(key: calligrapher)?.split(separator: "\t") {
|
||||
result.candidates = fetched.enumerated().map {
|
||||
(keyArray: [($0.offset + 1).description], value: $0.element.description)
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
import CocoaExtension
|
||||
import IMKUtils
|
||||
import InputMethodKit
|
||||
import LangModelAssembly
|
||||
import Shared
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import LangModelAssembly
|
||||
import NotifierUI
|
||||
import Shared
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import BookmarkManager
|
||||
import LangModelAssembly
|
||||
import Shared
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import Shared
|
||||
import SwiftExtension
|
||||
|
||||
|
@ -34,9 +35,6 @@ public class PrefMgr: PrefMgrProtocol {
|
|||
@AppProperty(key: UserDef.kFailureFlagForUOMObservation.rawValue, defaultValue: false)
|
||||
public var failureFlagForUOMObservation: Bool
|
||||
|
||||
@AppProperty(key: UserDef.kFailureFlagForIMKCandidates.rawValue, defaultValue: false)
|
||||
public var failureFlagForIMKCandidates: Bool
|
||||
|
||||
@AppProperty(key: UserDef.kDeltaOfCalendarYears.rawValue, defaultValue: -2000)
|
||||
public var deltaOfCalendarYears: Int
|
||||
|
||||
|
@ -185,9 +183,6 @@ public class PrefMgr: PrefMgrProtocol {
|
|||
@AppProperty(key: UserDef.kUseSpaceToCommitHighlightedSCPCCandidate.rawValue, defaultValue: true)
|
||||
public var useSpaceToCommitHighlightedSCPCCandidate: Bool
|
||||
|
||||
@AppProperty(key: UserDef.kUseIMKCandidateWindow.rawValue, defaultValue: false)
|
||||
public var useIMKCandidateWindow: Bool
|
||||
|
||||
@AppProperty(key: UserDef.kEnableSwiftUIForTDKCandidates.rawValue, defaultValue: false)
|
||||
public var enableSwiftUIForTDKCandidates: Bool
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import InputMethodKit
|
||||
import Shared
|
||||
|
||||
// MARK: Auto parameter fix procedures, executed everytime on SessionCtl.activateServer().
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
import CandidateWindow
|
||||
import CocoaExtension
|
||||
import IMKUtils
|
||||
import InputMethodKit
|
||||
import NotifierUI
|
||||
import PopupCompositionBuffer
|
||||
import Shared
|
||||
|
@ -32,25 +33,8 @@ public class SessionCtl: IMKInputController {
|
|||
/// 上一個被處理過的鍵盤事件。
|
||||
public var previouslyHandledEvents: [NSEvent] = .init()
|
||||
|
||||
/// IMK 選字窗專用記憶體位址
|
||||
private var candidateIMK: CtlCandidateProtocol?
|
||||
|
||||
/// 田所選字窗專用記憶體位址
|
||||
private var candidateTDK: CtlCandidateProtocol?
|
||||
|
||||
/// 目前在用的的選字窗副本。
|
||||
public var candidateUI: CtlCandidateProtocol? {
|
||||
get {
|
||||
PrefMgr.shared.useIMKCandidateWindow ? candidateIMK : candidateTDK
|
||||
}
|
||||
set {
|
||||
if PrefMgr.shared.useIMKCandidateWindow {
|
||||
candidateIMK = newValue
|
||||
} else {
|
||||
candidateTDK = newValue
|
||||
}
|
||||
}
|
||||
}
|
||||
public var candidateUI: CtlCandidateProtocol?
|
||||
|
||||
/// 工具提示視窗的副本。
|
||||
public var tooltipInstance = TooltipUI()
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import NotifierUI
|
||||
import Shared
|
||||
|
||||
|
@ -103,7 +104,6 @@ extension SessionCtl: CtlCandidateDelegate {
|
|||
}
|
||||
|
||||
public var selectionKeys: String {
|
||||
guard !PrefMgr.shared.useIMKCandidateWindow else { return "123456789" }
|
||||
// 磁帶模式的 `%quick` 有單獨的選字鍵判定,會在資料不合規時使用 1234567890 選字鍵。
|
||||
cassetteQuick: if state.type == .ofInputting, state.isCandidateContainer {
|
||||
guard PrefMgr.shared.cassetteEnabled else { break cassetteQuick }
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import CandidateWindow
|
||||
import NSAttributedTextView
|
||||
import Shared
|
||||
|
@ -74,7 +75,6 @@ public extension SessionCtl {
|
|||
|
||||
func showCandidates() {
|
||||
guard client() != nil else { return }
|
||||
defer { keepIMKCandidatesShownUp() }
|
||||
updateVerticalTypingStatus()
|
||||
isVerticalCandidateWindow = (isVerticalTyping || !PrefMgr.shared.useHorizontalCandidateList)
|
||||
|
||||
|
@ -87,19 +87,10 @@ public extension SessionCtl {
|
|||
let isInputtingWithCandidates = state.type == .ofInputting && state.isCandidateContainer
|
||||
/// 先取消既有的選字窗的內容顯示。否則可能會重複生成選字窗的 NSWindow()。
|
||||
candidateUI?.visible = false
|
||||
if #available(macOS 10.13, *) {
|
||||
/// 然後再重新初期化。
|
||||
let useIMK = PrefMgr.shared.useIMKCandidateWindow
|
||||
candidateUI = useIMK ? CtlCandidateIMK(candidateLayout) : CtlCandidateTDK(candidateLayout)
|
||||
} else {
|
||||
candidateUI = CtlCandidateTDK(candidateLayout)
|
||||
}
|
||||
candidateUI = CtlCandidateTDK(candidateLayout)
|
||||
var singleLine = isVerticalTyping || PrefMgr.shared.candidateWindowShowOnlyOneLine
|
||||
singleLine = singleLine || isInputtingWithCandidates
|
||||
(candidateUI as? CtlCandidateTDK)?.maxLinesPerPage = singleLine ? 1 : 4
|
||||
if isInputtingWithCandidates, candidateLayout == .horizontal {
|
||||
(candidateUI as? CtlCandidateIMK)?.setPanelType(kIMKSingleRowSteppingCandidatePanel)
|
||||
}
|
||||
|
||||
candidateUI?.candidateFont = Self.candidateFont(
|
||||
name: PrefMgr.shared.candidateTextFontName, size: PrefMgr.shared.candidateListTextSize
|
||||
|
@ -167,10 +158,7 @@ public extension SessionCtl {
|
|||
///
|
||||
/// Instructions for Apple Developer relations to reveal this bug:
|
||||
///
|
||||
/// 0) Disable IMK Candidate window in the vChewing preferences (disabled by default).
|
||||
/// **REASON**: IMKCandidates has bug that it does not respect font attributes attached to the
|
||||
/// results generated from `candidiates() -> [Any]!` function. IMKCandidates is plagued with
|
||||
/// bugs which are not dealt in the recent decade, regardless Radar complaints from input method developers.
|
||||
/// 0) Please go to Step 1. Reason: IMK Candidate Window support has been removed in this repo.
|
||||
/// 1) Make sure the usage of ".languageIdentifier" is disabled in the Dev Zone of the vChewing SSPreferences.
|
||||
/// 2) Run "make update" in the project folder to download the latest git-submodule of dictionary file.
|
||||
/// 3) Compile the target "vChewingInstaller", run it. It will install the input method into
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import InputMethodKit
|
||||
import PopupCompositionBuffer
|
||||
import Shared
|
||||
|
||||
|
|
|
@ -195,7 +195,6 @@ public extension SessionCtl {
|
|||
/// 雖然所有在這個函式內影響到的變數都改為動態變數了(不會出現跨副本波及的情況),
|
||||
/// 但 IMKCandidates 是有內部共用副本的、會被波及。所以在這裡糾偏一下。
|
||||
internal func keepIMKCandidatesShownUp() {
|
||||
guard PrefMgr.shared.useIMKCandidateWindow, isBootingUp else { return }
|
||||
guard let imkC = candidateUI as? CtlCandidateIMK else { return }
|
||||
var i: Double = 0
|
||||
while i < 1 {
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import LangModelAssembly
|
||||
import NotifierUI
|
||||
import SSPreferences
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import Shared
|
||||
|
||||
extension CandidateNode {
|
||||
|
|
|
@ -1,218 +0,0 @@
|
|||
// (c) 2021 and onwards The vChewing Project (MIT-NTL License).
|
||||
// ====================
|
||||
// This code is released under the MIT license (SPDX-License-Identifier: MIT)
|
||||
// ... with NTL restriction stating that:
|
||||
// No trademark license is granted to use the trade names, trademarks, service
|
||||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import CandidateWindow
|
||||
import Shared
|
||||
|
||||
/// 威注音自用的 IMKCandidates 型別。因為有用到 bridging header,所以無法弄成 Swift Package。
|
||||
public class CtlCandidateIMK: IMKCandidates, CtlCandidateProtocol {
|
||||
public var tooltip: String = ""
|
||||
public var reverseLookupResult: [String] = []
|
||||
public var locale: String = ""
|
||||
public var useLangIdentifier: Bool = false
|
||||
public var currentLayout: NSUserInterfaceLayoutOrientation = .horizontal
|
||||
public static let defaultIMKSelectionKey: [UInt16: String] = [
|
||||
18: "1", 19: "2", 20: "3", 21: "4", 23: "5", 22: "6", 26: "7", 28: "8", 25: "9",
|
||||
]
|
||||
public var delegate: CtlCandidateDelegate? {
|
||||
didSet {
|
||||
reloadData()
|
||||
}
|
||||
}
|
||||
|
||||
public var visible: Bool {
|
||||
get { isVisible() }
|
||||
set { newValue ? show() : hide() }
|
||||
}
|
||||
|
||||
public var windowTopLeftPoint: NSPoint {
|
||||
get {
|
||||
let frameRect = candidateFrame()
|
||||
return NSPoint(x: frameRect.minX, y: frameRect.maxY)
|
||||
}
|
||||
set {
|
||||
DispatchQueue.main.async {
|
||||
self.set(windowTopLeftPoint: newValue, bottomOutOfScreenAdjustmentHeight: 0, useGCD: true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public var candidateFont = NSFont.systemFont(ofSize: 16) {
|
||||
didSet {
|
||||
if #available(macOS 10.14, *) {
|
||||
protectedCall { self.setFontSize(self.candidateFont.pointSize) }
|
||||
}
|
||||
var attributes = attributes()
|
||||
// FB11300759: Set "NSAttributedString.Key.font" doesn't work.
|
||||
attributes?[NSAttributedString.Key.font] = candidateFont
|
||||
if #available(macOS 12.0, *) {
|
||||
if useLangIdentifier {
|
||||
attributes?[NSAttributedString.Key.languageIdentifier] = locale as AnyObject
|
||||
}
|
||||
}
|
||||
setAttributes(attributes)
|
||||
update()
|
||||
}
|
||||
}
|
||||
|
||||
public func specifyLayout(_ layout: NSUserInterfaceLayoutOrientation = .horizontal) {
|
||||
currentLayout = layout
|
||||
switch currentLayout {
|
||||
case .horizontal:
|
||||
if #available(macOS 10.14, *) {
|
||||
setPanelType(kIMKScrollingGridCandidatePanel)
|
||||
} else {
|
||||
// macOS 10.13 High Sierra 的矩陣選字窗不支援選字鍵,所以只能弄成橫版單行。
|
||||
setPanelType(kIMKSingleRowSteppingCandidatePanel)
|
||||
}
|
||||
case .vertical:
|
||||
setPanelType(kIMKSingleColumnScrollingCandidatePanel)
|
||||
@unknown default:
|
||||
setPanelType(kIMKSingleRowSteppingCandidatePanel)
|
||||
}
|
||||
}
|
||||
|
||||
public func updateDisplay() { update() }
|
||||
|
||||
public required init(_ layout: NSUserInterfaceLayoutOrientation = .horizontal) {
|
||||
super.init(server: theServer, panelType: kIMKScrollingGridCandidatePanel)
|
||||
specifyLayout(layout)
|
||||
// 設為 true 表示先交給 SessionCtl 處理
|
||||
setAttributes([IMKCandidatesSendServerKeyEventFirst: true])
|
||||
visible = false
|
||||
// guard let currentTISInputSource = currentTISInputSource else { return } // 下面兩句都沒用,所以註釋掉。
|
||||
// setSelectionKeys([18, 19, 20, 21, 23, 22, 26, 28, 25]) // 這句是壞的,用了反而沒有選字鍵。
|
||||
// setSelectionKeysKeylayout(currentTISInputSource) // 這句也是壞的,沒有卵用。
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder _: NSCoder) {
|
||||
fatalError("init(coder:) has not been implemented")
|
||||
}
|
||||
|
||||
private func protectedCall(_ task: @escaping () -> Void) {
|
||||
guard #available(macOS 10.14, *) else { return }
|
||||
let key = UserDef.kFailureFlagForIMKCandidates.rawValue
|
||||
UserDefaults.standard.set(true, forKey: key)
|
||||
task()
|
||||
UserDefaults.standard.set(false, forKey: key)
|
||||
}
|
||||
|
||||
public func reloadData() {
|
||||
// guard let delegate = delegate else { return } // 下文無效,所以這句沒用。
|
||||
// 既然下述函式無效,那中間這段沒用的也都砍了。
|
||||
// setCandidateData(candidates) // 該函式無效。
|
||||
highlightedIndex = 0
|
||||
update()
|
||||
}
|
||||
|
||||
// 該函式會影響 IMK 選字窗。
|
||||
@discardableResult public func showNextPage() -> Bool {
|
||||
scrollPageDown(self)
|
||||
return true
|
||||
}
|
||||
|
||||
// 該函式會影響 IMK 選字窗。
|
||||
@discardableResult public func showPreviousPage() -> Bool {
|
||||
scrollPageUp(self)
|
||||
return true
|
||||
}
|
||||
|
||||
// 該函式會影響 IMK 選字窗。
|
||||
@discardableResult public func highlightNextCandidate() -> Bool {
|
||||
do { currentLayout == .vertical ? moveDown(self) : moveRight(self) }
|
||||
return true
|
||||
}
|
||||
|
||||
// 該函式會影響 IMK 選字窗。
|
||||
@discardableResult public func highlightPreviousCandidate() -> Bool {
|
||||
do { currentLayout == .vertical ? moveUp(self) : moveLeft(self) }
|
||||
return true
|
||||
}
|
||||
|
||||
// 該函式會影響 IMK 選字窗。
|
||||
public func showNextLine() -> Bool {
|
||||
do { currentLayout == .vertical ? moveRight(self) : moveDown(self) }
|
||||
return true
|
||||
}
|
||||
|
||||
// 該函式會影響 IMK 選字窗。
|
||||
public func showPreviousLine() -> Bool {
|
||||
do { currentLayout == .vertical ? moveLeft(self) : moveUp(self) }
|
||||
return true
|
||||
}
|
||||
|
||||
// IMK 選字窗目前無法實作該函式。威注音 IMK 選字窗目前也不需要使用該函式。
|
||||
public func candidateIndexAtKeyLabelIndex(_: Int) -> Int? { 0 }
|
||||
|
||||
public var highlightedIndex: Int {
|
||||
get {
|
||||
let returned = selectedCandidate()
|
||||
guard let strCurrentCandidate = selectedCandidateString() else { return returned }
|
||||
return delegate?.deductCandidateIndex(from: strCurrentCandidate.string) ?? returned
|
||||
}
|
||||
set { selectCandidate(withIdentifier: newValue) }
|
||||
}
|
||||
|
||||
@discardableResult public func process(event theEvent: NSEvent) -> Bool {
|
||||
guard #available(macOS 10.14, *) else {
|
||||
interpretKeyEvents([theEvent])
|
||||
return true
|
||||
}
|
||||
var result = true
|
||||
protectedCall { result = self.handleKeyboardEvent(theEvent) }
|
||||
return result
|
||||
}
|
||||
|
||||
override public func update() {
|
||||
super.update()
|
||||
guard #available(macOS 10.14, *) else { return }
|
||||
// Spotlight 視窗自 macOS 10.14 開始會擋住 IMK 選字窗,所以需要特殊處理。
|
||||
let level = UInt64(CGShieldingWindowLevel() + 2)
|
||||
protectedCall { self.setWindowLevel(level) }
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Generate TISInputSource Object
|
||||
|
||||
/// 該參數只用來獲取 "com.apple.keylayout.ABC" 對應的 TISInputSource,
|
||||
/// 所以少寫了很多在這裡用不到的東西。
|
||||
/// 想參考完整版的話,請洽該專案內的 IMKHelper 元件。
|
||||
var currentTISInputSource: TISInputSource? {
|
||||
var result: TISInputSource?
|
||||
let list = TISCreateInputSourceList(nil, true).takeRetainedValue() as! [TISInputSource]
|
||||
let matchedTISString = "com.apple.keylayout.ABC"
|
||||
for source in list {
|
||||
guard let ptrCat = TISGetInputSourceProperty(source, kTISPropertyInputSourceCategory) else { continue }
|
||||
let category = Unmanaged<CFString>.fromOpaque(ptrCat).takeUnretainedValue()
|
||||
guard category == kTISCategoryKeyboardInputSource else { continue }
|
||||
guard let ptrSourceID = TISGetInputSourceProperty(source, kTISPropertyInputSourceID) else { continue }
|
||||
let sourceID = String(Unmanaged<CFString>.fromOpaque(ptrSourceID).takeUnretainedValue())
|
||||
if sourceID == matchedTISString { result = source }
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// MARK: - Translating NumPad KeyCodes to Default IMK Candidate Selection KeyCodes.
|
||||
|
||||
public extension CtlCandidateIMK {
|
||||
static func giveSelectionKeySansModifiers(from event: NSEvent) -> NSEvent? {
|
||||
let mapDefaultIMKSelectionKey: [UInt16: String] = [
|
||||
18: "1", 19: "2", 20: "3", 21: "4", 23: "5", 22: "6", 26: "7", 28: "8", 25: "9",
|
||||
]
|
||||
guard let newChar = mapDefaultIMKSelectionKey[event.keyCode] else { return nil }
|
||||
return event.reinitiate(modifierFlags: [], characters: newChar)
|
||||
}
|
||||
|
||||
static func replaceNumPadKeyCodes(target event: NSEvent) -> NSEvent? {
|
||||
let mapNumPadKeyCodeTranslation: [UInt16: UInt16] = [
|
||||
83: 18, 84: 19, 85: 20, 86: 21, 87: 23, 88: 22, 89: 26, 91: 28, 92: 25,
|
||||
]
|
||||
return event.reinitiate(keyCode: mapNumPadKeyCodeTranslation[event.keyCode] ?? event.keyCode)
|
||||
}
|
||||
}
|
|
@ -40,9 +40,6 @@ struct VwrPrefPaneCandidates: View {
|
|||
@Backport.AppStorage(wrappedValue: true, UserDef.kConsolidateContextOnCandidateSelection.rawValue)
|
||||
private var consolidateContextOnCandidateSelection: Bool
|
||||
|
||||
@Backport.AppStorage(wrappedValue: false, UserDef.kUseIMKCandidateWindow.rawValue)
|
||||
private var useIMKCandidateWindow: Bool
|
||||
|
||||
@Backport.AppStorage(wrappedValue: false, UserDef.kEnableSwiftUIForTDKCandidates.rawValue)
|
||||
private var enableSwiftUIForTDKCandidates: Bool
|
||||
|
||||
|
@ -76,7 +73,6 @@ struct VwrPrefPaneCandidates: View {
|
|||
isOn: $candidateWindowShowOnlyOneLine
|
||||
)
|
||||
.controlSize(.small)
|
||||
.disabled(useIMKCandidateWindow)
|
||||
Text(
|
||||
"This only works with Tadokoro candidate window.".localized
|
||||
+ CtlPrefUIShared.sentenceSeparator
|
||||
|
@ -137,7 +133,6 @@ struct VwrPrefPaneCandidates: View {
|
|||
LocalizedStringKey("Show available reverse-lookup results in candidate window"),
|
||||
isOn: $showReverseLookupInCandidateUI
|
||||
)
|
||||
.disabled(useIMKCandidateWindow)
|
||||
Text(
|
||||
"This only works with Tadokoro candidate window.".localized
|
||||
+ CtlPrefUIShared.sentenceSeparator
|
||||
|
@ -164,26 +159,15 @@ struct VwrPrefPaneCandidates: View {
|
|||
.preferenceDescription(maxWidth: CtlPrefUIShared.maxDescriptionWidth)
|
||||
}
|
||||
SSPreferences.Settings.Section(title: "Experimental:".localized) {
|
||||
Toggle(
|
||||
LocalizedStringKey("Use IMK Candidate Window instead of Tadokoro"),
|
||||
isOn: $useIMKCandidateWindow
|
||||
)
|
||||
Text(
|
||||
"IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts.".localized
|
||||
)
|
||||
.preferenceDescription(maxWidth: CtlPrefUIShared.maxDescriptionWidth)
|
||||
Toggle(
|
||||
LocalizedStringKey("Enable mouse wheel support for Tadokoro Candidate Window"),
|
||||
isOn: $enableMouseScrollingForTDKCandidatesCocoa
|
||||
)
|
||||
.disabled(
|
||||
useIMKCandidateWindow || enableSwiftUIForTDKCandidates
|
||||
)
|
||||
.disabled(enableSwiftUIForTDKCandidates)
|
||||
Toggle(
|
||||
LocalizedStringKey("Enable experimental Swift UI typesetting method"),
|
||||
isOn: $enableSwiftUIForTDKCandidates
|
||||
)
|
||||
.disabled(useIMKCandidateWindow)
|
||||
Text(
|
||||
"By checking this, Tadokoro Candidate Window will use SwiftUI. SwiftUI was being used in vChewing 3.3.8 and before. However, SwiftUI has unacceptable responsiveness & latency & efficiency problems in rendering the candidate panel UI. That's why a refactored version has been introduced since vChewing 3.3.9 using Cocoa, providing an optimized user experience with blasing-fast operation responsiveness, plus experimental mouse-wheel support.".localized
|
||||
)
|
||||
|
@ -211,9 +195,6 @@ private struct VwrPrefPaneCandidates_SelectionKeys: View {
|
|||
@Backport.AppStorage(wrappedValue: PrefMgr.kDefaultCandidateKeys, UserDef.kCandidateKeys.rawValue)
|
||||
private var candidateKeys: String
|
||||
|
||||
@Backport.AppStorage(wrappedValue: false, UserDef.kUseIMKCandidateWindow.rawValue)
|
||||
private var useIMKCandidateWindow: Bool
|
||||
|
||||
// MARK: - Main View
|
||||
|
||||
var body: some View {
|
||||
|
@ -234,23 +215,13 @@ private struct VwrPrefPaneCandidates_SelectionKeys: View {
|
|||
}
|
||||
}
|
||||
}
|
||||
).frame(width: 180).disabled(useIMKCandidateWindow)
|
||||
if useIMKCandidateWindow {
|
||||
Text(
|
||||
LocalizedStringKey(
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759."
|
||||
)
|
||||
)
|
||||
).frame(width: 180)
|
||||
Text(
|
||||
"Choose or hit Enter to confim your prefered keys for selecting candidates.".localized
|
||||
+ "\n"
|
||||
+ "This will also affect the row / column capacity of the candidate window.".localized
|
||||
)
|
||||
|
||||
.preferenceDescription(maxWidth: CtlPrefUIShared.maxDescriptionWidth)
|
||||
} else {
|
||||
Text(
|
||||
"Choose or hit Enter to confim your prefered keys for selecting candidates.".localized
|
||||
+ "\n"
|
||||
+ "This will also affect the row / column capacity of the candidate window.".localized
|
||||
)
|
||||
|
||||
.preferenceDescription(maxWidth: CtlPrefUIShared.maxDescriptionWidth)
|
||||
}
|
||||
.preferenceDescription(maxWidth: CtlPrefUIShared.maxDescriptionWidth)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import BookmarkManager
|
||||
import IMKUtils
|
||||
import Shared
|
||||
|
@ -23,7 +24,6 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
|||
@IBOutlet var selectionKeyComboBox: NSComboBox!
|
||||
@IBOutlet var chkTrad2KangXi: NSButton!
|
||||
@IBOutlet var chkTrad2JISShinjitai: NSButton!
|
||||
@IBOutlet var tglControlDevZoneIMKCandidate: NSButton!
|
||||
@IBOutlet var cmbCandidateFontSize: NSPopUpButton!
|
||||
@IBOutlet var chkFartSuppressor: NSButton!
|
||||
|
||||
|
@ -96,12 +96,6 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
|||
|
||||
cmbCandidateFontSize.isEnabled = true
|
||||
|
||||
if #unavailable(macOS 10.14) {
|
||||
if PrefMgr.shared.useIMKCandidateWindow {
|
||||
cmbCandidateFontSize.isEnabled = false
|
||||
}
|
||||
}
|
||||
|
||||
var preferencesTitleName = NSLocalizedString("vChewing Preferences…", comment: "")
|
||||
preferencesTitleName.removeLast()
|
||||
|
||||
|
@ -163,9 +157,6 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
|||
}
|
||||
|
||||
selectionKeyComboBox.stringValue = candidateSelectionKeys
|
||||
if PrefMgr.shared.useIMKCandidateWindow {
|
||||
selectionKeyComboBox.isEnabled = false // 無法與 IMKCandidates 協作,故禁用。
|
||||
}
|
||||
|
||||
initPhraseEditor()
|
||||
}
|
||||
|
@ -271,11 +262,6 @@ class CtlPrefWindow: NSWindowController, NSWindowDelegate {
|
|||
}
|
||||
}
|
||||
|
||||
@IBAction func updateIMKCandidateEnableStatusAction(_: Any) {
|
||||
// NSLog("vChewing App self-terminated due to enabling / disabling IMK candidate window.")
|
||||
// NSApp.terminate(nil)
|
||||
}
|
||||
|
||||
@IBAction func clickedWhetherIMEShouldNotFartToggleAction(_: Any) {
|
||||
let content = String(
|
||||
format: NSLocalizedString(
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
// marks, or product names of Contributor, except as required to fulfill notice
|
||||
// requirements defined in MIT License.
|
||||
|
||||
import AppKit
|
||||
import Foundation
|
||||
import LangModelAssembly
|
||||
import PhraseEditorUI
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
"Switch to %@ Input Mode" = "Switch to %@ Input Mode";
|
||||
"Target Input Mode Activation Required" = "Target Input Mode Activation Required";
|
||||
"You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to." = "You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to.";
|
||||
"IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments." = "IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments.";
|
||||
"Do you want to enable the popup composition buffer for this client?" = "Do you want to enable the popup composition buffer for this client?";
|
||||
"Some client apps may have different compatibility issues in IMKTextInput implementation." = "Some client apps may have different compatibility issues in IMKTextInput implementation.";
|
||||
"Yes" = "Yes";
|
||||
|
@ -160,7 +159,6 @@
|
|||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature.";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759.";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "Also toggle alphanumerical mode with Left-Shift";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "Completely disable using Shift key to toggle alphanumerical mode";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.";
|
||||
|
@ -194,7 +192,6 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)Space:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." ;
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal.";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ This may hinder the walking algorithm from giving appropriate results.";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ This will reboot the vChewing IME.";
|
||||
|
@ -288,7 +285,6 @@
|
|||
"IBM" = "IBM";
|
||||
"If disabled, this will insert space instead." = "If disabled, this will insert space instead.";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes.";
|
||||
"IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts." = "IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts.";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||
"Intonation Key:" = "Intonation Key:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable.";
|
||||
|
@ -354,7 +350,6 @@
|
|||
"UI Language:" = "UI Language:";
|
||||
"Universal Pinyin with Numeral Intonation" = "Universal Pinyin with Numeral Intonation";
|
||||
"Use ESC key to clear the entire input buffer" = "Use ESC key to clear the entire input buffer";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "Use IMK Candidate Window instead of Tadokoro";
|
||||
"Use only one row / column in candidate window." = "Use only one row / column in candidate window.";
|
||||
"Use Space to confirm highlighted candidate in Per-Char Select Mode" = "Use Space to confirm highlighted candidate in Per-Char Select Mode";
|
||||
"Vertical" = "Vertical";
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
"Switch to %@ Input Mode" = "Switch to %@ Input Mode";
|
||||
"Target Input Mode Activation Required" = "Target Input Mode Activation Required";
|
||||
"You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to." = "You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to.";
|
||||
"IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments." = "IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments.";
|
||||
"Do you want to enable the popup composition buffer for this client?" = "Do you want to enable the popup composition buffer for this client?";
|
||||
"Some client apps may have different compatibility issues in IMKTextInput implementation." = "Some client apps may have different compatibility issues in IMKTextInput implementation.";
|
||||
"Yes" = "Yes";
|
||||
|
@ -160,7 +159,6 @@
|
|||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature.";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759.";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "Also toggle alphanumerical mode with Left-Shift";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "Completely disable using Shift key to toggle alphanumerical mode";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu.";
|
||||
|
@ -194,7 +192,6 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)Space:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." ;
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal.";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ This may hinder the walking algorithm from giving appropriate results.";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ This will reboot the vChewing IME.";
|
||||
|
@ -288,7 +285,6 @@
|
|||
"IBM" = "IBM";
|
||||
"If disabled, this will insert space instead." = "If disabled, this will insert space instead.";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes.";
|
||||
"IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts." = "IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts.";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "in front of the phrase (like macOS built-in Zhuyin IME)";
|
||||
"Intonation Key:" = "Intonation Key:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable.";
|
||||
|
@ -354,7 +350,6 @@
|
|||
"UI Language:" = "UI Language:";
|
||||
"Universal Pinyin with Numeral Intonation" = "Universal Pinyin with Numeral Intonation";
|
||||
"Use ESC key to clear the entire input buffer" = "Use ESC key to clear the entire input buffer";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "Use IMK Candidate Window instead of Tadokoro";
|
||||
"Use only one row / column in candidate window." = "Use only one row / column in candidate window.";
|
||||
"Use Space to confirm highlighted candidate in Per-Char Select Mode" = "Use Space to confirm highlighted candidate in Per-Char Select Mode";
|
||||
"Vertical" = "Vertical";
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<h1><strong>Keyboard Shortcut CheatSheet(macOS)</strong></h1>
|
||||
<div>This article describes keyboard shortcuts used as of vChewing 3.4.7 release & vChewing-Aqua 0.5.19 release.</div>
|
||||
<div>This article describes keyboard shortcuts used as of vChewing 3.5.4 release & vChewing-Aqua 0.5.26 release.</div>
|
||||
<div>Please use mouse wheel to scroll this page.</div>
|
||||
<div>This article uses certain macOS keyboard symbols to simplify the description. Note:</div>
|
||||
<ol>
|
||||
|
@ -812,108 +812,6 @@
|
|||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>The following shortcuts are usable when <strong>the IMK Candidate Window</strong> is shown up:</div>
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>Shortcuts</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>Functions</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>Notes</strong></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⏎</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Confirm the highlighted candidate.</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Can be disabled (in vChewing preferences) for associated phrase candidates.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⌃⌘]</div>
|
||||
<div>⌃⌘[</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ Highlight the next candidate.</div>
|
||||
<div>‧ Highlight the previous candidate.</div>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇥</div>
|
||||
<div>⇧⇥</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ Highlight the next candidate.</div>
|
||||
<div>‧ Highlight the previous candidate.</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Can be redesignated in vChewing Preferences for revolving pages.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>␣</div>
|
||||
<div>⇧␣</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Revolve pages or candidates clockwise, according to its settings in vChewing SSPreferences.</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>No exceptions happen even if there's only one page.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇞</div>
|
||||
<div>⇟</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Flip pages.</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>No exceptions happen even if there's only one page.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⎋</div>
|
||||
<div>⌫</div>
|
||||
<div>⌦</div>
|
||||
<div>⇧→</div>
|
||||
<div>⇧←</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Back to the previous symbol menu level. If not available, closes the candidate window.</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>It always closes the candidate window if is not in the symbol menu state. ESC key may close Spotlight window.</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>Hold ⇧</div>
|
||||
<div>and type Candidate Keys</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>Choose designated associated phrase candidate.</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>The "⇧" symbol indicates that the current candidate window is for associated phrases.</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>$ EOF.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
"Switch to %@ Input Mode" = "%@入力モードに切り替え";
|
||||
"Target Input Mode Activation Required" = "関連の入力ソースの追加が必要";
|
||||
"You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to." = "ご希望の入力モードのご利用の前に、それに対応するの入力ソースの追加が必要である。これからはシステム環境設定の該当ページへ案内します。";
|
||||
"IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments." = "IMK 文字候補ウィンドウの利用できるようのために、システム内部の必要のある API の強引的アクセスが必要ですが、前回のその利用で威注音入力アプリが崩れました。故に今は IMK 文字候補ウィンドウを OFF にしました。IMK 文字候補ウィンドウはあくまで実験的な機能として提供していたため、業務用にはお勧めできません。";
|
||||
"Do you want to enable the popup composition buffer for this client?" = "この客体アプリに「吹き出し入力緩衝列ウィンドウ」を起用しますか?";
|
||||
"Some client apps may have different compatibility issues in IMKTextInput implementation." = "それぞれの客体アプリには、それぞれの IMKTextInput 不具合はあるかもしれません。";
|
||||
"Yes" = "うむ";
|
||||
|
@ -162,7 +161,6 @@
|
|||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "システムの支障の話ですが、macOS 10.9 (恐らく 10.10 - 10.12 も) には下記のバグはございます:入力アプリは自分のファイル操作パネルをアクセススロと、その入力アプリだけでなく、あれから入力アプリの触り合おうとした全ての客体アプリも「無限のカタマリ」その無反応な状態になってしまいます。その場合、SSH でこのパソコンで「killall vChewing」そのターミナルコマンドを実行すれば、及ぼされた客体アプリの反応は戻ります。そのため、開発側は上記のシステムバージョンに応じて、自身のファイルパネルアクセスを全て禁止としました。";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ この機能は IMK 候補陳列ウィンドウにサポートされておりません。\nApple Developer Relations に按鍵番号 #FB11300759 を教えながらクレームしてください。";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "左側の Shift キーでも英数入力モードの切り替え";
|
||||
"Candidate Layout:" = "入力候補陳列の仕様";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "Shift キーの英数入力モードの切り替え機能を徹底的に禁ず";
|
||||
|
@ -197,7 +195,6 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)Space:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ この機能は IMK 候補陳列ウィンドウにサポートされておりません。\nApple Developer Relations に案件番号 #FB11300759 を持ってクレームを。";
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 該当の組版用フォントには縦書き(引用符・括弧)変換機能が備えていない限り、この機能を使う甲斐がある。一旦使うと、入力した全ての引用符・括弧は永遠的に縦書きの様式になる。例え入力を受けているアプリ(例えばワープロソフとなど)の書写方向は横書きと変えたとしても、これらの入力済みの引用符・括弧は全て縦書きの見た目であり、削除してから入力し直す必要になる。";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ ウォーキング算法に差し支えてしまい、正しくない結果が出る恐れがある。";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ これで威注音入力アプリを再起動。";
|
||||
|
@ -291,7 +288,6 @@
|
|||
"IBM" = "IBM 配列";
|
||||
"If disabled, this will insert space instead." = "未チェックの場合、スペースを挿入。";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "未チェックの場合、ESC キーはまず未完成の音読/筆画を消す。\n未完成の音読/筆画がない場合、全緩衝列をそのまま送り出す。";
|
||||
"IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts." = "IMK 候補陳列ウィンドウ(IMKCandidates)は、Apple の未公開のAPIを「bridging-header」という強引的な手段で引き出して利用した機能である。現時点で macOS 10.13 High Sierra から macOS 14 Sonoma まで利用可能であるが、その後の新しい macOS との互換性の話はまだ早い。";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "単語の前で // macOS 内蔵注音入力のやり方";
|
||||
"Intonation Key:" = "音調キー:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "この機能の利用する NSEvent は、macOS 内蔵の入力アプリ共用モジュール「InputMethodKit」から提供した NSEvent のみであり、その NSEvent 文脈関係で「Shift キーは1回押したかどうか」と判断することはできる。この事実に疑いを持つ者は、本アプリのソースコードを審査するか、あるいは本アプリを逆向工程(分解工学, いわゆる「Reverse-Engineering」)するがよい。";
|
||||
|
@ -357,7 +353,6 @@
|
|||
"UI Language:" = "表示用言語:";
|
||||
"Universal Pinyin with Numeral Intonation" = "汎用弁音 (ローマ字+数字音調)";
|
||||
"Use ESC key to clear the entire input buffer" = "ESC キーで入力緩衝列を消す";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "IMK 候補陳列ウィンドウを起用";
|
||||
"Use only one row / column in candidate window." = "ただ1つ行・列で文字候補を陳列。";
|
||||
"Use Space to confirm highlighted candidate in Per-Char Select Mode" = "全候補入力の場合、ハイライト候補を Space キーで確認";
|
||||
"Vertical" = "縦型陳列";
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<h1><strong>キーボードショートカット取り扱い説明書(macOS)</strong></h1>
|
||||
<div>この文章は、威注音入力アプリ v3.4.7 アップデート(とその Aqua 紀念版 v0.5.19)のキーボードショートカットの取り扱う方法を説明します。</div>
|
||||
<div>この文章は、威注音入力アプリ v3.5.4 アップデート(とその Aqua 紀念版 v0.5.26)のキーボードショートカットの取り扱う方法を説明します。</div>
|
||||
<div>マウスホイールでこの文章をご覧ください。</div>
|
||||
<div>この文章は、簡単に説明できるために、いくつか macOS 専用のキー符号を用います。そして付記もございます:</div>
|
||||
<ol>
|
||||
|
@ -810,108 +810,6 @@
|
|||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>もし、<strong>IMKCandidates</strong> が文字候補ウィンドウと設定されたら、文字候補ウィンドウ操作用のショートカット:</div>
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>ショートカット</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>機能</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>補記</strong></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⏎</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>現在選んだ文字候補を確認する。</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>連想語彙をこのキーで確認したくない場合、入力機能設定で無効と設定できる。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⌃⌘]</div>
|
||||
<div>⌃⌘[</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ 次の文字候補を選ぶ。</div>
|
||||
<div>‧ 直前の文字候補を選ぶ。</div>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>⇥</strong></div>
|
||||
<div>⇧<strong>⇥</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>‧</strong> 次の文字候補を選ぶ。</div>
|
||||
<div><strong>‧</strong> 直前の文字候補を選ぶ。</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>選択対象はページにしたい場合、入力機能設定で。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>␣</div>
|
||||
<div>⇧␣</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>次の文字候補を選ぶか、或いは次のページを選ぶか、入力設定次第。</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>例外処理なし。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>⇞</strong></div>
|
||||
<div><strong>⇟</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div>ページ操作。</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>例外処理なし。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>⎋</strong></div>
|
||||
<div><strong>⌫</strong></div>
|
||||
<div><strong>⌦</strong></div>
|
||||
<div>⇧→</div>
|
||||
<div>⇧←</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>直前の符号メニューに戻る。直前の符号メニューのない場合、文字候補ウィンドウを閉じる。</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>符号入力状態以外の場合、常に文字候補ウィンドウを閉じる。ESC キーは Spotlight を閉じてしまう場合がある。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇧を押しながら</div>
|
||||
<div>言選り用キーを</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>所定の連想文字候補を確認する。</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>連想文字候補ウィンドウには「⇧」記号がある。</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>$ EOF.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
"Switch to %@ Input Mode" = "切换至%@输入模式";
|
||||
"Target Input Mode Activation Required" = "得启用对应的「輸入法」";
|
||||
"You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to." = "若要使用您想切换到的输入模式,您必须得先在系统偏好设定内启用对应的「輸入法/输入源」。接下来将会弹出对应的系统偏好设定画面。";
|
||||
"IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments." = "IMK 选字窗在最近一次存取被强制曝露的必需 API 时令输入法崩溃,所以被自动停用。请勿在生产力场合使用该实验型功能。";
|
||||
"Do you want to enable the popup composition buffer for this client?" = "您要對該客體啟用浮動組字窗嗎?";
|
||||
"Some client apps may have different compatibility issues in IMKTextInput implementation." = "有些客體應用可能會有不同的 IMKTextInput 實作相容問題。";
|
||||
"Yes" = "是";
|
||||
|
@ -160,7 +159,6 @@
|
|||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "已知 macOS 10.9 有此故障:当一个输入法尝试存取自身的档案操作视窗的时候,不只输入法,而且连其接下来所尝试挂接的所有的客体应用,都会陷入无限僵死状态,只能用 SSH 连到这台电脑上执行「killall vChewing」才可以解除僵死。因为我们怀疑 macOS 10.10 至 10.12 也在受影响的范围内,所以威注音对这些版本的系统禁用了自身的档案操作视窗存取。";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/带尾部斜杠的资料夹路径/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/不带尾部斜杠的档案路径\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ 该功能因 IMK 选字窗自身缺陷而无法实作。\n请携 Radar 编号 #FB11300759 找 Apple Developer Relations 投诉。";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "也允许使用左侧的 Shift 键盘切换英数输入模式";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "彻底禁止使用 Shift 键切换英数模式";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "请利用滑鼠滚轮检视该页面。也请洽输入法选单内的热键指南。";
|
||||
|
@ -194,7 +192,6 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)空格键:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ 该功能因 IMK 选字窗自身缺陷而无法实作。\n请携 Radar 编号 #FB11300759 找 Apple Developer Relations 投诉。";
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 该功能当且仅当目前的排版字型不支援纵排标点动态显示转义的情况下才有用。一旦使用了,所有敲出去的标点都会被永久转换为静态纵排标点:哪怕当前编辑器的排版模式已经改成横排,这些已经输入的标点也都还是纵排标点字元。";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ 这可能会妨碍爬轨函式,使其无法给出正确的结果。";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ 这将重启威注音输入法。";
|
||||
|
@ -288,7 +285,6 @@
|
|||
"IBM" = "IBM 排列";
|
||||
"If disabled, this will insert space instead." = "取消勾选的话,该按键会插入空格。";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "若取消勾选,则 ESC 键会先尝试清除未组成的读音/字根;\n如果没有未组成的读音/字根的话,则会递交当前组字区的内容。";
|
||||
"IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts." = "IMK 选字窗依赖于 Apple 的私有 API,而且是借由桥接档案头强制曝露的方法使用的。目前,该功能仅在 macOS 10.13 High Sierra 至 macOS 14 Sonoma 系统内有测试过可用性。至于在未来的 macOS 发行版当中是否可用,则需要另行测试、才能下结论。";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "将游标置于词语前方 // macOS 内建注音风格";
|
||||
"Intonation Key:" = "声调键:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "该功能只需要对借由 macOS 内建的输入法框架传来的 NSEvent 做上下文分析,自然没有「向使用者寻求系统全局键盘事件监听权限」之必要。您可自行审视敝输入法的原始程式码仓库、或对敝输入法逆向工程,以自行证实此处所言之真假。";
|
||||
|
@ -354,7 +350,6 @@
|
|||
"UI Language:" = "介面语言:";
|
||||
"Universal Pinyin with Numeral Intonation" = "通用拼音+数字标调";
|
||||
"Use ESC key to clear the entire input buffer" = "敲 ESC 键以清空整个组字缓冲区";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "启用与 macOS 内建输入法相同的 IMK 选字窗";
|
||||
"Use only one row / column in candidate window." = "仅以单行/单列来陈列候选字。";
|
||||
"Use Space to confirm highlighted candidate in Per-Char Select Mode" = "在逐字选字模式当中使用空格键确认当前高亮候选字";
|
||||
"Vertical" = "纵向布局";
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<h1><strong>键盘热键使用手册(macOS)</strong></h1>
|
||||
<div>本文对应至少威注音 3.4.7 版(以及其 Aqua 纪念版 0.5.19)。请利用滑鼠滚轮检视该页面。</div>
|
||||
<div>本文对应至少威注音 3.5.4 版(以及其 Aqua 纪念版 0.5.26)。请利用滑鼠滚轮检视该页面。</div>
|
||||
<div>为了简化下文表述,这里介绍一下本文会用到的 macOS 的键盘符号。注:</div>
|
||||
<ol>
|
||||
<li>BackSpace 与 Delete 采 Windows 称谓。</li>
|
||||
|
@ -842,110 +842,6 @@
|
|||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>下述热键则为在开发道场内启用的 <strong>IMK 选字窗正在显示(也就是你正在选字)时</strong>可以用的功能:</div>
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>热键</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>功能</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>备注</strong></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⏎</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>确认选字窗内的当前候选字</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>联想词选字时,该功能可在偏好设定内启用或停用。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⌃⌘]</div>
|
||||
<div>⌃⌘[</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ 选字窗内选中下一个候选字(正向轮替)</div>
|
||||
<div>‧ 选字窗内选中上一个候选字(反向轮替)</div>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇥</div>
|
||||
<div>⇧⇥</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ 选字窗内选中下一个候选字(正向轮替)</div>
|
||||
<div>‧ 选字窗内选中上一个候选字(反向轮替)</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>可以在偏好设定内更改轮替对象为页。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>␣</div>
|
||||
<div>⇧␣</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>根据输入法偏好设定来决定</div>
|
||||
<div>是正向轮替页面还是候选字词</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>轮替对象种类不会改变。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇞</div>
|
||||
<div>⇟</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>翻页</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>候选字词只有一页时,轮替对象种类也不会改变。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⎋</div>
|
||||
<div>⌫</div>
|
||||
<div>⌦</div>
|
||||
<div>⇧→</div>
|
||||
<div>⇧←</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>回退到上一层符号选单、或关掉选字窗</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>不是符号选单状态的场合,一律关掉选字窗。</div>
|
||||
<div>其中,Esc 按键可能会导致 Spotlight 关闭。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>摁住 ⇧</div>
|
||||
<div>敲选字键</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>选择指定的联想候选词(会有^标记)</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>与奇摩输入法行为一致。</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>$ EOF.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
"Switch to %@ Input Mode" = "切換至%@輸入模式";
|
||||
"Target Input Mode Activation Required" = "得啟用對應的「輸入方式」";
|
||||
"You are proceeding to System Preferences to enable the Input Source which corresponds to the input mode you are going to switch to." = "若要使用您想切換到的輸入模式,您必須得先在系統偏好設定內啟用對應的「輸入方式」。接下來將會彈出對應的系統偏好設定畫面。";
|
||||
"IMK Candidate Window has been automatically disabled due to its recent crash with force-exposed necessary internal APIs. As an experimental feature, we advise against using IMK Candidate Window in productive environments." = "IMK 選字窗在最近一次存取被強制曝露的必需 API 時令輸入法崩潰,所以被自動停用。請勿在生產力場合使用該實驗型功能。";
|
||||
"Do you want to enable the popup composition buffer for this client?" = "您要对该客体启用浮动组字窗吗?";
|
||||
"Some client apps may have different compatibility issues in IMKTextInput implementation." = "有些客体应用可能会有不同的 IMKTextInput 实作相容问题。";
|
||||
"Yes" = "是";
|
||||
|
@ -160,7 +159,6 @@
|
|||
"There is a bug in macOS 10.9, preventing an input method from accessing its own file panels. Doing so will result in eternal hang-crash of not only the input method but all client apps it tries attached to, requiring SSH connection to this computer to terminate the input method process by executing “killall vChewing”. Due to possible concerns of the same possible issue in macOS 10.10 and 10.11, we completely disabled this feature." = "已知 macOS 10.9 有此故障:當一個輸入法嘗試存取自身的檔案操作視窗的時候,不只輸入法,而且連其接下來所嘗試掛接的所有的客體應用,都會陷入無限僵死狀態,只能用 SSH 連到這台電腦上執行「killall vChewing」才可以解除僵死。因為我們懷疑 macOS 10.10 至 10.12 也在受影響的範圍內,所以威注音對這些版本的系統禁用了自身的檔案操作視窗存取。";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/FolderPathEndedWithTrailingSlash/\"" = "defaults write org.atelierInmu.inputmethod.vChewing UserDataFolderSpecified -string \"~/帶尾部斜槓的資料夾路徑/\"";
|
||||
"defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/FilePathEndedWithoutTrailingSlash\"" = "defaults write org.atelierInmu.inputmethod.vChewing CassettePath -string \"~/不帶尾部斜槓的檔案路徑\"";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult Apple Developer Relations\nand tell them the related Radar ID: #FB11300759." = "⚠︎ 該功能因 IMK 選字窗自身缺陷而無法實作。\n請攜 Radar 編號 #FB11300759 找 Apple Developer Relations 投訴。";
|
||||
"Also toggle alphanumerical mode with Left-Shift" = "也允許使用左側的 Shift 鍵盤切換英數輸入模式";
|
||||
"Completely disable using Shift key to toggle alphanumerical mode" = "徹底禁止使用 Shift 鍵切換英數模式";
|
||||
"Please use mouse wheel to scroll this page. The CheatSheet is available in the IME menu." = "請利用滑鼠滾輪檢視該頁面。也請洽輸入法選單內的熱鍵指南。";
|
||||
|
@ -194,7 +192,6 @@
|
|||
|
||||
// SwiftUI Preferences
|
||||
"(Shift+)Space:" = "(Shift+)空格鍵:";
|
||||
"⚠︎ This feature in IMK Candidate Window defects. Please consult\nApple Developer Relations with Radar ID: #FB11300759." = "⚠︎ 該功能因 IMK 選字窗自身缺陷而無法實作。\n請攜 Radar 編號 #FB11300759 找 Apple Developer Relations 投訴。";
|
||||
"⚠︎ This feature is useful ONLY WHEN the font you are using doesn't support dynamic vertical punctuations. However, typed vertical punctuations will always shown as vertical punctuations EVEN IF your editor has changed the typing direction to horizontal." = "⚠︎ 該功能當且僅當目前的排版字型不支援縱排標點動態顯示轉義的情況下才有用。一旦使用了,所有敲出去的標點都會被永久轉換為靜態縱排標點:哪怕當前編輯器的排版模式已經改成橫排,這些已經輸入的標點也都還是縱排標點字元。";
|
||||
"⚠︎ This may hinder the walking algorithm from giving appropriate results." = "⚠︎ 這可能會妨礙爬軌函式,使其無法給出正確的結果。";
|
||||
"⚠︎ This will reboot the vChewing IME." = "⚠︎ 這將重啟威注音輸入法。";
|
||||
|
@ -288,7 +285,6 @@
|
|||
"IBM" = "IBM 排列";
|
||||
"If disabled, this will insert space instead." = "取消勾選的話,該按鍵會插入空格。";
|
||||
"If unchecked, the ESC key will try cleaning the unfinished readings / strokes first, and will commit the current composition buffer if there's no unfinished readings / strkes." = "若取消勾選,則 ESC 鍵會先嘗試清除未組成的讀音/字根;\n如果沒有未組成的讀音/字根的話,則會遞交當前組字區的內容。";
|
||||
"IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts." = "IMK 選字窗依賴於 Apple 的私有 API,而且是藉由橋接檔案頭強制曝露的方法使用的。目前,該功能僅在 macOS 10.13 High Sierra 至 macOS 14 Sonoma 系統內有測試過可用性。至於在未來的 macOS 發行版當中是否可用,則需要另行測試、才能下結論。";
|
||||
"in front of the phrase (like macOS built-in Zhuyin IME)" = "將游標置於詞語前方 // macOS 內建注音風格";
|
||||
"Intonation Key:" = "聲調鍵:";
|
||||
"It only needs to parse consecutive NSEvents passed by macOS built-in InputMethodKit framework, hence no necessity of asking end-users for extra privileges of monitoring global keyboard inputs. You are free to investigate our codebase or reverse-engineer this input method to see whether the above statement is trustable." = "該功能只需要對藉由 macOS 內建的輸入法框架傳來的 NSEvent 做上下文分析,自然沒有「向使用者尋求系統全局鍵盤事件監聽權限」之必要。您可自行審視敝輸入法的原始程式碼倉庫、或對敝輸入法逆向工程,以自行證實此處所言之真假。";
|
||||
|
@ -354,7 +350,6 @@
|
|||
"UI Language:" = "介面語言:";
|
||||
"Universal Pinyin with Numeral Intonation" = "通用拼音+數字標調";
|
||||
"Use ESC key to clear the entire input buffer" = "敲 ESC 鍵以清空整個組字緩衝區";
|
||||
"Use IMK Candidate Window instead of Tadokoro" = "啟用與 macOS 內建輸入法相同的 IMK 選字窗";
|
||||
"Use only one row / column in candidate window." = "僅以單行/單列來陳列候選字。";
|
||||
"Use Space to confirm highlighted candidate in Per-Char Select Mode" = "在逐字選字模式當中使用空格鍵確認當前高亮候選字";
|
||||
"Vertical" = "縱向佈局";
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
</head>
|
||||
<body>
|
||||
<h1><strong>鍵盤熱鍵使用手冊(macOS)</strong></h1>
|
||||
<div>本文對應至少威注音 3.4.7 版(以及其 Aqua 紀念版 0.5.19)。請利用滑鼠滾輪檢視該頁面。</div>
|
||||
<div>本文對應至少威注音 3.5.4 版(以及其 Aqua 紀念版 0.5.26)。請利用滑鼠滾輪檢視該頁面。</div>
|
||||
<div>為了簡化下文表述,這裡介紹一下本文會用到的 macOS 的鍵盤符號。註:</div>
|
||||
<ol>
|
||||
<li>BackSpace 與 Delete 採 Windows 稱謂。</li>
|
||||
|
@ -842,110 +842,6 @@
|
|||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>下述熱鍵則為在開發道場內啟用的 <strong>IMK 選字窗正在顯示(也就是你正在選字)時</strong>可以用的功能:</div>
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<div><strong>熱鍵</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>功能</strong></div>
|
||||
</td>
|
||||
<td>
|
||||
<div><strong>備註</strong></div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⏎</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>確認選字窗內的當前候選字</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>聯想詞選字時,該功能可在偏好設定內啟用或停用。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⌃⌘]</div>
|
||||
<div>⌃⌘[</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ 選字窗內選中下一個候選字(正向輪替)</div>
|
||||
<div>‧ 選字窗內選中上一個候選字(反向輪替)</div>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇥</div>
|
||||
<div>⇧⇥</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>‧ 選字窗內選中下一個候選字(正向輪替)</div>
|
||||
<div>‧ 選字窗內選中上一個候選字(反向輪替)</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>可以在偏好設定內更改輪替對象為頁。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>␣</div>
|
||||
<div>⇧␣</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>根據輸入法偏好設定來決定</div>
|
||||
<div>是正向輪替頁面還是候選字詞</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>輪替對象種類不會改變。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⇞</div>
|
||||
<div>⇟</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>翻頁</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>候選字詞只有一頁時,輪替對象種類也不會改變。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>⎋</div>
|
||||
<div>⌫</div>
|
||||
<div>⌦</div>
|
||||
<div>⇧→</div>
|
||||
<div>⇧←</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>回退到上一層符號選單、或關掉選字窗</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>不是符號選單狀態的場合,一律關掉選字窗。</div>
|
||||
<div>其中,Esc 按鍵可能會導致 Spotlight 關閉。</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<div>摁住 ⇧</div>
|
||||
<div>敲選字鍵</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>選擇指定的聯想候選詞(會有^標記)</div>
|
||||
</td>
|
||||
<td>
|
||||
<div>與奇摩輸入法行為一致。</div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div> </div>
|
||||
<div>$ EOF.</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -28,7 +28,6 @@
|
|||
<outlet property="pctUserDictionaryFolder" destination="p4U-xB-kEs" id="LUK-dT-wFt"/>
|
||||
<outlet property="selectionKeyComboBox" destination="uHU-aL-du7" id="cEx-Ui-Phc"/>
|
||||
<outlet property="tfdPETextEditor" destination="kSG-dz-P2N" id="aiA-EA-Isg"/>
|
||||
<outlet property="tglControlDevZoneIMKCandidate" destination="MQ1-z8-Yf1" id="qRk-OO-iUU"/>
|
||||
<outlet property="txtPECommentField" destination="cRd-HU-x7y" id="eJf-IX-goL"/>
|
||||
<outlet property="txtPEField1" destination="eGd-pc-aEI" id="QQp-wQ-8sj"/>
|
||||
<outlet property="txtPEField2" destination="4hL-rO-jca" id="g2Z-iV-KoH"/>
|
||||
|
@ -598,11 +597,6 @@
|
|||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.CandidateWindowShowOnlyOneLine" id="2gd-yB-Hvb"/>
|
||||
<binding destination="32" name="enabled" keyPath="values.UseIMKCandidateWindow" id="8EY-Ul-AJO">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
|
@ -677,11 +671,6 @@
|
|||
<connections>
|
||||
<action selector="changeSelectionKeyAction:" target="-2" id="REj-7y-bbQ"/>
|
||||
<binding destination="32" name="value" keyPath="values.CandidateKeys" id="5Fv-A4-QY5"/>
|
||||
<binding destination="32" name="enabled" keyPath="values.UseIMKCandidateWindow" id="BDQ-gl-txA">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</comboBox>
|
||||
</subviews>
|
||||
|
@ -832,11 +821,6 @@
|
|||
</buttonCell>
|
||||
<connections>
|
||||
<binding destination="32" name="value" keyPath="values.EnableMouseScrollingForTDKCandidatesCocoa" id="Oyc-s5-cFP"/>
|
||||
<binding destination="32" name="enabled" keyPath="values.UseIMKCandidateWindow" id="12U-Cd-k9q">
|
||||
<dictionary key="options">
|
||||
<string key="NSValueTransformerName">NSNegateBoolean</string>
|
||||
</dictionary>
|
||||
</binding>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
|
@ -2405,10 +2389,10 @@ DQ
|
|||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<stackView distribution="fill" orientation="vertical" alignment="leading" horizontalStackHuggingPriority="249.99998474121094" verticalStackHuggingPriority="249.99998474121094" translatesAutoresizingMaskIntoConstraints="NO" id="gjM-uG-XkW">
|
||||
<rect key="frame" x="20" y="47" width="537" height="213"/>
|
||||
<rect key="frame" x="20" y="121" width="537" height="139"/>
|
||||
<subviews>
|
||||
<textField wantsLayer="YES" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hBd-sS-cWq">
|
||||
<rect key="frame" x="-2" y="185" width="541" height="28"/>
|
||||
<rect key="frame" x="-2" y="111" width="541" height="28"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="537" id="Kvp-PL-Pes"/>
|
||||
</constraints>
|
||||
|
@ -2421,14 +2405,14 @@ Features listed here may not work as expected.</string>
|
|||
</textFieldCell>
|
||||
</textField>
|
||||
<box verticalHuggingPriority="750" boxType="separator" translatesAutoresizingMaskIntoConstraints="NO" id="ul4-N6-Ybi">
|
||||
<rect key="frame" x="0.0" y="174" width="537" height="5"/>
|
||||
<rect key="frame" x="0.0" y="100" width="537" height="5"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="537" id="2lI-El-JtD"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="400" id="kJZ-E8-eDL"/>
|
||||
</constraints>
|
||||
</box>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="yJg-tV-hH6">
|
||||
<rect key="frame" x="-1" y="151.5" width="429" height="17"/>
|
||||
<rect key="frame" x="-1" y="77.5" width="429" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="TB3-Kn-UbK"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="70" id="u5i-mf-Rix"/>
|
||||
|
@ -2442,7 +2426,7 @@ Features listed here may not work as expected.</string>
|
|||
</connections>
|
||||
</button>
|
||||
<textField wantsLayer="YES" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="uK3-cc-UcW">
|
||||
<rect key="frame" x="-2" y="74" width="541" height="70"/>
|
||||
<rect key="frame" x="-2" y="0.0" width="541" height="70"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="537" id="qOi-aV-LQX"/>
|
||||
</constraints>
|
||||
|
@ -2453,49 +2437,18 @@ Features listed here may not work as expected.</string>
|
|||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
<button verticalHuggingPriority="750" translatesAutoresizingMaskIntoConstraints="NO" id="MQ1-z8-Yf1">
|
||||
<rect key="frame" x="-1" y="49.5" width="410" height="17"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="16" id="Bru-dS-VCh"/>
|
||||
<constraint firstAttribute="width" relation="greaterThanOrEqual" constant="70" id="JgS-KT-dqF"/>
|
||||
</constraints>
|
||||
<buttonCell key="cell" type="check" title="Use IMK Candidate Window instead of Tadokoro (will reboot the IME)" bezelStyle="regularSquare" imagePosition="left" controlSize="small" inset="2" id="tglDevZoneIMKCandidate">
|
||||
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
|
||||
<font key="font" metaFont="cellTitle"/>
|
||||
</buttonCell>
|
||||
<connections>
|
||||
<action selector="updateIMKCandidateEnableStatusAction:" target="-2" id="v5H-CN-LPS"/>
|
||||
<binding destination="32" name="value" keyPath="values.UseIMKCandidateWindow" id="6Hj-pH-Wec"/>
|
||||
</connections>
|
||||
</button>
|
||||
<textField wantsLayer="YES" verticalHuggingPriority="750" setsMaxLayoutWidthAtFirstLayout="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5ae-kj-Llx">
|
||||
<rect key="frame" x="-2" y="0.0" width="541" height="42"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="537" id="zTP-1s-eev"/>
|
||||
</constraints>
|
||||
<textFieldCell key="cell" controlSize="small" sendsActionOnEndEditing="YES" alignment="left" id="lblDevZoneIMKCandidate">
|
||||
<font key="font" metaFont="smallSystem"/>
|
||||
<string key="title">IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts.</string>
|
||||
<color key="textColor" name="secondaryLabelColor" catalog="System" colorSpace="catalog"/>
|
||||
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
|
||||
</textFieldCell>
|
||||
</textField>
|
||||
</subviews>
|
||||
<visibilityPriorities>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
<integer value="1000"/>
|
||||
</visibilityPriorities>
|
||||
<customSpacing>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
<real value="3.4028234663852886e+38"/>
|
||||
</customSpacing>
|
||||
</stackView>
|
||||
</subviews>
|
||||
|
|
|
@ -79,7 +79,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblAcceptLeadingIntonations.title" = "Accept leading intonations in rare cases";
|
||||
"lblAlwaysShowTooltipTextsHorizontally.title" = "Always show tooltip texts horizontally";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK candidate window (IMKCandidates) relies on certain Apple private APIs force-exposed through bridging headers. For now, its usability is only guaranteed from macOS 10.13 High Sierra to macOS 14 Sonoma. Further tests are required in later macOS to prove compatibility facts.";
|
||||
"lblDevZoneTitleDescription.title" = "Warning: This page is for testing future features. \nFeatures listed here may not work as expected.";
|
||||
"lblIntonationKeyBehavior.title" = "Specify what intonation key does when syllable composer is empty.";
|
||||
"lblShiftBkspKeyBehavior.title" = "Choose the attempted behavior of Shift+BackSpace key.";
|
||||
|
@ -114,7 +113,6 @@
|
|||
"s7u-Fm-dVg.title" = "Revolving Pages";
|
||||
"shc-Nu-UsM.title" = "Show notifications when toggling Caps Lock";
|
||||
"SzF-FL-sVO.title" = "Show translated strokes in composition buffer";
|
||||
"tglDevZoneIMKCandidate.title" = "Use IMK Candidate Window instead of Tadokoro";
|
||||
"tglTrimUnfinishedReadingsOnCommit.title" = "Trim unfinished readings / strokes on commit";
|
||||
"TKl-TY-lvN.title" = "General Settings";
|
||||
"TXr-FF-ehw.title" = "Traditional Chinese";
|
||||
|
|
|
@ -79,7 +79,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblAcceptLeadingIntonations.title" = "まれな場合には、音調記号の優先入力を許容する";
|
||||
"lblAlwaysShowTooltipTextsHorizontally.title" = "ヒントを常に横書きにする";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK 候補陳列ウィンドウ(IMKCandidates)は、Apple の未公開のAPIを「bridging-header」という強引的な手段で引き出して利用した機能である。現時点で macOS 10.13 High Sierra から macOS 14 Sonoma まで利用可能であるが、その後の新しい macOS との互換性の話はまだ早い。";
|
||||
"lblDevZoneTitleDescription.title" = "警告:これからの新機能テストのために作ったページですから、\nここで陳列されている諸機能は予想通り動けるだと思わないでください。";
|
||||
"lblIntonationKeyBehavior.title" = "音調組立緩衝列が空かされた時の音調キーの行為をご指定ください。";
|
||||
"lblShiftBkspKeyBehavior.title" = "Shift+BackSpace キーの優先行為をご指定ください。";
|
||||
|
@ -114,7 +113,6 @@
|
|||
"s7u-Fm-dVg.title" = "ページ";
|
||||
"shc-Nu-UsM.title" = "Caps Lock で切り替えの時に吹出通知メッセージを";
|
||||
"SzF-FL-sVO.title" = "原始キーネームでなく、筆画を入力緩衝列で表示する";
|
||||
"tglDevZoneIMKCandidate.title" = "IMK 候補陳列ウィンドウを起用";
|
||||
"tglTrimUnfinishedReadingsOnCommit.title" = "送り出す緩衝列内容から未完成な音読み/筆組みを除く";
|
||||
"TKl-TY-lvN.title" = "一般設定";
|
||||
"TXr-FF-ehw.title" = "繁体中国語";
|
||||
|
|
|
@ -79,7 +79,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblAcceptLeadingIntonations.title" = "在个别情况下,允许声调前置键入";
|
||||
"lblAlwaysShowTooltipTextsHorizontally.title" = "始终使用横排来显示工具提示视窗";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK 选字窗依赖于 Apple 的私有 API,而且是借由桥接档案头强制曝露的方法使用的。目前,该功能仅在 macOS 10.13 High Sierra 至 macOS 14 Sonoma 系统内有测试过可用性。至于在未来的 macOS 发行版当中是否可用,则需要另行测试、才能下结论。";
|
||||
"lblDevZoneTitleDescription.title" = "警告:该页面仅作未来功能测试所用。\n在此列出的功能并非处于完全可用之状态。";
|
||||
"lblIntonationKeyBehavior.title" = "指定声调键(在注拼槽为「空」状态时)的行为。";
|
||||
"lblShiftBkspKeyBehavior.title" = "指定 Shift+BackSpace 组合键率先尝试的行为。";
|
||||
|
@ -114,7 +113,6 @@
|
|||
"s7u-Fm-dVg.title" = "轮替页面";
|
||||
"shc-Nu-UsM.title" = "以 Caps Lock 切换输入法/中英模式时显示通知";
|
||||
"SzF-FL-sVO.title" = "在组字区内显示字根、而非原始键盘码";
|
||||
"tglDevZoneIMKCandidate.title" = "启用与 macOS 内建输入法相同的 IMK 选字窗";
|
||||
"tglTrimUnfinishedReadingsOnCommit.title" = "在递交时清理未完成拼写的读音或字根";
|
||||
"TKl-TY-lvN.title" = "一般设定";
|
||||
"TXr-FF-ehw.title" = "繁体中文";
|
||||
|
|
|
@ -79,7 +79,6 @@
|
|||
"jQC-12-UuK.ibShadowedObjectValues[2]" = "Item 3";
|
||||
"lblAcceptLeadingIntonations.title" = "在個別情況下,允許聲調前置鍵入";
|
||||
"lblAlwaysShowTooltipTextsHorizontally.title" = "始終使用橫排來顯示工具提示視窗";
|
||||
"lblDevZoneIMKCandidate.title" = "IMK 選字窗依賴於 Apple 的私有 API,而且是藉由橋接檔案頭強制曝露的方法使用的。目前,該功能僅在 macOS 10.13 High Sierra 至 macOS 14 Sonoma 系統內有測試過可用性。至於在未來的 macOS 發行版當中是否可用,則需要另行測試、才能下結論。";
|
||||
"lblDevZoneTitleDescription.title" = "警告:該頁面僅作未來功能測試所用。\n在此列出的功能並非處於完全可用之狀態。";
|
||||
"lblIntonationKeyBehavior.title" = "指定聲調鍵(在注拼槽為「空」狀態時)的行為。";
|
||||
"lblShiftBkspKeyBehavior.title" = "指定 Shift+BackSpace 組合鍵率先嘗試的行為。";
|
||||
|
@ -114,7 +113,6 @@
|
|||
"s7u-Fm-dVg.title" = "輪替頁面";
|
||||
"shc-Nu-UsM.title" = "以 Caps Lock 切換輸入法/中英模式時顯示通知";
|
||||
"SzF-FL-sVO.title" = "在組字區內顯示字根、而非原始鍵盤碼";
|
||||
"tglDevZoneIMKCandidate.title" = "啟用與 macOS 內建輸入法相同的 IMK 選字窗";
|
||||
"tglTrimUnfinishedReadingsOnCommit.title" = "在遞交時清理未完成拼寫的讀音或字根";
|
||||
"TKl-TY-lvN.title" = "一般設定";
|
||||
"TXr-FF-ehw.title" = "繁體中文";
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
5B00FA0C28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B00FA0B28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift */; };
|
||||
5B09307628B6FC3B0021F8C5 /* shortcuts.html in Resources */ = {isa = PBXBuildFile; fileRef = 5B09307828B6FC3B0021F8C5 /* shortcuts.html */; };
|
||||
5B0E22A628FC11B900EB7ACA /* Preferences.tiff in Resources */ = {isa = PBXBuildFile; fileRef = 5B0E22A528FC11B900EB7ACA /* Preferences.tiff */; };
|
||||
5B0E22A928FC11B900EB7ACA /* Preferences.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5B0E22A728FC11B900EB7ACA /* Preferences.xib */; };
|
||||
|
@ -119,7 +118,6 @@
|
|||
5BFC63CC28D49BBC004A77B7 /* UpdateSputnik in Frameworks */ = {isa = PBXBuildFile; productRef = 5BFC63CB28D49BBC004A77B7 /* UpdateSputnik */; };
|
||||
5BFC63CF28D4ACA3004A77B7 /* LangModelAssembly in Frameworks */ = {isa = PBXBuildFile; productRef = 5BFC63CE28D4ACA3004A77B7 /* LangModelAssembly */; };
|
||||
5BFC63D128D4B9F7004A77B7 /* IMKUtils in Frameworks */ = {isa = PBXBuildFile; productRef = 5BFC63D028D4B9F7004A77B7 /* IMKUtils */; };
|
||||
5BFDF011289635C100417BBC /* IMKCandidatesImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BFDF010289635C100417BBC /* IMKCandidatesImpl.swift */; };
|
||||
6A187E2616004C5900466B2E /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6A187E2816004C5900466B2E /* MainMenu.xib */; };
|
||||
6A2E40F6253A69DA00D1AE1D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A2E40F5253A69DA00D1AE1D /* Images.xcassets */; };
|
||||
6A2E40F9253A6AA000D1AE1D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 6A2E40F5253A69DA00D1AE1D /* Images.xcassets */; };
|
||||
|
@ -174,7 +172,6 @@
|
|||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
5B00FA0B28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionCtl_IMKCandidatesData.swift; sourceTree = "<group>"; };
|
||||
5B04305327B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = "<group>"; };
|
||||
5B04305427B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = "<group>"; };
|
||||
5B04305527B529D800CB65BC /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainMenu.strings"; sourceTree = "<group>"; };
|
||||
|
@ -322,7 +319,6 @@
|
|||
5BFC63C728D49511004A77B7 /* vChewing_IMKUtils */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_IMKUtils; path = Packages/vChewing_IMKUtils; sourceTree = "<group>"; };
|
||||
5BFC63CA28D49B2B004A77B7 /* vChewing_UpdateSputnik */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_UpdateSputnik; path = Packages/vChewing_UpdateSputnik; sourceTree = "<group>"; };
|
||||
5BFC63CD28D4AC98004A77B7 /* vChewing_LangModelAssembly */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = vChewing_LangModelAssembly; path = Packages/vChewing_LangModelAssembly; sourceTree = "<group>"; };
|
||||
5BFDF010289635C100417BBC /* IMKCandidatesImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IMKCandidatesImpl.swift; sourceTree = "<group>"; };
|
||||
6A0D4EA215FC0D2D00ABF4B3 /* vChewing.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = vChewing.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
6A0D4EF515FC0DA600ABF4B3 /* IME-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "IME-Info.plist"; sourceTree = "<group>"; };
|
||||
6A15B32421A51F2300B92CD3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
|
@ -475,7 +471,6 @@
|
|||
5B62A33927AE7C6700A19448 /* UIModules */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5B62A33E27AE7CD900A19448 /* CandidateUI */,
|
||||
5BA9FD0927FED9F3002DE248 /* PrefUI */,
|
||||
5BB1D7F32999027200EA8D2C /* PrefUITabs.swift */,
|
||||
);
|
||||
|
@ -505,14 +500,6 @@
|
|||
path = WindowNIBs;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5B62A33E27AE7CD900A19448 /* CandidateUI */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
5BFDF010289635C100417BBC /* IMKCandidatesImpl.swift */,
|
||||
);
|
||||
path = CandidateUI;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
5B62A35027AE7F6600A19448 /* Data */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
|
@ -705,7 +692,6 @@
|
|||
5B21176D28753B35000443A9 /* SessionCtl_HandleDisplay.swift */,
|
||||
5B6C141128A9D4B30098ADF8 /* SessionCtl_HandleEvent.swift */,
|
||||
5B21176B287539BB000443A9 /* SessionCtl_HandleStates.swift */,
|
||||
5B00FA0B28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift */,
|
||||
5BB802D927FABA8300CF1C19 /* SessionCtl_Menu.swift */,
|
||||
5B660A8528F64A8800E5E4F6 /* SymbolMenuDefaultData.swift */,
|
||||
);
|
||||
|
@ -1136,11 +1122,9 @@
|
|||
5BA9FD1327FEDB6B002DE248 /* VwrPrefPaneDictionary.swift in Sources */,
|
||||
5BF7548929B2F04F00FA50DA /* CtlPrefUI.swift in Sources */,
|
||||
5BF018F9299923BD00248CDD /* VwrPrefPaneBehavior.swift in Sources */,
|
||||
5BFDF011289635C100417BBC /* IMKCandidatesImpl.swift in Sources */,
|
||||
5BB802DA27FABA8300CF1C19 /* SessionCtl_Menu.swift in Sources */,
|
||||
5B2E009428FD1E8100E78D6E /* VwrPrefPaneCassette.swift in Sources */,
|
||||
5BE377A0288FED8D0037365B /* InputHandler_HandleComposition.swift in Sources */,
|
||||
5B00FA0C28DEC17200F6D436 /* SessionCtl_IMKCandidatesData.swift in Sources */,
|
||||
5BF018FB299923C000248CDD /* VwrPrefPaneOutput.swift in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
|
|
Loading…
Reference in New Issue