[PYTHON] Essayez de modifier un peu la vue du fichier de TortoiseHg

Chose que tu veux faire

Dans TortoiseHg, lorsque vous affichez le Diff ou le Blume d'un fichier, vous verrez également un indicateur montrant les modifications, non? thg-fileview

Lorsque je fais défiler la fenêtre, la case grise se déplace en conséquence. Voulez-vous cliquer ici? Je serais très heureux si vous cliquez dessus et sautez à cette position. JE.

Ce que j'ai fait

C'est pourquoi j'ai essayé un peu. https://bitbucket.org/iwata0303/thg/commits/bbb613be1df57a43c4e3f6c20aa10ad45fe26c93

J'ai un fichier appelé tortoisehg / hgqt / blockmatcher.py et j'y ajoute cette méthode à une classe appelée BlockList.

blockmatcher.py


    def scrollToPos(self, y):
        # Scroll to the position which specified by Y coodinate.
        if not isinstance(self._sbar, QScrollBar):
            return
        ratio = float(y) / self.height()
        minimum, maximum, step = self._minimum, self._maximum, self._pagestep
        value = minimum + (maximum + step - minimum) * ratio - (step * 0.5)
        value = min(maximum, max(minimum, value))  # round to valid range.
        self.setValue(value)

    def mousePressEvent(self, event):
        super(BlockList, self).mousePressEvent(event)
        self.scrollToPos(event.y())

    def mouseMoveEvent(self, event):
        super(BlockList, self).mouseMoveEvent(event)
        self.scrollToPos(event.y())

Maintenant, si vous cliquez sur l'indicateur, il sautera à cette position, et si vous le faites glisser vers le haut ou vers le bas tel quel, le défilement fonctionnera également.

Essayez d'en faire un plug-in

À propos, il est également difficile d'obtenir la source TortoiseHg et de la construire juste pour cela.

** Ce n'est pas recommandé pour un bon garçon **, mais j'essaierai d'utiliser une extension pour appliquer un patch de singe.

thg_blocklist_patch.py


# -*- coding:utf-8 -*-
def extsetup():
    import sys
    import os
    # thg.exe et thgw.Traiter uniquement lorsqu'il est exécuté à partir d'exe
    if not os.path.basename(sys.argv[0]).startswith('thg'):
        return

    from PyQt4.QtGui import QScrollBar

    from tortoisehg.hgqt.blockmatcher import BlockList
    from types import MethodType

    mousePressEvent_org = BlockList.mousePressEvent
    mouseMoveEvent_org = BlockList.mouseMoveEvent

    def scrollToPos(bl, y):
        # Scroll to the position which specified by Y coodinate.
        if not isinstance(bl._sbar, QScrollBar):
            return
        ratio = float(y) / bl.height()
        minimum, maximum, step = bl._minimum, bl._maximum, bl._pagestep
        value = minimum + (maximum + step - minimum) * ratio - (step * 0.5)
        value = min(maximum, max(minimum, value))  # round to valid range.
        bl.setValue(value)

    def mousePressEvent(self, event):
        mousePressEvent_org(self, event)
        scrollToPos(self, event.y())

    def mouseMoveEvent(self, event):
        mouseMoveEvent_org(self, event)
        scrollToPos(self, event.y())

    BlockList.mousePressEvent = MethodType(mousePressEvent, None, BlockList)
    BlockList.mouseMoveEvent = MethodType(mouseMoveEvent, None, BlockList)

Normalement, je ne veux pas être blessé lorsque j'appuie sur la commande hg, donc j'essaie de la traiter uniquement lorsqu'elle est exécutée à partir de thg * .exe. Je ne l'ai pas confirmé, mais sous Linux, je pense que sys.arg [0] contiendra le chemin de python, donc dans ce cas, vérifiez avec sys.arg [1].

Si vous enregistrez ce fichier en tant qu'extension, vous n'aurez pas à modifier la source de l'unité principale. ** Comme il s'agit d'un patch de singe, soyez prudent lors de la mise à niveau. ** **

Recommended Posts

Essayez de modifier un peu la vue du fichier de TortoiseHg
Modifions un peu plus la vue des fichiers de TortoiseHg
Afficher le chemin complet (chemin absolu) d'un fichier dans un répertoire sous Linux Bash
Essayez de réécrire le fichier avec la commande less
DJango Memo: depuis le début (création d'une vue)
Enregistrer l'objet dans un fichier avec pickle
[Attention] Lors de la création d'une image binaire (1 bit / pixel), faites attention au format de fichier!
Obtenir le nom de fichier dans un dossier à l'aide de glob
Essayez de créer un fichier compressé en utilisant Python et zlib
Remarque DJango: depuis le début (en utilisant une vue générique)
Essayez de charger l'image dans un thread séparé (OpenCV-Python)
Afficher le résultat de sortie de sklearn.metrics.classification_report sous forme de fichier CSV