Giter Site home page Giter Site logo

mtgto / macskk Goto Github PK

View Code? Open in Web Editor NEW
112.0 5.0 4.0 1.27 MB

Yet Another macOS SKK Input Method

License: GNU General Public License v3.0

Swift 93.17% Rich Text Format 6.00% Makefile 0.64% Objective-C 0.11% Shell 0.08%
inputmethod skk japanese-language macos

macskk's Introduction

macSKK test

macSKKはmacOS用のSKK方式の日本語入力システム (インプットメソッド) です。

macOS用のSKK方式の日本語入力システムにはすでにAquaSKKがありますが、いくつか独自の機能を作りたいと思い新たに開発しています。

macSKKを使用するには macOS 13.3 (Ventura) 以降が必要です。 Universal Binary (Apple Silicon & Intel Mac) でビルドしていますが、動作確認はApple Silicon環境でのみ行っています。

特徴

  • 日本語入力システムはパスワードなどの機密情報を処理する可能性があるため安全性が求められるプログラムです。そのためmacSKKはmacOSのSandbox機構を使いネットワーク通信やファイルの読み書きに制限をかけることでセキュリティホールを攻撃されたときの被害を減らすように心掛けます。
  • 不正なコードが含まれるリスクを避けるため、サードパーティによる外部ライブラリは使用していません。
  • すべてをSwiftだけでコーディングしており、イベント処理にCombineを、UI部分にはSwiftUIを使用しています。
  • 単語登録モードや送り仮名入力中などキー入力による状態変化管理が複雑なのでユニットテストを書いてエンバグのリスクを減らす努力をしています。

実装予定

しばらくはAquaSKKにはあるけどmacSKKにない機能を実装しつつ、徐々に独自機能を実装していこうと考えています。

実装予定の独自機能

  • 自動更新確認
    • Network Outgoingが可能なXPCプロセスを作成し、GitHub Releasesから情報を定期的に取得して新しいバージョンが見つかったらNotification Centerに表示する
  • iCloudにマイ辞書を保存して他環境と共有できるようにする
  • マイ辞書の暗号化
    • 編集したい場合は生データでのエクスポート & インポートできるようにする

インストール

2023年現在、Mac App Storeでは日本語入力システムを配布することができないため、Appleのソフトウェア公証を受けたアプリケーションバイナリをGitHub Releasesで配布しています。dmgファイルをダウンロードしマウントした中にあるpkgファイルからインストールしてください。

macSKKのインストール後に、システム設定→キーボード→入力ソースから「ひらがな (macSKK)」と「ABC (macSKK)」を追加してください。カタカナ、全角英数、半角カナは追加しなくても問題ありません。 もしインストール直後に表示されなかったり、バージョンアップしても反映されない場合はログアウト & ログインを試してみてください。

SKK辞書は ~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Dictionaries に配置してください。 その後、入力メニュー→環境設定を開き、辞書設定で使用する辞書を有効に切り替えてください。EUC-JPでないエンコーディングの場合はiボタンからエンコーディングを切り替えてください。現在はEUC-JP (EUC-JIS-2004を含む) とUTF-8に対応しています。辞書ファイルの形式はYAML形式、JSON形式なども提案されていますが現在は未対応です。

辞書の削除は上記フォルダから辞書ファイルをゴミ箱に移動するかファイルを削除してください。macSKKが自動で無効化します。

ユーザー辞書は ~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Dictionaries/skk-jisyo.utf8 にUTF-8形式で保存されます。 ユーザー辞書はテキストエディタで更新可能です。別プロセスでユーザー辞書が更新された場合はmacSKKが自動で再読み込みを行います。

設定

macSKKが入力メソッドとして選択されているときに入力メニューから「設定…」でGUIの設定画面を開くことができます。またプライベートモードのように入力メニューから直接有効・無効を切り替えるものがあります。

設定は Plist 形式で ~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Library/Preferences/net.mtgto.inputmethod.macSKK.plist に保存されます。

キー 値の型 設定の意味
dictionaries Array 辞書設定
directModeBundleIdentifiers Array 直接入力モードにしているアプリケーションのBundle Identifierの配列
selectedInputSource String キー配列 (KeyLayout) のID
showAnnotation Boolean 注釈を変換候補のそばに表示するか
inlineCandidateCount Number インラインで表示する変換候補の数
workarounds Array 互換性設定がされているアプリケーション
candidatesFontSize Number 変換候補のフォントサイズ (デフォルト13)
annotationFontSize Number 注釈のフォントサイズ (デフォルト13)
skkserv Dictionary skkservサーバーへの接続設定
selectCandidateKeys String 変換候補から確定するキー配列
findCompletionFromAllDicts Boolean ユーザー辞書だけでなくすべての辞書から補完を探すか
selectedKeyBindingSetId String 選択しているキーバインドのセットのID
keyBindingSets Array キーバインドのセットの配列
enterNewLine Boolean Enterキーで変換候補の確定 + 改行も行う

機能

単語登録

有効な辞書で有効な読みが見つからない場合、単語登録モードに移行します。

例として "あああ" で変換しようとしても辞書になかった場合 [登録:あああ] のようなテキストが表示されます。

この状態でテキストを入力しEnterすることでユーザー辞書にその読みで登録されます。漢字変換も可能ですが単語登録モードで変換候補がない変換が行われた場合は入力されなかったと扱い、入れ子で単語登録モードには入れなくなっています。

