Created
November 29, 2012 05:23
-
-
Save yahei/4166988 to your computer and use it in GitHub Desktop.
keyhac用設定ファイル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from keyhac import * | |
from pyauto import * | |
import pyauto | |
# | |
# FかJを押しながら他のキーを押すと数字や記号が打てます。 | |
# | |
# キーコード辞書(たぶんUS配列専用) '文字':キーコード (,で区切って並べる) | |
key_code = { | |
# 数字 | |
'0':48,'1':49,'2':50,'3':51,'4':52,'5':53,'6':54,'7':55,'8':56,'9':57, | |
# アルファベット | |
'a':65,'b':66,'c':67,'d':68,'e':69,'f':70,'g':71,'h':72,'i':73,'j':74,'k':75,'l':76,'m':77, | |
'n':78,'o':79,'p':80,'q':81,'r':82,'s':83,'t':84,'u':85,'v':86,'w':87,'x':88,'y':89,'z':90, | |
# 記号4段分 | |
'`':192,'-':189,'=':187, | |
'[':219,']':221,'\\':220, | |
';':186,'\'':222, | |
',':188,'.':190,'/':191, | |
# スペース | |
' ':32, | |
} | |
# シフト文字対応表(たぶんUS配列専用) '(普通の)シフトで打つ記号':'(普通の)シフトなしで出る記号' | |
shift_dic = { | |
'!':'1', '@':'2', '#':'3', '$':'4', '%':'5', | |
'^':'6', '&':'7', '*':'8', '(':'9', ')':'0', | |
'~':'`', '_':'-', '+':'=', | |
'{':'[', '}':']', '|':'\\', | |
':':';', '"':'\'', | |
'<':',', '>':'.', '?':'/', | |
} | |
# キーの置き換え表 よこシフト中、上の字が下の字に変わる | |
old_key = r"qwertyuiop[asdfghjkl;'zxcvbnm,./" | |
new_key = r"!@#$%^&*()|{}[]~_-+=`\1234567890" | |
# よこシフトに使うキー | |
YSKey = {key_code['f'], key_code['j']} | |
# 押した瞬間に入力されるよこシフト文字 | |
quick_key = r"_-+$%!1234567890" | |
# [分かりづらいと思うので解説] | |
# 素早く「fox」などと打とうとすると、一時的にfとoが同時押し状態になることがある。 | |
# これとよこシフト入力を区別するため、原則的には | |
# fが先に離されれば「f→o」と入力したものとみなし、 | |
# oが先に離されれば「(」を入力したものとみなして処理している。 | |
# | |
# 例外として、f→jの同時押しをを無条件で「-」の入力にしたいなどの場合は、 | |
# ここに「-」の文字を入れておくことで、そのように設定できる。 | |
# ------ 処理 ------ | |
def configure(keymap): | |
keymap_global = keymap.defineWindowKeymap() | |
# <<<関数定義>>> | |
# ---ノーマル入力関数 | |
def NormalInput(UD,x) : | |
# [モード遷移] | |
global ModKeys | |
global ModeFunc | |
if (ModKeys > 0) : | |
# @モディファイアモードへ | |
ModeFunc = ModInput | |
Input.send( [pyauto.KeyDown(x)] ) | |
return | |
else : | |
for y in YSKey : | |
if (x==y) : | |
# @よこシフトホールドモードへ | |
if(UD == 'D') : | |
ModeFunc = YShiftHold(x) | |
return | |
# [キー入力] | |
if (UD == 'U') : Input.send( [pyauto.KeyUp (x)] ) | |
else : Input.send( [pyauto.KeyDown(x)] ) | |
# ---よこシフトキーホールド中関数 | |
def YShiftHold(HKey) : | |
# 最後に押し下げられたキー | |
global YSPush | |
YSPush = -1 | |
def temp(UD,x) : | |
# [モード遷移] | |
global ModKeys | |
global ModeFunc | |
global YSPush | |
if (ModKeys > 0) : | |
# @モディファイアモードへ | |
ModeFunc = ModInput | |
Input.send( [pyauto.KeyDown(HKey)] ) | |
if (YSPush >= 0) : Input.send( [pyauto.KeyDown(YSPush)] ) | |
Input.send( [pyauto.KeyDown(x)] ) | |
return | |
elif(x == HKey) : | |
# @ノーマルモードへ | |
if(UD == 'U') : | |
ModeFunc = NormalInput | |
Input.send( [pyauto.KeyDown(HKey)] ) | |
if (YSPush >= 0) : Input.send( [pyauto.KeyDown(YSPush)] ) | |
# @リピートモードへ | |
else : | |
ModeFunc = RepeatInput(HKey) | |
Input.send( [pyauto.KeyDown(HKey)] ) | |
return | |
elif(UD == 'U')and(x == YSPush) : | |
# @よこシフトモードへ | |
ModeFunc = YShiftInput(HKey) | |
YSInput(x) | |
elif(UD == 'D') : | |
if (YSPush >= 0)or(x in quick_code) : | |
# @よこシフトモードへ | |
ModeFunc = YShiftInput(HKey) | |
if (YSPush >= 0)and(YSPush != x) : | |
YSInput(YSPush) | |
YSInput(x) | |
else : | |
# 保留 | |
YSPush = x | |
return temp | |
# ---リピート入力関数 | |
def RepeatInput(RKey) : | |
def temp(UD,x): | |
# [モード遷移] | |
global ModKeys | |
global ModeFunc | |
if (ModKeys > 0) : | |
# @モディファイアモードへ | |
ModeFunc = ModInput | |
Input.send( [pyauto.KeyDown(x)] ) | |
return | |
elif(x == RKey) : | |
# @ノーマルモードへ | |
if(UD == 'U') : ModeFunc = NormalInput | |
# リピート入力 | |
else : Input.send( [pyauto.KeyDown(x)] ) | |
elif (UD == 'D') : | |
for y in YSKey : | |
if (x==y) : | |
# @よこシフトホールドモードへ | |
ModeFunc = YShiftHold(x) | |
return temp | |
# ---よこシフト入力関数 | |
def YShiftInput(YSKey) : | |
def temp(UD,x): | |
# [モード遷移] | |
global ModKeys | |
global ModeFunc | |
if (ModKeys > 0) : | |
# @モディファイアモードへ | |
ModeFunc = ModInput | |
Input.send( [pyauto.KeyDown(x)] ) | |
return | |
elif(UD == 'U')and(x == YSKey) : | |
# @ノーマルモードへ | |
ModeFunc = NormalInput | |
return | |
# [キー入力] | |
elif (UD == 'D') : YSInput(x) | |
return temp | |
# ---よこシフトしたキーを入力 | |
def YSInput(x) : | |
global YSKeys | |
if (x in YSKeys) : | |
if isinstance(YSKeys[x],str) : | |
Input.send([ pyauto.Char(YSKeys[x]) ]) | |
elif(YSKeys[x]<255) : | |
Input.send( [pyauto.Key (YSKeys[x]) ]) | |
else : | |
Input.send([ pyauto.KeyDown(16) ]) | |
Input.send([ pyauto.Key(YSKeys[x]-256) ]) | |
Input.send([ pyauto.KeyUp (16) ]) | |
# ---モディファイア入力関数 | |
def ModInput(UD,x) : | |
# [モード遷移] | |
global ModKeys | |
global ModeFunc | |
global stateList | |
if(ModKeys == 0) : | |
ModeFunc = NormalInput # ノーマルモードへ | |
# [キー入力]をスルー | |
if (UD == 'U') : Input.send( [pyauto.KeyUp (x)] ) | |
else : Input.send( [pyauto.KeyDown(x)] ) | |
# <<<初期化処理など>>> | |
# ---状態変数 | |
global ModKeys | |
global ModeFunc | |
ModKeys = 0 | |
ModeFunc = NormalInput | |
# ---押した瞬間入力されるキーを数値のリストに | |
global quick_code | |
quick_code = [] | |
for x in quick_key : quick_code.append( key_code[ old_key[ new_key.find(x) ] ] ) | |
# ---逆引き辞書生成 | |
code_char = {} | |
for x in key_code : code_char[ key_code[x] ] = x | |
# ---よこシフトして入力する文字を一覧にしておく | |
global YSKeys | |
YSKeys = {} | |
for x in range(255) : | |
if (x in code_char) : | |
num = old_key.find( code_char[x] ) | |
if (num < 0) : | |
YSKeys[x] = x | |
else : | |
c = new_key[num] | |
if (c in key_code ) : YSKeys[x] = key_code[c] | |
elif(c in shift_dic) : YSKeys[x] = key_code[shift_dic[c]] + 256 | |
else : YSKeys[x] = c | |
else : | |
YSKeys[x] = x | |
# ---キー操作のイベントハンドラ | |
def InputKey(UD,x) : | |
def temp() : | |
global ModKeys | |
global Mode | |
# モディファイアキーの状態フラグを変更 | |
if (160 <= x)and(x <= 165): | |
if (UD == 'U') : ModKeys ^= 1<<(x-160) | |
else : ModKeys |= 1<<(x-160) | |
# 現在のモードの関数を呼ぶ | |
ModeFunc(UD,x) | |
return temp | |
# ---イベントハンドラ登録 | |
# キー単独押し下げ | |
for x in range(256) : | |
keymap_global[ 'D-'+str(x)] = InputKey('D',x) | |
keymap_global[ 'S-D-'+str(x)] = InputKey('D',x) | |
keymap_global[ 'C-D-'+str(x)] = InputKey('D',x) | |
keymap_global[ 'A-D-'+str(x)] = InputKey('D',x) | |
keymap_global[ 'C-A-D-'+str(x)] = InputKey('D',x) | |
keymap_global[ 'A-S-D-'+str(x)] = InputKey('D',x) | |
keymap_global[ 'S-C-D-'+str(x)] = InputKey('D',x) | |
keymap_global['S-C-A-D-'+str(x)] = InputKey('D',x) | |
# キー単独押し上げ | |
for x in range(256) : | |
keymap_global[ 'U-'+str(x)] = InputKey('U',x) | |
keymap_global[ 'S-U-'+str(x)] = InputKey('U',x) | |
keymap_global[ 'C-U-'+str(x)] = InputKey('U',x) | |
keymap_global[ 'A-U-'+str(x)] = InputKey('U',x) | |
keymap_global[ 'C-A-U-'+str(x)] = InputKey('U',x) | |
keymap_global[ 'A-S-U-'+str(x)] = InputKey('U',x) | |
keymap_global[ 'S-C-U-'+str(x)] = InputKey('U',x) | |
keymap_global['S-C-A-U-'+str(x)] = InputKey('U',x) | |
# ---キーバインド(このへんはお好みで)--- | |
keymap_global['C-B'] = 'Left' | |
keymap_global['C-P'] = 'Up' | |
keymap_global['C-F'] = 'Right' | |
keymap_global['C-N'] = 'Down' | |
keymap_global['C-E'] = 'End' | |
keymap_global['C-H'] = 'Back' | |
keymap_global['C-D'] = 'Delete' | |
keymap_global['C-M'] = 'Return' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment