Software Memo BookMarkMode
いちいちマウスに手を伸ばさなくてもブックマークを開けるのはかなり快適だと思ったけれど、基本的にIEのお気に入りを使用していないので登録できるアイテム数が物足りない。そこでWWWCのアイテムをインポートする関数をCacheクラスに追加してみた。かなり適当に書いたので他所の環境で動くかどうかはイマイチ謎。コードの大部分はシロさんの書いたものを流用している。


def importWWWC(self,arg_path):
import os,os.path,clKanji
import codecs

arg_path=unicode(arg_path)
if os.path.exists(arg_path):
for root, dirs, files in os.walk(arg_path):
for f in files:
file_path = os.path.normpath(root+'/'+f)
file_name,ext = os.path.splitext(file_path)
if ext == '.url':
url = GetInternetShortcutInfo(file_path)
elif ext =='.lnk':
url,param,directory,swmode = GetShellLinkInfo(file_path)

elif ext =='.dat':
sjis_codec = codecs.getreader('shift-jis')
objf = file(file_path, 'r+')
r = sjis_codec(objf)
try:
s = r.read()
except:
print file_path
objf.close()
try:
s = unicode(s, 'shift-jis')
except:
pass
itemlist = s[:-1].split('\n')
else:
continue

taglist = file_name[len(arg_path):].split('\\')
taglist.remove('')
site_name = taglist.pop()
tagstr=u''
for tag in taglist:
temp_data={}
temp_data['kana'] = clKanji.toRoman(clKanji.ReConv(tag)[0])
temp_data['attr'] = u'tag'
temp_data['open'] = 0
temp_data['last'] = 0
self.data_new[tag] = temp_data
tagstr += '|'+tag

for siteitem in itemlist:
item = siteitem.split('\t')
if len(item) < 15:
continue
site_name = item[0]
temp_data={}
temp_data['name'] = site_name
temp_data['kana'] = clKanji.toRoman(clKanji.ReConv(site_name)[0])
temp_data['url'] = item[1]
temp_data['attr'] = u'url'
temp_data['tags'] = tagstr[1:]
temp_data['comment'] = item[11]
temp_data['open'] = 0
temp_data['last'] = 0
self.data_new[item[1]]=temp_data
self.check()
self.setCache()
else:
SetValue( 'not exist : ' + arg_path )

ついでに一気にモードを抜けるショートカットをCtrl+Qとして追加した。これは個人的にCtrl+Qで拡張モード終了が手に馴染んでしまったため。
他人の書いたコードを読むのはとても参考になると思う。OnExecuteでインジゲーターが強制的に設定されるのがヤダなぁと思っていたら、BookMarkModeではEnterにホットキーを設定して回避していた。ああ、なるほどと思った。後、印象に残ったのがOnAbbrevの使い方。このイベントは意外と拡張が難しいのだけど丁寧に他のイベントを絡めて処理されていた。全体的に細かい部分を丁寧に作りこんでいる印象。