単語登録モードでのみ C-y でクリップボードからペーストできます (AquaSKKと同様です)。通常のペーストコマンド Cmd-v はアクティブなアプリケーションに取られて利用できないため、特殊なキーバインドにしています。

単語登録をしない場合はEscキーや C-g でキャンセルしてください。

ユーザー辞書から単語の削除

変換候補が選択されている状態で Shift-x を入力すると (よみ) /(変換結果)/ を削除します(yes/no) という表示に切り替わります。この状態でyesと入力してenterするとユーザー辞書から選択していた変換候補を削除します。noを選んだり Escキーや C-g でキャンセルした場合には何も行いません。

現状は選択されている変換候補がユーザー辞書にない場合は 削除します(yes/no) という表示を行いますが、実際には何も行いません(ユーザー辞書以外を書き換えたくないため)。将来は他辞書からの削除ができるような対応をするかもしれませんが現在は未定です。

読みの補完

入力中、ユーザー辞書にある送りなし変換エントリから先頭が一致する変換履歴がある場合、入力テキストの下部に候補を表示します。タブキーを押すことで表示されているところまで入力が補完されます。

現在、補完の対象となるのはユーザー辞書の送りなしエントリだけです。

数値変換

辞書に "だい# /第#0/第#1/" のように、読みに"#"、変換候補に "#(数字)" を含むエントリは数値変換エントリです。

macSKKではタイプ0, 1, 2, 3, 8, 9に対応しています。 数値として使えるのは0以上2^63-1 (Int64.max) までです。

ユーザー辞書に追加される変換結果は "だい# /第#0/" のように実際の入力に使用した数値は含まない形式で追加されます。

キー配列の変更

デフォルトではQWERTY配列になっていますが、設定画面からキー配列を変更できます。

システムで有効なキー配列のうち、英語用のキー配列のみを選択リストに表示しています。

キーバインドの変更

qやlやCtrl-jなど、SKKで使用されるキーバインドを変更できます。 変更するには、設定画面のキーバインドからデフォルトのキーバインドのセットを複製してから修正してください。

もしおかしな挙動だったり、設定にはないような特殊なキーバインドを希望したい場合はIssueでお知らせください。

ローマ字変換ルールの変更

どのキーを入力したときにどのような文字に変換するかをカスタマイズすることができます。 例えばローマ字入力表のカスタマイズもできますが、それ以外でも句読点としてカンマやピリオドを入力するように設定したり、全角で入力したい記号を設定することができます。

~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Settings/kana-rule.conf にファイルを置くことで、ローマ字テーブルの変更や記号入力をカスタマイズすることができます。

上記のパスにファイルがない場合、もしくは正常に読み込めなかった場合は ~/Library/Input Methods/macSKK.app/Contents/Resources/kana-rule.conf がデフォルトで使用されます。 カスタマイズしたい際はmacSKK.app内にある kana-rule.conf ファイルもしくは https://github.com/mtgto/macSKK/blob/main/macSKK/kana-rule.conf を元にカスタマイズするのがよいでしょう。 設定ファイルの変更を監視しているため更新されたら即座に反映されます。

ローマ字変換ルール設定ファイルはUTF-8 + LF (BOMなし) で作成してください。 簡単な使い方はデフォルトファイルにもあるので参照してみてください。

ファイルを配置したのに反映されない場合はConsole.appでエラーが出てないか確認してみてください。 ローマ字変換定義ファイルの XX 行目の記述が壊れているため読み込みできません のようなログが出ているかもしれません。 正常に読み込めている場合は 独自のローマ字かな変換ルールを適用しました というログが出力されます。

現在制限として、カタカナや半角カナモードでの文字をひらがなモードでの文字と異なる文字を使用する場合、未確定入力中はカタカナでも半角カナでもひらがなのルールが使用されてします。

例えば a,あ,か,サ という設定がある状態で a を入力した場合はこうなります。

モード 頭に▽がある 結果 問題ある?
ひらがな YES ▽あ なし
ひらがな NO なし
カタカナ YES ▽ア あり
カタカナ NO なし
半角カナ YES ▽ア あり
半角カナ NO なし

プライベートモード

プライベートモードが有効なときは変換結果がユーザー辞書に反映されません。ユーザー辞書以外の辞書やプライベートモードを有効にする前のユーザー辞書の変換候補は参照されます。

プライベートモードの有効・無効は入力メニュー→プライベートモードから切り替えできます。

直接入力

直接入力を有効にしたアプリケーションでは、日本語変換処理を行いません。独自でIME機能を持つEmacs.appなどで使用することを想定しています。

直接入力の有効・無効の切り替えは、切り替えたいアプリケーションが最前面のときに入力メニュー→"(アプリ名)で直接入力"から行えます。 また有効になっているアプリケーションのリストは設定→直接入力から確認できます。

直接入力を有効にしたアプリケーションはBundle Identifier単位で記録しているため、アプリケーションを移動させても設定は無効になりません。また特殊なGUIアプリケーションはBundle Identifierをもたないため直接入力を設定できません (Android StudioのAndroidエミュレータとか)。

ユーザー辞書の自動保存

ユーザー辞書が更新された場合、一定期間おきにファイル書き出しが行われます。またシステム再起動時やバージョンアップのインストール実行後などmacSKKプロセスが正常終了する際にファイル書き出しが終わっていない更新がある場合はファイル書き出しを行ってから終了します。 もし即座にファイル書き出ししたい場合は入力メニューから"ユーザー辞書を今すぐ保存"を選んでください。

