4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Karabiner-Elementsを用いて外付けテンキーを片手キーボード化する.

Posted at

##要約
 MACにおいて,アプリケーション(Krabiner-Elements)を用い,外付けテンキーで日常で使うほぼ全てのキーを打鍵できるようにした.

##はじめに
 入力デバイスとしてのキーボードは,他の入力デバイスと比較して,スピード・正確性などの点で優れている.入力デバイスとしてのキーボードを研究することは今もなお意味があると思われる.ところで,キーボードは片手で打つようにはできていない.しかし,片手でキーボードを打ちたい状況はある.例えば,ゲームのFPS(First Person Shooter)では状況によっては右手にマウス,左手にその他のデバイスとした方が好ましいことがある[4].あるいは,片手キーボードはバリアフリー的な意味も持つかもしれない.したがって,片手でも打てるキーボードが開発されてもよい状況ではある.にもかかわらず,あまり開発は盛んではない.そこで,簡単(価格,技術的な難易度,失敗率,入手し易さ)な方法で,片手でフルキーボードを打てる方法を考えた.

##片手でフルキーボードを打つ方法

  • 独自のキー配列にする方法
     キー配列を変えて打ちやすくする方法[5],あるいは,片手DVORAK(右手,左手)[2]などの方法がある.QWERTYと異なるキー配列を覚える手間が難点である.

  • 左右反転させる方法
     Karabiner-Elements使用を用い,スペースキー押下で配列を左右反転させる[3],いわゆる"親指シフト"に近い方法.QWERTY配列をそもまま使える点が利点であるが,スペースを反転キーに割り当てているためスペースを使えないのが欠点である.そこで,試しにスペースキー以外,controlキーで反転操作を割り当ててみた.しかし,非常に打ちづらく,実用的ではないと考えた.

  • キー配列をQWERTY配列のまま片手で打つ
     ホームポジションとして左手小指から人差し指を「FGHJ」と配置する方法[6],「XFJ,」[7]とする方法がある.しばらく練習したところ実用はできそうであった.ただし,deleteキーが遠く,ミスタイプのリカバリーがかなり面倒である.

  • 現行での最善策:FrogPad
    片手キーボードで有名なFrogPad[11]が目標である.FrogPadは販売中止となっており,入手困難である.自作された方がおられ(Froggy[12][13]),現実的な最終目標はこれである.自作初心者の自分には失敗の確率,金銭・時間のコストなどのリスクの面で少し敷居が高い.

  • 市販のプログラマブル片手キーボード
     市販のものでよい形状のものはあるが少し価格が高めである[8][9][10].
     片手キーボードに比し,テンキーは安価である.そこで,テンキーで使えるものがないか探した.プログラム可なテンキーはあるが珍しく,値段も高めの設定で利点が少ない[19].

  • 安価なテンキーを用いる方法
     「テンキーを2つ並べてフルキーボードしてみた[14]」というようにテンキーをキーボードの代わりに用いる試みはある.また,アプリケーション付属のシステムを用いてテンキーにショートカットキーを割付し,テンキーを左手デバイス化することは一般的に行われている[15].Karabiner-Elementsは外付けのデバイスごとにキー割付を設定でき,テンキーを左手デバイスにできる[1][20].

  • テンキーの種類
    片手でQWERT,反転させてPOIUYを打ちたいという観点から,テンキーは5列のものに利点がある.また10進数を扱うのであれば直感的に5列のほうがよいであろう.また,キーが多い方が割付は楽である.しかし,5列(6行)のテンキーはある[14][18]ものの,市販の外付けテンキーの多くはフルキーボードのテンキーに倣ったためか,5行4列である[17].入手し易さを考え,今回使用するテンキーは5行4列のものとした(BUFFALO BSTK08M テンキー シルバー)[16].

BUFFALO 2.jpg

##環境
os: macOS 10.15.3
editor: Visual Studio Code 1.42.0
Karabiner-elements: 12.9.0

