TortoiseHg のエラーを出そう - TortoiseHg Advent Calendar 2012

2012 年 12 月 19 日 はてなブックマークへ追加 はてなブックマーク - TortoiseHg のエラーを出そう - TortoiseHg Advent Calendar 2012 Bookmark this on Delicious

TortoiseHg Advent Calendar 2012 の 19 日目です。

例外をちょっとだけ楽しくする話をします。

何も言わずに下のコードを itarize エクステンション に貼ってみましょう。

def uisetup(ui):
    if not os.path.basename(sys.argv[0]).startswith('thg'):
        # TortoiseHg以外から読み込まれた場合は何もしない
        return

    ...

    # AnnotateViewを装飾
    from tortoisehg.hgqt.fileview import AnnotateView
    Itarate(AnnotateView)

    # -- ここから --
    from tortoisehg.hgqt import bugreport
    # 念のためサブクラス化
    class BugReportTextBrowser(bugreport.QTextBrowser):
        pass
    bugreport.QTextBrowser = BugReportTextBrowser
    Itarate(BugReportTextBrowser)
    # -- ここまで --

ほら、このとおり。

例外を見るのが楽しくなりますね!

けれど、エラーが起きた時しか表示されなくて残念です。 せっかくなのでいつでもウィンドウを開けるようにしましょう。

    from mercurial import extensions
    from tortoisehg.hgqt import workbench
    def itaraise():
        raise Exception('hello')

    def wbrun(orig, ui, *pats, **opts):
        w = orig(ui, *pats, **opts)
        if not isinstance(w, workbench.Workbench):
            return w
        a = QtGui.QAction(u'エラーを起こす', w.menuHelp)
        a.setShortcut('F1')
        a.triggered.connect(itaraise)
        w.menuHelp.insertAction(w.menuHelp.actions()[0], a)
        return w

    extensions.wrapfunction(workbench, 'run', wbrun)

じゃん。

F1 キーを押すだけでエラーが起きるようになりました。

素晴らしいエクステンションをありがとうございます! > @wonderful_panda さん

それでは、良いお年を。

コメント

blog comments powered by Disqus