Command + Option + Escからの強制終了時やシグナルを送っての終了時は保存されないので注意してください。

バージョンの自動チェック

macSKKは現在開発中のアプリケーションです。そのため安定していない可能性が高いです。 なるべく不具合が修正された最新バージョンを使っていただきたいため、定期的に新しいバージョンがないかをチェックして見つかった場合は通知センターで通知します。

新規バージョンの確認はGitHubのReleasesページのAtom情報を取得して行います。 バージョンチェックは12時間おきにバックグラウンドで実行されます。

macSKKアプリ自体はApp Sandboxでインターネット通信ができないように設定しているため、GitHubのReleaseページの取得はmacSKKからXPCを介して外部プロセスで行います。

SKKServを辞書として使う

skkservサーバーをSKK辞書として使用することができます (macSKKがskkservサーバーとして機能するわけではないです)。 まだ作り込みが甘いのでベータ機能だと思ってください。

設定の辞書メニューからSKKServを有効にすることで使用できます。

  • アドレスはIPv4, IPv6, ホスト名のいずれかを指定してください。
  • ポート番号は通常は1178が使われるようです
  • 応答エンコーディングは通常はEUC-JPが使われることが多いようですがskkservの実装によってはUTF-8を返すものもあるようです。
  • SKKServ設定画面のテストボタンは設定中のskkservにバージョン取得コマンドを試します。正常な応答があれば「skkservへの接続に成功しました」と表示されます。

現状は以下の制限があります。

  • 同時に1サーバーまで接続可能です。
  • TCP接続が切断されたり1秒以内に送信できなかったり1秒以内に応答がなかった場合は取得できなかったものとして扱います。
  • 常にファイル辞書よりも変換候補は後に出るようにしています。
    • 並び替えのUIで迷ったために先送り。将来並び替えできるようにすると思います。

動作確認はyaskkserv2でのみ行っています。

アンインストール

現在アンインストールする手順は用意していないためお手数ですが手動でお願いします。 今後、dmg内にアンインストーラを同梱予定です。

手動で行うには、システム設定→キーボード→入力ソースから「ひらがな (macSKK)」「ABC (macSKK)」を削除後、以下のファイルを削除してください。

  • ~/Library/Input Methods/macSKK.app
  • ~/Library/Containers/net.mtgto.inputmethod.macSKK

FAQ

Q. Visual Studio Code (vscode) で C-j を押すと行末が削除されてしまいます

A. C-j がVisual Studio Codeのキーボードショートカット設定の editor.action.joinLines にデフォルトでは割り当てられていると思われます。Cmd-K Cmd-S から editor.action.joinLines で検索し、キーバインドを削除するなり変更するなりしてみてください。

Q. Wezterm で C-j を押すと改行されてしまいます

A. macos_forward_to_ime_modifier_maskCTRL を追加することでIMEに C-j が渡されてひらがなモードに切り替えできるようになります。 SHIFT も入れておかないと漢字変換開始できなくなるので、 SHIFT|CTRL を設定するのがよいと思います。

Q. 標準Terminal / iTerm2で C-j を押すと改行されてしまいます

A. Karabiner-Elementsで C-j をかなキーに置換することで対応することができます。作者は以下のようなComplex Modificationsを ~/.config/karabiner/assets/complex_modifications/macskk.json に配置しています。将来 https://github.com/pqrs-org/KE-complex_modifications に配置して簡単にインストールできるようにしようと思っています。

{
    "description": "macSKK for Terminal/iTerm2",
    "manipulators": [
        {
            "conditions": [
                {
                    "bundle_identifiers": [
                        "^com\\.googlecode\\.iterm2",
                        "^com\\.apple\\.Terminal"
                    ],
                    "type": "frontmost_application_if"
                },
                {
                    "input_sources": [
                        {
                            "input_source_id": "^net\\.mtgto\\.inputmethod\\.macSKK\\.(ascii|hiragana|katakana|hankaku|eisu)$"
                        }
                    ],
                    "type": "input_source_if"
                }
            ],
            "from": {
                "key_code": "j",
                "modifiers": {
                    "mandatory": [
                        "left_control"
                    ]
                }
            },
            "to": [
                {
                    "key_code": "japanese_kana"
                }
            ],
            "type": "basic"
        }
    ]
}

Q. アプリによってq/lキーでモードを切り替えてもq/lが入力されてしまう / C-jで改行されてしまう

#119 と同じ問題と思われます。 v0.20.0ではKitty, LINE, Alacrittyについて「空文字挿入」というワークアラウンドを初期設定でもっています。

空文字挿入の設定は、アプリが最前面にあるときに入力メニューから設定可能です。 またmacSKKの設定内の「互換性の設定」からも可能です。

Q. OS標準の入力ソース ( 日本語ABC ) を削除してmacSKKだけにしたい

日本語 の設定で入力モードの英字を有効にしてから ABC, 日本語 の順に削除するとmacSKKだけにしたりできるようです。 参考: https://zenn.dev/yoshiyoshifujii/articles/78798db6472bf4

開発

コントリビュートのガイドを .github/CONTRIBUTING.md に用意しています。

Xcodeでビルドし、 ~/Library/Input MethodsmacSKK.app を配置してからシステム設定→キーボード→入力ソースで ひらがな (macSKK) などを追加してください。

