いろいろな拡張をインストールすると、起動に時間がかかるというか重くなってくる。メモリーもだんだん消費量が増えてくる。そこで、実際に拡張を実行するまでロードしないような遅延読み込み方法を考えてみた。拡張を必要なときだけロードするので、CraftLaunchEXをインストールした直後のさくさく感が蘇る気分。ちなみに今のConfig.pyはこんな感じ。


# -*- coding: utf_8 -*-

# =========================================================
# CraftLaunchEx 設定ファイル
# =========================================================
#自分で作った拡張のパス
import sys
sys.path.append(r'C:\tools\Launchers\craftware\clnchex\nakayato')
sys.path.append(r'C:\tools\Launchers\craftware\clnchex\nis')

from clapi import *
from clconst import *

# ---------------------------------------------------------
# 設定の変更
# ---------------------------------------------------------

import clcore
import clmode

# セパレータ変更
import clfilelist
clfilelist.separator = '\\'

# ---------------------------------------------------------
# オプション
# ---------------------------------------------------------

SetFont( u'Osaka', 9, FW_DONTCARE, False)

# ウインドウ初期位置
# 画面の左上からの位置
SetOption( OPTION_ORIGINAL_POSITION, (48,698) )

# ウインドウの最小サイズ
SetOption( OPTION_EDIT_MIN_WIDTH, 106 )

# リストの最大表示項目数
SetOption( OPTION_LIST_MAX, 32 )

# 背景色と文字色のRGB値
SetOption( OPTION_FG_COLOR, (32,36,32) )
SetOption( OPTION_ACTIVE_BG_COLOR, (248, 248, 248) )
SetOption( OPTION_INACTIVE_BG_COLOR, (224, 224, 224) )

# リストの最大表示項目数
SetOption( OPTION_CLOCK_FORMAT, u'%m/%d (%Uw) %H:%M "%S' )

# 履歴を全消去する
RemoveHistoryAll()

#デフォルトモードの設定
import clmode_lex
#アクティブ化はトグル
SetHotKeyHandler( ord(' '), MODKEY_WIN, clmode_lex.ToggleActive ) # win-Space
#表示
SetHotKeyHandler( ord(' '), MODKEY_CTRL | MODKEY_WIN, clmode_lex.ShowMe )
#隠す
SetHotKeyHandler( ord(' '), MODKEY_SHIFT | MODKEY_WIN, clmode_lex.HideMe )

#モードローカルのキー設定拡張用
mode = clmode.mode_stack[0]

def Reset():
"""CraftLaunchEXをリセット"""
import os
os.startfile(r'C:\tools\Launchers\craftware\clnchex\restart.vbs')
Quit()
SetHotKeyHandler( ord('R'), MODKEY_ALT | MODKEY_CTRL, Reset )
SetHotKeyHandler( ord('Q'), MODKEY_ALT | MODKEY_CTRL, Quit )

#キーアサインヘルプ
import clKeyAssign
SetKeyDownHandler( VK_F1, 0, clKeyAssign.showHelp )

# ネットインストール
def NetInstall():
"""NetInstall"""
s = 'import clNetInstall;clNetInstall.nisMode()'
exec s in globals(), locals()
mode.SetKeyDownHandler( ord("N"), MODKEY_CTRL, NetInstall )

# MameFile4
def Chdir_Mame():
"""Change path for mame4"""
s = 'import clfiler_ex;clfiler_ex.chdir(r"", GetValue())'
exec s in globals(), locals()
mode.SetKeyDownHandler( VK_RETURN, MODKEY_CTRL, Chdir_Mame )

import clWindowCtrl
SetHotKeyHandler( VK_UP, MODKEY_WIN, clWindowCtrl.Maximaize )
SetHotKeyHandler( VK_DOWN, MODKEY_WIN, clWindowCtrl.Minimaize )
SetHotKeyHandler( VK_LEFT, MODKEY_WIN, clWindowCtrl.ActivateNextWindow )
SetHotKeyHandler( VK_RIGHT, MODKEY_WIN, clWindowCtrl.ActivatePrevWindow )

# Command perser
def ParseCommand():
"""Get command path"""
s = 'import clparsecmd;clparsecmd.ParseCommand()'
exec s in globals(), locals()
mode.SetKeyDownHandler( VK_RIGHT, MODKEY_CTRL, ParseCommand )