##Karaliner-elementsの使い方
 Karabiner-Elementsのわかりやすく詳細な素晴らしい解説[23][24]があるのでそれを参照されたい.以下,簡単に述べる.

 Karabiner-elementsはキー配列を設定する無料のアプリケーションである.簡単なキー割付であれば,Karabinerの画面(GUI:Graphical User Interface)上でマウス操作するだけで設定できる.複雑なキー割付はJSON(JavaScript Object Notation)ファイルを作成することで設定できる,今回は後者の方法でキー設定を行う.

 上記JSONファイルはディレクトリ "~/.config/karabiner/assets/complex_modifications" に保存する[22].
 Karabiner-ElementsのGUI上の"Complex Modifications" の "Add item" をクリックすると,上記ディレクトリに作成・保存した設定ファイルが列挙される.
 列挙されて表示されるのはファイル名ではなく,作成したコード内の "title" と "description" という点に注意が必要である.
 またコードがjsonの文法にしたがってないと読み込まれない.もし,作成したファイルが "Add item" 上で見つからない場合はコードの誤り(カッコを閉じていない,コンマが抜けているなど)がないかをまずは探すとよい.

 基本の書き方[21]を参考にする.カッコで改行されることが多いが見通しを良くするため,今回は下記のようにした.

test.json
{
  "title": "ここにタイトルを入力",
  "rules": [
    {
      "description": "ここにコードの説明を書く",
      "manipulators": [

        {
            "type": "basic",
	        "from": {
                    "key_code": "e", 
                    "modifiers": { "mandatory": [ "fn" ], 
                    "optional": [ "any" ] } },
            "to": [ { "key_code": "down_arrow" } ]
        }

      ]
    }
  ]
}

 文法間違いを避けるため,雛形をコピーアンドペーストして使うとよい.
 わかりにくいのが"optional".詳しい解説は上記の参考記事がよい.ごく簡単に述べると,ここを"any"にしていないと,余計なキーが同時押しされた際に割り当てがうまく働かなくなる.

###一般的な注意点
 作成したjsonファイルは上から順に読まれていく.したがって,条件分岐する際は,条件判定させたい順に上から書いていく.条件分岐には "conditions"構文を使う.

##あまり記事にされない重要な点.

  • 1回の押下で複数のフラグを操作できる.
  • 1つのキーに対して複数のフラグを割り当てることができる.

 したがって極端な話,2つのキーがあれば,全ての文字を表現できる.
例えば,キー"0"を1度押下すると,フラグ1の値が1となり他のフラグの値は0となる,2度押下するとフラグ2の値が1となり他のフラグは0となる,,,とする.またフラグ1の値が1のときキー"1"を"a"に割り付ける,フラグ2が1のときは"b"に割り付ける,,,とする.すると,理論上はキー"0"とキー"1"で全てのアルファベットを表現できる.なお,フラグの数には限界があるかもしれないが,確認していない.
 複数のフラグを用い,1つのキーで複数の文字を表現する上記の技術を用い,テンキーでフルキーボードを表現する.

下の例では,FG_1の値が1のとき,keypad_0を押下したら,FG_2を1にしてFG_1とFG_3を0にしている.

1回の押下で複数のフラグを操作できる
{
    "type": "basic",
    "from": { "key_code": "keypad_0" },
    "to": [ 
        { "set_variable": { "name": "FG_1", "value": 0 } },
        { "set_variable": { "name": "FG_2", "value": 1 } },
        { "set_variable": { "name": "FG_3", "value": 0 } } ],
    "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
}

 下の例では,FG_2の値が1のときkeypad_1にbを割付,FG_1の値が1のときkeypad_1にaを割り付ける.
 なお,もしFG_1とFG_2いずれの値も1のときは,上で述べたように"上から順に解釈される"のでFG_2の値が1のほうが先に解釈されてkeypad_1の割付はbとなる.

