SKKIME シンプルかな漢字変換プログラム 1.5改
SKKIME 1.5改
SKK勝手に布教委員会
SKKIME1.5改の開発は終了しました。魂は
SKKFEPに受け継がれていますので、以後はそちらをご利用ください。
ダウンロード
このプログラムは
本プログラムは
tatari氏が作成された skkime1.5 の改造品です。
オリジナルはDDKベースの開発環境向けでしたが、本バージョンではVS2010/SDK7.1/WiX3.5+WDK7.1.0の最新の開発環境向けに手直しを行いました。
さらにインストーラ機能の改良とレジストリ設定の見直し、バグ修正等を行ないました。
SKKのご紹介
SKKIMEは、Emacsの日本語入力環境であるSKKの操作方式をWindowsの日本語入力(IME)として利用するプログラムです。
SKKは佐藤雅彦教授により開発されたEmacs用の日本語入力プログラムです。日本語の文法解析を一切行なわないという斬新な設計思想で作られており、シフトキーとスペースキーの補助操作によって語句の区切りを人間側が明示することで、口語や方言、造語といった従来の日本語入力方式が特に苦手とする文に対しても送りがなの誤認識が発生しないという優れた特性を持っています。
なお、文法解析がない故に同音異義語が苦手であるといった問題はありますが、それを補うためにシンプルな学習機能を持っており、変換と辞書への追加削除による出現順序の調整といった一連の操作を、文書入力の途中であることを意識せずシームレスに行なえる独特の操作形態を持ちます。
現代の多くの日本語入力システムは、大容量の辞書による誤り訂正などを駆使した、誰もが初見で使える説明不要の親切設計というのが主流です。SKKはシフトキー操作等の特殊性から、こうした流れとは程遠い存在ですが、それ故に文法解析ミスによって発生する余分な操作・思考の中断から開放されます。確かに最初は戸惑うかこともあるでしょうが、それほど時間をかけないうちに、自分が「思った通りに」日本語を入力できている、という瞬間を実感できるはずです。
もしSKKに興味が湧いたら、ぜひ本プログラムや原作のSKKIMEやSKKを体験してみてください。
今回から全ての環境でインストーラ方式を採用したので、いつでも気軽にインストール/アンインストールを行なえます。
常駐部分のメモリ消費量を抑える改良を加えてありますので、システムへの負荷増加を気にせず入れっぱなしにしておくことができます。操作に慣れるまでは従来のIMEと併用し少しづつ移行することも可能です。
めくるめくSKKの世界へあなたを誘う魅惑の情報をいくつかご紹介します。
- SKKとは (エスケイケイとは) [単語記事] - ニコニコ大百科
- SKKへの愛に満ちたすばらしい紹介記事です。ふーん、SKKに興味があるんだ?とりまこれ読み。大丈夫だ。問題ない。ちょっとだけ!先っちょだけ!恐くない痛くない考えるな感じるんだSKKは初めてか?力抜けよ
- SKK Openlab
- 開発終了した本家SKKに代わって開発を行なっているSKK Openlabのページです。SKK辞書ダウンロードやメンテナンス情報、SKKの生い立ちなどの資料もあります。
- SKK - Wikipedia
- ウィキペディア創設者ジミー・ウェールズからの緊急のお願いです。で有名なWikipediaよりSKKの記事
あとはGoogle先生、お願いします!
従来版のSKKIMEから移行される方へ(Windows XP環境のみ)
本プログラムでは従来版とインストール/アンインストール方法が根本的に異なっているため、従来版から移行する際には一度従来版をアンインストールする必要があります。しかしながら従来版のWindows XP版 skkime1.5にはアンインストーラが存在しないため、以下の操作を手動で行なって登録解除を行なう必要があります。
A.
【テキストサービスフレームワークの登録解除】 コマンドプロンプトを開き、以下のコマンドを入力してENTERを押す
- regsvr32 /u C:\WINDOWS\ime\SKKIM15\skimic.dll
すると「(ファイル名)の DllUnregisterServer は成功しました。」とのメッセージが出るのでOKを押す。
B.
【レジストリエディタの起動】 同様にコマンドプロンプト内に以下のコマンドを入力し、レジストリエディタを起動する
- regedt32
C.
【キーボードレイアウト設定の削除】 "マイ コンピュータ\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts" を開き、その中の "E0110411"のキー(フォルダ)を削除する。
似たような名前が多く見間違えやすいので注意。キーの中に "日本語 (SKKIME1.5)"と書かれた文字列が存在するので削除する前によく確認すること。
D. 再起動
E.
【念のため消えたことを確認】 コントロールパネルより「地域と言語のオプション」を選択し、「言語」タブ→「詳細(D)」ボタンを操作し「テキストサービスと入力言語」のウィンドウを表示します。SKKIMEが消えていればアンインストール成功です。
F.
【不要なファイルを削除】 以下のファイルを削除します。
- C:\WINDOWS\ime\SKKIM15 フォルダとその中身を削除
- C:\Windows\System32\skki1_5u.ime ファイルを削除
以上で従来版のアンインストールが完了します。
辞書については、次章で説明する場所にファイルを移動すればそのまま継続して利用可能です。
インストール前の準備
1.
【Cランタイムの導入】 まず最新のCランタイムを導入してください。
ランタイムが正常に導入されていない場合、本プログラムはインストールすらできません。ご注意ください。
マイクロソフトのページから以下をダウンロードします。32ビット版OSをお使いの方は32ビット版を、64ビット版OSをお使いの方は仲良く両方インストールしてください。インストール後の再起動は不要です。
- 32ビット版 【ダウンロード】 Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x86)
- 64ビット版 【ダウンロード】 Microsoft Visual C++ 2010 SP1 再頒布可能パッケージ (x64)
Windows Vistaをお使いの方は、Windows Installer 4.5へのアップデートが必要です。こちらもインストールしておいてください。こちらはインストール後に再起動を求められる場合があります。
- 【ダウンロード】 Windows Installer 4.5 Redistributable - 日本語
- 32ビット版は Windows6.0-KB942288-v2-x86.msu を、
- 64ビット版は Windows6.0-KB942288-v2-x64.msu をダウンロードして実行してください。
2.
【辞書の格納】 辞書ファイル SKK-JISYO.L を
SKK Openlab からダウンロードし、ユーザフォルダにSKKIMEというフォルダを作成してその中に解凍したものを置きます。
- SKK辞書Wikiから SKK-JISYO.L.gz をダウンロード後、適当な解凍ツールで解凍してください。
辞書はOSによって置き場所が異なります。以下の場所に置いてください。(これ以外の場所に置く場合は追加設定が必要です)
- Windows XPの場合
- C:\Documents and Settings\(利用中のユーザ名)\Application Data\ を開いて SKKIME フォルダを作成
- C:\Documents and Settings\(利用中のユーザ名)\Application Data\SKKIME\SKK-JISYO.L を置く
- Windows Vista/7の場合
- C:\Users\(利用中のユーザ名)\Appdata\Roaming\ を開いて SKKIME フォルダを作成
- C:\Users\(利用中のユーザ名)\Appdata\Roaming\SKKIME\SKK-JISYO.L を置く
なお、従来版から移行した方は、このフォルダにユーザ辞書ファイルを user.dic という名称にして置いておくと、そのまま内容を引き継ぐことができます。
インストール操作 (Windows XP以前の場合)
Windows XPをお使いの方は以下の操作を行なってインストールしてください。
3.
【インストーラの実行】 お使いの環境に合ったインストーラを実行してください。
- skkime15a_xp_32bit.msi Windows XP 32ビット版
- skkime15a_xp_64bit.msi Windows XP 64ビット版
インストーラを実行すると、必要なプログラムの転送とシステムへの登録、辞書設定等、動作に必要なレジストリ設定が自動的に行なわれます。
Windows XPの場合、この後いくつか設定を変更して再起動しないとまだ使えるようにはなりません。
【Windows XPはこの後再起動必須】 XP版インストーラはまだ完成度が低く、再起動を則すようなメッセージを一切出しませんが、この後再起動しないとSKKIMEは正常に動作しません。設定後速やかに再起動が必要ということを留意しておいてください。(まだこの時点では再起動する必要はありません)
4.
【テキストサービスと入力言語の設定画面を開く】 インストーラ終了後、コントロールパネルより「地域と言語のオプション」を選択し、「言語」タブ→「詳細(D)」ボタンを操作し「テキストサービスと入力言語」のウィンドウを表示します。
5.
【規定の言語の変更】 「規定の言語(L)」で「日本語 - SKKIME 1.5」を選択します。選択後はサービス一覧の中にあるSKKIMEの行が強調表示になっていることを確認し、「OK」を押して「規定の言語(L)」の設定を反映させてください。
- このウィンドウの右横にある「プロパティ(P)」のボタンを押すことでSKKIMEの設定画面を開くことができます。設定内容は標準設定のままでも問題ありません。誤って開いてしまった場合は何も設定せずそのまま閉じれば大丈夫です。
6.
【再起動】 これで設定は全て終わりました。速やかに再起動してください。
7.
【動作確認】 再起動後、メモ帳などを起動して半角/全角キーを押すとSKK方式で日本語入力が行なえます。
インストール操作 (Windows Vista以降の場合)
Windows Vista以降であれば非常に簡単に導入できます。
3.
【インストーラの実行】 お使いの環境に合ったインストーラを実行してください。
- skkime15a_vista7_32bit.msi Windows Vista/7共通 32ビット版
- skkime15a_vista7_64bit.msi Windows Vista/7共通 64ビット版
インストーラを実行すると、必要なプログラムの転送とシステムへの登録、辞書設定等、動作に必要なレジストリ設定が自動的に行なわれ、そのままSKKIMEが利用可能となります。この状態で既にアプリケーション個別のIME設定をIMEバーから変更することで、SKKIMEが利用可能です。
- ただし、そのままではシステムの規定の言語設定は変化しませんので、以下の操作で既定の言語を変更しておくのがお勧めです。
4.
【テキストサービスと入力言語の設定画面を開く】 コントロールパネルより「時計、言語および地域」の下にある、「キーボードまたは入力方法の変更」リンクを選択し「地域と言語」のウィンドウを開きます(タブ名は「キーボードと言語」です)。その中にある「キーボードの変更(C)」ボタンを押すと「テキストサービスと入力言語」のウィンドウが表示されます。
5.
【規定の言語の変更】 「規定の言語(L)」で「日本語 - SKKIME 1.5」を選択します。「OK」を押して「規定の言語(L)」の変更を反映させてください。
- ウィンドウ下部の「インストールされているサービス(I)」のIME一覧の「SKKIME 1.5」を左クリックで選択後、ウィンドウの右横にある「プロパティ(P)」のボタンを押すことでSKKIMEの設定画面を開くことができます。設定内容は標準設定のままでも問題ありません。誤って開いてしまった場合は何も設定せずそのまま閉じれば大丈夫です。
既定の言語を変更後は、新たに起動したプログラムに対してのみ設定が反映されます。設定が反映される条件がよくわからない場合や、何らかの常駐アプリケーション等を使用している場合は、念のためここで一度再起動しておくことをお勧めします。(もっと細かいことを言うと、インストール直後、再起動せずに統合レベルHighのプロセスが最初にSKKIMEを利用すると、再起動するまでSKKIMEの変換機能に不具合が発生することがわかっています。この現象が起きた場合も、一度再起動すれば解決します。)
5.
【動作確認】 インストール完了後、メモ帳などを起動して半角/全角キーを押すとSKKの方式で日本語入力が行なえます。
アンインストールせずに元のIMEと切り替える方法
前章と同様に「テキストサービスと入力言語」のウィンドウを表示し、「規定の言語(L)」を元に戻すことで、最初使っていたIMEにいつでも戻すことができます。同様に再びSKKIMEへ切り替えることもできます。
他にも、ウィンドウ下部にある「キーの設定」を使って特定のキー操作で入力方式を切り替えることもできます。このあたりはWindowsの標準操作ですのでヘルプや各種参考書などを参照ください。
アンインストール方法
コントロールパネルのプログラムの追加・削除メニューより削除を選んでください。
削除の際、モジュールを利用中のアプリケーション一覧が表示されることがありますが、無視してそのまま続けても構いません。その場合は手動で再起動を必ず行なってください。
また、Windows XP系の場合は(インストーラは一切メッセージを出しませんが)再起動するまでは正常に削除されません。必ず再起動してください。
さらに、Windows XP系においては、アンインストール後再起動した場合でも、テキストサービスの覧にUSまたは日本語という項目が残ってしまうことがあります。この場合は手動で削除してください。
前回の改造版からの更新点
- アンインストール→インストールで入れなおし推奨。
- AbbrevモードでCTRL+Qした時、先頭の1文字だけ変換され残り255文字が空文字で埋まるかなりとんでもないバグを修正。SKKの動作の根幹に関わる巨大な耳垢が取れて僕、満足!
- Abbrevモードを原作と互換に戻した。
- z(またはx,f,j)+アルファベット以外の記号入力のシーケンスの一部が間違ったままだったためEgg/SKK互換のものに修正。SKKFEPと同じ操作に直した。
- この先ずっと1.5などという数字を背負い続けるのは嫌なのでテキストサービス名からバージョン番号を削除。
- タスクバーのアイコンが表示されないバグ(原作からのデグレード)を修正。正常にアイコンが表示されるようになった。
- SKKIME1.5とは異なるフォルダ・レジストリを用いることで、Vista以降の環境であればSKKIME1.5と共存可能とした(共存させてもあまり意味はないが自己満足って大事)
- Windows XP以前に適用する場合はオリジナルSKKIMEのアンインストール操作が必須となった。
- アンインストールの方法は、regsvr32 でTSFを解除しレジストリ系の削除してリブートすると奇麗に消えてくれるはず。このスクリプトは別途入手してください。
インストーラ関連
- MSIファイル作成方法を変更。WiX2.0(独立)からWiX3.5(VS2010統合版)に移行。Win32(x86)/x64用のスクリプトを一本化
- インストーラ側でユーザ辞書・ファイル辞書のデフォルト設定を行なうことで、インストール後辞書ファイルを置けば即動作するよう改良(まだ動作試験中・最終仕様は未定)
- x64版でskkiservの起動レジストリがWOW64(32ビットエミュレータ)側にあった問題を修正。HLKM側ではなくHKCUの64ビット側に正しく登録するようにした。
- Windows XP Professional x64 Edition の時のTSF32ビットモジュールの登録場所をVista/7と同じ場所に移動しインストーラを共通化
GUI関連
- MULTI_SZ型の文字列リストの区切りを2文字から1文字に短縮し、行末の不要な区切り文字を削除し格納効率を2倍程度向上
- MULTI_SZ型の文字列リスト中にエスケープされた文字が含まれていると文字の組み合わせによってはデコードに失敗するバグを修正
- skimic のレジストリ設定の読み込みバグ(OkuriCharAlistのカウント値に句読点の個数が入ってしまう)を修正
- ローマ字変換ルールの収納順序が設定変更するたびに入れ変わってしまう仕様(?)を、なるべく登録順を維持し続けるように修正
- MALLOC直後のNULLチェックが抜けている箇所を修正
- 送りがな読み換え規則を再編集できないバグを修正。ようやくレジストリ自体の設定が正常に行なえるようになったレベルであり、この機能自体は未テスト
- 全角ベクタのレジストリ保存フォーマットを変更しサイズを2/5に縮小
- 全角ベクタの読み込み処理のメモリリークを修正
TSF/IME関連
- インストーラ対策のためXP以前の版でもTSFを生成するように変更
- BracketParen/OkuriCharAlist/ZenkakuVectorのデフォルト値の判定等においてGUI側の設定が正しく反映されなかった(恐らく古いバージョンのコードであり、常識的な範囲内では問題なく動いているように見える)バグを修正
- (WinXP版のみ)レジストリから文字列ペアを読み込む処理において、反対側に終端文字を書き込んでしまうバグを修正。(全バージョン)同様のバグが出ないよう余分な終端文字の書き込みそのものが不要になるよう処理の流れを修正。
- 各種デフォルト値がGUIと同じになるよう修正(まだ全部追いきれていない。主にGeneric/変換系をチェック完了)
- 全角ベクタの読み込み処理のメモリリークを修正(GUI側と同様)
サーバ関連
特になし
まだ一部しかチェックできていません
デバッグを手伝っていただける勇者様募集中
直近の予定
インストーラ回りの整備
- 本当はインストール側で自動的に設定を切り替えるべきであると認識していますが、自動的に設定を行なう方法がまだわかっていません
- XP版でアンインストール後に言語設定が残る現象はインストーラ側の不備と認識していますが、直す方法がまだわかっていません
- XP版もWindows Installer 4.5ベースに移行すれば何の問題もなくなるかもしれない。要検証
Vista以降でサーバを常にMediumで起動するようにし、自動起動をなくし未使用時のリソース負担を完全にゼロに。長時間未使用の場合のサーバの自動終了など
緑化作戦を開始
- 変換処理のあたりがどういうロジックで動いているのかまったくわからん…
以下は古いので書き直します
ねむい
修正箇所について
VisualStudioに対応させるため、原作のソースに一部手を加えています。
それに加えてバグと思われる動作の訂正と、独断と偏見による修正を施してあります。
以下に記録が残っている範囲で修正箇所の一部を記します。
skimconf 関連
- プログラム側はWin2k/XP/Vista/7全共通とした。ただしまだデータ側が異なる(辞書のデフォルト値を固定値で持っている)ためXP以前/Vista以降の2種類のバイナリが存在する。将来は環境を自動判定してデフォルト値を切り替えるようにする予定。
- プログラム的には単に文字列を変更しただけの大したことのない変更だが*UI的には重要*。バージョン管理目的の日付が、ユーザが普段目にする場所に常に表示されているというのは美しくないので削除。メジャーバージョン番号は残すべきか迷ったが、他のIMEでは普段は表示されないようなので削除(他IMEから移行してきたばかりのユーザや試用評価中のユーザが感じる違和感を最小限にするため)。他のIMEの設定画面に似せるためタイトル部分にSKKの元の意味である「シンプルかな漢字変換プログラム」を追加し日本語変換処理に関する事象を扱っていることを明示。
- ユーザ定義キーマップを選択時にJIS X0201半角カナの入力モードへ移行できなくなるバグを修正。
- ユーザ定義キーマップのデフォルト値に"skk-toggle-katakana"を追加
- キーマップの設定のfunction表示にも"skk-toggle-katakana"を追加
- ユーザ定義キーマップの保存時にModeMapEx側の変更が反映されないバグを修正
- キーマップの設定→キー設定のキー名を変更。8進数なんてヒトが読む数値じゃない。じゃあ16進数ならいいのか、という話ではなく、そもそも文字コードに依存した表記が(設定上に重要な箇所に)散見されるのが問題。Space や Delete といったキーコードとの違いが一目でわかる良い表記はないものか。
- \40 → \x20
- \177 → \x7F
- キーマップで既に Space Delete が使われているため重ならないようにした結果こうなった。
- その他のキーの並び順も変更。Alt+Kanji(Alt+半角/全角キー)を単独化。
- Hankaku/Zenkakuを追加したのでレジストリの直接操作をせずにGUI側から半角/全角キー単独押下による変換モードの変更が可能となった。(後にレジストリ操作・GUI操作一切なしで単独押下を認識するようになったのでこの設定機能は不要となったが特に害があるわけでもないので残してある)
- 自動変換開始キーワードのデフォルト値の"]〕"がくっついていたので修正。
- 自動変換開始キーワードが編集できない(!)バグを修正。自動変換開始キーワードは自動変換を行なわない限りはレジストリに保存しないように変更。自動変換開始キーワードは一度でも変更してしまうと二度とデフォルト値が戻せなくなるため、内容を空にして詳細設定を抜けた時はデフォルト値で初期化するように変更(本来なら、ここは他の項目と同じ動きとして、「機能無効」状態で詳細設定ダイアログが開かれた時にデフォルト値を設定するほうが一貫性が保たれるとは思うのだが、現在のGUIデザインのままでは編集失敗と勘違いされそうなためあえてこうした。手抜きとも言う)。事実上編集不可能なバグといい、この機能は誰も使ってないんじゃなかろうか…。ぶっちゃけ私も使う気ないし。
- というわけで自動変換および数値変換の初期値を「無効」に変更。
- 読点と句点の表記が逆になっている箇所を修正
- 「括弧・閉じ括弧の編集」ダイアログが正常に動作していないバグを修正
- ローマ字かな変換のルールの編集時の状態番号の並び順序を上から0123に変更
- キーマップの設定→キーの追加・変更→キー設定のmode-map部分に「登録対象にならない"-"」が表示されないよう修正
- egg-like-newlineをデフォルト「有効」に変更。無効ではMSIMEと挙動が違いすぎて初心者の混乱を招くため。
- 閉じ括弧の自動挿入/送り仮名の読み換えのデフォルト値を「標準(有効)」から「無効」に変更。特に後者は内容が空なので、初期設定は無効になっているほうが妥当と考える。
- 外観をデフォルト赤線つきとした。「下線なし」がデフォルトだと表示できないものと勘違いされてしまう恐れがあるため。
- Return → Enter
- Control → Ctrl
- Menu → Alt
- Kana/Hunguel → Kana
- Kanji/Hanja → Alt-Kanji
- Escape → Esc
- Convert → Henkan
- Non-Convert → Muhenkan
- Mode-Change → Mode Change
- Multiply → Numpad *
- Add → Numpad +
- Separator → Numpad Enter
- Minus → Numpad -
- Decimal → Numpad .
- Divide → Numpad /
- Left SHIFT → Left Shift
- Right SHIFT → Right Shift
- Left CONTROL → Left Ctrl
- Right CONTROL → Right Ctrl
- Left MENU → Left Alt
- Right MENU → Right Alt
- Stop Media → Media Stop
- Play/Pause Media → Media Play/Pause
- Start Mail → Launch Mail
- Select Media → Launch Media Select
- Start Application 1 → Launch Application 1
- Start Application 2 → Launch Application 2
- OEM_1 (`;:') → OEM 1 (;:)
- OEM_PLUS (`+') → OEM +
- OEM_COMMA (`,') → OEM ,
- OEM_MINUS (`-') → OEM -
- OEM_PERIOD (`.') → OEM .
- OEM_2 (`/?') → OEM 2 (/?)
- OEM_3 (``~') → OEM 3 (`~)
- OEM_4 (`[{') → OEM 4 ([{)
- OEM_5 (`\|') → OEM 5 (\|)
- OEM_6 (`]}') → OEM 6 (]})
- OEM_7 (single-quote/double-quote) → OEM 7 ('")
- OEM_8 → OEM 8
- OEM_AX → OEM AX
- OEM_102 → OEM 102
- ICO HELP → ICO Help
- OEM WSCTRL → OEM Wsctrl
- OEM CUSEL → OEM Cusel
- OEM ATTN → OEM Attn
- OEM FINISH → OEM Finish
- OEM COPY → OEM Copy
- OEM AUTO → Hankaku
- OEM ENLW → Zenkaku
- OEM BACKTAB → OEM Backtab
- カスタマイズ時のUIにおいて表記が実際のキー刻印と異なると初心者には混乱の元。カスタマイズが重要なアプリならばなおさら。主要なキーは日本語化すべき。暇なときになんとかする。
以下はリソース変更に関する修正
- 一部アイコンがニュートラル言語として宣言されていたが日本語側に統一
- 不要なリソース(メニュー、文字列、ダイアログ等)を削除
- 併せてメインアイコンを小型のものに変更し、プログラムサイズをファミコンソフト1本分(40KB)程度縮小
- ダイアログのフォントをMS UI Gothic(9pt)に統一
- 用語の統一(変更→編集, ベクタ→ベクトル, Preview→プレビュー など)
- MB_YESNOによるメッセージボックスはキー操作(ALT+F4やESC)によるキャンセルができず一刻も早く滅びるべき存在なので、すべてMB_OKCANCELに変更
- キーボードでの操作を考慮して各種ダイアログの設定を変更。ラジオボタンのグループ等やALT+アルファベットの指定、TABによるフォーカス順序などを調整
- その他ダイアログ内容の調整
skimic 関連
- Win2k/XP系のビルドとVista/7系のビルドの2系統のみとした。XP以前では実質使われていないっぽい?
- ローマ時かな変換ルールのデフォルト設定に「mm:0→m:0=ッ/っ」が抜けていたので追加
- JIS X 0201カナルールのデフォルト設定に「hh:0→h:0=ッ」が抜けていたので追加
- 自動変換開始キーワードのデフォルト値の"]〕"がくっついていたので修正
- ローマ字かな変換ルールのデフォルト設定に全角エクスクラメーションがない(コロンやセミコロン、クエスチョンマークはあるのに)ので追加。(注意: オリジナルのSKKIMEとは異なる動作になります。定義をGUIで削除すれば同じ動作に戻ります)
- JIS X 0201カナルールのデフォルト設定からJIS X 0201カナに該当しない文字を削除
- 候補選択キーのデフォルト値を変更
- IMEのオン/オフ操作に関して、レジストリがない場合のデフォルト操作にも単体での半角/全角キーを追加。GUIやレジストリ設定に頼る必要なし。
- キーボードアイコン表示関連レジストリを収納するパス(CICERO)が生成されないようなので、パスをGenericと同じ位置へ移動(Genericは最上位のパスへと移動)
skkimeu 関連
- 今回はWinXP版のみとした。Vista以降は不要となるレガシーなモジュール。
- WINVER=0x500でWin2K/XP共用としてコンパルしても動くようなので一本化したかったが十分にテストできていないので今回は共通化は見送り。念のため0x501設定のバイナリとなっている。
- XP版はほとんど境界テストしてないけど気合いで。
- skki1_5uというバージョン名を含んだ名称は美しくない。せめてプロジェクト名はバージョン番号と分離したいと願い、オリジナルのDEFファイル内に記述されていたモジュール名「SKKIMEU」に合わせて名前を変更。
- このモジュールのビルド時のみWindows Driver Kit 7.1.0が必須
- ごく一部のヘッダを使うだけなので、うまく抜き出せばフルインストールする必要はなさそう。でも普通はDDKとか全部入ってるものだし未確認なのでWDK基本部分のインストール必須としておく。
- あとはだいたい skimic と同じ変更が反映されてるはず。
skkiserv 関連
- Win2k/XP系のビルドとVista/7系のビルドの2系統のみとした。プログラムの構造が微妙に異なっており、まだ共通化できていない。このあたりも実行時に判定して将来は一本化したい。
- ライブラリを作らず直接バイナリを生成
- リリースビルド時に一部のデバッグコードが含まれないように変更(実質何も変わらないはず)
(regcomp.c あたりにもデバッグコードが残っているのでこれもそのうち消したい)
- ウィンドウイベントが来なくなったら3分おきに自分の動作に不要なメモリを自動開放するようにして未使用時のメモリ占有量を改良
その他共通
- レジストリ収納パスおよび内部コマンドの並びを一新。本バージョンから過去のバージョンとの互換性は完全になくなり、一部のモジュールだけを選択的に使うことは不可能となったので注意。
最初はWDKでコンパイルしていたが、コンパイラが微妙に古いのでVC2010に移行。Vista/7用モジュールはプリコンパイルドヘッダを有効化してコンパイル時間を短縮。
コンパイルに必要ない余分なファイルはばっさり削除。元のドキュメント類が必要な場合はオリジナルのソースアーカイブからコピーするべし。
x64版でLRESULTの値をintに落としてからCB_ERRと比較している箇所は64ビットのまま比較するように修正。
環境変数TEMPにはRAMディスクを想定。ビルド後はクリーンしない限りTEMPに大量に中間ファイルが残る設定なので注意。
co (Twitter♺)
以下は試作中の作業メモの写し。
他人が読んでも役立つ情報はないかもしれないけど、一応更新予定とか考え中のネタを残しておく。
ある程度試作が進んだ段階でまとめ直す予定。
TODO
気になっていること
いわゆるXMouse(マウスオーバーしたウィンドウをZオーダーを変えずにアクティブにする)によって変換候補の窓を持つウィンドウのフォーカスを変更すると、ウィンドウ外(特にデスクトップ左上付近)に一瞬ゴミが表示される。表示が一瞬崩れるだけなで副作用もなく実用上問題はないのだが、仕様だとしてもちょっと美しくない。
ついでに言うと変換候補ウィンドウのZオーダが最前面になるため(視認性が良くなるので悪くはないのだが)、奥にあるウィンドウで変換を行なっている時に不自然な表示になる。ひとまずこれは仕様ということで問題ないがZオーダーを対象ウィンドウのきっかり1つ上に設定する方法があるか調査すべき。
2k/XPではskimic.dllは不要なのでは?regsvrで未登録でも問題なし、ファイルを消しても問題なし。今回のビルドでは作らないようにした。INFも変更予定。
「読み換え規則の編集」ダイアログは横一列に並べたほうが見やすそう
「特殊キーの追加」ダイアログの表示内容がおかしい気がする。要調査
Windows 7 x64だとメモ帳の時候補窓の横幅が妙に狭い(等幅フォントで82文字程度)。XP版と異なり、親のウィンドウサイズがうまく取れないとデフォルトサイズになっている?Firefoxなら問題ない。
というか元祖SKKと比べると一度に表示される候補数がデフォルトのままだとやたら多いのが謎。ddskkだとこうなのか。編集できるから問題ないがデフォルト個数が本当にこのままで良いかどうか考えなおすべきだと思う。
メニューキーの設定ダイアログの初期フォーカスがきちんと設定されていない。なんとかする。
キーボードはESC/BS/Enterが設定できないのは仕様のままでいいのか?→エンバグしてしまいBSとENTERがおかしなことになっている。なんとかする。
ソフトキーボードはデザインが凝っててとてもよいがマウスクリックしか受け付けない作りなのがとても惜しい。キー押下イベントにも対応させる。
リストコントロールの順序を上下させるボタンを使ってどれか要素を端まで移動させた瞬間、ダイアログへのフォーカスが消滅する?その後はダイアログのオブジェクトにフォーカスを合わせ直すまでそのダイアログではTABによるフォーカス変更やENTER/ESCなどの操作を受けつけなくなるようだ。
skimicにて候補表示窓が二行になった時、1行目の末尾になぜか「▼」の一部分が表示され表示が崩れる問題を直す。
- CANDLIST_KEYASSIGN_USERDEFINED の値は2だが、skimconf では ffff が設定されるようだ。要原因究明せよ
CTRL+BSで変な文字がはいる現象を追え
レジストリにTickのエントリがないとIME全体がまったく動作しない。エントリがなくても最低限の動作が行なわれるように直す。
ローマ時かな変換ルールの変更
0. 特殊(子音)xxのルールを変更し、単独の「っ」となるようにした。(「っ」と母音を多用するエr…口語表現を入力する際に、子音状態を変えずかつ少ないタイプ数で入力するため)
プログラム変更不要/変換ルールのみ変更
これにより以下の違いが発生する。
axxaxxa → 旧「あっぁっぁ」新「あっあっあ」
1. ローマ字変換のohの直後がhだった場合のルールを変更。(口語の入力しやすさを優先するため)
プログラム変更不要/変換ルールのみ変更
ステート#1を使用
1h[母音|h]→0h*
1h*→0* お
1*→0*
これにより以下の違いが発生する。
oha → 変化なし「おは」
ohya → 変化なし「おおや」
ohha → 旧「おおは」新「おっは」
ルールが表示されているリストビュー内においてエスケープ文字であるバックスラッシュ(円マーク)が二重に表示されるのはおかしいのは何故だぜ?
@todo 現在ルールのリストビュー部分はシングルクリックによる選択しかできないが、ダブルクリックで編集できるようになればもっと使いやすくなるはず。GUI実装の勉強は分からないことだらけである
2. 子音k,wのルールを変更し、連続時にJIS X 0208アルファベットに正確に変換できるように変更。(該当のアルファベットを多用するネットスラングをMSIMEとほぼ同じシーケンスで入力できるようにするため)
プログラム変更不要/変換ルールのみ変更
kk (廃止)
kka っか
kki っき
kku っく
kke っけ
kko っこ
kkk→2 kkk または kkk→2k kk
kkya っきゃ
kkyi っきぃ
kkyu っきゅ
kkye っきぇ
kkyo っきょ
ww (廃止)
wwa っわ
wwi っうぃ
wwu っう
wwe っうぇ
wwo っを
www→2 www または www→2w ww
ステート#2を使用
2?→0*
2k→2 k
2w→w w
または
2?→0*
2kk→2k k
2kw→2w k
2k?→0*
2ww→2w w
2wk→2k w
2w?→0*
@bug 2? → 2* とか 2?→1* 1?→2* など、出力を持たない状態遷移だけの無限ループがある場合、テキストサービスがその状態に遷移した瞬間に実行中のプロセスが暴走状態となることに気付いた。この動作自体は仕様としたままでよいので(スタティックなテーブルの実行時チェックなんて最低の行為)、skimconfにて設定時にチェックしこのようなループは除外するべき。レジストリの内容については建前上、手動書き換えはありえないため、チェックは不要。
@todo 現在の状態遷移管理の仕様は限りなくバグに近い。アルファベット以外(例えばカーソルや削除)の入力操作によってローマ字かな変換のステートは0に戻るべき。現在のルールではwww
ENTERとかwww
BSBSと入力があった後もステート2に状態遷移したままになり、kとwで開始するシーケンスが変化したままとなる。普通のローマ字入力を行なうだけなら実質問題はない(行頭から「っわ」と入力するような日本語は存在しない)が、口語や他言語の発音といった不規則な文字組み合わせの記述において将来支障が出るかもしれない。ちなみに元のSKKIMEにもこの問題があり、例えばo
BShyaと入力すると「ひゃ」ではなく「おや」と変換されてしまう。削除などによって内部状態が見た目と一致しなくなってしまい、人間側から見るとシンプルではなくなっているように思える。
okke → 変化なし「おっけ」
uwwa → 変化なし「うっわ」
kおよびwを3つ以上連続した場合に変換結果の違いが発生する。しかしこのような入力パターンは一般的な日本語や口語、ネットスラング等においても使われることはない。こうした頻度が低いパターンは前述した別の入力方式で対処するものとする。
okkke → 旧「おっっけ」新「おkkけ」 旧版の代替入力方法oxxxxke
uwwwa → 旧「うっっわ」新「うwwわ」 旧版の代替入力方法uxxxxwa
3. 【バグが直るまで無効化】特殊(子音)xによる小文字「ぁぃぅぇぉ」で終わる変換を行なった直後に連続する同一の母音は小文字となる。大文字に戻す場合は再度xを入力する。(口語や感動詞の入力時に多用される連続した小文字を入力しやすくするため)
プログラム変更不要/変換ルールのみ変更
xa→3 ぁ (現在は0に遷移)
xi→3 ぃ (現在は0に遷移)
xu→3 ぅ (現在は0に遷移)
xe→3 ぇ (現在は0に遷移)
xo→3 ぉ (現在は0に遷移)
ステート#3を使用
3a→3 ぁ
3i→3 ぃ
3u→3 ぅ
3e→3 ぇ
3o→3 ぉ
3xa→0 あ
3xi→0 い
3xu→0 う
3xe→0 え
3xo→0 お
3x*→0*
3*→0*
これにより以下の違いが発生する。
waxaaaxa → 旧「わぁああぁ」新「わぁぁぁあ」
「おいィ」のようなモード変更を伴う場合は変化なし
この設定でしばらく使ってみたが、前述の状態遷移の仕様(バグ)を抱えたままではかなり使いづらい。仕方なくステート3への遷移を行なわないようにして無効化した。将来バグを修正できた暁にはこの設定を戻す予定。
未実装
- 未確定の子音の入力中に別の子音が入力された場合、前の子音を削除せずにアルファベット小文字として確定する機能(strict/corrupted-consonant)を追加予定。これにより語尾の雑草wやwktk、ktkr、(ryなどのMicrosoftのIMEが得意とする(不正なローマ字入力があると以降のアルファベットを一切日本語的に解釈しようとせずにそのまま出力してしまうというちょっと困った動作による)表現と併用しやすくなる。これでIMEを切り替える必要がなくなるwwwwwwうはwwwwwwおkkwwwwwwwwww
/*
- MicrosoftのIMEより少ないキーストロークで入力するためにはデフォルトのローマ字変換ルールから若干変更する必要あり。
- 具体的には「kk→k=っ」を削除し、「kka=っか」「kki=っき」「kku=っく」「kke=っけ」「kko=っこ」「kkk→kk=k」を追加、「ww:0→w:0=っ」から「ww:0→w:1=w」に変更しw連続ヘブン状態こと「w:1=w」を追加する。
- ただし、この変更により「wawwawwa:わっわっわ」と「wowwowwo:をっをっを」は入力不可能となる。元々「おっおっお」などの「母音+っ」の表現はSKKのデフォルトルールだと苦手だったので問題ないはず。私は「xx:0=っ」にルールを修正し「oxxoxxo:おっおっお」との入力で対応していたので問題はなかった。
xで開始した小文字ローマ字変換の後の母音入力を自動的に小文字化
- /
5. 確定操作時に未変換の子音がバッファ内に残っていた場合、JIS X 0208アルファベットに変換して出力する機能(corrupted-consonant)を追加。(従来処理はstrict-consonantとでもする。オリジナルSKKも改造したいがlispを勉強する服がない)
これにより以下の違いが発生する。
ok
ENTER → 旧「お」 新「おk」
um
ENTER → 旧「う」 新「うm」
ただし子音1文字に対応するローマ字変換ルールが存在する場合はそちらが優先される
un
ENTER → 「うん」
他の子音の際の挙動との一貫性およびネットスラングへの対応のためにこれも除外したいが、原作の理念とまったく異なるベクトルのような気がするので、オプションで選択式にすべきか。いい方法が思いつかない。うn
未実装
6. 変換時に辞書の最後のエントリに加えて全部カタカナの語を自動的に候補として追加する機能を追加
修正予定
- ローマ字かな変換ルールとキーマップの両側にskk内部コマンドが複雑に配置されているのでわかりづらい。
- コントロール以外の殆どのキーマップは self-insert-character/skk-insert/skk-jisx0208-latin-insertになっているので、省略時はこれを適用すべき。現在はキーマップから削除すると skk-insert まで処理が来ない
- self-insert-characterは設定しなくても問題なさそうな感じ。要調査
- kill-lineが機能していない?
- キーマップやローマ字規則を「標準」にしたらユーザ定義は消してもいいような気がしてきた。でもその前にテキストファイルとのインポート/エクスポート機能の実装のほうが先か?
- 註釈つきの候補の表示スタイルが固定なのが気になる。変更できるようにしたい。
- 変換中に▽にカーソルを移動させて削除するとおかしなことになる。このような挙動は意図的にやらない限り起きないようなので実質問題はないと思われるが、明らかにバグっぽい動きなので潰しておくべき。要調査
- GUI(skimconf)にはまだまだ未知の挙動が残されている。例えば「単語の註釈」を変更しても「適用」ボタンが押せないとか。誰か一緒にデバッグ項目列挙を
- 変換開始字地点の子音だけでなく、続く母音もシフト押下のまま入力してしまった場合に意図しないローマ字変換結果になる問題を修正したい。これはオリジナルのSKKにも存在する問題で、SKKIMEでもそのまま再現されてしまっている。シフトキーを離すタイミングが遅れがちな某は特に疲れているとこの現象が多発してストレスが溜まるのでござる
入力 オリジナルの動作 修正後の動作
AHA あ*は(問題なし) あ*は
ANA あ*んあ(nの変換が優先される) あ*な
OHE お*おE(ohの変換が優先される) お*へ
以下は旧バージョン(ローマ字かな変換ルールで全角英文字を出していた頃)の動作
AKA あ*kあ(kの変換が優先される) あ*か
AWA あ*wあ(wの変換が優先される) あ*わ
- 原作ソース中に特殊表記は最後の1文字だけにしたい、という記述があったが個人的には先頭1文字にも欲しい。先頭一文字に特殊(実質子音)を指定することで、例えば"?."というパターンなら"z."だけでなく"j."や"f."から「…」を出力する、などといった変換ルールが使えるようになり、より自由度が上がって便利なのでは(ただし現在のコードではこうしたマッチングは行なわれない)。現在のテーブルでは先頭1文字だけが異なる記号ルールが3種類あるのでこのサイズは1/3に圧縮できるという利点もある。
- ROMなテーブルにエスケープシーケンスを保持したまま実行時に2文字読んで判定する…という今の作りはいろいろと勿体ない。特殊文字は内部1文字とし、GUI側では見やすいように「● 母 子」の1文字としてはどうか。エスケープシーケンスの処理自体はしばらく残しておけば移行期間中で古いレジストリが残っていても問題ないはず
- ローマ字かな変換規則をCSVからインポートできるようにしてDvorakJPなどのバリエーションを手軽に切り替えてお試し可能にしたい…と思ったがレジストリ編集スクリプトを書くほうが楽かもしれない
- 64ビット環境でインストールすると、skkiservの起動がWOW64(32ビットアプリ用エントリ)のRunレジストリに設定されてしまうのは歪。(32ビット用のエントリから64ビット版バイナリを呼ぶ形となってしまっている)
- 64ビット環境では当然32ビットバイナリも全てインストールされるが、skkiservとskimconfは誰にも呼ばれないのでディスクの無駄。テキストサービスのDLL以外はインストールすべきではない。
- 各種設定が収められているレジストリのパスが深すぎる。なぜこんな深い階層に書き込んでいるのか謎。
- IMEは大抵メインウィンドウ生成時に張り付くようなので、IMEの初期化処理(≒レジストリ読み込み)が遅いとアプリを一気に起動する時に影響が出るかもしれない。ほとんど影響ないかもしれない。どの程度の負荷か測定して把握しておくべき。
- レジストリ読み込みを高速化するため、メモリイメージそのものを書き込むようにしたり、共有メモリにして同じ内容の読み込みはキャンセルするなどの工夫が必要。もう既に実装済みかもしれない。初期化処理を確認するべし。
- 1バイト文字しか使わないレジストリパスはW型APIではなくA型APIで記述してデータセクションの無駄をなくす
- パイプ名に含む文字列をユーザ名からユーザIDに変更すればA型に移行できるはず。要調査
- 辞書の追加時、リスト先頭ではなく末尾に追加したほうが自然なはず。毎回末尾まで手動で移動させるのめんどい。
- インストール直後のレジストリが空の状態でもいきなり使えるよう、%SystemRoot%\IME\SKKIME\SKK-JISYO.Lとかskkiservと同じフォルダの.Lファイルあたりをデフォルト有効にしておいたほうが良いかもしれん
- 関係ないが個人的には "JISYO" と書くローマ字表記に違和感を感じる…。
SKKの原作を意識しすぎている(?)ためか気になる挙動がある。解析できたら直す。低優先。
- 元の仕様の通りだから仕方ないが、候補一覧表示になった瞬間入力したひらがなが消えるのは非常に使いづらい。視線移動を強要させられているようで悔しくてなんかビクンビクンする。Googleのトップページとも相性が悪い。いいことが一つもないのでこれは直すべき。
- MSIMEからの移行中の人などは composition-auto-shift なしで使うことが想定される(正直それ以外の目的でチェックを外す必要性を感じない)が、この時 egg-like-newline を設定していても確定(Enter)時に改行が入ってしまう(さらに言うとCTRL+Jでは確定できないのも非常に悲しい)。これはきっと相当なストレスとなるはず。
- kakutei-early の設定を外せる意図がよくわからない。この挙動が正しいのかもよくわからない。たぶん私が何か勘違いしている。要コード理解
- 句読点の文字の切り替えだけでなく、連動して記号類のデフォルト全角/半角の設定セットを複数切り替えられると便利になりそう。つーか使いもしない句読点の使い分け機能なんかよりずっと必要。例えば日本語文の時は括弧類は全角、ソース書きの時は括弧類は半角にしたい、など。APIで外部から制御できるようにしてIMEをオンにしたプロセスに合わせて適切なモードを選んでくれるような外部常駐処理が書けるとなおよし。ブラウザのプラグインでサイトによって文字セットや変換の挙動を変えるなんてのもあり。むしろIMEそのものを切り替えて解決できるようにするべき問題のような気がしてきた。
- ローマ字かな変換ルールがひらがなとカタカナで同じテーブルを使っているが、これは別々にすべき。「ヴ」はともかくとして「ヵヶ」はカタカナモードになっている(とユーザーが認識している)時しか打鍵されないシーケンスなのに、ひらがな側にも同じルールが用意されている(ひらがなの時に打鍵されることは正常系ではありえない)のが美しくない。どうしても今の共通ルールにするなら、Qによるひらがな→カタカナ一括変換の際に「xka xke」でタイプされたバッファ内のひらがなを正確に変換できるようにするのが筋だろう。しかしこれだと、ますます誰も使わない(使いたいと思う人のいない)死蔵コードになりそう。やはり別々にしたほうがすっきりするはず。
- 上記と反するが、設定ウィンドウではどうせルール表示をひらがな/カタカナの片方だけしか一度に表示しないので、カタカナ側は一部の例外のみ指定してあとは自動生成、みたいな形で設定できるほうがいいかも。
- ローマ字かな変換ルールも、辞書登録と同様に普段の操作によって自由に編集できるようにするべきではないだろうか。SKKが最強なのは通常の変換操作と辞書登録が完璧に統合されているところにあるのであって、そのスタイルをあらゆる設定変更シーンに取り入れたい。例えば'Xhj Kuma ^M'とやるとローマ字かな変換ルールhjに熊を登録して即利用可能、という感じで。これで試行錯誤しながら多くのショートカット表現を学習できるようになって、いつの日かオレオレ無連想配列をマスターできるかもしれない。
- SKKの伝統なので簡単には直せないし、なかなか慣れないかもしれないが…IMEの変換ラインの所の三角形は「文字コードとして」表示するのは他のアプリと相性がよろしくない。具体的にいうとGoogleトップページの検索スクリプトとか。
- そもそも表示が「三角形1文字幅」でなければいけない理由がない。文字の色やアンダーラインによる区別でも十分実用になるのではないか。
- さらに言うと「本当に顧客が欲しかったもの」は三角形の自己主張ではなくて、むしろSetCaretColorのようなフリーソフトのskkime対応版ではなかろうか。あとXKeymacsも対応版が絶対に必要。他力本願。
- 変換中の文字を確定すると「三角形」マークが消えて1文字文左にずれるという挙動は、(10年以上の利用で慣れすぎてしまっているので自分ではわからないが)初見の人間なら相当な違和感を感じるだろうし、細かな視線移動の繰り返しは脳とか視神経とかに負担をかけているような気がする。
Win32版はFASTCALLベースに変更(ソース側変更は特になし)したが全体的に関数の引数が多すぎてあまり効果が出ていないかもしれない。ソース変更によるチューニングの余地あり。
短い文字列定数を定数ポインタで記録してる部分が大量にある。64ビット化で勿体ないお化けが
初期ルールの記録方式の変更
→ 固定長の構造体ではなく文字列ベースのコマンドへ変更
DLL内のデフォルト変換テーブルは限定的にしか使われない上、一度内部形式に変換されてからしか使われない。にもかかわらずポインタを多用したデータ構造になっていて特に64ビット版だとサイズが無駄にでかくなる。動的に読み込むか軽くエンコードして格納。