macOS 14以降ではApp Sandboxの制限が強くなりました。すでにリリース版macSKKを使っている環境で開発版のmacSKKを使用すると起動時に 「"macSKK"がほかのアプリからのデータへのアクセスを求めています。」 というダイアログが表示されることがあります。これはリリース版で署名に使用しているTeam IDと異なるProvisioning Profileを使用している (もしくはAd hoc署名を使っている) 場合に同じユーザー辞書ファイルにアクセスすることで発生します。この状態で「許可」を選んでしまうとリリース版のmacSKKが逆に読み込めなくなるなどの想定しない問題が発生する可能性があります。お手数ですがBundle Identifierを変更するなどを検討してください。

バージョンアップ

X.Y.Z 形式のバージョン (MARKETING_VERSION) とビルド番号 (CURRENT_PROJECT_VERSION) の更新が必要です。

ビルド番号

メジャー、マイナー、パッチ、どのバージョンアップでも1ずつインクリメントしてください。 Xcodeから手動でやってもいいし、agvtoolでもいいです。

agvtool next-version

MARKETING_VERSIONの更新

Info.plistCFBundleShortVersionStringで管理するのではなくpbxprojにMARKETING_VERSIONで管理する形式だとagvtool next-marketing-version が使えないみたいなのでXcodeで手動で変えてください。

リリース

  • CHANGELOGを記述
  • バージョンアップ
  • make clean && make release
  • GitHubのReleaseを作成、dmgとdSYMsをアップロード、CHANGELOGをコピペ

ライセンス

macSKKはGNU一般公衆ライセンスv3またはそれ以降のバージョンの条項の元で配布されるフリー・ソフトウェアです。

詳細は LICENSE を参照してください。

macskk's People

Contributors

mtgto avatar ryoon avatar y-yu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

macskk's Issues

エラー報告:SKK-JISYO.L の読み込みでエラーが発生しました

0.15.1にアップデートして、以下の2行の読み込みエラーが出るようになりました。
[2024-01-16 20:44:25.611] [error] 辞書 SKK-JISYO.L の読み込みで 38112行目で読み込みエラーが発生しました
[2024-01-16 20:44:25.611] [error] 辞書 SKK-JISYO.L の読み込みで 38113行目で読み込みエラーが発生しました
以下の2行のようです。
38112 sars-cov /severe acute respiratory syndrome coronavirus/SARSコロナウイルス
38113 sars-cov-2 /severe acute respiratory syndrome coronavirus 2/2019新型コロナウイルス
よろしくお願いいたします。

EUC-JIS-2004 (JIS X 0213) を使っている辞書を読み込めない

https://skk-dev.github.io/dict/ にある SKK-JISYO.fullname には、次のような行があります。

かわさききよつぐ /川﨑清嗣;<JISX0213>フルネーム,精神科医/

https://github.com/skk-dev/dict/blob/master/SKK-JISYO.fullname

通常のブラウザでは"﨑"の字が文字化けしているかもしれません。

これはどうもEUC-JPの拡張で、JIS X 0213の範囲まで広げたもののようです。
https://x0213.org/wiki/wiki.cgi?page=EUC%2DJIS%2D2004

macOSのEUC-JPはこの範囲に対応してないらしく、例えばmacOSのテキストエディタやCotEditorなどでもEUCを指定してもSKK-JISYO.fullnameは開けません。
同じ理由でmacSKKでもEUC-JPでファイルを開こうとするところでエラーが発生し読み込みに失敗します。

image

AquaSKKではこのような文字でも読み込めるように独自で実装しているようです。
https://github.com/codefirst/aquaskk/blob/4.7.5/src/engine/utility/jconv.cpp

ワークアラウンド

ひとまず暫定対応としては、UTF-8に変換したものを使ってください。
iconvを使ってEUC-JISX0213をUTF-8に変換できます。(macOS 14.2.1で確認)

iconv -t UTF-8 -f EUC-JISX0213 < SKK-JISYO.fullname > SKK-JISYO.fullname.utf8

ちゃんとEUC-JP-2004形式の読み込みに対応してもいいですが、優先度は今のところあまり高くありません。

機能のマッピングを設定できるようにする

開発ありがとうございます!
最近macを使い始めたので、これを常用しています。

さて本題ですが、現状 ;l などの特殊な機能のキーが固定されています。
しかし私はazikの仮名テーブルを使っているので、一部のキーが競合してしまいます。
調整できるようにしてもらえませんか?

よろしくお願いします。

A dialog appears each installations to allow App Sandbox Data Container access since macOS 14 Sonoma

Description

Since macOS 14 Sonoma, Installer shows the dialog when you choose to install "SKK-JISYO.L" to App Sandbox Data Container.

image

It seems to relate with App Sandbox changes in macOS Sonoma.
https://developer.apple.com/documentation/security/app_sandbox/accessing_files_from_the_macos_app_sandbox

Investigation

pkg is signed with same team id W3A6B7FDC7

