blechmusikの日記

キー・カスタマイズ・ソフトウェア "DvorakJ" の覚え書きをはじめとして様々なことを書いています。

Shift キーを押し下げている間にキーを変更して、もっぱら左手を使用する QWERTY 配列を実現する

表題の通り。illues さんが考案した設定を AutoHotkey (AutoHotkey_L)で実装してみよう、というわけだ*1。一例を挙げよう。a のキーを通常通り押せば a を出力する。他方、Space キーを押したまま a を押すと : を出力する。病気や怪我のために右手をあまり自由に動かすことができない人が重宝する配列だろう。右手でもっぱらマウスを操作しつづける業務に携わっている人にとっても同様である。
実行ファイルを用意したので、この配列に興味を抱いた方はまずは触っていただきたい。まずは、以下のリンク先から圧縮ファイルを取得する。そのファイルを展開したら、実行ファイルを実行する。これだけでよい。お疲れ様でした。

この実行ファイルのソースは以下の通りである。AutoHotkey_L (unicode ver.) で実行することを想定している。 AutoHotkey_L ではなく AutoHokey を使用するときには、文字コードを shift-jis とすること。

;;; original_qwerty_layout_by_illues

;;; 独自のショートカットキー by illues
;;; http://twitpic.com/15pvzl

;;; Performance
;;; http://www.autohotkey.com/docs/misc/Performance.htm

#NoEnv
#SingleInstance FORCE
#WinActivateForce
#persistent

#UseHook
#InstallKeybdHook

Process, Priority, , High

SetBatchLines, -1
ListLines Off


;; {space}
space::Send,{space}


;; h
space & sc023::Send,{Left}
;; j
space & sc024::Send,{Down}
;; k
space & sc025::Send,{Up}
;; l
space & sc026::Send,{Right}

;; 1
space & sc002::Send,0
;; 2
space & sc003::Send,9
;; 3
space & sc004::Send,8
;; 4
space & sc005::Send,7
;; 5
space & sc006::Send,6
;; 6
space & sc007::Send,-
;; 7
space & sc008::Send,_
;; 8
space & sc009::Send,@
/*
space & sc00A::Send,
space & sc00B::Send,
space & sc00C::Send,
space & sc00D::Send,
space & sc07D::Send,
*/

;; q
space & sc010::Send,p
;; w
space & sc011::Send,o
;; e
space & sc012::Send,i
;; r
space & sc013::Send,u
;; t
space & sc014::Send,y
;; y
space & sc015::Send,{Backspace}

/*
space & sc016::Send,
space & sc017::Send,
space & sc018::Send,
space & sc019::Send,
space & sc01B::Send,
*/

;; a
space & sc01E::Send,:
;; s
space & sc01F::Send,l
;; d
space & sc020::Send,k
;; f
space & sc021::Send,j
;; g
space & sc022::Send,h

/*
space & sc023::Send,
space & sc024::Send,
space & sc025::Send,
space & sc026::Send,
space & sc027::Send,
space & sc028::Send,
*/

;; z
space & sc02B::Send,/
;; x
space & sc02C::Send,.
;; c
space & sc02D::Send,,
;; v
space & sc02E::Send,m
;; b
space & sc02F::Send,n
;; n
space & sc030::Send,{ENTER}


;; {tab}
space & sc00F::Send,{BackSpace}

;; @
space & sc01A::Send,{BackSpace}


;; m
space & sc032::Send,{Mbutton}
;; appskey
space & sc15D::Send,{RButton}


;; ,
space & sc033::Send,{XButton1}
;; .
space & sc034::Send,{XButton2}

/*
space & sc035::Send,
space & sc073::Send,
*/

GuiClose:
ExitApp

なお、以前の DvorakJ の版では上記の設定を「独自のショートカットキー」の機能を使用すれば実装できていた。いったいどの処理を改悪してしまったのだろう。
追記:なるほど、特定の場合にSpace キーのフックを解除するよう処理を書き換えたことが原因か。