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