pkgutil --check-signature /Volumes/macSKK/macSKK-0.9.1.pkg
Package "macSKK-0.9.1.pkg":
   Status: signed by a developer certificate issued by Apple for distribution
   Notarization: trusted by the Apple notary service
   Signed with a trusted timestamp on: 2023-10-08 01:11:41 +0000
   Certificate Chain:
    1. Developer ID Installer: Satoshi Gotou (W3A6B7FDC7)
       Expires: 2027-02-01 22:12:15 +0000
       SHA256 Fingerprint:
           4B 04 F9 16 DA 30 68 EC 00 BC 5B B5 F6 E2 C4 88 FC 22 A3 F7 F3 1B
           A1 A5 06 B7 54 27 01 0B 37 12
       ------------------------------------------------------------------------
    2. Developer ID Certification Authority
       Expires: 2027-02-01 22:12:15 +0000
       SHA256 Fingerprint:
           7A FC 9D 01 A6 2F 03 A2 DE 96 37 93 6D 4A FE 68 09 0D 2D E1 8D 03
           F2 9C 88 CF B0 B1 BA 63 58 7F
       ------------------------------------------------------------------------
    3. Apple Root CA
       Expires: 2035-02-09 21:40:36 +0000
       SHA256 Fingerprint:
           B0 B1 73 0E CB C7 FF 45 05 14 2C 49 F1 29 5E 6E DA 6B CA ED 7E 2C
           68 C5 BE 91 B5 A1 10 01 F0 24
codesign -dvv ~/Library/Input\ Methods/macSKK.app
Executable=/Users/user/Library/Input Methods/macSKK.app/Contents/MacOS/macSKK
Identifier=net.mtgto.inputmethod.macSKK
Format=app bundle with Mach-O universal (x86_64 arm64)
CodeDirectory v=20500 size=5128 flags=0x10000(runtime) hashes=149+7 location=embedded
Signature size=9046
Authority=Developer ID Application: Satoshi Gotou (W3A6B7FDC7)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=Oct 8, 2023 at 10:11:39
Info.plist entries=34
TeamIdentifier=W3A6B7FDC7
Runtime Version=14.0.0
Sealed Resources version=2 rules=13 files=7
Internal requirements count=1 size=220

Perhaps the reason is /System/Library/CoreServices/Installer.app does not have write permission to the sandbox of macSKK…?

メモやテキストエディトの状態で放置してディスプレイがオフになるとABCしか使えなくなる

私の環境だけかもしれませんし、MacOS側の問題のようにも思いますが、再現できたので報告します。
M1 MacBook Air Sonoma 14.3をバッテリーで使用していて、MacOS純正のメモやテキストエディトを使っている状態で放置し、ディスプレイがオフになるまで待つと、復帰した時、IMEのアイコンがABCのAになり、メニューバーのIMEアイコンからmacSKKを選べなくなります。
ただ、他のソフトにフォーカスを切り替えると、macSKKが使えるようになるので実用上の問題はあまりありません。

要望: 「変換中のEnterキーで確定+改行」設定

SKKには伝統的に「変換中にEnterキーを押すと確定した上でEnterキーが送出される」設定があります(AquaSKKだと「Enter による確定で改行しない」をオフにした場合に相当)。macSKKにも類似機能があると嬉しいです。

https://tomoya.hatenadiary.org/entry/20101212/1292089972

(SKKの伝統的には「確定+改行」の方がデフォルトのようですが、他IMEや過去バージョンとの互換性を考えると現状の動作を維持した方が良さそうです)

Abbrev入力後に元の入力モードに戻す

macSKKに乗り換えたけど日本語入力時に/を入力したときの挙動がAquaSKKと違うから使いづらい。/をいれると一時的に直接入力に変わって確定したらまた日本語入力に戻ってほしいんだけどなぁ
https://twitter.com/mobcov/status/1760107760786809253

DDSKKでもAquaSKKでも元のモード (/の入力前がひらがなならひらがな、カタカナならカタカナ) に戻るようだったのでそれに追従する。

ローマ字テーブル変更時、送り仮名を伴う変換候補が適切に出てこない。

ローマ字テーブルを変更している者です。
例えば「か」行を c で打てるようにしているのですが(ca ci cu ce co)、sa;cuから「咲く」が候補に出てきません。

そもそもSKKの辞書が 咲k のようにローマ字テーブルを決め打ちした構造になっているので、変更した際にkから始まる候補をcで検索できないのだと思います。

参考に、skkeletonというVimプラグインでは送り仮名の平仮名が確定したらその平仮名からアルファベットを逆引きしてすり替えているみたいです
(sacuさくさkuさkを検索)。
ddskkやlibskkもこの動作だと聞きました。

※ その際送り仮名が「っ」の時に子音アルファベットが確定しないという問題が生じますが統計的根拠から t と決めちゃってるみたいですね。

参考: https://github.com/vim-skk/skkeleton/blob/32e0048f0f4198ef0344b5f177056db7b41bdcef/denops/skkeleton/okuri.ts

勉強不足でSwiftで貢献できずIssueを送ってばかりで申し訳ありません🙇

漢字変換候補ラベルのバリエーション

MacでのSKK開発、ありがたく使用させていただいております。
現在は、漢字変換候補ラベルが"1, 2, 3..."に固定されています。これをEmacs上のddskkの標準設定(skk-henkan-show-candidates-keys)に合わせて、"a,s,d,f..." なども選択できるようにしていただけると有り難いです。
ご検討くださいますようお願いいたします。

非ユーザー辞書におけるブラケット記号の扱い

利用しているSKK辞書に[]を含むエントリが含まれていた場合、その行が正しく読み込めずスキップされてしまいます。

; 例
あれきさんどろす /[Alexandros]/

送りなしエントリの場合は[]をただの記号として扱う(ブロック形式としてパースしない)ことで問題を解決できそうです。
(記号を含むエントリは事実上100%固有名詞、すなわち送りなしエントリなのでこれでOKのはず)

