Typut
https://github.com/ensan-hcl/Typut
azooKeyの人が書いたIMKit の参考実装
自作IME情報だmiyamonz.icon
日本語じゃなくて英語
こうしたほうがいい
code:install.sh
xcodebuild
sudo rm -rf /Library/Input\ Methods/Typut.app
sudo cp -r ./build/Release/Typut.app /Library/Input\ Methods/
いや、/Livraryじゃなくてもいいっぽい。自分で使うなら~/Libraryでもいいらしい
入力処理はTyputInputController.swift
Macとの境界はAppDelegate.swift
NSManualApplicationクラスがカスタムのNSApplicationサブクラスとして定義されており、
これがアプリケーションの最初のエントリポイントです。
delegateを設定してる
https://chatgpt.com/c/6832d0aa-0608-8009-a3fa-6c4557ae4e5c
AppDelegate
https://deepwiki.com/search/ime_bcbf3dac-9620-4dcf-90ec-9969786713b0
他に私が質問してないことで、知るべきことはあるか?私はTyputの実装を参考にして、MacでIMEを自作したいんですmiyamonz.icon
こういう質問の仕方いいなmiyamonz.icon
他に私が質問してないことで、知るべきことはあるか?私はTyputの実装を参考にして、MacでIMEを自作したいんです
Fast
Searched across ensan-hcl/Typut
あなたはTyputの実装を参考にしてmacOS用のIMEを自作したいということですね。これまでの会話で基本的なアーキテクチャは理解されていますが、実際にIMEを自作する際に重要な追加ポイントがいくつかあります。
重要な設定ファイル: Info.plist
IMEアプリケーションには特別なInfo.plist設定が必要です。Typuでは以下の重要なキーが設定されています:
NSPrincipalClass: アプリケーションのメインクラスを指定
InputMethodConnectionName: IMKitフレームワークとの接続名
InputMethodServerControllerClass: 入力コントローラークラス名(TyputInputController)
これらの設定により、macOSがアプリケーションをIMEとして認識し、適切なクラスをインスタンス化します。
候補生成システム
TyputInputController.swift:195-205
Typuではcandidates(_:)メソッドで候補を生成しています。これは:
基本テキスト(入力されたまま)
大文字・小文字変換
タイポグラフィ変換(TypographyCandidate.typographicalCandidates)
を組み合わせています。
候補選択の処理
TyputInputController.swift:207-213
候補が選択された際の処理も重要です。candidateSelectedとcandidateSelectionChangedで選択状態を管理しています。
プロジェクト設定の重要ポイント
project.pbxproj:451-480
IMEアプリケーションには特別なビルド設定が必要です:
ENABLE_APP_SANDBOX = YES: サンドボックス有効
ENABLE_HARDENED_RUNTIME = YES: ハードンドランタイム
CODE_SIGN_ENTITLEMENTS: 適切なエンタイトルメント設定
エンタイトルメントファイル
IMEアプリケーションは特別な権限が必要なため、適切な.entitlementsファイルの設定が重要です。
デバッグ時の注意点
IMEアプリケーションのデバッグでは:
システム環境設定で入力ソースとして追加
実際のアプリケーションでテスト
ログ出力による状態追跡
候補ウィンドウの表示レベル調整(Spotlightより前面に表示)
Notes
これらの要素を組み合わせることで、完全に機能するIMEアプリケーションを作成できます。特にInfo.plistの設定とエンタイトルメントは、IMEとして正常に動作するために必須です。
Wiki pages you might want to explore:
Core Architecture (ensan-hcl/Typut)
Development Setup (ensan-hcl/Typut)
Wiki pages you might want to explore:
Core Architecture (ensan-hcl/Typut)
https://chatgpt.com/c/6832d0aa-0608-8009-a3fa-6c4557ae4e5c
info.plist
InputMethodConnectionName
code:plist
<key>InputMethodConnectionName</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)_Connection</string>
入力メソッドサーバーとの接続名を指定
macOSが入力メソッドと通信するためにこの名前を使う
InputMethodServerControllerClass
code:plist
入力メソッドのコントローラクラス名を指定します。
例:
$(PRODUCT_MODULE_NAME).azooKeyMacInputController
$(PRODUCT_MODULE_NAME).TyputInputController
IMKInputControllerを継承する
なぜ必要か
macOSがIMEを起動する際、このクラスをインスタンス化して入力処理を開始します。
ここで指定したクラスが、実際の文字入力や変換などのロジックを担当します。
tsInputMethodCharacterRepertoireKey
役割・意味
このIMEが扱う文字種(レパートリー)を配列で指定します。
例:Latn(ラテン文字)、Hira(ひらがな)、Kana(カタカナ)など
なぜ必要か
macOSが「このIMEはどんな文字を入力できるのか」を把握するために使います。
例えば、システムの入力ソース選択UIや、アプリ側での入力制御に利用されます。
tsInputMethodIconFileKey
役割・意味
IME全体のアイコンファイル名を指定します。
例:main.tiff
なぜ必要か
システム環境設定や入力ソース選択メニューなどで、ユーザーに視覚的にIMEを識別させるために使われます。
指定したファイルは、リポジトリ内のリソースとして実際に存在している必要があります。
Typutにあってazookeyにない
NSPrincipalClass
azookeyはXCode(project.pbxproj)にある
INFOPLIST_KEY_NSPrincipalClass = "$(PRODUCT_MODULE_NAME).NSManualApplication";
XCodeの方があとからで柔軟に変えられるとか
azookeyにあってTyputにない
複数入力モード・多言語対応のための設定
ComponentInputModeDict
tsVisibleInputModeOrderedArrayKey
tsInputModeDefaultStateKey
tsInputModeIsVisibleKey
tsInputModePrimaryInScriptKey
tsInputModeScriptKey
tsInputModeJISKeyboardShortcutKey
tsInputModeKeyEquivalentKey
tsInputModeKeyEquivalentModifiersKey
tsInputMethodAlternateIconFileKey
tsInputModeAlternateMenuIconFileKey
tsInputModeMenuIconFileKey
tsInputModePaletteIconFileKey
理由:
日本語・ローマ字など複数の入力モードや多言語対応を実現するための詳細な設定。
→ Typutは英語専用で単一モードなので不要。
2. ユーザー体験・UI向上のための設定
tsInputMethodAlternateIconFileKey
tsInputModeAlternateMenuIconFileKey
tsInputModeMenuIconFileKey
tsInputModePaletteIconFileKey
tsVisibleInputModeOrderedArrayKey
理由:
ユーザーが入力モードを切り替えたり、UI上で分かりやすくするためのアイコンや表示順序の指定。
→ シンプルなIMEでは最小限で済む。
3. AppleのInput Method仕様準拠のための設定
TISIntendedLanguage
tsInputModeScriptKey
tsInputModePrimaryInScriptKey
理由:
macOSのInput Method仕様で多言語・多スクリプト対応IMEに求められる項目。
→ 英語専用IMEでは省略可能。
4. キーボードショートカット・操作性のための設定
tsInputModeJISKeyboardShortcutKey
tsInputModeKeyEquivalentKey
tsInputModeKeyEquivalentModifiersKey
理由:
日本語IME特有の「かな/英数」キーやショートカット割り当て。
→ 英語IMEでは不要。