LoginSignup
4
3

More than 5 years have passed since last update.

TortoiseHgのファイルビューをもう少し改造してみる

Last updated at Posted at 2012-12-04

http://qiita.com/items/940cab68f7e112af249f の続きです。

やりたいこと

Google ChromeやPyCharmなんかで検索を行うと、どの辺にヒットしたキーワードがあるのか、マーカーで教えてくれます。

こんな感じ。これはChromeじゃなくてIronですが。
Iron search

この機能が、TortoiseHgにも欲しいなあと。
<ステマ>ちなみにTortoiseBzrにはもうありますよ。</ステマ>

やったこと

とりあえず、先日のネタで手を入れたBlockListクラスが、ほぼそのまま使えそうです。
Chromeとかに倣って、ファイルビューの右側に配置するようにしましょう。
ということで、こんな感じになりました。
thg-fileview

ソースはこちらです。 https://bitbucket.org/iwata0303/thg/commits/d8452bd98690ab2f939164358976ff68
TortoiseHgのコードでは丁寧にSIGNAL/SLOTが定義されているので、この手の拡張はし易いですね :)

エクステンション化

さて、先日のやつと同じように、この機能をプラグインで実現してみます。自分でTortoiseHgビルドするの面倒ですしね。
前回は、BlockListクラスに実行時にメソッドを追加するという方法で実現したんですが、今回は修正箇所がいくつかに分かれていますし、既存のメソッドにも修正が入っているので、それはちょっと面倒です。
この際、クラスごと差し替える方が早そうです。バージョンアップのときの対応もその方が楽ですし。

手順は、こんな感じです。

  1. 適当な場所に、thg-ext というフォルダ(名前は何でもいいですが)を作る。
  2. そのフォルダに、今回変更したファイル(blockmatcher.pyqscilib.pyfileview.py)を放り込む。
  3. __init__.py というファイルを、以下の内容で同じフォルダに作成する。
__init__.py
# -*- coding: utf-8 -*-
import sys
import os

def extsetup():
    # TortoiseHgから起動された時だけ動くようにする
    if not os.path.basename(sys.argv[0]).startswith('thg'):
        return

    # qscilib.Scintillaを置き換える
    from tortoisehg.hgqt import qscilib
    from .qscilib import Scintilla
    qscilib.Scintilla = Scintilla
    # blockmatcher.BlockListを置き換える
    from tortoisehg.hgqt import blockmatcher
    from .blockmatcher import BlockList
    blockmatcher.BlockList = BlockList
    # fileview.HgFileViewを置き換える
    from tortoisehg.hgqt import fileview
    from .fileview import HgFileView
    fileview.HgFileView = HgFileView

ちなみに、ScintillaHgFileView という置き換えの順番は重要です。HgFileViewはScintillaを継承しているので、先にHgFileViewの方をロードしてしまうと置き換え前のScintillaを使ってしまうんですね。

4.mercurial.inihgrc 内で、thg-ext フォルダのパスをエクステンションとして登録する。

mercurial.ini
[extensions]
thgext = C:\Work\thg-ext

で、めでたく検索マーカー機能が動きました :)
動的言語はフリーダムでいいですねえ。プラグイン機構を用意する側からすると悩みの種ですがw

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3