Skip to content

Instantly share code, notes, and snippets.

@yswallow
Last active June 19, 2022 05:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yswallow/5629d93f2d3fbd30efa9981acfbce9ba to your computer and use it in GitHub Desktop.
Save yswallow/5629d93f2d3fbd30efa9981acfbce9ba to your computer and use it in GitHub Desktop.

このドキュメントは古いです。最新のPRKの実装については公式Wikiをご覧ください

keymap.rbのPRKからの変更点・追加点

  • kbd.define_mode_keyではなくvia.define_mode_keyを使う(引数は同一)
  • kbd.start!の前にkbd.append viaする
    • kbd.append viaしなければVIA機能のないPRKとして使えます
    • kbd.append viaしていなくてもRemapにデバイスが表示されますが、仕様です。
  • :defaultレイヤーはVIAのレイヤー0で上書きされる
  • layer_count * rows_size * cols_sizeは240を上回ってはいけない(メモリが不足して動かなくなる)
via = VIA.new
via.layer_count = 4
via.rows_size = 8
via.cols_size = 7
kbd.append via

VIAクラスの設定項目

  • layer_count レイヤー数
  • rows_size キーボードの行数
  • cols_size キーボードの列数

VIAからPRKへの変換の仕様

  • レイヤーキーや長押しによる動作の実装予定はありません。Funcキーで代用してください。
    • RemapのFunc(0〜31)と対応させるためにVIA_FUNC(0〜31)の固定名になってます。
    • Remapのレイヤー(0〜n)と対応させるためにdefault, VIA_LAYER(1〜n)の固定名になってます。レイヤー0のレイヤー名は例外的にdefaultです。
    • mod-tap: via.define_mode_key :VIA_FUNCn, [ key, modifier, time1, time2 ]
    • layer-tap: via.define_mode_key :VIA_FUNCn, [ key, :VIA_LAYERn, time1, time2 ]
    • レイヤーキー: via.define_mode_key :VIA_FUNCn, [ :VIA_LAYERn, nil, nil, nil ]
  • VIAのFunc0Func31がキー:VIA_FUNC0:VIA_FUNC31に変換される
  • VIAのレイヤー名は:default,:VIA_LAYER1VIA_LAYERn

VIAキーマップ保存の仕様

  • 書き込みコマンドを受信した際にvia_map.rbに配列として保存される。
    • VIAで読み込んだだけでは via_map.rb は作成されない
  • via_map.rbが存在しない場合はkbd.add_layerしていた順にVIAのキーマップとして書き込まれる
  • via_map.rbは4096Byteを超えてはいけない
  • via_map.rbをLinuxで開くと以後のファイルサイズの書き換えがうまくいかなくなるため開かないこと
    • Windowsは可
  • ファームウェアをバージョンアップする際はkeymap.rbと同様にvia_map.rbもバックアップする必要がある

keymap.rb

# Initialize a Keyboard
kbd = Keyboard.new

kbd.init_pins(
  [ 6,7 ],   # row0, row1
  [ 28,27 ]  # col0, col1
)

# default layer should be added at first
kbd.add_layer :default, %i[
    VIA_FUNC0 VIA_FUNC1 KC_C KC_D
]

kbd.add_layer :number, %i[
    VIA_FUNC0 KC_2 KC_3 KC_4
]

via = VIA.new
#
#                   Your custom     Keycode or             Keycode (only modifiers)      Release time      Re-push time
#                   key name        Array of Keycode       or Layer Symbol to be held    threshold(ms)     threshold(ms)
#                                   or Proc                or Proc which will run        to consider as    to consider as
#                                   when you click         while you keep press          `click the key`   `hold the key`

# layer key
via.define_mode_key :VIA_FUNC0, [ :KC_ENTER,           :VIA_LAYER1,                     300,              250 ]
# mod-tap
via.define_mode_key :VIA_FUNC1, [ :KC_SPACE,           :KC_LCTL,                        300,              250 ]

via.layer_count = 6
via.rows_size = 2
via.cols_size = 2

kbd.before_report do
  kbd.invert_sft if kbd.keys_include?(:KC_SCOLON)
  # You'll be also able to write `invert_ctl`, `invert_alt` and `invert_gui`
end

kbd.append via
kbd.start!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment