clmode_lex.zip
0.98対応。本家のバージョンアップがなんだか慌しい。software/memoでシロさんが書いていたコードを参考にBSでも補完時の動作を修正。それと、OnExecuteの調整をいろいろと。OPTION_EX_AUTO_DECIDEで存在しないコマンドを打ったときにはちゃんとエラーになるようにした。Abbrev関数を使うよりもListUpAbbrevCandidateを読んだ方がコード的にはすっきりする上に実行されるコードも少なくなることに気が付いた。それと履歴の追加はシロさんが言うとおり確かにおかしかったので、OnExecute側で履歴を追加することにして、常にShowInfoExceptionを挙げてclcmd側の処理をキャンセルするように変更した。
befor_commandのフックのタイミングも修正。OPTION_EX_AUTO_DECIDEで補正された後でフック関数を処理するようにした。
ついでに*Megahurtzのcltitleも動かしてみた。やばい便利だこれ。

# ウインドウタイトル検索を使用
def title_abbrev_hook(event):
    import cltitle
    res = cltitle.ListupAbbrevCandidate(event.str)
    event.candlist.extend(res)
clmode_lex.AddHook(clmode_lex.lex_hook_on_abbrev, title_abbrev_hook)

def title_exec_hook(event):
    import clcore
    hwnd = FindWindow(None, event.str)
    if hwnd:
        clcore.SetForegroundWindow( hwnd )
        clcore.Edit_SetValue('')
        clcore.List_Show(False)
        clcore.Edit_SetStatusIndicator('--')
        event.Skip()
clmode_lex.AddHook(clmode_lex.lex_hook_on_before_command, title_exec_hook)