Dans TortoiseHg, lorsque vous affichez le Diff ou le Blume d'un fichier, vous verrez également un indicateur montrant les modifications, non?
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.
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.
À 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