🐣

CTRL配列 - Ver.1.1のキーボードレイアウト・キー配列の解説 @hiyoctrl

2023/01/16に公開

こんにちは、Ctrl(@hiyoctrl)です。

https://qiita.com/hiyoctrl/items/0632f89a0e0dc8d5007c#dvorak配列

https://zenn.dev/ctrl/articles/dd945fa2e4d0ac

今回はCTRL配列v1.1におけるキーボードレイアウト・キー配列に関する考え方と、xmodmap、xkeysnailの設定について解説します。

xmodmap


clear control
clear shift
clear lock
clear mod1
clear mod2
clear mod3
clear mod4
clear mod5

! Left Hand

keycode  67 = period less bracketleft
keycode  68 = comma greater bracketright
keycode  69 = slash question colon
keycode  70 = NoSymbol

keycode  10 = equal plus exclam
keycode  11 = o O parenleft
keycode  12 = e E parenright
keycode  13 = y Y numbersign
keycode  14 = BackSpace
keycode  15 = Delete

keycode  23 = F2
keycode  24 = a A apostrophe
keycode  25 = F13 NoSymbol F15
keycode  26 = F14 NoSymbol F16
keycode  27 = i I quotedbl
keycode  28 = Return NoSymbol ampersand

keycode  38 = F3
keycode  41 = F4

keycode  42 = space NoSymbol percent

keycode  54 = F5
keycode  55 = u U
keycode  56 = w W semicolon

! Right Hand

keycode 114 = F11
keycode 116 = F7
keycode 113 = F8

keycode 105 = NoSymbol
keycode 135 = NoSymbol
keycode 108 = Alt_R

keycode 111 = F9
keycode  62 = NoSymbol
keycode  61 = v V
keycode  60 = c C
keycode  59 = l L
keycode  58 = j J

keycode  36 = NoSymbol
keycode  48 = p P plus
keycode  47 = t T at
keycode  46 = r R Down
keycode  45 = s S Up
keycode  44 = z Z

keycode 117 = 1 exclam exclam
keycode 115 = 2 at at
keycode 119 = 3 numbersign numbersign
keycode  51 = Escape
keycode  35 = f F
keycode  34 = n N Left
keycode  33 = d D
keycode  32 = g G grave
keycode  31 = q Q
keycode  30 = k K Right

keycode 112 = 4 dollar dollar
keycode 110 = 5 percent percent
keycode 118 = 6 asciicircum asciicircum
keycode  22 = Tab
keycode  21 = b B bar
keycode  20 = minus underscore asciitilde
keycode  19 = Left
keycode  18 = Down
keycode  17 = Up
keycode  16 = Right

keycode 127 = 7 ampersand ampersand
keycode  78 = 8 asterisk asterisk
keycode 107 = 9 parenleft braceleft
keycode  96 = 0 parenright braceright
keycode  95 = h H
keycode  76 = m M
keycode  75 = x X backslash
keycode  74 = NoSymbol
keycode  73 = NoSymbol
keycode  72 = NoSymbol

! Super_L to Mode_switch
keycode 133 = Mode_switch

! Shift_L
keycode  50 = Shift_L

! Alt_L
keycode  64 = Alt_L

! Control_L
keycode  37 = Control_L

! None Key

keycode 247 = Alt_R
keycode 248 = Control_L
keycode 248 = Shift_L
keycode 249 = Right
keycode 250 = Up
keycode 251 = Down
keycode 252 = Left
keycode 253 = Alt_L
keycode 254 = Home
keycode 255 = End
 
add control = Control_L
add shift   = Shift_L
add mod1    = Alt_L
add mod2    = Mode_switch
add mod4    = Alt_R

CTRL配列は、左手専用キーボード左側、テンキーレスのキーボードを逆さまにしたもの右側に配置しています。