# goo EJ/JE Dictionaly
def GooEJ():
"""EJ/JE Dic (goo)"""
s = 'import clgoo;clgoo.Goo()'
exec s in globals(), locals()
mode.SetKeyDownHandler( ord('T'), MODKEY_CTRL, GooEJ )
# goo Japanese Dictionaly
def GooJapanese():
"""Japanese Dic (goo)"""
s = 'import clgooN;clgooN.GooN()'
exec s in globals(), locals()
mode.SetKeyDownHandler( ord('T'), MODKEY_SHIFT | MODKEY_CTRL, GooJapanese )

# コマンドプロンプト
def PromptToList():
"""Prompt (to list)"""
s = 'import clprompt;clprompt.Shortcut_PromptToList()'
exec s in globals(), locals()
mode.SetKeyDownHandler( ord('P'), MODKEY_CTRL, PromptToList )
def PromptToCons():
"""Prompt (to debug)"""
s = 'import clprompt;clprompt.Shortcut_Prompt()'
exec s in globals(), locals()
mode.SetKeyDownHandler( ord('P'), MODKEY_SHIFT | MODKEY_CTRL, PromptToCons )

#UOSayモード
def UOSayMode():
"""UOSay mode"""
s = 'import clmode_uosay;clmode_uosay.Shortcut_uoSayMode()'
exec s in globals(), locals()
mode.SetKeyDownHandler( ord('U'), MODKEY_CTRL, UOSayMode )

#コマンドのヘルプ
def CommandHelp():
"""Command Help"""
s = 'import clcmd_ex;clcmd_ex.CommandHelp()'
exec s in globals(), locals()
mode.SetKeyDownHandler( VK_F1, MODKEY_SHIFT, CommandHelp )

#&HiddenCommand
def HiddenCommand():
"""&HiddenCommand"""
s = 'import clmode_hc;clmode_hc.Shortcut_HiddenCommand()'
exec s in globals(), locals()
mode.SetKeyDownHandler( 0xBB, MODKEY_SHIFT|MODKEY_CTRL, HiddenCommand )
#&UseAsArg
def UseAsArg():
"""&UseAsArg"""
s = 'import clmode_hc;clmode_hc.Shortcut_UseAsArg()'
exec s in globals(), locals()
mode.SetKeyDownHandler( 0xBB, MODKEY_CTRL, UseAsArg )

def SelectAll():
u"""Select all text"""
SetSelection(0, -1)
SetKeyDownHandler( ord('A'), MODKEY_CTRL, SelectAll )

#タスクトレイにフォーカス
def Hotkey_TTray():
"Focus to Tasktray"
import win32gui
try:
hwnd = FindWindow('Shell_TrayWnd', None)
hwnd = win32gui.FindWindowEx(hwnd, 0, 'TrayNotifyWnd', None)
hwnd = win32gui.FindWindowEx(hwnd, 0, 'ToolbarWindow32', None)
except:
pass
import clcore
clcore.RaiseNextWindow()
SetForegroundWindow(hwnd)
SetHotKeyHandler( ord('T'), MODKEY_WIN, Hotkey_TTray ) # win-t

#ClipMode
import clmode_clip
SetHotKeyHandler( ord('C'), MODKEY_WIN, clmode_clip.Shortcut_ClipMode )
#def cl(s):
# PopList(s.split('\n'))
#clmode_clip.RegistListener(cl)

#はてなアンテナチェック
def RSSRead():
from xml.dom.minidom import parseString
import urllib, urlparse
url = r'http://a.hatena.ne.jp/nakayato/'

v = GetValue()
if not v == '':
url = GetValue()

l = []
dat = {}

url = urlparse.urljoin(url, 'rss')
site = urllib.urlopen(url)
s = site.read()
site.close()

print s

doc = parseString(s)
root = doc.documentElement
items = root.getElementsByTagName('item')
for item in items:
es = item.getElementsByTagName('title')
for e in es:
sTitle = e.firstChild.data
es = item.getElementsByTagName('link')
for e in es:
sLink = e.firstChild.data
es = item.getElementsByTagName('dc:date')
for e in es:
sDate = e.firstChild.data
import time
t = time.strptime(sDate, '%Y-%m-%dT%H:%M:%S+09:00')

#l.append(sTitle)
l.append(sLink)

doc.unlink()
PopList(l)
SetHotKeyHandler( ord('A'), MODKEY_WIN, RSSRead )

アンテナチェックはしばらくしたらちゃんとしたモードにするかも。