1つのキーに複数のフラグを割り当てる

{
    "type": "basic",
    "from": { "key_code": "keypad_1" },
    "to": [ { "key_code": "b" } ],
    "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
},
{
    "type": "basic",
    "from": { "key_code": "keypad_1" },
    "to": [ { "key_code": "a" } ],
    "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
},

##キーマップ設計

  • 元のキー配列.

 Karabiner-Elenetsをダウンロードすると,キーイベント・マウスイベントを調べることができるアプリケーション"Karabiner-EventViewer.app"がついてくる.

 Karabiner-EventViewerで確認し,"key code"は左上から順に以下の通りである.

|keypad_num_lock|
|keypad_equal_sign|keypad_slash|keypad_asterisk|delete_or_backspace|
|keypad_7 |keypad_8 |keypad_9 |keypad_hyphen |
|keypad_4 |keypad_5 |keypad_6 |keypad_plus |
|keypad_1 |keypad_2 |keypad_3 |keypad_enter |
|keypad_0 |keypad_0 |keypad_period |

keymap_original.jpg
  • キー配列切り替えにはトグル方式を採用しない.
     MACのJIS配列キーボードにおいては,"英数キー"を押下すると英数入力になり,"かなキー"を押下するとかな入力になる.一方でWindowsマシンのJIS配列キーボードはトグル方式である.両者を使用して比較すると明らかだが,MAC方式の方がよりトグル式より直感的でスピーディーな入力ができる.AppleのJIS配列キーボードの開発者の木田泰夫氏の言葉を借りていうと,「脊髄で学習できるよう」に,キー配列切り替えはトグル式ではなく,切り替え担当キーにさせる[25].

  • フラグによってキー配列(keymap)を切り替える.
     いろいろ試した結果,フラグは5つ(FG_1からFG_5).それぞれのフラグに対してキー配列を割り当てる(例:FG_1のときはkeymap_1,FG_2のときはkeymap_2..).

keymap_flags.jpg
  • 修飾キーにキー配列切り替えキーも担当させる.
     "to_if_alone"構文を利用し,他のキーと同時に押下したときは修飾キーとして働き,単独で押すとキー配列切り替えキー(以下フラグキー)として働くようにする.
keymap_modifires.jpg

 具体例は以下."keypad_1"を単独で押した時,"to_if_alone"以下に割り付け,他のキーと同時に押下した時は"to"以下に割り付けられる.
 "conditions"で条件分岐させている.上のブロックはフラグ "FG_3" の値が1のとき,下のブロックが "FG_3" の値が0のとき.
 "to_if_alone"の箇所では,"FG_3" の値を1に,他のフラグの値を0にし,修飾キー("left_control")としては働かないようにしている.

to_if_alone構文の利用
{
"type": "basic",
"from": {"key_code":"keypad_1","modifiers":{"optional":["any"]}},
"to": [ { "key_code": "left_control" } ],
"to_if_alone": [
  { "set_variable": { "name": "FG_1", "value": 0 } }, 
  { "set_variable": { "name": "FG_2", "value": 0 } },
  { "set_variable": { "name": "FG_3", "value": 1 } }, 
  { "set_variable": { "name": "FG_4", "value": 0 } }, 
  { "set_variable": { "name": "FG_5", "value": 0 } } ],
"conditions":[{"type":"variable_if","name":"FG_3","value":1}]
},
{
"type": "basic",
"from": {"key_code":"keypad_1","modifiers":{"optional":["any"]}},
"to": [ { "key_code": "left_control" } ],
"to_if_alone": [
  { "set_variable": { "name": "FG_1", "value": 0 } },
  { "set_variable": { "name": "FG_2", "value": 0 } },
  { "set_variable": { "name": "FG_3", "value": 1 } }, 
  { "set_variable": { "name": "FG_4", "value": 0 } }, 
  { "set_variable": { "name": "FG_5", "value": 0 } } ],
"conditions": [{"type":"variable_if","name":"FG_3","value":0}]
}

  • ファンクションキー(fn)を切り替えに利用する.

 fnキーは他のショートカットキーとほとんど干渉しない.この性質を利用してキー配列切り替えをfnキーにて行い,キーを節約する(例:FG_1のときkyemap_1.FG_1のときにfnを押下したままにするとkeymap_1_2になる).

