はじめに
スペースキーをシフトキーの代わりに使える、通称SandS(Space and Shift)という仕組みが気に入っていました。スペースキーにスペースとシフトの2つの役割を兼ねてもらうものです。キーを単体で押したときはスペースキーとして機能させ、他のキーと同時に押したときにはシフトキーとして機能させる仕組みです。貧弱な小指の代わりにマッチョな親指でシフトできるので理にかなった仕組みだと思っています。シフトキーを多用する環境(SKKなど)では特に効果的です。ちなみに表現的には親指シフトに似ていますが別物です。
SandSの課題
少し早めにタイピングしているときなど、スペースキーを押したつもりがシフト扱いになってしまったり、シフトを効かせたつもりがスペースになってしまったり、意図と反する挙動がときどき起こって気が散りました。また、日本語キーボードは英語キーボードに比べてスペースキーの幅が狭いため、シフトを押したいときに親指を少しだけずらさないといけません。
提案: HandS
日本語キーボードを眺めたとき、親指に最も近いキーはスペースキーではなく、変換キーと無変換キーであることに気づきました(Appleユーザは除く)。これらをシフトキーの代わりに使えればより捗るのでは?と考えた次第です。実際これが個人的にはとても手に馴染みました。
既にIMEの設定で、変換はIMEオン、無変換はIMEオフに割り当てていました。なので今回のHandS導入によって変換/無変換キーは以下のような役割を兼ねることになります。
単独で押したとき | 他キーと同時に押したとき | |
---|---|---|
変換キー | IMEオン | 右シフト |
無変換キー | IMEオフ | 左シフト |
(参考)SandS | スペース | シフト |
右シフトと左シフトを使い分けることは無いので、わざわざ対応付ける意味は無いのですが、単に気分的にそうしています。
SandSの課題であった「スペースを押したつもりがシフトになってしまう問題(またはその逆)」についてはHandSでも同様です。しかしながら変換/無変換キーはスペースキーとは違って、押しただけでは文字としては入力されません。そのために誤操作時の手戻り(バックスペース)が少ないのが利点かなと感じます。
実装
windows + keyhac + fakeymacs
Windowsでは元々Keyhacとfakeymacsを使っていたので、そこに少し設定を付け加えて実現しました。fakeymacsのconfig_personal.py
の[section-base-2]
に以下を足すだけです。
# [section-base-2] ---------------------------------------------------------------------------------
##################################################
## HandS (Henkan/Muhenkan and Shift)
##################################################
# 変換キーを右シフトキー、無変換キーを左シフトキーとして使えるように
# それぞれ単独で押した場合は元の役割(変換/無変換)が機能
if is_japanese_keyboard:
keymap.replaceKey("(28)", "RShift")
keymap.replaceKey("(29)", "LShift")
define_key(keymap_global, "O-Rshift", self_insert_command("(28)"))
define_key(keymap_global, "O-Lshift", self_insert_command("(29)"))
else:
keymap.replaceKey("(255)", "RShift")
keymap.replaceKey("(235)", "LShift")
define_key(keymap_global, "O-Rshift", enable_input_method)
define_key(keymap_global, "O-Lshift", disable_input_method)
わざわざ日本語キーボード判定で場合分けしているのは、Windowsの設定で日本語キーボードをUS配列にして使っている場合にも対応するためです。私がそうしています。キー配置はUSの方が好みで、見た目もUSの方がシンプルでかっこいいと思うのですが、無変換/変換キーという唯一無二の存在をもった日本語キーボードが最強だと思っています(隙自語)
linux + xkeysnail
Linuxではxkeysnailを使って実現できました。config.py
に以下を足せばOKです。
# HandS (変換/無変換 and Space) Keys
define_multipurpose_modmap({
Key.MUHENKAN: [Key.MUHENKAN, Key.LEFT_SHIFT],
Key.HENKAN: [Key.HENKAN, Key.RIGHT_SHIFT]
})
mac
Macは持っていないので分かりません。disってるわけではないです!!!