Artseyキーマップについて

2024-11-30

これはキーボード #1 Advent Calendar 2024 1日目の記事です。
こちらからお読みください。

Artseyキーマップの紹介

※ この記事では、押下順序が定まっている同時押し(例:Shiftキーやレイヤー切り替えキー)を「ホールド同時押し」、複数のキーを同時に押下して離す同時押しを「同時押し」と呼びます。

ArtseyはArtseyioが開発しているChorded keyboardに分類されるキーマップです。
2行4列の8キーを使用し、配列の”ARTSEYIO”がドメインになっていておしゃれです。
公式の打鍵動画も公開されています。

Artseyキーマップの主な特徴は次のとおりです。

  • 独立したキーがなくすべて同時押しに使用する
  • 文字入力は同時押し、数字や一部記号の入力はホールド同時押し
  • マウスやカーソル操作はレイヤー切り替えによって行う
  • モディファイアは基本的に同時押しでトグルする
  • 左手・右手用キーマップは互いに反転した配置

詳細なキーマップはArtseyioの一覧表を参照してください。

この楽しいArtseyキーマップを、実際のマクロパッドにファームウェアを書き込む前に試せるシミュレータを用意しました。

Artseyシミュレータを作った

advent2024 artsey

手元のキーボードとブラウザで動作するArtseyシミュレータを作りました。

https://hsgw.github.io/artsey-simulator/

左手用キーマップ+アルファベットのみのお試し版ですが、キーマップガイドが表示される練習モードも用意していますので、ぜひお試しください。
Chorded keyboard特有の打鍵体験が味わえます。

すでに公式のシミュレータがありますが、次に入力するキーマップが逐次で出るものを用意したかったので作りました

試して気に入ったら実際のマクロパッドにファームウェアを書き込んでみましょう。

Artseyキーマップの実装

Artseyキーマップの仕組み

Artseyキーマップは同時押しを多用しています。そして、QMK Firmwareでは同時押しを実装するために、Combo 機能が用意されています。 https://docs.qmk.fm/features/combo

しかし、ドキュメントにある通り、細かい設定を繰り返し書く必要があリます。そこで、CSVファイルで定義したとおりにコンボの設定を出力するスクリプトとそれで出力したすぐに使用可能なCファイルを用意しました。

artsey.ioでは公式のQMK用キーマップも提供されていますが、R言語環境の準備が必要であったり、独自の定義ファイルを使用しているため、本実装ではより分かりやすいCSVファイルとPythonを用いてQMKの基本機能をできる限り活用した形で書き直しています。

Artseyキーマップをビルドする

Artseyだけのキーマップを作ってビルドします。

前提

  • 現在のキーマップのバックアップができる
  • QMK Firmwareのビルド環境が整っている
  • キーボードにキーマップを追加できる

サンプルキーマップ

https://github.com/hsgw/qmk_userspace/tree/artsey/keyboards/dm9records/nigo/keymaps/artsey_sample

  • 2x5のキーボードにartseyキーマップを追加するキーマップ
  • 2x4のArtseyで使用しない部分はスペースとバックスペース

Artseyキーマップの追加

  1. 追加したいキーボードのdefaultキーマップをコピーしてartsey に名前を変える
  2. 以下のURLのディレクトリから combos.h, combo_util.c, combo_util.hkeymaps/artsey にコピーする
  1. keymaps/artsey に、rules.mkを追加して以下の内容を追記する
SRC += combo_util.c
COMBO_ENABLE = yes 
  1. keymap.cを編集する
  • このURLのkeymap.cを参考にしてください

https://github.com/hsgw/qmk_userspace/blob/artsey/keyboards/dm9records/nigo/keymaps/artsey_sample/keymap.c 2. keymaps.c の冒頭に追記する

#include QMK_KEYBOARD_H

// 以下を追記
#include "combos.h"
// combos.hで定義されたコンボを読み込む
combo_t key_combos[] = {**KEY_COMBOS_DEF**};
  1. keymap.ckeymaps をキーボードにあわせて編集する
  • combos.h 内で定義されているレイヤー名とキーコードを設定する
  • サンプルではartseyで使わない部分に他のキーコードを設定していますが、KC_NO を設定して無効にしておくのをおすすめします
// 2x5のキーボードでの例
// CMB_BASからCMB_NAVまでのすべてのレイヤーを設定すること
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
	[CMB_BAS] = LAYOUT(
		BAS_1_1,BAS_1_2,BAS_1_3,BAS_1_4,KC_NO,
		BAS_2_1,BAS_2_2,BAS_2_3,BAS_2_4,KC_NO
	),
	[CMB_NUM] = LAYOUT(
		NUM_1_1,NUM_1_2,NUM_1_3,NUM_1_4,KC_NO,
		NUM_2_1,NUM_2_2,NUM_2_3,NUM_2_4,KC_NO
),
// .....
  1. keymap.cprocess_record_user()に追記する
// keymaps.cになければ追加
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
	// 必ず最初にcombo.hで使用するキーコードを処理する
	if (process_record_combo_keycode(keycode, record) == false) {
		return false;
	}
	// 他のキーコードの処理を追加するなら以下で
	// switch(keycode) {
	// ...
	// }
	return true;
}
  1. ビルドしてファームウェアを書き込む

make <keyboardname>:artsey 2. 完成

Comboの調整

QMKのCombo機能は同時押し入力時間の調整など様々なオプションが用意されています。
もし、少しでも打ちにくいと感じたら、ドキュメントを参考に調整してみてください。

https://docs.qmk.fm/features/combo

既存のマクロパッドにArtseyを組み込む

あまりにも複雑すぎる(ようにみえる)ので時間が足りなくてあまり説明できません。ごめんなさい。
例を用意しておきましたのでこちらを参考にしてください。
質問があればdiscordのどこかのサーバーでメンションを頂ければお答えできると思います。

https://github.com/hsgw/qmk_userspace/blob/artsey/keyboards/dm9records/nigo/keymaps/macro_artsey/keymap.c

基本方針は以下のとおりです。

  • 起動時のデフォルトレイヤーをユーザーレイヤーにするため、ユーザーレイヤー→Artseyレイヤーの順にする
  • ユーザーレイヤーとArtseyレイヤーの切り替えにはTO(layer) でレイヤー自体を有効化/無効化する
  • その切り替えには同じ運指になるコンボを使う

未確認ですが、via/Remapとも共存できそうです。この場合、Artseyレイヤーを編集してしまうとコンボが反応しなくなるので気をつける必要があります。

Artseyキーマップの改造

csvファイルを変更してスクリプトに読み込ませるとcombo.hを再生成してくれます。
keymaps/artseyにcsvファイルを置いて、ファイルのパスを指定して実行してください。
詳しい使い方は以下のURLとスクリプトのヘルプを確認してください。
https://github.com/hsgw/qmk_userspace/tree/artsey/users/hsgw/combo

<< マクロパッドについてに戻る
<< マクロパッドをマクロパッドとして使わない方法に戻る