keyhacで[半角/全角]キーの1回・2回押しでIME OFF・ONを切り替える
またまたkeyhacでのカスタマイズネタについて。IMEのON/OFFはいつまで経っても大して使い勝手が良くならない。どうゆうことかと言うと文字をタイプし始めてから「あ!半角のままだった……」と気づきIMEをONにして漢字入力する。またその逆も。
これは[半角/全角]キーがトグルスイッチになっているためで、いまどちらの状態にあるのかを把握せずにON/OFFできるようになれば大幅に打ち損じが減るんじゃないかと思いついた。つまり……
■ コード
from keyhac import * def configure(keymap): ## IMEを切り替える # # @param flag 切り替えフラグ(True:IME ON / False:IME OFF) # def switch_ime(flag): # バルーンヘルプを表示する時間(ミリ秒) BALLOON_TIMEOUT_MSEC = 500 # if not flag: if flag: ime_status = 1 message = u"[あ]" else: ime_status = 0 message = u"[_A]" # IMEのON/OFFをセット keymap.wnd.setImeStatus(ime_status) # IMEの状態をバルーンヘルプで表示 keymap.popBalloon("ime_status", message, BALLOON_TIMEOUT_MSEC) ## キーの1回/2回押しで引数の関数コールを切り替える # # @param func コールする関数 # # 引数の func は1回押しなら func(True)、2回連続押しなら func(False) # でコールされる # def double_key(func, cache_t={}): # 2回連続押し判断の許容間隔(ミリ秒) TIMEOUT_MSEC = 500 func_name = func.__name__ # 前回時刻 t0 = 0 if func_name in cache_t: t0 = cache_t[func_name] # 現在時刻を保存 import time cache_t[func_name] = time.clock() # 前回実行からの経過時間(ミリ秒) delta_t = (cache_t[func_name] - t0) * 1000 # 関数コール if delta_t > TIMEOUT_MSEC: func(False) # 1回押し else: func(True) # 2回連続押し keymap_global = keymap.defineWindowKeymap() if 1: # [半角/全角] keymap_global["U-(243)"] = lambda: double_key(switch_ime) # 押す keymap_global["D-(243)"] = lambda: None # 離す keymap_global["U-(244)"] = lambda: double_key(switch_ime) # 押す keymap_global["D-(244)"] = lambda: None # 離す if 0: # [変換] keymap_global["S-(28)"] = "(28)" # Shift+[変換]で再変換 keymap_global["(28)"] = lambda: double_key(switch_ime) if 0: # [無変換] keymap_global["(29)"] = lambda: double_key(switch_ime)
↑ [変換]・[無変換]キーがいい場合は、if 1 に変更してください。
■ さいごに
慣れれば便利だと思うので、よかったら使ってみてください!