みずぴー日記

人間の再起動ボタンはハワイのビーチにある

🏜InputMethodKit for Mojave

f:id:mzp:20180716210748j:plain

日本語入力を作るときに必要だった本macOS 10.14 (Mojabe)にあわせて加筆・修正した。 過去に購入した人も再ダウンロードすれば反映される。

非公開機能について記載していた部分がOSのバージョンアップにともない動作しなくなっていた。 今回の修正で2つのOSで動作するようになったので安定性が増したと思う。

🛠変更箇所

https://github.com/mzp/EmojiIM/pull/25

コードの差分は上記プルリクエストにまとまっている。

⌨️キーボード配列の取得

⌨️キーボード配列の取得で以下のコードでキーボード配列の種類を区別できると書いた。

let r = TISGetInputSourceProperty(inputSource, "TSMInputSourcePropertyScriptCode" as CFString)
let n = unsafeBitCast(r, to: NSInteger.self)

// 39なら英語
return n == 39

しかしこれは誤りであり、Mojaveで動作しなくなった。 TSMInputSourcePropertyScriptCode に対して取得できるプロパティは定数ではなくオブジェクトへのポインタであった。 OSのバージョンが固定されている場合はポインタのアドレスも固定されているため、定数と混同していた。

正しくは以下のコードで英語キーボードかどうかを取得する。

let r = TISGetInputSourceProperty(self,  "TSMInputSourcePropertyScriptCode" as CFString)
let n = unsafeBitCast(r, to: NSString.self).integerValue

return n == 0

これに加えて、https://github.com/mzp/EmojiIM/pull/25ではBridgeHeaderを用いて TSMInputSourcePropertyScriptCode という文字列定数を直接埋め込むのをやめた。

🌓入力モード

🙊入力モードの非公開機能で入力モードの統合について書いたが、これには不足があった。

<key>tsInputModeIsVisibleKey</key>
<true/>

のように tsInputModeIsVisibleKey キーに対する値を YES にしないとメニューバーに入力モードが表示されない。

💄その他

これを機会に体裁を整えるための変更を行なった。

謝辞を載せるといっておきながら忘れていたので追加した。

f:id:mzp:20180716211934p:plain

電子版は印刷する必要がないので左右の余白サイズの統一も行なった。