絵文字ビュアーを起動した直後に不具合が生じる

  • macOSはcommand + control + spaceで 👇 のような絵文字ビュアーを表示させられる
    • image
  • しかしこれを使って絵文字を入力した直後にmacSKKが予期しない動作(変換や補完ができない・そもそも入力もできない)が起きる

バージョン

  • macSKK: 1.0.0
  • macOS: 14.5

動画

2024-08-06.17.31.15.mov
  1. 最初は筋弛緩剤を変換できていたが、絵文字ビュアーを使って💪を入力した直後にmacSKKが入力できなくなる
  2. macOSのIME切り替えを使ってmacSKKを使うことができるようになったが、
  3. しかしそのあと筋弛緩剤が変換できなくなる
  4. command + control + spaceを連打すると再び筋弛緩剤が変換できるようになる

注釈や変換候補のパネルがカーソルから離れたところに表示されることがある

100%起きるわけではないのですが、注釈や変換候補のパネルがたまにカーソルにかぶったりカーソルから離れたところに表示されることがあります。

まずはデバッグ用に調査できる環境を作ったほうがよさそう。
関係しそうなイベント↓を過去にさかのぼって見れる機能をデバッグ時のみ有効にするとか。

  • パネル表示時にカーソル位置をどこと認識したか
  • frame位置が変わったことをNSNotificationで取れないか? 取れるならそのイベントをキャッチする

ユーザー辞書(skk-jisyo.utf8)がまれに消えることがある

ログとしては↓のようになっており、気が付いたらある瞬間から件数が0に戻り内容も初期化されていました。
この時間帯(日本時間ですよね?)は、普通に仕事をしておりその瞬間は特に異常は感じておらず、今朝登録したはずのエントリが存在しないことに気付きました。

これまでもまれに発生したことがあって、たまたまかと思っていましたが、ログ上で見えたのでIssueとしてあげます 🙇

なお、環境は以下のとおりです。

  • MacBook Pro 16inch (2019) 2.4 GHz 8コアIntel Core i9
  • macOS 14.5Sonoma