xmodmapのキーコードとキーボードレイアウトの画像にあるキーコードを見比べてみると、xmodmapの設定にControl_L、 Alt_L、Alt_R、Shift_L、Mode_switchの表記はあるものの、物理的なキーではそれぞれ配置されていません。

特殊キーについてはxkeysnailを利用してHold(押したまま)、すなわちモディファイアキーとして設定しているためです。

xkeysnailの設定についてはxkeysnailの項目で説明します。

左手のホームポジション「AOEIU」の配置

CTRL配列の左手の母音の配列はDvorak配列、とみすけ(@_tomisuke)さんのTomisuke配列、ゆかり(@eucalyn_)さんのEucalyn配列を基軸としています。

Tomisuke配列とEucalyn配列はCTRL配列とは段が違うもののAOEIUです。Dvorak配列の場合はAOEUIになっています。

キーボード配列のレイアウトを考えるのに便利なスプレッドシート | http://pasokatu.com/22184

パソ活(@tattitaipingu)さんのスプレッドシートで打鍵数を重視した場合、左手でも一番押しやすくて疲れない左手の人差し指がAであるのが理想です。左手の小指の負担を考えると、左手の小指からEUOAIが最適と思い練習しましたが、右手の子音の組み合わせと、日本語の文章を作成する時の文字を入力する流れでは、個人的には相性が合いませんでした。

単語や熟語はスムーズに入力できても、「てにをは」がスムーズに入力できないようなイメージです。yとwの配置のこともあり、結果的にAOEIUに落ち着きました。

yとwの配置

wはaとoとeとiに運指する(wuは、う)ことに着目し、左手の親指で押した後に、小指を押したら「わ」、薬指なら「を」、中指なら「うぇ」人差し指なら「うぃ」とスムーズに打鍵できるようにしました。

同様にyはaとoとeとuに運指する(yiは、い)ことに着目し、iの上に配置してあり、左手の人差し指を伸ばしてyを押した後、aとoとeとuへの打鍵がスムーズになるようにしてあります。

右手のホームポジション「ksrnm」の配置

右手のホームポジションについては、直感的に覚えやすくなるように、小指から「かさたなは:kstnh」のような形にしたかったのですが、日本語の文章入力の場合、指が迷子になったり、もたついたりするので、タイピング練習する中で現在の小指から「かさらなま:ksrnm」落ち着いた形です。

色々試す中、thとスムーズに入力する配置が非常に大変でした。最初yは右手の親指、最下段の左端に配置しました。理由としては「ゃゅょ」につながる「kstnhmr」などの子音をスムーズに押すのに最適な位置だったからです。逆にhはnの隣に配置しており、hyとスムーズに入力できるので問題ないかと思っていました。しかし、thと入力しようとすると右手の人差し指で連続打鍵かつ段違いで押さなくてはなりません。

hを経由する

いっそのこと、shaのような形でhを経由して「ゃゅょ」に繋がるように、hを右手の親指のmの隣に配置しました。そのため、いくつかのキーのローマ字テーブルを設定し直してあります。

rha rhu rho
りゃ りゅ りょ
kha khu kho
きゃ きゅ きょ
gha ghu gho
ぎゃ ぎゅ ぎょ
pha phu pho
ぴゃ ぴゅ ぴょ

基本的には左手人差し指のyを経由するよりも、右手の親指でhを経由する形で落ち着きました。左手の人差し指を伸ばして押すyを経由するのはnとmとhとbくらいです。

va・fa・jaの活用

同時にva・fa・jaのような形で、2キーで入力できるようにもしました。

ca cu co
ちゃ ちゅ ちょ
la lu lo
りゃ りゅ りょ
qa qu qo
きゃ きゅ きょ

それぞれの子音の近く(kqg szj ctd hbfpv lr)に配置することで、少しでも覚えやすく、かつ使いやすくなるように工夫してあります。

句読点の配置

Dvorak配列、Tomisuke配列、Eucalyn配列の3つ配列に共通するのは、読点・句点がホームポジションの上に左側からcomma・periodと並んでいることです。確かに配置してみると非常に打ちやすいため、CTRL配列でもホームポジションの上に配置しました。