keymap_fn_kirikae.jpg *fnによる切り替え例

 具体的なコードは以下."delete_or_backspace"を"fn"キーと同時に押すと"t"になり,単独で押すと"r"になる.

修飾キー(modifiers)fnの利用

{
"type": "basic",
"from": {
   "key_code": "delete_or_backspace",
   "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
"to": [ { "key_code": "t" } ],
"conditions":[{"type":"variable_if","name":"FG_1","value":1}]
},

{
"type": "basic",
"from": { 
  "key_code": "delete_or_backspace", 
  "modifiers": { "optional": ["any"] } },
"to": [ { "key_code": "r" } ],
"conditions":[{"type":"variable_if","name":"FG_1","value":1}]
},


  • delete(またはbackspace)キーにアクセスしやすい.
    上で述べたように,片手タイピングにおいて,ミスタイプした時の訂正しやすさが重要と考えた.fnキーによるkeymap切り替えで,どのkeymapからでもdeleteキーに到達できるようにする.

  • "0"キーと"000"キーを区別しない.
     Karabiner-EventViewerで調べるとわかるが,"000"キーを1回押下することは"0"キーを3回押下したことに等しい.フラグを用いて条件分岐させれば"0"キーと"000"キーの使い分けを多少できる.しかし,あまり利用価値がないので,今回はこれらのキーを同じものとして扱う.便宜上,"0"(あるいは"000")は"英数","かな"のトグル切り替えに割り当てる.

  • QWERTY配列を利用する.
     今回は,新たに学習することをなるべく少なくなるようにしたい.したがって,今回はFlogPadのキー配列をあえて目指さないことにした.

  • 第1指(親指)でキーボード左半分,右半分を切り替える.
     使用頻度の高い左半分,右半分の切り替えは親指で行う.

  • FG_0からFG_5のすべて値が"0"の場合も想定しておく.
     F0_0からFG_5のいずれか一つのみが"1"となるようにコードを書く.したがって,全てのフラグが"0"には基本的にはならない.ただし,なんらかの間違いで全てのフラグが値"0"になる場合も考えおく.すべてのフラグが0のときはFG_1が"1"の時とおなじキー配列にする(なにも指定していないと,もとのテンキーの配列になる,,と思う).

  • すべてのフラグをリセットできるようにする.
     "keypad_num_lock"と"left_gui"(commandキー)との同時押しで,FG_1からFG_5の値が"0"にする.

  • 現在のフラグを確認する方法を準備する.
     ほぼ使わない"keypad_num_lock"キーを利用する.
     JSON上では"shell_command"を用いて,シェルスクリプトを実行できる.
     マックではシェルスクリプトからアップルスクリプトを実行できる.
     アップルスクリプトで通知センターに命令をだし,現在のkeymapを表示させる.
     具体的なコードは以下."keypad_num_lock"と"left_gui"(commandキー)を同時押しすると,全てのフラグの値が"0"になるとともに,通知センターでポップアップされる.

{
"type": "basic",
"from": {
  "key_code": "keypad_num_lock",
  "modifiers": { "mandatory": ["left_gui"], "optional": ["any"] } },
"to": [
  { "set_variable": { "name": "FG_1", "value": 0 } },
  { "set_variable": { "name": "FG_2", "value": 0 } },
  { "set_variable": { "name": "FG_3", "value": 0 } },
  { "set_variable": { "name": "FG_4", "value": 0 } }, 
  { "set_variable": { "name": "FG_5", "value": 0 } },
  { "shell_command": "osascript -e 'display notification \"clear_all_flags!\" with title \"KEYMAP_0\"'" } ]
},

notification center.png 画面右からポップアップ

##実際のキー配列
コードは記事の最後に記載した.

keymap_1.jpg keymap_2.jpg keymap_3.jpg keymap_4.jpg keymap_5.jpg

#実際に使用してみた感想(考察)

  • ほぼ練習なしで使える.実用可能と考えられた.
  • 日本語はほぼ一語毎に母音が出現する.QWERTY配列では母音が左側(a,e)と右側(i,o,u)にある.そのため,日本語の文章を入力すると,頻繁にキー配列の切り替えが必要になり,入力速度が遅くなる.
  • 母音にどのキーマップからでもアクセスできればよりよいかもしれない.
  • "0"キーと"000"キーはいずれも押下が奇数回なのがなお使い分けを面倒にさせる."00"キーといった偶数回であればもう少しやり易い.
  • テンキーの"delete_or_backspace"はPC本体の"delete"と同じものとして扱われ,若干やりにくい.すべて"keypad_**"という製品があれば,そちらの方がやり易い.

##実際のコード

  • 注意点:参考記事にある通り,キーになにも割り当てない,すなわち押しても何もおこらないようにするには "to"の行を削除せねばならない."to"の行を削除しない場合は,元のキーなどが割り当てられてしまう.ただし,以下のコード上では,全体の見通しをよくするために,なにも割り当てたくない場合も"to"行を残した.
片手キーボード化forBUFFALO_BSTK08M.json
片手キーボード化forBUFFALO_BSTK08M.json
{
  "title": "片手キーボード化 for BUFFALO BSTK08M",
  "rules": [
    {
      "description": "BUFFALO BSTK08Mでフルキーボード打てるようにする",
      "manipulators": [
        {
          "type": "basic",
          "from": { "key_code": "keypad_0", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "lang1" }, { "set_variable": { "name": "FG_0", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_0", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_0", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "lang2" }, { "set_variable": { "name": "FG_0", "value": 1 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_0", "value": 0 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory": ["left_gui"], "optional": ["any"] } },
          "to": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } }, 
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } }, 
            { "shell_command": "osascript -e 'display notification \"clear_all_flags!\" with title \"KEYMAP_0\"'" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_1", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_control" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 1 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_1", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_control" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 1 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 0 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_2", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_shift" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 1 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_2", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_shift" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 1 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 0 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_3", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_alt" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 1 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_3", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_alt" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 1 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 0 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_period", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_gui" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 1 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_period", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "left_gui" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 1 } }, 
            { "set_variable": { "name": "FG_2", "value": 0 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 0 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_enter", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "fn" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 1 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_enter", "modifiers": { "optional": [ "any" ] } },
          "to": [ { "key_code": "fn" } ],
          "to_if_alone": [ 
            { "set_variable": { "name": "FG_1", "value": 0 } }, 
            { "set_variable": { "name": "FG_2", "value": 1 } },
            { "set_variable": { "name": "FG_3", "value": 0 } }, 
            { "set_variable": { "name": "FG_4", "value": 0 } }, 
            { "set_variable": { "name": "FG_5", "value": 0 } } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 0 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "left_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "up_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "right_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "delete_or_backspace" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "down_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "spacebar" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "keypad_enter" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory":[ "fn" ], "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"← ↑ →  \rdelete ↓ space\" with title \"Now_on_KEYMAP_5_2\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "close_bracket" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "backslash" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "open_bracket" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "international3" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"[ ] @ ¥\" with title \"Now_on_KEYMAP_5\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_5", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "left_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "up_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "right_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "delete_or_backspace" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "down_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "spacebar" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "keypad_enter" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory":[ "fn" ], "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"← ↑ →  \rdelete ↓ space\" with title \"Now_on_KEYMAP_4_2\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "keypad_plus" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "keypad_hyphen" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "keypad_asterisk" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "keypad_slash" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "equal_sign" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "equal_sign", "modifiers": ["left_shift" ]  } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "international1" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "slash", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "optional": ["any"] } },
          "to": [  { "key_code": "", "modifiers": ["left_shift" ] } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "optional": ["any"] } },
          "to": [  
            { "key_code": "keypad_num_lock"  },
            { "shell_command": "osascript -e 'display notification \"+ - * /\r^ ~ _ ?\" with title \"NOW_ON_KEYMAP_4\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_4", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "left_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "up_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "right_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "delete_or_backspace" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "down_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "spacebar" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "keypad_enter" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory":[ "fn" ], "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"← ↑ →  \rdelete ↓ space\" with title \"Now_on_KEYMAP_3_2\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "1" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "2" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "3" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "4" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "5" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "6" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "7" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "8" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "9" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "0" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"1 2 3 4\r5 6 7 8\" with title \"Now_on_KEYMAP_3\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_3", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "left_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "up_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "right_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "y" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "delete_or_backspace" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "down_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "spacebar" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "h" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "quote" } ],
                    "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "keypad_enter" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "n" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory":[ "fn" ], "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"← ↑ →  y\rdelete ↓ space h\" with title \"Now_on_KEYMAP_2_2\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "p" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "o" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "i" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "u" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "tab" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "l" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "k" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "j" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "semicolon" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "period" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "comma" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "m" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"p o i u\rtab l k j\" with title \"Now_on_KEYMAP_2\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_2", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "left_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "up_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "right_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "t" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "delete_or_backspace" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "down_arrow" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "spacebar" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "g" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "escape" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "keypad_enter" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "b" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory":[ "fn" ], "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"← ↑ →  t\rdelete ↓ space g\" with title \"Now_on_KEYMAP_1_2\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "q" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "w" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "e" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "r" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "a" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "s" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "d" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "f" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "z" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "x" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "c" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "v" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"q w e r \ra s d f\" with title \"Now_on_KEYMAP_1\"'" } ],
          "conditions": [ { "type": "variable_if", "name": "FG_1", "value": 1 } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "left_arrow" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "up_arrow" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "right_arrow" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "t" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "delete_or_backspace" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "down_arrow" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "spacebar" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "g" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "escape" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "keypad_enter" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "mandatory": [ "fn" ], "optional": ["any"] } },
          "to": [ { "key_code": "b" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "mandatory":[ "fn" ], "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"← ↑ →  t\rdelete ↓ space g\" with title \"Now_on_KEYMAP_0_2\"'" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_equal_sign", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "q" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_slash", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "w" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_asterisk", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "e" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "delete_or_backspace", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "r" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_7", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "a" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_8", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "s" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_9", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "d" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_hyphen", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "f" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_4", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "z" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_5", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "x" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_6", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "c" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_plus", "modifiers": { "optional": ["any"] } },
          "to": [ { "key_code": "v" } ]
        },
        {
          "type": "basic",
          "from": { "key_code": "keypad_num_lock", "modifiers": { "optional": ["any"] } },
          "to": [ 
            { "key_code": "keypad_num_lock" },
            { "shell_command": "osascript -e 'display notification \"q w e r\" with title \"Now_on_KEYMAP_0\"'" } ]
        }
      ]
    }
  ]
}

