電柱脇の随想ノート

創作に繋がる何か

AquaSKKのキー操作を見直す(要PC用日本語キーボード)

はじめに

前回AquaSKKにAZITというローマ字入力方式を導入した。その際、qやlといったキー入力が両者で衝突してしまうことが問題として残った。今回は、 AquaSKK側のキー設定の変更と、Karabiner-Elementsの併用で、この問題を解決したい。

なお、今回はPC用の日本語キーボードの使用を前提として進めていく。理由は単に、現在筆者が使用しているMacBook Airのキーにガタが来たため、日本語109キーボード(何の変哲もない、1000円もしないUSB有線のやつ)を接続して使用しているからなのだが、他の種類のキーボードを使用している場合は適宜読み替えて頂きたい。加えて、(Macが古いということもあり)使用するKarabiner-Elementsのバージョンが12.10.0と少々古いことをご了承頂きたい。

Karabiner-Elementsは以下のリンクから入手できる。

karabiner-elements.pqrs.org

AquaSKK側の設定

まず前提として、AZITのローマ字変換を最大限活用するために、アルファベットを入力するキー操作は極力排除することとする。 PC用日本語キーボードのうちIME関連でよく使用されるのは「変換」「無変換」「カタカナ ひらがな ローマ字(以下かな)」「半角/全角 漢字(以下半角/全角)」の各キーなので、これらを使用する。

/Library/Input\ Methods/AquaSKK.app/Contents/Resources/keymap.confを~/Library/Application Support/AquaSKKにコピーして開いてみると、入力モードを変更するキー操作の項目は以下のように設定されている。

# ======================================================================
# event section
# ======================================================================

SKK_JMODE       ctrl::j

...

# ======================================================================
# attribute section(for SKK_CHAR)
# ======================================================================

ToggleKana      q 
ToggleJisx0201Kana  ctrl::q
SwitchToAscii       l
SwitchToJisx0208Latin   L

ctrl+jという操作も、ターミナル等で使われるのでしばしば競合が問題になる。この辺の操作はすべてどこか別のところに集約してしまいたいので、半角/全角キーを利用することにする。

半角/全角キーはMacでは「`」が割り当てられているので、keymap.confを以下のように書き換える。

# ======================================================================
# event section 
# ======================================================================

SKK_JMODE       alt::`

...

# ======================================================================
# attribute section(for SKK_CHAR)
# ======================================================================

ToggleKana      `
ToggleJisx0201Kana  ctrl::`             
SwitchToAscii       alt::shift::`           
SwitchToJisx0208Latin   ctrl::shift::`

