セミコロン位置を薬指で押すことでKをここに収めた。
自作配列、低頻度の字を小改良したので記載しておきます。
自作の英字配列を作り始めたので記録しておく。
QWERTY以外の配列があることを知ってから、Eucalyn、Workman、QGMLWYと転々としてきた。 もともと親指シフトユーザーだったので、ローマ字入力を考慮したEucalynでなくてもよく、英字に特化した配列としてWorkmanへ移行した。 しかしあまり効率的に感じられずQGMLWYへさらに移行。
そのうち、Qwertyであまり使っていなかった右手小指を使いだしたせいで右手だけ疲れることに気づいた。 おおよそどの配列も右手小指に頻度の高い文字を割り当てているため、極端に右手が疲れる。 またかな入力にアルペジオ重視の薙刀式を使っているため、英字も同じ考え方を導入すべきではないかと思い始めた。 さらに薙刀式とBS位置が違うと混乱するので、BS込みで英字配列の最適化をしたくなってきた。
英字配列なんて、研究しつくされているはずで、自分で考えるなんて効率的ではないと思ってきたが、自分の手が合わないなら、自分で配列作るしかないと考えを変えた。 まず、自分にとって各キーの押しやすさを考えてみたところ、下図になった。中指の薬指の下段、右手小指が抜きんででつらい。
そしてEnglish Letter Frequency Counts: Mayzner Revisited or ETAOIN SRHLDCUから、英文の各文字の頻度のデータを入手して、下の図を作ってみた。 頻度が高い文字をホームポジションに配置しつつ、残りの文字をアルペジオになるように、かつ同じ指で連続しないように配置してみた。
あとは頻度の低い文字を、頻度順に配置していったのが以下の配列。キーボードアナライザーで評価してみたけど、 QWERTYよりはスコアがいいもののColemakやQGMLWYにはまだまだ及ばない。 しかし自分にはこれらは合わなかったわけだから、あまり気にしないことにする。 どうせまだまだ変化するだろうし、配列名は単純にSRLBY配列にしておいて、そのうち考えることにする。
Typing Modelでの分析結果を載せておく。QWERTYだとe=1.49、Colemakでe=0.83、QGMLWYでe=0.79です。
この記事はキーボード #1 Advent Calendar 2019の12/09 の記事です。
追記
2020/02/09追記
今年は一体型2種類、分割3種類(modulo)の合計5種類のキーボードを設計・製作して創作欲を満たした感じですが(githubでKiCADデータを公開)、ここではハードではなくQMKの話を書きたいと思います。
もともと私はRealfourceで親指シフト入力していて、Realforce R2の長くなったスペースキーに絶望し、親指シフト用キーボードを求めて自キ沼にきました。また親指シフト以外のかな入力があることを知って、薙刀式を使い始めました。
親指シフトや薙刀式のかな入力をしようと思うと、WindowsならやまぶきRやDvorakJ、MacならLacailleやKarabiner-Elementを使うのが一般的ですが、私はQMKでファームウェア内にかな入力機能を実装しました。例えばキーボードを薙刀式モードに切り替えて、Fキーを押すと、キーボードからPCには'ka'の2文字が出力されて、画面に「か」と表示されます。ソフトのインストール不要なので、PC/Macに加えてiPadなどでも特殊なかな入力ができます。
githubにcrkbd用の親指シフトと薙刀式のQMKファームウェアを公開しています。自分のキーボードで使ってみたい、他のかな配列へ改造してみたいという人のために、この記事でその手順を説明したいと思います。keymap.cの編集に慣れている人が対象です。
まず薙刀式をQMKが動作するキーボードへ移植する方法です。薙刀式を例に説明しますが、親指シフトでも同様です。コアとなるnaginata.cとnaginata.hはそのまま使えるはずですので、自分のキーマップのあるフォルダにコピーします。親指シフトの場合は、nicola.cとnicola.hと読み替えてください。
修正する箇所を説明していきます。基本的には// 薙刀式
で囲まれた部分を自分のconfig.h、keymap.c、rules.mkに追加していきます。
naginata.cがコンパイル対象になるようにrules.mkにSRC +=naginata.c
を追加します。
また編集モードを使うにはUNICODE_ENABLE
、IMEオンオフのためにCOMBO_ENABLE
も有効にしてください(親指シフトでは不要)。
config.h の// 薙刀式
で囲まれた部分を自分のconfig.cに追加します。
WinとMacでは編集モードで出力するモディファイヤーキーが違うのでNAGINATA_EDIT_WIN
かNAGINATA_EDIT_MAC
のどちらかを選択してください(親指シフトでは不要)。
ここからはkeymap.cを編集していきます。同様にconfig.hの// 薙刀式
で囲まれた部分を適切な位置にコピペしていきますが、自分のキーボードに合わせた編集が必要です。
ヘッダをインクルードして薙刀式のキーレイアウトを定義するキーを導入します。
薙刀式用のキーを追加したので、独自のキーはSAFE_RANGE
ではなくNG_SAFE_RANGE
から開始してください。
薙刀式入力モードがオンの時、_NAGINATA
レイヤーに切り替わります。_NAGINATA
レイヤーはデフォルトレイヤーとLOWER, RAISEなどのレイヤーの間に作っておけば、かな入力中もこれらのレイヤーを使えます。
_NAGINATA
レイヤーを定義します。通常のKC_
なんとかと言うキーコードではなく、薙刀式入力で使うキーにはNG_
で始まるキーコードを使います。ここではデフォルトレイヤーにかかわらず、QWERTYでキー配置を定義してください。KCコードを使えば、かなに変換されることなく入力されるので、例えばKC_SLSH
とNG_SLSH
を同じレイヤーに置いて、記号入力とかな入力を使い分けることが可能です。
薙刀式はHJキーの同時押しでIMEオンにします。これはQMKのCOMBO機能を使っています。(親指シフトでは不要)
初期設定として、_NAGINATA
レイヤーが薙刀式のためのレイヤーであることを設定します。また編集モードのためUNICODE入力の設定をします。(親指シフトでは不要)
キー一発でかな入力をオンオフしたければ、キーを定義してnaginata_on
またはnaginata_off
を呼び出してください。なくても可。
薙刀式の変換処理はprocess_record_user関数で行なっています。この関数はキーが押された時と、キーを離した時に呼び出されます。ここでnaginata.c の関数を呼び出しています。process record user関数の最後に追加してください。関数がない場合は、追加してください。
以上で移植は完了です。
薙刀式の編集モードを実現するためにコード量が増えていますが、一般的なかな入力では不要ですので、COMBOやUNICODEはコメントアウトします。これでかなりコード量は減ります。
ここでは新下駄配列を例に説明します。本質的には使うキーと、カナ変換のテーブルを修正するだけで、同時押しの処理はそのまま使えます。新下駄のために修正した箇所には// 新下駄
と記載しました。
Crkbdには数字キーの行がないので完全に新下駄を実装することはできません。3行分だけの単独キー入力、中指、薬指シフト入力分だけ実装してみたいと思います。あとは容易に拡張できると思います。naginata.cとnaginata.hを改造していきます。
薙刀式は30キー+シフトキー、親指シフトも基本的な入力は30キー+2つのシフトキーで入力できます。新下駄は41キーですから、まずかな入力に使うキーを増やさないといけません。キーを増やすには上のリンクの3ヶ所を修正する必要があります。
NG_SAFE_RANGE
もNGキーの数に合わせて増やしてください。
同時押しの状態をkeycomb変数で保存していますが、各ビットがキーのオンオフを表しています。親指シフトも薙刀式も32キー以下なので32bitで十分でしたが、新下駄は41キー使うので、64bitに変更します。
薙刀式は最大3キー同時押ししますが、新下駄は2キーですので、変換処理を2キーで開始するように変更します。
増やしたキー(NG_X1
)をキーマップに追加します。
さて、ようやくかな変換テーブルを定義します。
まずはキーの単独押しの定義です。.key
に押したキーを(B_なんとか)、.kana
に出力するローマ字表記を定義します。
次は中指シフトです。これはDまたはKと他のキーの同時押しです。.key
に同時押しする2つのキーをパイプ|で区切って定義します。キーの順序は任意です。使用時もシフトキーを先に押しても後に押しても同じように機能します。
私のQMK拡張は時間に関係なく同時に押している瞬間があれば同時押しです。ゆっくり押しても同時押しになりますし、いくら速く押しても同時に押していなければ、独立した連続のキー入力と判定します。また、シフトキーは押しっぱなしでも連続入力できます。やまぶきRやLacailleの仕様と一番違うのはこの点で、私が一番好きなところです。
薬指シフトも同様です。 新下駄にある拗音や記号はこの記事では定義していません。ぜひ完成してみてください。
https://github.com/eswai/qmk_firmware/tree/master/keyboards/crkbd/keymaps/shingeta
未完成ながら実装した新下駄配列版をここに置いておきます。
私は仕事でも自宅でもQMKの薙刀式で入力していますので、実用的に使えることは確認していますが、唯一の不満としてOSとキーボードのかな/英数モードがずれることがあります。OSが入力モードを変えてしまうことがあるのですが、キーボード側はそれを検知できないので、意図した文字が出ないことがあり、もう一度かな入力キーを押してモードを合わせないといけません。かえうちは常駐ソフトでキーボードにフィードバックしてずれないようにしていますね。 対策として、入力せずに一定時間経過後はかなキーを自動的に発行し、ずれ補正をトライ中です。
この記事は、自分で設計したmoduloアーキテクチャのminiaxeクローンに薙刀式キーキャップを乗せて、QMKに実装した薙刀式で書きました。 今年はいろんなアイデアをとにかく試してみた一年でした。来年はエンドゲームに向けて完成度を上げて満足できるキーボードを作りたいなと思います。
いろいろ改造が増えてきたので忘れないようにメモ
st-info --probe
st-flash --reset write generic_boot20_pb12.bin 0x8000000
dfu-util -a 2 -D chibios_test_stm32_f103_onekey_default.bin
すでにまとまった記事もあるのですが自分向けのメモとして。Pro Microが2個必要です。
avrdude -p atmega32u4 -c avr109 -P /dev/tty.usbmodem* -U flash:w:util/pro_micro_ISP_B6_10.hex
make qol56:default:production
でブートローダ付きのhexファイルを生成するavrdude -c avrisp -p atmega32u4 -P /dev/cu.usbmodem142301 -U flash:w:"qol56_default_production.hex":a -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m -U lock:w:0x3F:m
make qol56:default:dfu
でOK