LauncherEX で最後に実行したコマンドを実行する
以下の環境で動作確認しました。
- Windows XP Home Edition SP2
- Python 2.5.1
- CraftLaunchEx 0.991
- LauncherEX 0.0.10
LauncherEX をモード内のみで有効なキーバインドを設定できるようにする - anonymous苦労者 のコンストラクタ置き換えをしているものとします。
LauncherEX 0.0.11 以降は、コンストラクタの書き換えは不要になりました。
LauncherEXで、コマンド実行時に _SetLastCommand() で、インスタンス変数 _LastCommand に (コマンド名, モディファイアキー) のタプルを記録し、_RepeatLastCommand() で変数 _LastCommand を Execute() します。
_RepeatLastCommand() で AttributeError を握り潰しているのは、関数実行時に変数が存在しない場合があるからです。
コード
config.py などに記述します。
## LauncherEX import clmode_lex # `from clconst import *' より前に記述する from clapi import * from clconst import * # コマンドを記録する def _SetLastCommand(event): import clmode clmode.Top()._LastCommand = (event.str, event.mod) def _RepeatLastCommand(): u"""最後に実行したコマンドを実行する""" import clmode mode = clmode.Top() assert isinstance(mode, clmode_lex.clLauncherEX.LauncherModeEX) try: Execute(*mode._LastCommand) except AttributeError: pass # 初期化時 def _LEXHookOnInit(event): event.keys.update({ (ord('I'), MODKEY_ALT) : _RepeatLastCommand }) clmode_lex.AddHook(clmode_lex.lex_hook_on_init, _LEXHookOnInit) PopMode() PushMode(clmode_lex.clLauncherEX.LauncherModeEX()) # コマンド実行前 clmode_lex.AddHook(clmode_lex.lex_hook_on_before_command, _SetLastCommand) # コマンド実行後 clmode_lex.AddHook(clmode_lex.lex_hook_on_after_command, _SetLastCommand)