スクリーンショット 2024-08-08 9 25 23
[2024-08-06 12:38:55.296] [notice] 辞書 skk-jisyo.utf8 から 1999 エントリ読み込みました
[2024-08-06 12:44:54.394] [notice] ユーザー辞書を永続化します
[2024-08-06 12:44:54.448] [notice] 辞書のバージョンを作成しました
[2024-08-06 12:44:54.449] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 12:44:55.512] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 12:44:57.365] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 12:44:57.460] [notice] 辞書 skk-jisyo.utf8 から 2000 エントリ読み込みました
[2024-08-06 12:54:45.993] [notice] ユーザー辞書を永続化します
[2024-08-06 12:54:46.095] [notice] 辞書のバージョンを作成しました
[2024-08-06 12:54:46.098] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 12:54:47.173] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 12:54:48.797] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 12:54:48.881] [notice] 辞書 skk-jisyo.utf8 から 2001 エントリ読み込みました
[2024-08-06 12:58:24.794] [notice] ユーザー辞書を永続化します
[2024-08-06 12:58:24.850] [notice] 辞書のバージョンを作成しました
[2024-08-06 12:58:24.851] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 12:58:25.923] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 12:58:28.252] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 12:58:28.335] [notice] 辞書 skk-jisyo.utf8 から 2001 エントリ読み込みました
[2024-08-06 13:03:29.358] [notice] ユーザー辞書を永続化します
[2024-08-06 13:03:29.459] [notice] 辞書のバージョンを作成しました
[2024-08-06 13:03:29.460] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 13:03:30.532] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 13:03:31.976] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 13:03:32.061] [notice] 辞書 skk-jisyo.utf8 から 2001 エントリ読み込みました
[2024-08-06 13:14:13.913] [notice] ユーザー辞書を永続化します
[2024-08-06 13:14:14.011] [notice] 辞書のバージョンを作成しました
[2024-08-06 13:14:14.012] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 13:14:15.088] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 13:14:16.873] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 13:14:16.955] [notice] 辞書 skk-jisyo.utf8 から 2002 エントリ読み込みました
[2024-08-06 13:38:13.719] [notice] ユーザー辞書を永続化します
[2024-08-06 13:38:13.825] [notice] 辞書のバージョンを作成しました
[2024-08-06 13:38:13.827] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 13:38:14.895] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 13:38:16.936] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 13:38:17.032] [notice] 辞書 skk-jisyo.utf8 から 2006 エントリ読み込みました
[2024-08-06 14:03:21.560] [notice] ユーザー辞書を永続化します
[2024-08-06 14:03:21.710] [notice] 辞書のバージョンを作成しました
[2024-08-06 14:03:21.712] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 14:03:22.783] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 14:03:23.522] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 14:03:23.606] [notice] 辞書 skk-jisyo.utf8 から 2006 エントリ読み込みました
[2024-08-06 14:24:04.121] [notice] ユーザー辞書を永続化します
[2024-08-06 14:24:04.176] [notice] 辞書のバージョンを作成しました
[2024-08-06 14:24:04.179] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 14:24:05.246] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 14:24:06.935] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 14:24:07.016] [notice] 辞書 skk-jisyo.utf8 から 2007 エントリ読み込みました
[2024-08-06 14:39:09.571] [notice] ユーザー辞書を永続化します
[2024-08-06 14:39:09.676] [notice] 辞書のバージョンを作成しました
[2024-08-06 14:39:09.677] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 14:39:10.751] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 14:39:11.290] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 14:39:11.372] [notice] 辞書 skk-jisyo.utf8 から 2007 エントリ読み込みました
[2024-08-06 14:48:33.302] [notice] ユーザー辞書を永続化します
[2024-08-06 14:48:33.366] [notice] 辞書 skk-jisyo.utf8 のバージョンが更新されたので読み込みます
[2024-08-06 14:48:33.402] [notice] 辞書のバージョンを作成しました
[2024-08-06 14:48:33.447] [notice] 辞書 skk-jisyo.utf8 から 2007 エントリ読み込みました
[2024-08-06 14:48:34.480] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 14:48:35.764] [notice] 辞書 skk-jisyo.utf8 がアプリ外で変更されたため読み込みます
[2024-08-06 14:48:35.863] [notice] 辞書 skk-jisyo.utf8 から 2008 エントリ読み込みました
[2024-08-06 14:54:37.352] [notice] ユーザー辞書を永続化します
[2024-08-06 14:54:37.406] [notice] 辞書のバージョンを作成しました
[2024-08-06 14:54:37.407] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 14:54:38.413] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 14:54:40.870] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 14:54:40.948] [notice] 辞書 skk-jisyo.utf8 から 2008 エントリ読み込みました
[2024-08-06 15:06:36.712] [notice] ユーザー辞書を永続化します
[2024-08-06 15:06:36.808] [notice] 辞書のバージョンを作成しました
[2024-08-06 15:06:36.809] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 15:06:37.876] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 15:06:39.163] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 15:06:39.247] [notice] 辞書 skk-jisyo.utf8 から 2009 エントリ読み込みました
[2024-08-06 15:08:54.252] [notice] ユーザー辞書を永続化します
[2024-08-06 15:08:54.305] [notice] 辞書のバージョンを作成しました
[2024-08-06 15:08:54.306] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 15:08:55.382] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 15:08:57.212] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 15:08:57.314] [notice] 辞書 skk-jisyo.utf8 から 2009 エントリ読み込みました
[2024-08-06 15:38:37.514] [notice] ユーザー辞書を永続化します
[2024-08-06 15:38:37.724] [notice] 辞書 skk-jisyo.utf8 のバージョンが更新されたので読み込みます
[2024-08-06 15:38:37.725] [notice] 辞書のバージョンを作成しました
[2024-08-06 15:38:37.728] [notice] 辞書 skk-jisyo.utf8 から 0 エントリ読み込みました
[2024-08-06 15:38:38.736] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 15:53:30.664] [notice] ユーザー辞書を永続化します
[2024-08-06 15:53:30.723] [notice] 辞書のバージョンを作成しました
[2024-08-06 15:53:30.724] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 15:53:31.794] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 15:53:33.115] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 15:53:33.119] [notice] 辞書 skk-jisyo.utf8 から 9 エントリ読み込みました
[2024-08-06 16:02:39.883] [notice] ユーザー辞書を永続化します
[2024-08-06 16:02:39.935] [notice] 辞書のバージョンを作成しました
[2024-08-06 16:02:39.936] [notice] 辞書 skk-jisyo.utf8 のバージョンが自分自身に更新されたため何もしません
[2024-08-06 16:02:41.013] [notice] 辞書フォルダで skk-jisyo.utf8 が更新されました (無視)
[2024-08-06 16:02:42.302] [notice] 辞書 skk-jisyo.utf8 が変更されたので読み込みます
[2024-08-06 16:02:42.305] [notice] 辞書 skk-jisyo.utf8 から 14 エントリ読み込みました

要望: 仮名テーブルのカスタマイズについて

概要

AquaSKKのように仮名テーブル (rule file)を自由に弄れるようにしてほしい。

ユースケース

  1. 約物

現在は!?()などの約物は半角になっていますが、ユーザが全角にすることもできるようになります。
また、z+{任意のキー}で約物を打つ機能も自由に拡張したいです。

vuと打つと「う゛」になりますが、これを 「ゔ」に置き換えられるようになります。
ただし、これを実現するには仮名テーブルのファイルがutf-8にも対応している必要があります。

一部のアプリケーションで英字モード/カタカナモードなどに切りかえる際に `l` や `q` が入力される

便利に使用させていただいております。

KittyやLINE、weztermなど一部のアプリケーションでは、入力モードを切りかえる際入力に用いていたLキーやQキーの文字がそのまま入力されてしまうことがあります。

参考までに、AquaSKKだと空文字挿入などを行うことで対応しているようです。
https://github.com/codefirst/aquaskk/wiki/Workaround

LibreOfficeで fn + delete キー が効かない

MacSKKの問題か、十分に切り分けができていないのですが、報告いたします。
LibreOffice Writerで、"fn"キー + "delete"キー(Windowsにおけるdelete)が効きません。
・OS標準の英語入力および日本語入力、AquaSKKでは効きます。

macOS 14 Sonomaで入力メニューからアプリ設定が開けなくなった

入力メニューに表示されるメニュー項目は InputController#menu が返しているもので、NSMenu + NSMenuItemで作成しています。
macSKK v0.9.1現在、UI設定画面をSwiftUIのAppやSettingsを使っているため、公開APIで設定画面を表示することができず、非公開APIである showSettingsWindow: を使っていました。

NSApp.sendAction(Selector(("showSettingsWindow:")), to: nil, from: nil)