##参考
1(https://thsozai.tumblr.com/post/165221220223/テンキーを左手デバイスにしてみよう)
2(https://qiita.com/dvorak__/items/3d6d1c5d20eda8b271ba
片手用Dvorak配列 - Qiita
)
3(https://qiita.com/suemoc/items/9ca95609a622c38c0e24
怪我する前に知っておきたい片手プログラミングのはじめ方 - Qiita
)
4(https://gumin-ch.com/joycon-joytokey/
SwitchのジョイコンがPCのFPS・TPSの神デバイスだった件 | ぐみんブログちゃんねる
)
5(alleybl,http://alleybl.hatenablog.com/entry/2017/04/02/224536
1時間もあれば片手でブラインドタッチが出来るようになる - alleyblのブログ
)
6(https://www.indetail.co.jp/blog/8301/
片手でタイピングするための3つのアイデア|NEWS|株式会社INDETAIL(インディテール)
)
7(https://typing.twi1.me/game/89877
左手片手タイピングホームポジションミニドリル | タイピング練習の「マイタイピング」
)
8(Amazon | KKmoon Delux T11デザイナーキーボード キーパッド スマートダイヤル3グループカスタマイズキーWindows用Mac OS&Designソフトウェア(ブラック) | KKmoon1 | ゲーミングキーボード 通販)
9(Amazon | フルプログラム可能 メカニカルキーボード カスタマイズ可能 ゲーミングキーボード 23キー マクロキー 青色バックライト 片手小型キーボード ショットカットキー プログラマー向き DIYキーボード(赤軸 ブルーバックライト) | Koolertron | ゲーミングキーボード 通販)
10(Amazon | Koolertron 片手メカニカルキーボード ゲーミングキーボード 43キー プログラム可能 Windows 7/8/10/Mac OS/Linux ホワイト・バックライト付き(Gateron赤軸) | Koolertron | ゲーミングキーボード 通販)
11(https://en.wikipedia.org/wiki/FrogPad
FrogPad - Wikipedia
)
12(タクマ,https://hum-id.jp/blog/gadget/737
自作キーボードHelixの片手版「Froggy」のキーキャップとキーマップの話 | hum-id
)
13(https://hum-id.jp/blog/gadget/597
左右分割キーボードHelixをFrogpadライクな片手キーボードとして使う | hum-id
)
14(de0,http://de0.hatenablog.com/entry/2018/12/16/000051
テンキーで無理やり試すワイヤレス分割格子配列キーボード - メモ帳DPA
)
15(トナミ,https://note.com/tonami/n/n31eff75fa0b5
お絵描きデバイスに挑戦してみました|トナミ|note
)
16(https://www.yodobashi.com/product/100000001001375235/,ヨドバシ.com - バッファロー BUFFALO BSTK08MSV [Mac専用テンキーボード シルバー] 通販【全品無料配達】)
17(nes157,https://review.kakaku.com/review/K0001119068/ReviewCD=1239642/,価格.com -
『便利なワイヤレス5列テンキー』 ミヨシ TENBT01/MG [メタリックグレー] nes157さんのレビュー評価・評判
)
18(https://www.mco.co.jp/blog/20180207/,EXCELでの入力作業を効率化。メーカー直伝・使いやすい外付けテンキーの選び方 | 株式会社ミヨシ)
19(https://tomokin-gadget.com/?p=11175
ただのテンキーをプログラマブルテンキー化したら最高だった!
)
20(https://qiita.com/xrxoxcxox/items/08269423549880db3755
792円のテンキーでも良い感じの左手デバイスになった話 - Qiita
)
21(https://webrandum.net/karabiner-elements-original-rules/,Karabiner-Elementsの独自ルールの作成方法 | Webrandum)
22(Panda_Program,https://qiita.com/Panda_Program/items/194b46e3ffb6f0b2ced7
Karabiner-Elementsのキー配列設定のエクスポートとインポート方法 - Qiita
)
23(s-show,https://qiita.com/s-show/items/40ad22c4ee4a0465fad5
Karabiner-Elementの設定例について - Qiita
)
24(https://qiita.com/s-show/items/a1fd228b04801477729c
Karabiner-Elementsの設定項目をまとめました - Qiita
)
25(https://www.itmedia.co.jp/news/articles/1603/11/news110.html
MacからiOSまで、Apple日本語環境の知られざる歴史が明らかに - ITmedia NEWS
)

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?