要は重複しないように割り当てていけばいいのだが、組み合わせによっては「`」が画面に表示されてしまったりする。上記は数日の試行錯誤の結果である。

書き換えたら一旦保存して、AquaSKKの設定を再読み込みする。ひととおり操作してみて、問題なければ次へ進む。

Karabiner-Elements側の設定

次に、Karabiner-Elementsで設定した操作を各キーに割り当てる。Karabiner-Elementsは、複雑な操作はJSONファイルを直接書き換えて設定を行う。JSONファイルは~/.config/karabiner/karabiner.jsonを用いる。ディレクトリやファイルが無ければ自分で作るか、Karabiner-Elements内の設定を弄ると自動で作成される。

以下が、変更後のkarabiner.jsonである。complex_modificationsの中のrules以下を書き換えている。それ以外はほぼデフォルトのままである。ただしdevicesの中は環境によって異なるのでそのままコピーしないように注意。

{
    "global": {
        "check_for_updates_on_startup": true,
        "show_in_menu_bar": true,
        "show_profile_name_in_menu_bar": false
    },
    "profiles": [
        {
            "complex_modifications": {
                "parameters": {
                    "basic.simultaneous_threshold_milliseconds": 50,
                    "basic.to_delayed_action_delay_milliseconds": 500,
                    "basic.to_if_alone_timeout_milliseconds": 1000,
                    "basic.to_if_held_down_threshold_milliseconds": 500,
                    "mouse_motion_to_scroll.speed": 100
                },
                "rules": [
                    {
                        "description": "Change spacebar to left_shift. (Post spacebar if pressed alone)",
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "spacebar",
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "left_shift"
                                    }
                                ],
                                "to_if_alone": [
                                    {
                                        "key_code": "spacebar"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "manipulators": [
                            {
                                "description": "Change japanese_pc_xfer to left_alt+grave_accent_and_tilde.",
                                "from": {
                                    "key_code": "japanese_pc_xfer",
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": [
                                            "left_alt"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "manipulators": [
                            {
                                "description": "Change japanese_pc_nfer to left_alt+left_shift+grave_accent_and_tilde.",
                                "from": {
                                    "key_code": "japanese_pc_nfer",
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": [
                                            "left_alt",
                                            "left_shift"
                                        ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    },
                    {
                        "manipulators": [
                            {
                                "description": "Change japanese_pc_katakana to left_alt+grave_accent_and_tilde->grave_accent_and_tilde.",
                                "from": {
                                    "key_code": "japanese_pc_katakana",
                                    "modifiers": {
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "grave_accent_and_tilde",
                                        "modifiers": [
                                            "left_alt"
                                        ]
                                    },
                                    {
                                        "key_code": "grave_accent_and_tilde"
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    }
                ]
            },
            "devices": [
                {
                    "disable_built_in_keyboard_if_exists": false,
                    "fn_function_keys": [],
                    "identifiers": {
                        "is_keyboard": true,
                        "is_pointing_device": false,
                        "product_id": 2,
                        "vendor_id": 7247
                    },
                    "ignore": false,
                    "manipulate_caps_lock_led": false,
                    "simple_modifications": []
                }
            ],
            "fn_function_keys": [
                {
                    "from": {
                        "key_code": "f1"
                    },
                    "to": {
                        "consumer_key_code": "display_brightness_decrement"
                    }
                },
                {
                    "from": {
                        "key_code": "f2"
                    },
                    "to": {
                        "consumer_key_code": "display_brightness_increment"
                    }
                },
                {
                    "from": {
                        "key_code": "f3"
                    },
                    "to": {
                        "key_code": "mission_control"
                    }
                },
                {
                    "from": {
                        "key_code": "f4"
                    },
                    "to": {
                        "key_code": "launchpad"
                    }
                },
                {
                    "from": {
                        "key_code": "f5"
                    },
                    "to": {
                        "key_code": "illumination_decrement"
                    }
                },
                {
                    "from": {
                        "key_code": "f6"
                    },
                    "to": {
                        "key_code": "illumination_increment"
                    }
                },
                {
                    "from": {
                        "key_code": "f7"
                    },
                    "to": {
                        "consumer_key_code": "rewind"
                    }
                },
                {
                    "from": {
                        "key_code": "f8"
                    },
                    "to": {
                        "consumer_key_code": "play_or_pause"
                    }
                },
                {
                    "from": {
                        "key_code": "f9"
                    },
                    "to": {
                        "consumer_key_code": "fast_forward"
                    }
                },
                {
                    "from": {
                        "key_code": "f10"
                    },
                    "to": {
                        "consumer_key_code": "mute"
                    }
                },
                {
                    "from": {
                        "key_code": "f11"
                    },
                    "to": {
                        "consumer_key_code": "volume_decrement"
                    }
                },
                {
                    "from": {
                        "key_code": "f12"
                    },
                    "to": {
                        "consumer_key_code": "volume_increment"
                    }
                }
            ],
            "name": "Default profile",
            "parameters": {
                "delay_milliseconds_before_open_device": 1000
            },
            "selected": true,
            "simple_modifications": [],
            "virtual_hid_keyboard": {
                "country_code": 0,
                "mouse_key_xy_scale": 100
            }
        }
    ]
}

ファイルを保存してKarabiner-Elementsを開き、Complex modificationsのルールが以下のようになっていることを確認する。

最初のルールは、スペースキーにShiftキーの役割を持たせる(SandS)設定で、Rulesに最初から入っている。不要であればRemoveで削除して構わない。 残りの3つの意味は、以下のようになる。

  • 変換キーに「左Alt + 全角/半角を押す」操作を割り当てる。
  • 無変換キーに「左Alt + 左Shift + 全角/半角を押す」操作を割り当てる。
  • かなキーに「左Alt+全角/半角を押した後、全角/半角を押す」操作を割り当てる。

ファイルを保存すると、上記の操作は即座に有効化される。JSONファイルに間違いがあった場合はLogにエラーが表示されるので、適宜修正を行う。

変更後のキー操作説明

さて、ここまでの設定を終えると、以下のようなキー操作になっている。

  • 変換キー:かなモードに移行(どのモードからでも有効)
  • 無変換キー:アスキーモードに移行(どのモードからでも有効)
  • かなキー:カナモードに移行(どのモードからでも有効)
  • 半角/全角キー:かなモード←→カナモードのトグル
  • Ctrl+半角/全角キー:かな(カナ)モード←→半角カナモードのトグル
  • Ctrl+Shift+半角/全角キー:全英モードに移行(かなモードまたはカナモードから)

要するに使用頻度が低そうなものほど複雑な操作を割り当てているわけだが、変換キーと無変換キーはMacでいうところのそれぞれかなキー、英数キーと同じ配置になるので分かりやすいと思う。また、SKKは本来一発でカナモードに入るキー操作はないのだが、かなキーにかなモード移行→トグルという操作を割り当てることで実現している。ただトグル変換(トグルキーを押すことで変換候補をカタカナに変換できる)が便利なので、慣れるとあまり使わなくなるかもしれない。

この設定の副作用として、Shift+変換キーでアスキーモード移行、Shift+@でかな←→カナのトグルが働いてしまう。どちらも特に致命的ではないし、まあ便利といえば便利かもしれない。

まだあった

あともう2つ、バッティングする設定があった。

EnterAbbrev     /       
EnterJapanese       Q  

EnterAbbrevは記号など特殊文字を入力するためのもので、ほとんど使うことはないと思われる(頻繁に使う記号なら辞書登録するはずだし)。とりあえず、余っている記号の「<」を割り当てる。 EnterJapaneseは何のためにあるのか最初よく分からなかったが、変換し忘れた語を後から変換したり、日付のように先頭の文字がかな(カナ)でないものを変換候補として入力するためのものらしい。これもあまり使わないような気がするのでCtrl+qあたりを割り当てておく。

EnterAbbrev     <                                    
EnterJapanese       ctrl::q

おわりに

これでようやくAZITの変換をフルに使えるようになった。もちろんこの設定がベストというわけではないし、使っているうちにまた不満やなんらかの不具合が出るかもしれない。何かあったら、折を見て修正していこうと思う。