ところがmacOS 14 Sonomaで上記のコードは動かなくなりました。
このためmacOS 14 Sonomaでv0.9.1以下のバージョンを使っている場合、設定画面を開けなくなりました。

設定画面を開く方法としてmacOS 14では非公開APIの代わりにSwiftUIのViewに SettingsLink が用意されましたが、入力メニューは素のNSMenuItemしか受け付けていないためSettingsLinkを使うのは難しいです (無理ではないのかもしれないけど、入力メニューに表示するNSMenuItemにアイコンをセットしても無視されるし、たぶんかなり難しい)。

ひとまず暫定対応としては変換候補などと同様にNSWindow + NSHostingControllerで設定ウィンドウをSwiftUIのSettingsとは別に開く形式で回避するのがよさそうかなと考えました。

ちなみに試しにSwiftUIのWindowやWindowGroupを使って設定画面の代わりに使えないかも考えましたが、起動時にウィンドウを開かないアプリを作ることができなさそうなのであきらめました。

アプリのエントリーポイントまで全部SwiftUIでやることに無理が生じているのは元からだったんですが、さすがに限界を感じたので起動回りはNSApplicationDelegateを使ったSwiftUI以前の起動方法に戻そうと思います。
設定画面や変換候補パネルなどビュー自体はSwiftUIにしてNSHostingControllerを使うことは今後もやっていくつもり。

SKK_JISYO.JIS3_4の読み込みに失敗する

現象

https://github.com/skk-dev/dict で配布されているSKK-JISYO.JIS3_4を読みこもうとすると
エラーmacSKK.EucJis2004Error.convert が発生し読みこみに失敗する.

ログ

2024-05-13 12:50:48.797] [notice] SKK辞書 SKK-JISYO.JIS3_4 を読み込みます
[2024-05-13 12:50:48.801] [error] 入力に不正なバイト列が存在します
[2024-05-13 12:50:48.801] [error] 辞書 SKK-JISYO.JIS3_4 の読み込みでエラーが発生しました: Error Domain=macSKK.EucJis2004Error Code=1
[2024-05-13 12:50:48.801] [notice] 辞書 SKK-JISYO.JIS3_4 がプロセスから削除されます
[2024-05-13 12:50:48.801] [notice] SKK辞書 SKK-JISYO.JIS3_4 の読み込みに失敗しました!: Error Domain=macSKK.EucJis2004Error Code=1

関連しそうなissue

フルキーボードアクセスをオンにすると変換できなくなる

M1 MacBook Air Sonoma 14.3.1、macSKK 0.17.2
アクセシビリティ > キーボード > フルキーボードアクセス をオンにすると、変換ができなくなりました。
ただ、送り仮名付きの場合は変換できました。また再現できないものでしたら、すみません。
よろしくお願いいたします。

スラッシュやセミコロンを含む単語の扱い

辞書読み込み時

(concat ...)を使ってエスケープされている(主に非ユーザー辞書の)エントリにおいて、\057は適切に/に変換されるものの、\073;にならずそのまま出力されてしまいます。

ユーザー辞書登録時

スラッシュやセミコロンを含む単語を辞書登録するか既存の辞書から変換し、その後ユーザー辞書を保存すると、スラッシュやセミコロンがエスケープされない状態でファイルに保存され、次に変換したときに意図しない候補が出てしまいます。

たとえば「ふぇいとぜろ」に対し「Fate/Zero」と変換してユーザー辞書を保存すると、ふぇいとぜろ /Fate/Zero/というエントリが追加され、次に変換した際に「Fate」と「Zero」という正しくない候補が出てしまいます。「STEINS;GATE」の場合も保存されるエントリがしゅたいんずげーと /STEINS;GATE/となるので同様の問題が発生します。

新規候補登録中にさらに新規候補登録しようとしても現在の新規候補登録画面のままになる

概要

候補Aの新規登録中に、候補A中の部分語句Bを新規登録する必要が出てきた場合、候補Bの登録画面に移動することができません。
登録状態のネストが上手くいっていないようです。

詳細

  1. 新規候補登録中の画面です。この状態でSpaceを押下します。
image
  1. [登録:かいせんし] に移動してほしいところ、「▽かいせんし」入力前の状態に戻ります。
image

v0.23.0でQwerty配列以外の配列を設定で選ぶとlやqなどが機能しない

#159 でC-jやqやlなど、SKKの操作用のキーをキーコードで判定するように変更しました。
ですが、macSKKのキー配列変更でQwerty以外を選ぶと前述のキーで操作できなくなることがわかりました。

これはmacSKK設定でのキー配列の変更のようにソフトウェア的なキー配列の変更をしても、キーを押したときのキーコードはQwertyのときと変わらないということに気付かなかったことによるバグです。
例えばAキーを押したときにkeyCodeは1、Sキーを押したときにkeyCodeは2となります。
設定でDvorakを選んでいた場合、Sと印字されているキーを押したときに入力されるのは "O" ですが、keyCodeは2のままになっています。

設定で非Qwerty配列を使っていてv0.23.0に上げてしまった方はひとまずv0.22.2をご使用ください。
https://github.com/mtgto/macSKK/releases/tag/0.22.2

このバグの修正後、v0.23.1としてリリースする予定です。

要望: シンボリックリンクのSKK辞書サポート

SKK辞書をNeovimプラグインとしてGItHubから取得し管理しているため、~/Library/Containers/net.mtgto.inputmethod.macSKK/Data/Documents/Dictionaries 配下にシンボリックリンク形式で辞書を配置したいです

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.