いいものをつくろう

CTOの日記

env

karabinerに疑似fn+任意のキーで矢印やらを実現やっとできた

投稿日:

以前karaninerにfnキーを割り当てたいが 無理だったのでHammerspoonにいきついた話という記事を書きました。

 

hammerspoonに行き着いたのは紛れもない事実で

素晴らしかったのですが

あのやり方では、どうあがいても私の

分離キーボードという環境が大きいのかもしれませんが、

どうあがいてもfn + jkli での矢印キーが実現できませんでした。ですので現実解としてctrl + jkliとしていたのですが

結構使用頻度高い iTerm2との干渉で ctrl + Lでclearができなかったらctrl + uで一行削除だったらたりが効かなくなってしまっていました。また、chromeのExtensionが一部ショートカットがうまく動かず、意図せず絵文字viewerならぬものがやたら立ち上がったりするようになりましたw

 

そんなストレスとはおさらばしたく

再度

karabinerでなんとかならないものか。

 

挑戦することんしました。

なぜ、またkarabinerかというと

karabiner multiple keyboardsとググって

一応ディフォルトではkarabinerは別々のdeviceから入力されたmodiferでも機能するとstackoverflowやらで書かれていたかからです。

以前karabinerを諦めてhammerspoonに写った理由はfnが分離キーボードをまたがって認識されていなかったからです。fnだけではなく、cmdやaltも同じでした。なぜかshiftは機能してました。

しかし、そのようなぐぐり結果からも

もしや、やっぱりkarabinerしかこれを実現できないじゃないか。これまでやってきた、simple_modificationではなくcomplex_modificationならなんとかなるかもしれない、とにかくやってみよう、という思いでした。

 

すると

なんとcomplex_modificationを挑戦してみたところ

見事

思い通りに

動作しました!

分離キーボードをまたいでfnキーが認識されて

指定の動作をしてくれるようになりました!

その

設定configの内容は以下のとおりです。

本当に嬉しいです。

もし、新しいキーボードを買い足しても

この設定を覚えてさえおけば、ハードウェア的にキーボードのマッピングをしなくても全部ソフト的にkarabinerで達成できてしまえるのも狙いでした。

 

complex_modificationのところだけ抜粋です。simple_modificationはdeviceごとの反映ができますが、complex_modificationはProfileに掛かり、deviceごとの反映はできないっぽいです。

{
            "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": [
                    {
                        "manipulators": [
                            {
                                "from": {
                                    "key_code": "j",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "left_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "l",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "right_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "i",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                                    }
                                },
                                "to": [
                                    {
                                        "key_code": "up_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "k",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "down_arrow"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "spacebar",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "return_or_enter"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "u",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "delete_or_backspace"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "o",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "delete_or_backspace"
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "v",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "v",
                    "modifiers": [
                      "command"
                    ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "c",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "c",
                    "modifiers": [
                      "command"
                    ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "z",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "z",
                    "modifiers": [
                      "command"
                    ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "x",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "x",
                    "modifiers": [
                      "command"
                    ]
                                    }
                                ],
                                "type": "basic"
                            },
                            {
                                "from": {
                                    "key_code": "f",
                                    "modifiers": {
                                        "mandatory": [
                                            "fn"
                                        ],
                                        "optional": [
                                            "any"
                                        ]
                  }
                                },
                                "to": [
                                    {
                                        "key_code": "d",
                    "modifiers": [
                      "command"
                    ]
                                    }
                                ],
                                "type": "basic"
                            }
                        ]
                    }
                ]
            }

 

karabinerの設定にやくだったらサイトはこちら

karabiner/json.html#typical-complex_modifications-examples

【人権回復】Karabiner-ElementsでOne-to-many, Many-to-oneマッピング

 

 

以上です

 

 

 

-env

Copyright© CTOの日記 , 2020 All Rights Reserved.