LauncherEX で共通部分自動確定
以下の環境で動作確認しました。
- Windows XP Home Edition SP2
- Python 2.5.1
- CraftLaunchEx 0.991
- LauncherEX 0.0.11
LauncherEX で補完候補リスト作成時に、候補の共通部分を自動的に確定します。
コード
config.py などに記述します。
## LauncherEX import clmode_lex # `from clconst import *' より前に記述する from clapi import * from clconst import * # 共通部分自動確定 def _DecideCommonParts(event): import clmode import clcore if (clmode.Top().abbrev and event.sel[0] and event.candlist and clcore.List_IsShown() and (GetListSelection() != -1)): lst = [x.lower() for x in event.candlist if x.find(';') == -1] if not lst: return n = min([len(x) for x in lst]) if not n or (n <= event.sel[0]): return start = 0 for i in xrange(event.sel[0], n): for x in lst[1:]: if lst[0][i] != x[i]: start = i break if start: break else: start = i + 1 s = event.candlist[0][:start] n = event.str.find(';') SetValue(s + event.str[n:] if n >= event.sel[0] else s) SetSelection(start, len(s)) # 補完リスト作成時 clmode_lex.AddHook(clmode_lex.lex_hook_on_listup_abbrev, _DecideCommonParts)
この関数を作ってるときに気付いたんですが、フック関数を実行する関数 RunHook() は、ShowInfoException 以外の例外を捕捉すると StandardError を返却するので、どんな例外が送出されたのか分かりません。
そこで、捕捉した例外オブジェクトを返却するよう変更してみました。
from clapi import * from clconst import * import clmode_lex def _RunHook(HookTable, event): u"""フックを実行する""" rv = None for func in HookTable.itervalues(): try: func(event) except ShowInfoException, e: rv = e except Exception, e: return e return rv clmode_lex.clLauncherEX.RunHook = _RunHook