catfist
5/13/2014 - 1:24 PM

無変換を使い倒し、あと色々便利化するAutoHotKeyのスクリプト

無変換を使い倒し、あと色々便利化するAutoHotKeyのスクリプト

;「;」を行頭につけるとコメント
;文法は公式ドキュメント(http://www.autohotkey.com/docs/)参照のこと

;windowsの設定でログイン時に自動起動するようにすると楽

;----------------------------------------------------------
;検索関数
;ウェブのアドレスならそれを開く
;ディレクトリアドレスならエクスプローラで開く
;文字列ならGoogle検索
;ちなみにFirefoxはshiftを押しながら起動するとセーフモードになってしまうらしい
search(){
	bk = %ClipboardAll%						;今のクリップボードをバックアップ
	Clipboard = 
		Send,^{c}						;選択文字列をクリップボードにコピー
	SplitPath, Clipboard, name, dir, ext, noext, drive		;様々な指定形式に分割
	if(doWeb(Clipboard, drive, dir)){				;Webの場所を開く
	}else if(doLocal(drive, dir)){					;ローカルな場所を開く
	}
	Clipboard=%bk%							;元のクリップボードを復元
}
doWeb(str, drive, dir){
	isWeb := ""
	if((isWeb := isURL(drive, dir)) != ""){				;URL
	}else if((isWeb := isURLlike(Clipboard, drive, dir)) != ""){	;URLぽいもん
	}else{
		isWeb := getWebSearch(Clipboard)			;web検索
	}
	if(isWeb != ""){
		Run, %isWeb%
		return true
	}
	return false
}
isURL(drive, dir){
	if(InStr(drive, "http://") = 1 || InStr(drive, "https://") = 1){
		return %dir%
	}
	return ""
}
isURLlike(str, drive, dir){
	if(InStr(drive, "ttp://") = 1 || InStr(drive, "ttps://") = 1){
		return "h" . dir
	}else if(drive = "" && InStr(str, "www.") = 1){
		return, "http://" . str
	}
	return ""
}
getWebSearch(str){
	if(str != ""){
		return "http://www.google.com/search?q=" . str		;Google検索		
	}
	return ""
}
doLocal(drive, dir){
	if(drive != ""){
		Run, %dir%
		return true
	}
	return false
}
;----------------------------------------------------------
;キー変換

;トラックポイント付き日本語キーボード(55Y0924)で、
;マウスを使うなら右手で、
;そのとき左手がホームポジションにあるという前提で考えてある
;普通のキーボードならマウス移動やクリックの命令を入れてみても面白いかもしれない

;ひらがなカタカナやCapsLockはAutoHotKeyで変更すると不具合が出るので
;レジストリを書き換えるキーリマップソフト(keyswapとか)で変える
;私はCapsLock→BackSpace, 変換→右Ctrl, カタカナひらがな→右Winに変えてある

;{Blind}でctrlやshiftなどの修飾キーが素通りする
;でも修飾して既に存在するショートカットを含んでしまうと競合して効かないので注意
;例えば「Win 無変換 l」でウィンドウをを右半分にしようとしても「Win l(ロック)」と競合して効かない、とか
;また、2つ超過のキーバインドは単純には作れないので注意
;作るならif文でstateがD(Down、押されている)、U(Up、押されていない)、T(トグル)とかで判定してやる

;直接指定するとキー入れ替えで他の命令にも影響するが、Sendすると影響しないみたい
;Send,{キー}の後にスペースがあるとキー挙動がおかしくなる

;#InstallKeybdHook
#UseHook
;頻繁にスクリプトを変える場合に便利
vk1Dsc07B & 0::Reload		;このスクリプトをリロードして適用
vk1Dsc07B & 8::Edit		;このスクリプトを編集

;[無変換]
;編集系(右手)
vk1Dsc07B & j::Send,{Blind}{Left}		;←
vk1Dsc07B & l::Send,{Blind}{Right}		;→
vk1Dsc07B & i::Send,{Blind}{Up}			;↑
vk1Dsc07B & k::Send,{Blind}{Down}		;↓
vk1Dsc07B & o::Send,{Blind}{Tab}		;Tab
vk1Dsc07B & u::Send,{Blind}+{Tab}		;Shift Tab

;編集系(左手)
vk1Dsc07B & s::
	GetKeyState, state, RWin	;Ctrlではホイールがズームになることが多い
	if state = U
		Send,{Blind}{Home}		;Home
	else if state = D
		Send,{Blind}{WheelLeft}		;マウスホイール←
return
vk1Dsc07B & f::
	GetKeyState, state, RWin
	if state = U
		Send,{Blind}{End}		;End
	else if state = D
		Send,{Blind}{WheelRight}		;マウスホイール→
return
vk1Dsc07B & e::
	GetKeyState, state, RWin
	if state = U
		Send,{Blind}{PgUp}		;PageUp
	else if state = D
		Send,{Blind}{WheelUp}		;マウスホイール↑
return
vk1Dsc07B & d::
	GetKeyState, state, RWin
	if state = U
		Send,{Blind}{PgDn}		;でPageDown
	else if state = D
		Send,{Blind}{WheelDown}		;マウスホイール↓
return

;編集系(その他)
vk1Dsc07B & g::
	GetKeyState, state, Ctrl
	if state = U
		Send,{Blind}{Up}{Home}		;上の行頭へ
	else if state = D
		Send,{Up}{End}{Enter}		;上に1行増やしその頭へ
return
vk1Dsc07B & v::
	GetKeyState, state, Ctrl
	if state = U
		Send,{Blind}{Down}{Home}	;下の行頭へ
	else if state = D
		Send,{End}{Enter}		;下に1行増やしその頭へ
return
vk1Dsc07B & h::Send,{Blind}{Up}{End}		;上の行末へ
vk1Dsc07B & n::Send,{Blind}{Down}{End}		;下の行末へ
vk1Dsc07B & c::Send,{Blind}{Home}+{End}		;1行選択

;文字入力系
;IME系の詳細はIMEで設定した方がいい
+vk1Dsc07B::Send,{vkF3sc029}				;IME On/Off
;vk1Dsc07B & vkBBsc027::Send,{vkF3sc029}	;IME On/Off
vk1Dsc07B & 2::							;CapsLockでNumLockも一緒に切り替わるときはNumLockすれば互い違いになる
	GetKeyState, state, CapsLock, T
	if state = U
		SetCapsLockState On		;CapsLock On
	else if state = D
		SetCapsLockState Off		;CapsLock Off
return
vk1Dsc07B & 3::
	GetKeyState, state, NumLock, T
	if state = U
		SetNumLockState On		;NumLock On
	else if state = D
		SetNumLockState Off		;NumLock Off
return

;文字系
vk1Dsc07B & vkBFsc035::Send,{vkE2sc073}			; / ⇒ \
vk1Dsc07B & vkBBsc027::Send,{&}				; ; ⇒ &
vk1Dsc07B & vkBAsc028;::Send,{|}			; : ⇒ |

;削除系
vk1Dsc07B & BS::Send,{Blind}{Del}		;Delete
;vk1Dsc07B & ::Send,{LShift Down}{End}{Del}{LShift Up}		;行末まで削除


;便利なキー
vk1Dsc07B & a::Send,{AppsKey}			;AppsKey(右クリックのメニュー)
vk1Dsc07B & z::Send,{Esc}			;Escape
vk1Dsc07B & b::Send,{Blind}{F3}			;F3で次を検索
vk1Dsc07B & Space::
GetKeyState, state, LShift
	if state = U
		search()		;検索
	else if state = D
		Send,{vk1Csc079}		;変換済みを再変換したいとき
return

;タスク系
vk1Dsc07B & r::AltTab		;Alt Tabのタスク切り替え(→)
vk1Dsc07B & w::ShiftAltTab	;Shift Alt Tabのタスク切り替え(←)
vk1Dsc07B & ,::Send,{F5}			;F5(更新)
vk1Dsc07B & q::Send,!{F4}			;Alt F4(終了)
;vk1Dsc07B & 1::Send,{F1}			;F1(ヘルプ)

;マウスとの組み合わせ
vk1Dsc07B & LButton::Send,{Blind}{BS}		;BackSpace
vk1Dsc07B & RButton::Send,{Blind}{Del}		;Delete
vk1Dsc07B & MButton::search()			;選択テキストを検索

;[マウス]
;競合が多いのでマウスだけのはあまり書かない方がいい

~MButton & WheelUp::Send,{WheelLeft}
~MButton & WheelDown::Send,{WheelRight}
~LButton & RButton::AltTab			;
;~RButton & WheelDown::Send,{WheelRight}
^MButton::Send,{vk1Csc079}			;変換済みを再変換したいとき
LAlt & LButton::ShiftAltTab
LAlt & RButton::AltTab
LAlt & MButton::Send,!{F4}			;Alt F4(終了)
;task
;spaceでマウス



;-------------------------------------------------------
;アプリケーション固有設定
;Window spyというAutoHotkey付属ソフトでウィンドウ情報を調べてそれを書く

; Firefox 
;FireGesturesとかで色々すれば要らんかな……
;#IfWinActive,ahk_class MozillaWindowClass
;^1::Send,^{Left}
;^2::Send,^{Right}
;^3::Send,^{Up}
;^4::Send,^{Down}
;#IfWinActive

;タスクバーでスクロールすると音量調整
#IfWinActive,ahk_class Shell_TrayWnd
WheelUp::Send,{Volume_Up}
WheelDown::Send,{Volume_Down}
MButton::Send,{Volume_Mute}
vk1Dsc07B & i::Send,{Volume_Up}			;↑
vk1Dsc07B & k::Send,{Volume_Down}		;↓
vk1Dsc07B & b::Send,{Volume_Mute}		;MButton
#IfWinActive

#UseHook off