唐突だけどLauncherModeの拡張について。
非アクティブ時の挙動を簡単に切り替えられるよう、仕様を考えてみた。インターフェイスが共通化された非アクティブ時用モードを作成して、OnActivateイベント内で指定されたモードに切り替えるようなイメージが設定方法が簡単でいいと思う。
とりあえずはモードの呼び出し方を共通化しておくこと。OnSubmode()とか、そんな名前のファンクションを共通で持つこと。


# -*- coding: utf_8 -*-
#非アクティブ時クラスのテンプレート

from clapi import *
from clconst import *
from clmode import BaseMode

class subMode_AutoHide( BaseMode ):
"""自動で隠れる"""
def __init__(self):
BaseMode.__init__(self)

def OnPush(self):

def OnPop(self):

def OnActivate( self, event ):
BaseMode.OnActivate( self, event )

if event.active:
PopMode()

#共通インターフェイス関数
def OnSubmode():
PushMode(subMode_AutoHide())

基本的にはOnPushで初期化処理。Clockだったらタイマーを起動するとか。OnPopで後処理。タイマーを解除するとか。非アクティブ時の色の変更なんかもこっち(OnPush/OnPop)で受け持った方がスマートだと思う。
LauncherMode側ではOnActivateでこんな感じの処理。

def OnActivate( self, event ):
BaseMode.OnActivate( self, event )

if CleanupWhenActive and event.active:
SetValue('')

# 非アクティブ時のモード変更
if not event.active and len(GetValue())==0 :
original_pos = GetOption( OPTION_ORIGINAL_POSITION )
SetPos( *original_pos )

if not (InactiveMode == ''):
pass
str = 'import ' + InactiveMode + '\n'
str += InactiveMode + '.OnSubmode()'
exec str in globals(), locals()
else:
SetImeStatus(False)

InactiveModeはグローバルで、インポートモジュール名を指定。ショートカットをうまいことすれば動的に非アクティブ時動作を切り替えられそう。
……と、まあこんな感じで非アクティブ時に自動で隠れるモードと時計表示モードぐらいを作ってテスト中なんですが、いかがなモンでしょうか関係者各位。自分の手元で稼動中なので、需要がありそうなら公開できる状態なんだけど、LauncherModeってもうすでにばりばりカスタマイズされてそうなものでそのへんどうなんだろう。非アクティブ時の選択肢がもう少し増えれば需要出そうな気がするわけだけど、非アクティブ時メールチェックとかサイトの更新チェックとかRSSリーダとかクリップボードの履歴取得とか特定ウインドウの起動監視とか、誰か作らないかな。