Ink

Contents related to tech, hobby, etc

SKKにある「Kuten」とは何なんだろう?

|

SKKにある「Kuten」とは何なんだろう?

SKKを使っている時に Kuten([MM]KKTT) という表示が出てきたことはないで しょうか?私はたまに見掛け、なんだろう...と思っていたのですがやっと理 解したのでメモしておきます。

ちなみに、keymapで "kuten" を指定することで呼び出すことが出来、デフォ ルトの状態だと \ で起動します。 /usr/share/libskk/rules/default/keymap/default.json では以下のように 定義されています。

{
    "define": {
        "keymap": {
            ...
            "\\": "kuten",
            ...
        }
    }
}

結論: Kuten は EUC-jp のコード直接入力だった

コードを完全には読み切っていないので若干の推論を含みますが、どうやら EUC-jpの文字コードを直接入力するモードなようです。 EUC-jpの文字コード表を 文字コード表 日本語EUC(euc-jp) -- charset.7jp.net を参考にして入力してみると、表の通りに入力出来ていそうでした。

表に「区」「点」の表示があったので、恐らくその由来なのでしょう。

... KT は理解したけど [MM] って何なんだろ。

経緯

最初はfcitx/fcitx5-skkの何かなのかな?と思い、そのレポジトリで"Kuten" を検索したのですが見付からず。ueno/libskkを調べてみると、 KutenStateHandlerという実装を見つけました。

(Vala読めないので雰囲気で読んでいますが)コンストラクターを見てみると、 EUC-JPのコンバーターを使っているようなので、なんとなくEUC-JPを調べて 入力してみた所動作した、という感じです。

internal KutenStateHandler () {
    try {
        // use EUC-JP to get JISX0208 characters by code
        // point, this works because EUC-JP maps JISX0208
        // characters to equivalent bytes.  See:
        // https://en.wikipedia.org/wiki/EUC-JP
        // this is generally a wrong approach though
        converter = new EncodingConverter ("EUC-JP");
    } catch (GLib.Error e) {
        converter = null;
        assert_not_reached ();
    }
}