英字モードでもシフト2種類使う
2020-01-13
とりあえずLacailleを改造してかな入力でないモードでも2種類の親指シフトで文字を変えることはできた(今はどのキーでどのシフトをしても中括弧が出るけど)
次は自分のやりたいキーマップをどうやって指定するか、というところだな。
一つ問題点があって、スペースキーの初回無効がオンの場合、プログラムやコマンドで頻出するスペースに二回押しが必要になって不便
英字モードで、右親指シフトでqを押すとQになって、左親指シフトで押すと1になる、それぞれのキーで2種類のシフトで文字を出し分ける、というところまでできた
が、これを実運用しようとするとKarabinerでorzしてるのとぶつかるので、KarabinerでやるのをやめてLacaille単体でorzするように変える必要がある。
なおこのバージョンは自分でコンパイルしないとキーマップを変えられないのでバイナリリリースをする予定はありません。
Macのキーコード、なぜasdfhgzxという並びなのか謎だけど、歴史的経緯がなんかだから考えても仕方ないものなのかな?
これを使って解説記事を書くのがゴール
step2まではフリック入力だったが、ここからLacaille単体での親指シフト
Scrapboxのブラケットが入力しやすくなって嬉しい(vの左シフト)
Lacaille単体での親指シフトはプログラムを書き換えなくても実現できる
この方針でやろうかと思ったがキーマップの一部がソースコード、一部がGUIでの設定(plistに保存される)という状態は気持ち悪いので全部ソースコードにした
というわけで上記のGUIは現状ただの飾り
仕組みの解説
LacailleはkeyUpDownEventCallbackという300行ちょいの関数の中で色々な場合分けをしている
かなモードかどうかでの分岐もここでやる
今回僕はこれをいじって、英字モードでもかなモード同様に「2つのシフトとの同時押し判定」を行うようにした
ここでかなモードかどうかによる分岐を入れた
なので4バイト以上送信できない
この3バイトはASCII文字列ではなく、keycodeの列
人間が直接編集するのは大変だから生成スクリプトを作った
今後やりたい
3バイト制限を外せたら色々面白いことができる
16進直接入力
キーマップをJSONにする
old
不等号をマップし損ねている
:[[" !1", " \"2", " #3", " $4", " %5", " ", " &6", " '7", " (8", " )9", " 00", " =-", " ~^"], ["1Qq", "2Ww", "3Ee", "4Rr", "5Tt", "|&!", "6Yy", "7Uu", "8Ii", "9Oo", "0Pp", " `@"], ["\u00a5Aa", "/Ss", "=Dd", "{Ff", "}Gg", " _-", "(Hh", ")Jj", "\u2423Kk", "\"Ll", " +;", " *:"], ["?Zz", "+Xx", "-Cc", "[Vv", "]Bb", "^$@", "*Nn", "_Mm", " <,", " >.", "#?/"]]