さて、以前の「昼間のパパはちょっと違う的な話とブログの方向性についての悩み」 で話したような、わかる人にしかわからないエントリ第一号。専門用語の説明は省きます。
ネタがないので、最近いじり倒しているキーバインドなどについての話。
前からキーボード配置換えを色々やりたいとは思っていて、思い悩んでいたけど手を出していませんでした。その理由として
- EmacsキーバインドやVimキーバインドに入れ替える(via:はてなCTO伊藤直也氏)という手も考えたのだけど、 Windowsのdefaultショートカットキーとぶつかる。
- ていうかそもそも俺はEmacs/Vim使いではない為、導入しても覚える手間があり気が引ける。
- さらには一度導入してしまったら、それが導入されてないパソコンでは作業がしづらくなっちゃうんじゃないの?
などの理由でおっかなびっくりでした。せいぜいいらない子といわれがちなCAPSLOCKをIMEon/offにするぐらい。 (これはIMEの設定で簡単に出来るのでお勧め)
で、そんなときejanの24/7 | キー配置を変更する:その4という記事をみてやる気が起こってしまいました。なぜかというと
- その1、その2、その3、 と順を踏んでキーバインドにはまっていきemacs/vimキーバインドではない独自のキーバインドを開発したejanさんに共感できた
- この記事は「無変換」キーをモディファイアキーにすることで、 windows既存のショートカットキーとの重複を避けることが出来る。
- Autohotkeyを利用しているので、様々なPCへのキーバインド適用が容易であり、導入の手間が無い。
ということでキーバインドにはまって行きましたとさ。
そして色々自分なりにいじりながらとりあえず安定しました。現状の感想としては以下の通り。
- 超指が疲れない。BSとかEnterとかなんでいままで指伸ばして打てていたか不思議。
- 色んな作業がかなりストレスフリーになった。当たり前にやっていたことでも無意識にストレスになっているのだと知った (AltTabやAltF4で指伸ばしたりしなくてもよくなった)
- 問題点として、範囲選択がやや大変(無変換+Shift+αの3キーだから)あとHOME/ENDがスパッと出てこない。
-
- 思考の速度でパソコンを使う技術 - 分裂勘違い君劇場のキーバインドを実装した 「思考の速度でパソコンを使う技術」をAutoHotKeyで作ってみる - 明日はもっと幸せにをうまく併用しようか考えている。 編集モードへの切り替えを変換キーにすると現在変換キーに割り当てているBSとぶつかるので、 カタカナキーあたりにしようかなという感じ
- よく見たら編集モードからの復帰がスペースではできなかったり、選択モードじゃ無いときにBS/DELが動かないなど、 といったちょっとした不満点があるのでそのうちなんかするかも
で、以下に自分の作っているスクリプトを晒すことに。あと前提として、CapsLockをCtrlにしてます。 やり方はGoogleで調べればいくらでものっているので省略。具体的にはレジストリいじり。さらには既存CTRLはそのままなので、 つまりCAPSLOCKは消滅です。
特徴としてはejanさんところのスクリプトが基本。変更点はいくつか。
- 変換は[enter]->[BS],セミコロンキーは[BS]->[enter]に。 なぜならEnterの方が使用頻度高いし、そして変換キーよりセミコロンキーのほうが打ちやすいから。
- セミコロンを打ちたいときは無変換+セミコロンキー
- IMEOFFをCTRLに。なぜなら上記の通りCAPSLOCKをレジストリでCTRLに入れ替えてるから。
- Shift+変換キーでDEL
- カットペースト関連の機能は削除。CtrlキーをCAPSLOCKに割り当ててるので。
-
AutoHotKey - falls wanking to the floorさんのところから一部拝借
-
その他Esc、Tab、Alt+Tab、Alt+F4などを割り当て。
;#NoTrayIcon
;↑トレイアイコンがなくなります。最初は表示をおすすめ。
#UseHook
GetKeyState, state, Shift;【1.上下左右】
;vk1Dsc07Bってのは無変換キーのことね。好きなキーに書き換えてください。
vk1Dsc07B & i::
If (state = D)
{
send +{Blind}{up}
}
else
{
send {Blind}{up}
}
returnvk1Dsc07B & k::
If (state = D )
{
send +{Blind}{down}
}
else
{
send {Blind}{down}
}
returnvk1Dsc07B & j::
If (state = D )
{
send +{Blind}{left}
}
else
{
send {Blind}{left}
}
returnvk1Dsc07B & l::
If (state = D )
{
send +{Blind}{right}
}
else
{
send {Blind}{right}
}
return
;【2.home,end】
vk1Dsc07B & h::
If (state = D )
{
send +{Blind}{home}
}
else
{
send {Blind}{home}
}
returnvk1Dsc07B & n::
If (state = D )
{
send +{Blind}{end}
}
else
{
send {Blind}{end}
}
return;【3.pageup,pagedown】
vk1Dsc07B & o::
If (state = D )
{
send +{Blind}{pgup}
}
else
{
send {Blind}{pgup}
}
returnvk1Dsc07B & .::
If (state = D )
{
send +{Blind}{pgdn}
}
else
{
send {Blind}{pgdn}
}
return
;【4.Ctrl+上下左右】
vk1Dsc07B & e::
If (state = D )
{
send +{Blind}^{up}
}
else
{
send {Blind}^{up}
}
returnvk1Dsc07B & d::
If (state = D )
{
send +{Blind}^{down}
}
else
{
send {Blind}^{down}
}
returnvk1Dsc07B & s::
If (state = D )
{
send +{Blind}^{left}
}
else
{
send {Blind}^{left}
}
returnvk1Dsc07B & f::
If (state = D )
{
send +{Blind}^{right}
}
else
{
send {Blind}^{right}
}
return;【4.5.ctrl+pageup,pagedown】
vk1Dsc07B & w::
If (state = D )
{
send +{Blind}^{pgup}
}
else
{
send {Blind}^{pgup}
}
returnvk1Dsc07B & x::
If (state = D )
{
send +{Blind}^{pgdn}
}
else
{
send {Blind}^{pgdn}
}
return
;【5.Ctrl+home,end】
vk1Dsc07B & g::
If (state = D )
{
send +{Blind}^{home}
}
else
{
send {Blind}^{home}
}
returnvk1Dsc07B & b::
If (state = D )
{
send +{Blind}^{end}
}
else
{
send {Blind}^{end}
}
return;【6.Enter】
vkBBsc027::
If (state = D )
{
send +{Enter}
}
else
{
send {Enter}
}
return
;vkBBsc027は日本語キーボードのセミコロンキーのことね。;【7.Backspace&Delete】
vk1Csc079::send {BS}
+vk1Csc079::send {Del};【7.5 無変換+セミコロンでセミコロンを出力】
vk1Dsc07B & vkBBsc027::send {;};【8.IMEをONにする】
;AutoHotKey - IMEを特定のホットキーで操作をみてね。
#include ime_func.ahk
vk1Dsc07B::
howime := IME_CHECK("A")
if (%howime% = 0)
{
IME_ON("A")
return
}
else
{
howimemode := IME_GetConvMode("A")
if (%howimemode% = 25)
{
return
}
else
{
IME_SetConvMode("A",25)
return
}
};【8.5.IMEをOFFにする】
Ctrl::
IME_OFF("A")
return;【9.Tabを無変換+A,Shift+Tabを無変換+zに割り当てる】
vk1Dsc07B & a::
If (state = D)
{
send +{Tab}
}
else
{
send {Tab}
}
returnvk1Dsc07B & z::send +{Tab}
;【10.ESCを無変換+Qに割り当てる】
vk1Dsc07B & q::
If (state = D)
{
send +{Esc}
}
else
{
send {Esc}
}
return;【11.Alt+F4を無変換+Rに割り当てる】
vk1Dsc07B & r::
If (state = D)
{
send +!{F4}
}
else
{
send !{F4}
}
return;【12AltTabを無変換+Uに、ShiftAltTabを無変換+Mに割り当てる】
vk1Dsc07B & u::AltTab
vk1Dsc07B & m::ShiftAltTab;【13.Ctrl+Nキーにてコモンダイアログで新規フォルダを作る】
^n::
IfWinActive,ahk_class #32770
{
PostMessage, 0x111, 40962
}
Else
IfWinActive, 名前を付けて保存
{
Send,!l{LEFT 2}{ENTER}
}
Else
IfWinActive, ファイルを開く
{
Send,!l{LEFT 2}{ENTER}
}
Else
send ,^n
return
;【14.無変換+vにてAutoHotKeyリロード】
vk1Dsc07B & v::Reload
return#UseHook off