ただし、CTRL配列ではperiod(。)→comma(、)→slash(・)という形で並べてあります。なぜならperiodとcommaのキーキャップを逆さまに取り付けてあること、同時にそれぞれが音声入力で入力しにくい記号であることが理由です。

手元にあるキーキャップですとperiodとcommaは右手の最下段にあり、斜め(キーキャップの上が低く、キーキャップの下が高い)に傾斜しています。左手の最上段に逆さまに付け替えることで、左手の薬指と中指を伸ばす時に、periodとcommaの傾斜にフィットして押しやすくなることも理由と言えます。

マウスに「Ctrl + α」の編集ショートカットを設定

Google音声入力で記事の執筆をする際、左手の薬指をperiod、左手の中指をcomma、左手の人差し指をマイク、slash、BackSpace、左手の親指をspaceに担当させることで、 Google音声入力時に必要な操作がすべてできます。

Ctrl + a
Ctrl + c
Ctrl + v
Ctrl + x
Ctrl + z
Ctrl + y
Ctrl + Shift + v

右手はトラックボールに乗せたままであり、トラックボールにあるボタンに上記のショートカットを割り当てて、コピーやペースト、書式なしで貼り付け、 アンドゥやりリドゥ、すべて選択などの編集作業が全て行えるようになっています。

左手の左下の領域、 右下の領域について

現実問題として左手の左下、右手の右下はストレスなくスムーズには届きません。そのため、左手の左下にあった既存の特殊キーは全て物理的に排除してあります。

ただし、右手の右下にあるキーについては、右手をトラックボールに手を置いてある時に届く位置であることから、利便性のある機能を配置してあります。

同様に右手のアローキーについては、右手にはスムーズに動くアームレストを置いてあるため、右手首を少し下に下げるだけで触れるようになっている形です。

xkeysnail


import re
from xkeysnail.transform import *

define_multipurpose_modmap({

    ###### Left ######
    # A
    Key.Q: [Key.Q, Key.LEFT_ALT],
    # O
    Key.KEY_2: [Key.KEY_2, Key.LEFT_CTRL],
    # E
    Key.KEY_3: [Key.KEY_3, Key.LEFT_CTRL],
    # I
    Key.R: [Key.R, Key.RIGHT_ALT],
    # U
    Key.V: [Key.V, Key.LEFT_META],

    ###### Right ######
    # Escape
    Key.BACKSLASH: [Key.BACKSLASH, Key.LEFT_CTRL],
    # Tab
    Key.BACKSPACE: [Key.BACKSPACE, Key.LEFT_SHIFT],
    # MINUS
    Key.MINUS: [Key.MINUS, Key.LEFT_META],

})


a(左手小指)Alt_L
o(左手薬指)Shift_L
e(左手中指)Control_L
i(左手人差し指)Alt_R
u(左手親指)Mode_switch

Esc(右手人差し指)Control_L
Tab(右手親指)Shift_L
-(右手人差し指)Mode_switch

上記がHoldおよびモディファイアキーです。 CTRL配列において、物理的には単キーのみの特殊キーの配置を全て排除しました。

CTRL配列のキーボードレイアウトやキー配列について

まだまだ未完成の配列ではありますが、様々な技術を開発された方々に常々感謝しております。

この先においても、CTRL配列を普及させたい、 QWERTY配列よりも優秀だと言いたいのではなく、自分自身が納得し、満足できて、嬉しく、楽しい気持ちになるためにキーボードレイアウトやキー配列、各種ショートカットを試行錯誤していければ幸せだと思っている次第です。

関連記事

https://zenn.dev/ctrl/articles/ed5531bc1a0248

https://zenn.dev/ctrl/articles/a18933359cae90

https://zenn.dev/ctrl/articles/0ab925b9ae1612

Discussion