LauncherEX をモード内のみで有効なキーバインドを設定できるようにする

LauncherEX 0.0.11 以降は、コンストラクタの書き換えは不要になりました。
以下の環境で動作確認しました。

LauncherEXCraftLaunchEx の LauncherMode を拡張するスクリプトです。
これをモード内のみで有効なキーバインドを設定できるようにします。
LauncherEX のコンストラクタを置き換えます。
lex_hook_on_init のフック関数で、引数 event の属性 keys にアクセスして、キーバインドとハンドラを設定します。
keys は『{ (仮想キーコード, モディファイアキー) : ハンドラ }』という辞書です。

コード

config.py などに記述します。

## LauncherEX
import clmode_lex # `from clconst import *' より前に記述する


from clapi import *
from clconst import *


# コンストラクタ
def _LauncherModeEXInit(self):
    import clmode_launcher
    clmode_launcher.LauncherMode.__init__(self)
    self.cmd = ''
    self.sel = None

    import clevent
    event = clevent.Event()
    # 0xBE: VK_OEM_PERIOD
    # { (仮想キーコード, モディファイアキー) : ハンドラ }
    event.keys = { (0xBE, MODKEY_CTRL) : self.Shortcut_ChangeSubMode }

    err = clmode_lex.RunHook(clmode_lex.lex_hook_on_init, event)
    if err: raise err

    for (k, v) in event.keys.iteritems():
        self.SetKeyDownHandler(k[0], k[1], v)
clmode_lex.clLauncherEX.LauncherModeEX.__init__ = _LauncherModeEXInit


def _Hoge():
    print 'hoge'

# 初期化時
def _LEXHookOnInit(event):
    event.keys.update({
        # Alt-h に _Hoge() をバインド
        (ord('H'), MODKEY_ALT) : _Hoge
    })
clmode_lex.AddHook(clmode_lex.lex_hook_on_init, _LEXHookOnInit)

# lex_hook_on_init を発火させるには PopMode() して PushMode()
PopMode()
PushMode(clmode_lex.clLauncherEX.LauncherModeEX())