Wenn Sie in TortoiseHg den Diff oder Blume einer Datei anzeigen, sehen Sie auch einen Indikator, der die Änderungen anzeigt, oder?
Wenn ich durch das Fenster scrolle, bewegt sich das graue Feld entsprechend. Möchten Sie hier klicken? Ich würde mich sehr freuen, wenn Sie darauf klicken und zu dieser Position springen. ICH.
Deshalb habe ich es ein wenig versucht. https://bitbucket.org/iwata0303/thg/commits/bbb613be1df57a43c4e3f6c20aa10ad45fe26c93
Ich habe eine Datei namens tortoisehg / hgqt / blockmatcher.py und füge diese Methode dort einer Klasse namens BlockList hinzu.
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())
Wenn Sie nun auf die Anzeige klicken, springt sie an diese Position, und wenn Sie sie so wie sie ist nach oben oder unten ziehen, funktioniert auch das Scrollen.
Übrigens ist es auch mühsam, die TortoiseHg-Quelle zu beschaffen und nur dafür zu erstellen.
** Es wird nicht für einen guten Jungen empfohlen **, aber ich werde versuchen, eine Erweiterung zu verwenden, um einen Affen-Patch anzuwenden.
thg_blocklist_patch.py
# -*- coding:utf-8 -*-
def extsetup():
import sys
import os
# thg.exe und thgw.Nur verarbeiten, wenn von exe ausgeführt
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)
Normalerweise möchte ich nicht verletzt werden, wenn ich den Befehl hg drücke, also versuche ich, ihn nur zu verarbeiten, wenn er von thg * .exe ausgeführt wird. Ich habe es nicht bestätigt, aber unter Linux denke ich, dass "sys.arg [0]" den Pfad von Python enthält. Überprüfen Sie in diesem Fall "sys.arg [1]".
Wenn Sie diese Datei als Erweiterung registrieren, müssen Sie die Quelle des Hauptgeräts nicht ändern. ** Da es sich um einen Affen-Patch handelt, seien Sie beim Upgrade vorsichtig. ** ** **