CTRL配列 - Ver.1.1のキーボードレイアウト・キー配列の解説 @hiyoctrl
こんにちは、Ctrl(@hiyoctrl)です。
今回は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配列よりも優秀だと言いたいのではなく、自分自身が納得し、満足できて、嬉しく、楽しい気持ちになるためにキーボードレイアウトやキー配列、各種ショートカットを試行錯誤していければ幸せだと思っている次第です。
関連記事
Discussion