はじめに
こんにちは、Ctrlです。
今回はCTRL配列の左手から右手への移行とキーボードレイアウトの変更も含めたメジャーアップデートです。
現在は左手にKensingtonのスリムブレード、右手にWorm Eaten、ディスプレイの下に無指向性マイクを設置して作業しています。
左手から右手に移行した理由
左手から右手に移行した理由は、左肩の肩こりが気になり始めたことがきっかけです。
仕事中は主にGoogleドキュメントの音声入力のため、ほとんどタイピングすることはないのですが、小さなストレスでも早めに解消しておこうと思い、試しに左にトラックボール、右にキーボードのスタイルに変更してみました。
左手でトラックボールを操作するのは無理だろうと思ったところ、意外とスムーズに移行でき、同時に今まで左手で操作したキーボードが反転して右手になった形ですが、自然と右手でもキー配列を覚えたまま移行できたのでそのまま移行しました。
移行のためのトレーニング時間はほぼ必要なく、切り替えてからすぐに反転する前と同じ作業スピードを維持することが可能だったこと、不思議なほどに左肩の肩こりがなくなったため、利き腕によるキーボード操作は効果があるのではと考えています。
右手に移行した後も左手で同じように作業することができたため、次に右肩が凝り始めたら、左手にキーボードに切り替える予定です。
頻繁にキーボードのレイアウトを変えていたことで、細かな変更でも覚えられる癖がついたことが、右手でも左手でも問題なく作業ができた要因だと考えています。
また、右手に移行する前にQWERTY配列でのタイピングをしたところ、QWERTY配列も指先が覚えていたため、特に問題なくタイピングできました。
レイヤーも以前より増えましたが、左手の時から届きやすい場所だけに配置し、届きにくいところはXXXXXXXを設定していたため、右手に変更したことでさらに作業しやすいレイヤーとレイアウトになったと考えています。
ブラインドタッチとは異なるスキルとして、配置したキーボードレイアウトを覚えてすぐ切り替えられるスキルというのもあるのかもしれないです。
主な変更点
- 左手ベースのレイアウトから右手ベースに移行
- ChromiumとGoogleドキュメントのショートカットの最適化
- 上下のアローキーをマウスホイールの上下に変更
- Vimiumの最適化
- te96から切り離したPro Micro付き基盤とTRRSケーブルで接続
以前からスリムブレードのホイール操作があまり得意ではなかったため、キーボードにマウスホイールを設定したところ、かなり作業しやすく、そしてトラックボールを操作する手も痛くなかったためそのまま採用しました。右クリックや左クリック、ホイールクリックも設定してあるため、スリムプレートではマウスポインタを動かすのみです。
左右のレイアウトを同じにしてあるのは、te96から切り離したProMicro付き基盤を経由して、TRRSケーブルで接続して作業しているためです。以前はマグネット式の端子をつけていたのですが、新しく購入した端子が以前と形状が違っていたこと、頻繁に外れるのでストレスだったこと、直付けではProMicroの端子が壊れそうだったことなどが重なったため、経由して作業するようにしています。
その他のショートカットやVimiumの最適化については、設定したキーボードレイアウトに合わせて随時変更しており、少しでも届きにくい、押しにくいなどのストレスを避け、ブラウジングやGoogleドキュメントでの作業の際にスムーズになるような配列になりました。
現時点で1ヶ月ほど経過しましたが、今のところ肩こりは両方とも起きていません。
※あくまでも n=1 の体感であり、医学的にも、科学的にも根拠がないので注意してください。
使用しているPCB:物理キーボード
使用している物理キーボードは@takashicompanyさんのWorm Eatenです。
全体のサンプルコード
keymap.c
#include QMK_KEYBOARD_H
enum layer_number {
_BASE0 = 0,_LT1,_LT2,_LT3,_LT4,_LT5,_LT6,_LT7,_LT8,_LT9,_LT10,
};
enum custom_keycodes {
VOICE = SAFE_RANGE,PRN,BRC,CBR,ABK,LINE2,LINE3,SEARCH,
};
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case VOICE:
if (record->event.pressed) {
SEND_STRING(SS_TAP(X_LNG1) SS_RCTL(SS_LSFT("s")));
} else {
}
break;
case PRN:
if (record->event.pressed) {
SEND_STRING("()");
} else {
}
break;
case BRC:
if (record->event.pressed) {
SEND_STRING("[]");
} else {
}
break;
case CBR:
if (record->event.pressed) {
SEND_STRING("<>");
} else {
}
break;
case ABK:
if (record->event.pressed) {
SEND_STRING("{}");
} else {
}
break;
case LINE2:
if (record->event.pressed) {
SEND_STRING(SS_TAP(X_BTN1) SS_LALT(SS_LCTL("2")));
} else {
}
break;
case LINE3:
if (record->event.pressed) {
SEND_STRING(SS_TAP(X_BTN1) SS_LALT(SS_LCTL("3")));
} else {
}
break;
case SEARCH:
if (record->event.pressed) {
SEND_STRING(SS_TAP(X_LNG2) SS_LCTL("c") SS_LCTL("t") SS_DELAY(100) "www.google.com/search?q=" SS_LCTL("v") SS_TAP(X_ENTER));
} else {
}
break;
}
return true;
};
enum {
A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,
};
tap_dance_action_t tap_dance_actions[] = {
[A] = ACTION_TAP_DANCE_DOUBLE(KC_A, S(KC_A)),[B] = ACTION_TAP_DANCE_DOUBLE(KC_B, S(KC_B)),[C] = ACTION_TAP_DANCE_DOUBLE(KC_C, S(KC_C)),[D] = ACTION_TAP_DANCE_DOUBLE(KC_D, S(KC_D)),
[E] = ACTION_TAP_DANCE_DOUBLE(KC_E, S(KC_E)),[F] = ACTION_TAP_DANCE_DOUBLE(KC_F, S(KC_F)),[G] = ACTION_TAP_DANCE_DOUBLE(KC_G, S(KC_G)),[H] = ACTION_TAP_DANCE_DOUBLE(KC_H, S(KC_H)),
[I] = ACTION_TAP_DANCE_DOUBLE(KC_I, S(KC_I)),[J] = ACTION_TAP_DANCE_DOUBLE(KC_J, S(KC_J)),[K] = ACTION_TAP_DANCE_DOUBLE(KC_K, S(KC_K)),[L] = ACTION_TAP_DANCE_DOUBLE(KC_L, S(KC_L)),
[M] = ACTION_TAP_DANCE_DOUBLE(KC_M, S(KC_M)),[N] = ACTION_TAP_DANCE_DOUBLE(KC_N, S(KC_N)),[O] = ACTION_TAP_DANCE_DOUBLE(KC_O, S(KC_O)),[P] = ACTION_TAP_DANCE_DOUBLE(KC_P, S(KC_P)),
[Q] = ACTION_TAP_DANCE_DOUBLE(KC_Q, S(KC_Q)),[R] = ACTION_TAP_DANCE_DOUBLE(KC_R, S(KC_R)),[S] = ACTION_TAP_DANCE_DOUBLE(KC_S, S(KC_S)),[T] = ACTION_TAP_DANCE_DOUBLE(KC_T, S(KC_T)),
[U] = ACTION_TAP_DANCE_DOUBLE(KC_U, S(KC_U)),[V] = ACTION_TAP_DANCE_DOUBLE(KC_V, S(KC_V)),[W] = ACTION_TAP_DANCE_DOUBLE(KC_W, S(KC_W)),[X] = ACTION_TAP_DANCE_DOUBLE(KC_X, S(KC_X)),
[Y] = ACTION_TAP_DANCE_DOUBLE(KC_Y, S(KC_Y)),[Z] = ACTION_TAP_DANCE_DOUBLE(KC_Z, S(KC_Z)),
};
#define BSPC KC_BSPC
#define ENG KC_LNG2
#define JPN KC_LNG1
#define DEL KC_DEL
#define SPC KC_SPC
#define BTN1 KC_BTN1
#define BTN2 KC_BTN2
#define BTN3 KC_BTN3
#define ESC KC_ESC
#define TAB KC_TAB
#define ENT KC_ENT
#define RGHT KC_RGHT
#define LEFT KC_LEFT
#define HOME KC_HOME
#define END KC_END
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE0] = LAYOUT(
VOICE, MS_WHLU, LT(6,KC_COMM),LT(7,KC_DOT), LT(8,TAB), /* */ VOICE, MS_WHLU, LT(6,KC_COMM),LT(7,KC_DOT), LT(8,TAB),
LT(4,BTN3), LT(5,BTN1), LEFT, RGHT, LT(9,ENT), /* */ LT(4,BTN3), LT(5,BTN1), LEFT, RGHT, LT(9,ENT),
LT(3,SPC), MS_WHLD, XXXXXXX, XXXXXXX, LT(10,ESC), /* */ LT(3,SPC), MS_WHLD, XXXXXXX, XXXXXXX, LT(10,ESC),
LT(2,BSPC), LT(1,DEL), XXXXXXX, XXXXXXX, XXXXXXX, /* */ LT(2,BSPC), LT(1,DEL), XXXXXXX, XXXXXXX, XXXXXXX),
[_LT1] = LAYOUT(
TD(W), TD(Y), TD(E), TD(O), TD(L), /* */ TD(W), TD(Y), TD(E), TD(O), TD(L),
TD(F), TD(I), TD(C), TD(J), TD(A), /* */ TD(F), TD(I), TD(C), TD(J), TD(A),
TD(V), TD(U), XXXXXXX, XXXXXXX, TD(Q), /* */ TD(V), TD(U), XXXXXXX, XXXXXXX, TD(Q),
JPN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, /* */ JPN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
[_LT2] = LAYOUT(
TD(P), TD(R), TD(T), TD(S), TD(X), /* */ TD(P), TD(R), TD(T), TD(S), TD(X),
TD(H), TD(N), TD(D), TD(Z), TD(K), /* */ TD(H), TD(N), TD(D), TD(Z), TD(K),
TD(B), TD(M), XXXXXXX, XXXXXXX, TD(G), /* */ TD(B), TD(M), XXXXXXX, XXXXXXX, TD(G),
XXXXXXX, ENG, XXXXXXX, XXXXXXX, XXXXXXX, /* */ XXXXXXX, ENG, XXXXXXX, XXXXXXX, XXXXXXX),
[_LT3] = LAYOUT(
C(KC_A), S(KC_UP), S(HOME), S(END), A(KC_C), /* */ C(KC_A), S(KC_UP), S(HOME), S(END), A(KC_C),
C(KC_X), C(KC_C), S(LEFT), S(RGHT), RCS(KC_V), /* */ C(KC_X), C(KC_C), S(LEFT), S(RGHT), RCS(KC_V),
XXXXXXX, S(KC_DOWN), XXXXXXX, XXXXXXX, C(KC_V), /* */ XXXXXXX, S(KC_DOWN), XXXXXXX, XXXXXXX, C(KC_V),
A(KC_F4), S(DEL), XXXXXXX, XXXXXXX, XXXXXXX, /* */ A(KC_F4), S(DEL), XXXXXXX, XXXXXXX, XXXXXXX),
[_LT4] = LAYOUT(
C(KC_F5), C(KC_F4), C(KC_F3), C(KC_F2), C(KC_F1), /* */ C(KC_F5), C(KC_F4), C(KC_F3), C(KC_F2), C(KC_F1),
XXXXXXX, XXXXXXX, C(KC_F8), C(KC_F7), C(KC_F6), /* */ XXXXXXX, XXXXXXX, C(KC_F8), C(KC_F7), C(KC_F6),
C(KC_F10), C(KC_F9), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_F10), C(KC_F9), XXXXXXX, XXXXXXX, XXXXXXX,
C(KC_F12), C(KC_F11), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_F12), C(KC_F11), XXXXXXX, XXXXXXX, XXXXXXX),
[_LT5] = LAYOUT(
XXXXXXX, XXXXXXX, KC_SLSH, KC_COLN, KC_HASH, /* */ XXXXXXX, XXXXXXX, KC_SLSH, KC_COLN, KC_HASH,
BTN2, XXXXXXX, KC_QUES, KC_EXLM, SEARCH, /* */ BTN2, XXXXXXX, KC_QUES, KC_EXLM, SEARCH,
C(KC_Z), C(KC_Y), XXXXXXX, XXXXXXX, KC_UNDS, /* */ C(KC_Z), C(KC_Y), XXXXXXX, XXXXXXX, KC_UNDS,
C(KC_W), RCS(KC_T), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_W), RCS(KC_T), XXXXXXX, XXXXXXX, XXXXXXX),
[_LT6] = LAYOUT(
XXXXXXX, C(HOME), XXXXXXX, C(KC_S), XXXXXXX, /* */ XXXXXXX, C(HOME), XXXXXXX, C(KC_S), XXXXXXX,
XXXXXXX, A(TAB), XXXXXXX, XXXXXXX, RCS(KC_C), /* */ XXXXXXX, A(TAB), XXXXXXX, XXXXXXX, RCS(KC_C),
C(KC_H), C(END), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_H), C(END), XXXXXXX, XXXXXXX, XXXXXXX,
LINE2, LINE3, XXXXXXX, XXXXXXX, XXXXXXX, /* */ LINE2, LINE3, XXXXXXX, XXXXXXX, XXXXXXX),
[_LT7] = LAYOUT(
XXXXXXX, ABK, PRN, XXXXXXX, XXXXXXX, /* */ XXXXXXX, ABK, PRN, XXXXXXX, XXXXXXX,
XXXXXXX, BRC, XXXXXXX, XXXXXXX, CBR, /* */ XXXXXXX, BRC, XXXXXXX, XXXXXXX, CBR,
KC_MINS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_MINS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX,
KC_EQL, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_EQL, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX),
[_LT8] = LAYOUT(
XXXXXXX, KC_TILD, KC_PERC, KC_AMPR, XXXXXXX, /* */ XXXXXXX, KC_TILD, KC_PERC, KC_AMPR, XXXXXXX,
XXXXXXX, KC_AT, XXXXXXX, XXXXXXX, XXXXXXX, /* */ XXXXXXX, KC_AT, XXXXXXX, XXXXXXX, XXXXXXX,
KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, XXXXXXX,
KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX),
[_LT9] = LAYOUT(
KC_F5, KC_F7, KC_BSLS, KC_SCLN, XXXXXXX, /* */ KC_F5, KC_F7, KC_BSLS, KC_SCLN, XXXXXXX,
XXXXXXX, KC_F11, KC_DLR, KC_PIPE, XXXXXXX, /* */ XXXXXXX, KC_F11, KC_DLR, KC_PIPE, XXXXXXX,
RCS(TAB), C(TAB), XXXXXXX, XXXXXXX, QK_BOOT, /* */ RCS(TAB), C(TAB), XXXXXXX, XXXXXXX, QK_BOOT,
A(LEFT), A(RGHT), XXXXXXX, XXXXXXX, XXXXXXX, /* */ A(LEFT), A(RGHT), XXXXXXX, XXXXXXX, XXXXXXX),
[_LT10] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_CAPS, /* */ KC_1, KC_2, KC_3, KC_4, KC_CAPS,
KC_5, KC_6, KC_7, KC_8, KC_NUM, /* */ KC_5, KC_6, KC_7, KC_8, KC_NUM,
KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX,
RCS(KC_PGUP), RCS(KC_PGDN), XXXXXXX, XXXXXXX, XXXXXXX, /* */ RCS(KC_PGUP), RCS(KC_PGDN), XXXXXXX, XXXXXXX, XXXXXXX),
};
以上が今回の全体のサンプルコードになります。
Vimiumの設定
unmapAll
map <c-S> goBack
map <space> goNext
map <tab> LinkHints.activateModeToOpenInNewForegroundTab
map <delete> restoreTab
map <backspace> removeTab
map <c-home> scrollToTop
map <c-end> scrollToBottom
map <c-s> copyCurrentUrl
map , previousTab
map . nextTab
mapkey 0 0
mapkey 1 0
mapkey 2 0
mapkey 3 0
mapkey 4 0
mapkey 5 0
mapkey 6 0
mapkey 7 0
mapkey 8 0
mapkey 9 0
Vimiumの設定では、ブラウジングする時の操作が最適化されています。右手のキーボード操作だけでほとんどのブラウザ操作が可能です。
後半の数字の部分は、何らかのミスで数字キーを押した後にリンクなどを開こうとすると、数字の分だけタブが開かれてしまったため、0にして複数回操作にならないようにしてあります。
作業に必要なGoogleドキュメントなどのリンクは、アルファキーで開くようになっており、必要なページはすぐ開けるようにしました。個人的に必要なURLのみなので、記述するのは避けています。
Googleドキュメントのみ全てのVimium操作をオフに設定してあるため、作業時にどのキーを押してもVimiumの操作が実行されることはありません。
キーボードレイアウトの解説
_BASE0
[_BASE0] = LAYOUT(
VOICE, MS_WHLU, LT(6,KC_COMM),LT(7,KC_DOT), LT(8,TAB), /* */ VOICE, MS_WHLU, LT(6,KC_COMM),LT(7,KC_DOT), LT(8,TAB),
LT(4,BTN3), LT(5,BTN1), LEFT, RGHT, LT(9,ENT), /* */ LT(4,BTN3), LT(5,BTN1), LEFT, RGHT, LT(9,ENT),
LT(3,SPC), MS_WHLD, XXXXXXX, XXXXXXX, LT(10,ESC), /* */ LT(3,SPC), MS_WHLD, XXXXXXX, XXXXXXX, LT(10,ESC),
LT(2,BSPC), LT(1,DEL), XXXXXXX, XXXXXXX, XXXXXXX, /* */
以上がデフォルトのキーボードレイアウトです。基本的にGoogleドキュメントで作業をしているため、音声入力をオンにする「VOICE」と音声では入力しにくい「、」「。」のみでほとんど作業が完結します。
便宜的にキーボードとは言っているものの、どちらかといえばマクロパッドという言い方をした方が良いようなレイアウトと言えるかもしれません。
レイヤー切り替えの担当は、親指が123、人差し指が45、中指が6、薬指が78、小指が9と10になっています。
本来であればレイヤーごとに機能やジャンルを 統一した方が良いと思いましたが、それぞれの指の押しやすい場所が異なるため、結果として各レイヤーにバラバラにキーが配置されるようになりました。
特に便利なキーは、「BTN3」のホイールクリックです。ホイールクリックの場合、リンクを新しいタブで開いたり、ブラウザのタブをクリックするだけでタブを閉じたりできます。また、Linuxでは選択した文字列をコピーしなくても、選択しただけでコピーされるようになっており、再度ホイールクリックを押すと書式設定のない状態で貼り付けができるので非常に便利です。ただし、Googleドキュメントではうまく動作しないので、どうすれば使えるようになるか模索しています。
_LT1
[_LT1] = LAYOUT(
TD(W), TD(Y), TD(E), TD(O), TD(L), /* */ TD(W), TD(Y), TD(E), TD(O), TD(L),
TD(F), TD(I), TD(C), TD(J), TD(A), /* */ TD(F), TD(I), TD(C), TD(J), TD(A),
TD(V), TD(U), XXXXXXX, XXXXXXX, TD(Q), /* */ TD(V), TD(U), XXXXXXX, XXXXXXX, TD(Q),
JPN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, /* */ JPN, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX),
以上は親指のホールドで入力するキーボードレイアウトであり、主に母音を担当しています。タップダンスが設定してあり、素早く2回タップすることで大文字になります。
_LT2
[_LT2] = LAYOUT(
TD(P), TD(R), TD(T), TD(S), TD(X), /* */ TD(P), TD(R), TD(T), TD(S), TD(X),
TD(H), TD(N), TD(D), TD(Z), TD(K), /* */ TD(H), TD(N), TD(D), TD(Z), TD(K),
TD(B), TD(M), XXXXXXX, XXXXXXX, TD(G), /* */ TD(B), TD(M), XXXXXXX, XXXXXXX, TD(G),
XXXXXXX, ENG, XXXXXXX, XXXXXXX, XXXXXXX, /* */ XXXXXXX, ENG, XXXXXXX, XXXXXXX, XXXXXXX),
以上は親指のホールドで入力するキーボードレイアウトであり、主に子音を担当しています。母音と同じようにタップダンスが設定してあり、素早く2回タップすることで大文字になります。
_LT3
[_LT3] = LAYOUT(
C(KC_A), S(KC_UP), S(HOME), S(END), A(KC_C), /* */ C(KC_A), S(KC_UP), S(HOME), S(END), A(KC_C),
C(KC_X), C(KC_C), S(LEFT), S(RGHT), RCS(KC_V), /* */ C(KC_X), C(KC_C), S(LEFT), S(RGHT), RCS(KC_V),
XXXXXXX, S(KC_DOWN), XXXXXXX, XXXXXXX, C(KC_V), /* */ XXXXXXX, S(KC_DOWN), XXXXXXX, XXXXXXX, C(KC_V),
A(KC_F4), S(DEL), XXXXXXX, XXXXXXX, XXXXXXX, /* */ A(KC_F4), S(DEL), XXXXXXX, XXXXXXX, XXXXXXX),
以上は親指のホールドで入力するキーボードレイアウトであり、主に編集時のキーボードショートカットと文字列の選択を担当しています。
A(KC_C)にはスクリーンショットの機能を割り当てました。その他は一般的なキーボードショートカットと同じであり、数あるレイヤーの中でも作業するために最も欠かせないレイヤーになっています。
_LT4
[_LT4] = LAYOUT(
C(KC_F5), C(KC_F4), C(KC_F3), C(KC_F2), C(KC_F1), /* */ C(KC_F5), C(KC_F4), C(KC_F3), C(KC_F2), C(KC_F1),
XXXXXXX, XXXXXXX, C(KC_F8), C(KC_F7), C(KC_F6), /* */ XXXXXXX, XXXXXXX, C(KC_F8), C(KC_F7), C(KC_F6),
C(KC_F10), C(KC_F9), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_F10), C(KC_F9), XXXXXXX, XXXXXXX, XXXXXXX,
C(KC_F12), C(KC_F11), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_F12), C(KC_F11), XXXXXXX, XXXXXXX, XXXXXXX),
以上は人差し指のホールドで入力するキーボードレイアウトであり、主にLinuxのアプリケーションを開くショートカットを担当しています。
ブラウザやターミナル、ファイラーなどのアプリケーション、そしてよく使う機能などを呼び出せるようになっており、一般的なメニューやパネルのようなものは一切使わなくて済むようになりました。
_LT5
[_LT5] = LAYOUT(
XXXXXXX, XXXXXXX, KC_SLSH, KC_COLN, KC_HASH, /* */ XXXXXXX, XXXXXXX, KC_SLSH, KC_COLN, KC_HASH,
BTN2, XXXXXXX, KC_QUES, KC_EXLM, SEARCH, /* */ BTN2, XXXXXXX, KC_QUES, KC_EXLM, SEARCH,
C(KC_Z), C(KC_Y), XXXXXXX, XXXXXXX, KC_UNDS, /* */ C(KC_Z), C(KC_Y), XXXXXXX, XXXXXXX, KC_UNDS,
C(KC_W), RCS(KC_T), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_W), RCS(KC_T), XXXXXXX, XXXXXXX, XXXXXXX),
以上は人差し指のホールドで入力するキーボードレイアウトであり、主に時々使う記号と、元に戻す、やり直し、タブを閉じる、閉じたタブを開くなどのキーボードショートカットを担当しています。
人差し指のホールドと親指はとても相性が良く、疲れにくい指であることから多用するようなキーを設定しました。ただし、人差し指、親指、小指は相性が良いのですが、中指と薬指はちょっぴり相性が悪いので、時々使う記号のみ設定してあります。
また、少し押しにくいですが、時々使う右クリックも、手首を左に少しずらして、中指でホールドし、人差し指のタップする形で押せるようにしました。使用頻度は少ないです。
case SEARCH:
if (record->event.pressed) {
SEND_STRING(SS_TAP(X_LNG2) SS_LCTL("c") SS_LCTL("t") SS_DELAY(100) "www.google.com/search?q=" SS_LCTL("v") SS_TAP(X_ENTER));
} else {
}
break;
SEARCHのキーは選択した文字列をコピーし、新しいタブを開き、Googleの検索URLを入れ、検索したい用語を貼り付けし、エンターで決定する仕組みになっています。Google検索のURLを入れているのは、Chromeブラウザの仕様でアドレスバーでの検索がDuckDuckGoになってしまうためです.
前にVimiumと組み合わせて同じような動作をしていた時よりも、より早く検索結果が表示されるようになりました。
人差し指でダブルクリックして単語を選択し、人差し指をホールドして小指をタップするとすぐに検索結果が表示されるのはかなり快適です。
_LT6
[_LT6] = LAYOUT(
XXXXXXX, C(HOME), XXXXXXX, C(KC_S), XXXXXXX, /* */ XXXXXXX, C(HOME), XXXXXXX, C(KC_S), XXXXXXX,
XXXXXXX, A(TAB), XXXXXXX, XXXXXXX, RCS(KC_C), /* */ XXXXXXX, A(TAB), XXXXXXX, XXXXXXX, RCS(KC_C),
C(KC_H), C(END), XXXXXXX, XXXXXXX, XXXXXXX, /* */ C(KC_H), C(END), XXXXXXX, XXXXXXX, XXXXXXX,
LINE2, LINE3, XXXXXXX, XXXXXXX, XXXXXXX, /* */ LINE2, LINE3, XXXXXXX, XXXXXXX, XXXXXXX),
以上は中指のホールドで入力するキーボードレイアウトであり、主にGoogleドキュメントで作業する時の置換、文字数カウント、URLコピー、見出しレベル2の設定、見出しレベル3の設定、そしてドキュメントの一番上と一番下に移動するキー、人差し指にはアプリの切り替えが設定してあります。
中指もどちらかというと強い指であり、人差し指と親指との相性がとても良いです。ただし、真下のキーはほとんど押せないこと、薬指と中指はあんまり相性が良くないため、設定できる箇所が少ないことは否めません。
_LT7
[_LT7] = LAYOUT(
XXXXXXX, ABK, PRN, XXXXXXX, XXXXXXX, /* */ XXXXXXX, ABK, PRN, XXXXXXX, XXXXXXX,
XXXXXXX, BRC, XXXXXXX, XXXXXXX, CBR, /* */ XXXXXXX, BRC, XXXXXXX, XXXXXXX, CBR,
KC_MINS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_MINS, KC_PLUS, XXXXXXX, XXXXXXX, XXXXXXX,
KC_EQL, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_EQL, KC_ASTR, XXXXXXX, XXXXXXX, XXXXXXX),
以上は薬指のホールドで入力するキーボードレイアウトであり、主にかっこと四則演算の記号が設定されています。
中指と同様に薬よりも真下のキーが押せないので、設定する場所が限られます。
薬指は尺骨神経が担当する指でもあり、あまり多用したくないキーなのですが、なるべく指を置いてあるところでホールドしたくて設定してみました。
左手の肩こりの時に尺骨神経が原因かもしれないと気にして、キー配置したのをそのまま反転したため、もしかしたら右手では右肩にはあまり影響ないかもしれないとも思っています。
_LT8
[_LT8] = LAYOUT(
XXXXXXX, KC_TILD, KC_PERC, KC_AMPR, XXXXXXX, /* */ XXXXXXX, KC_TILD, KC_PERC, KC_AMPR, XXXXXXX,
XXXXXXX, KC_AT, XXXXXXX, XXXXXXX, XXXXXXX, /* */ XXXXXXX, KC_AT, XXXXXXX, XXXXXXX, XXXXXXX,
KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_GRV, KC_CIRC, XXXXXXX, XXXXXXX, XXXXXXX,
KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_QUOT, KC_DQUO, XXXXXXX, XXXXXXX, XXXXXXX),
以上は薬指か小指でのホールドで入力するキーボードレイアウトであり、主にほとんど使わない記号が設定されています。主な記号のほとんどは文書入力や文書作成の時に必要のないキーというイメージです。
_LT9
[_LT9] = LAYOUT(
KC_F5, KC_F7, KC_BSLS, KC_SCLN, XXXXXXX, /* */ KC_F5, KC_F7, KC_BSLS, KC_SCLN, XXXXXXX,
XXXXXXX, KC_F11, KC_DLR, KC_PIPE, XXXXXXX, /* */ XXXXXXX, KC_F11, KC_DLR, KC_PIPE, XXXXXXX,
RCS(TAB), C(TAB), XXXXXXX, XXXXXXX, QK_BOOT, /* */ RCS(TAB), C(TAB), XXXXXXX, XXXXXXX, QK_BOOT,
A(LEFT), A(RGHT), XXXXXXX, XXXXXXX, XXXXXXX, /* */ A(LEFT), A(RGHT), XXXXXXX, XXXXXXX, XXXXXXX),
以上は小指のホールドで入力するキーボードレイアウトであり、あまり対応しない記号、タブの移動、ブラウザ履歴の移動のような部分を担当しています。人差し指の部分に設定してあるのは、全画面にするキーであり、Webの漫画や動画を見る時に便利です。その上のF7キーはブラウザのカーソルブラウジングをオン・オフするキーになっていて、親指の文字列選択と組み合わせると、マウスで文字列まで選択などをする必要が全くなくなります。
デフォルトのレイアウトにマウスのクリックやホイールの操作が含まれていたのも、マウスのクリックやマウスによるクリックをしっぱなしの手の痛みを感じるような気がしていたためです。
そのため、トラックボールを左手で操作するようにしてからは、クリックもホイールの操作もしないので、マウスポインタの移動のみで左手のストレスと疲れは激減しました。
薬指と同じように小指は尺骨神経が担当する指でもあり、あまり多用したくないキーなのですが、親指と人差し指とは相性が良いため、設定した癖が抜けないまま残してあるレイヤーとも言えます。
_LT10
[_LT10] = LAYOUT(
KC_1, KC_2, KC_3, KC_4, KC_CAPS, /* */ KC_1, KC_2, KC_3, KC_4, KC_CAPS,
KC_5, KC_6, KC_7, KC_8, KC_NUM, /* */ KC_5, KC_6, KC_7, KC_8, KC_NUM,
KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX, /* */ KC_9, KC_0, XXXXXXX, XXXXXXX, XXXXXXX,
RCS(KC_PGUP), RCS(KC_PGDN), XXXXXXX, XXXXXXX, XXXXXXX, /* */ RCS(KC_PGUP), RCS(KC_PGDN), XXXXXXX, XXXXXXX, XXXXXXX),
以上は小指のホールドで入力するキーボードレイアウトであり、数字キーとタブの位置を左右に動かすためのキーが設定されています。Googleの音声入力は数字の認識の精度が高いため、数字を入力することはほとんどないのですが、やはり数字が入力できないと様々な場面で困るので設定しました。また、以前は小指を折り曲げて押していって苦痛だったのですが、小指の第2関節あたりでホールドする癖をつけたら、意外と使いやすくなったため、納得いっていない部分はありますがそのまま採用してあります。
まとめ
キーボード操作を右手にしたことで、やはり利き腕は指の力も強いというのを実感しました。むしろ、右手でのトラックボール操作をしていた時の方が、上手くなれることができなかったホイールやクリックなどで痛みを感じていた気がします。ただし、今のところは指が痛くなったり、右肩が痛くなったりするようなことはありません。
左手と左肩の痛みについては、ほとんど痛いということはなくなりました。以前は小指と薬指の間と肘の付け根などがピリピリと痛かったのですが、痛みとストレスから解放され、作業中のモチベーションが下がることはありません。
作業スタイルは座椅子とU字型のクッションを組み合わせて、座椅子に寄りかかっていう字の間に座って作業したり、クッションをお腹に抱えてその上にスリムブレードとキーボードを乗せて作業したりしています。
いわゆる、ごろ寝に近い形で作業しており、机で作業していた時よりも背中や首、腰の痛みなどはほとんど感じません。
そのため、寝ても冷めてもすぐに仕事できる状態に慣れてしまいました。
もう少し暑くなってきたら、もしかしたら机のスタイルに戻るかもしれません。
キーボードレイアウトやキーボードショートカットなど、何か面白い取り組みがあったら教えてくれると嬉しいです。
最後までお読みいただきありがとうございました。
ライティング案件や自作キーボード関連のお仕事などありましたら、お気軽にご相談ください!
過去のアップデート履歴