task #517
masaya_abe さんが29日前に更新
## やりたいこと
効率的でスタイリッシュなキーバインドで打鍵したい
## qwerty配列がこの世の基準
↓の画像が普通のキー配列で,これは元々タイプライターの配列とのこと.

タイプライターの技術的な限界から打鍵速度を落として,アームの衝突を防ぐ事を最優先に考慮した配列だという.
要するに,左の小指から右の小指までまんべんなく使うようにバインドされており,
頻出のキーや良くある組み合わせの考慮は優先されていない.
## 現代の代替配列
↓のような配列がある

dvorak配列というらしい
これは英語ベースであるが,より頻出のキーや,英単語の構造的な特徴を考慮している.
しかし日本はもちろん海外でも流行っていない.
他にも,日本語向けのモノやよりモダンなのもあるが,やはり人口は少なくかなりオタク領域.
## 代替配列が流行らない理由
代替配列が流行らない理由は以下が主と思われる
* キーバインドを変更するという発想がPCオタクになった後の発想
* この課題を認識する時には既にデフォルト配列をマスターしている
* 出先や客のpcを操作する場合等業務上の課題
* ショートカットキーのバインドをどうするか問題
要するに「PCオタク知識」,「再学習コストの許容」,「付随する課題への解決策」がセットで必要となる.
上記を考慮した時に「まあ,このままでいいや」となる.
## 大西配列が熱いらしい

https://o24.works/layout/
特に日本語のローマ字打ちに配慮している.
母音aiueoキーを左手で打ち,子音を右手で打つことで左右交互打鍵とし
かつzxcvの多用ショートカットは変えない.
下記の設計過程も納得感あり面白い
https://www.youtube.com/watch?v=iKSnUOVDimM
## とりあえずやってみる
AUTO HOT KEYでバインドを大西配列に差替えてしばらく使ってみる
必要に応じて更にバインド変えるかもしれない
1週間程度で所感を纏める
```
;大西配列
-::/
q::[
w::]
[::q
]::'
'::l
e::u
r::,
t::.
y::f
u::w
i::r
o::y
a::e
s::i
d::a
f::o
g::-
h::k
j::t
k::n
l::s
sc027::h
b::sc027
n::g
m::d
,::m
.::j
/::b
```
※以下は必須昔からずっと使っている
```
#If !GetKeyState("Alt", "P") ; Altキーを押しながらの場合は通常通り動作させる
~LAlt::
Run, ahk_class imejp.imjp_003 ; IMEの英数に切り替え
Return
~RAlt::
Run, ahk_class imejp.imjp_001 ; IMEのかなに切り替え
Return
#If
```
## バインド変更 ``` c
タイピングは明確に遅くなったが、割とすぐに覚えられた。 #include "dactyl-manuform.h"
配置もいろいろ考えていたが、特にaiueoの配置。 #include "action_layer.h"
なんだかんだでauを中指がかぶっているのが気になった。指は5本あるのだから #include "eeconfig.h"
extern keymap_config_t keymap_config;
// Each layer gets a name for readability, which is then used in the keymap matrix below.
つまり親指を使えばよい。 // The underscores don't mean anything - you can have a layer called STUFF or any other name.
 // Layer names don't all need to be of the same length, obviously, and you can also skip them
後はG,Dあたりは上に持って行きたい。人によるだろうが、指曲げるより伸ばす方が楽だから。 // entirely and just use numbers.
あと記号とQL。どうせならよく使う記号は左手に寄せたい。
## キーボードを自作する #define base 0
* 出先や客のpcを操作する場合等業務上の課題 #define meta 1
この課題をクリアする最も確実な方法は「自作キーボード」と思われる。 #define sub 2
// Fillers to make layering more clear
→ファームウェアレベルでバインドが適用済みなのでキーボード持ってけばAHKとか不要
→いざとなったらAHKの実行ファイルをクラウドとかに上げとけば大概は対応可能
→単純にかっこいい #define XXXXXXX KC_NO
左右分離キーボード作る const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
https://github.com/abstracthat/dactyl-manuform?tab=readme-ov-file [base] = KEYMAP_5x6(
// left hand
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5,
KC_TAB, KC_LBRC, KC_RBRC, KC_QUOT, KC_COMMA, KC_DOT,
KC_LSHIFT, KC_O, KC_I, KC_U, KC_E, KC_MINS,
KC_LCTRL, KC_Z, KC_X, KC_C, KC_V, KC_SCLN,
KC_EQL, KC_GRV,
KC_A, KC_SPC,
KC_LGUI, LT(sub, KC_BSPC),
KC_LALT, LT(meta, KC_DEL),
// right hand
KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_G, KC_D, KC_R, KC_Y, KC_P, KC_DEL,
KC_K, KC_T, KC_N, KC_S, KC_H, KC_RSHIFT,
KC_W, KC_M, KC_J, KC_B, KC_F, KC_RCTL,
KC_Q, KC_L,
KC_SPC, KC_A,
LT(sub, KC_BSPC), KC_ENT,
LT(meta, KC_DEL), KC_LALT,
[meta] = KEYMAP_5x6(
// left hand
KC_F1, KC_F2 , KC_F3, KC_F4, KC_F5, KC_F6,
_______, KC_1, KC_2, KC_3, KC_4, KC_PSLS,
_______, KC_5, KC_6, KC_7, KC_8, KC_PMNS,
_______, _______, KC_9, KC_0, KC_PPLS, KC_PAST,
_______, _______,
KC_ENT, KC_SPC,
KC_LGUI, LT(sub, KC_BSPC),
KC_LALT, LT(meta, KC_DEL),
// right hand
KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______,
KC_PGUP, KC_HOME, KC_UP, KC_END, KC_F12, _______,
KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______,
KC_CALC, KC_MAIL, KC_MYCM, KC_WHOM, _______, RESET,
_______, _______,
KC_SPC, KC_PSCR,
LT(sub, KC_BSPC), KC_ENT,
LT(meta, KC_DEL), KC_LALT,
layout0 };
void persistant_default_layer_set(uint16_t default_layer) {
eeconfig_update_default_layer(default_layer);
default_layer_set(default_layer);

layout1

}
```