Commits

Yuya Nishihara committed 68c4ff7

clean up patches

Comments (0)

Files changed (7)

curbring.diff

-# HG changeset patch
-# Parent b25bc24d4bd289fcad3ac317e887b17ebc6834cb
-docklog: put original command at end of the history
-
-It's the common behavior of Bash or Zsh.
-
-diff --git a/tortoisehg/hgqt/docklog.py b/tortoisehg/hgqt/docklog.py
---- a/tortoisehg/hgqt/docklog.py
-+++ b/tortoisehg/hgqt/docklog.py
-@@ -288,7 +288,9 @@ class ConsoleWidget(QWidget):
-     def historySearch(self, text, direction):
-         cmdline, idx = _searchhistory(self._commandHistory, unicode(text),
-                                       direction, self._commandIdx)
--        if cmdline:
-+        if idx == 0:
-+            cmdline = unicode(text)  # restore original command
-+        if cmdline is not None:
-             self._commandIdx = idx
-             self._logwidget.setCommandText(cmdline, candidate=True)
-         else:

filter-palette.patch

-# HG changeset patch
-# User Angel Ezquerra <angel.ezquerra@gmail.com>
-# Date 1345665431 -7200
-# Branch stable
-# Node ID a0f2dad9a121679761124e22533211c749db8a4c
-# Parent dc3b783b4deb22226101a619d9dbef9c3472f3ce
-repowidget, status, manifest: change background color when a filter is applied
-
-This patch changes the background color of filtered lists and trees.
-
-This takes into account whether the default background color is light or dark.
-If the default background color is light, the filtered color is a light yellow,
-while when the background color dark, the filtered color is a dark grey.
-
-In order to make it easy to filter different lists with the same colors, a new
-PaletteSwitcher class has been added to qtlib. An instance of this class must
-be added to any view that must change its background color when filtered. The
-class constructor takes the "parent" or "target" object as its only parameter.
-
-In order to change the background color, one must simply call the
-"enablefilterpalette" method of the PaletteSwitcher instance to enable or
-disable the background change.
-
-diff --git a/tortoisehg/hgqt/manifestdialog.py b/tortoisehg/hgqt/manifestdialog.py
---- a/tortoisehg/hgqt/manifestdialog.py
-+++ b/tortoisehg/hgqt/manifestdialog.py
-@@ -283,8 +283,13 @@ class ManifestWidget(QWidget, qtlib.Task
-         self._filterupdatetimer = QTimer(self, interval=200, singleShot=True)
-         self.le.returnPressed.connect(self._treeview.expandAll)
-         self.le.textChanged.connect(self._filterupdatetimer.start)
-+        def applyFilter():
-+            filtertext = self.le.text()
-+            self._treemodel.setNameFilter(filtertext)
-+            self._treeview.enablefilterpalette(filtertext)
-+
-         self._filterupdatetimer.timeout.connect(
--            lambda: self._treemodel.setNameFilter(self.le.text()))
-+            applyFilter)
- 
-     @pyqtSlot()
-     def _autoexpandtree(self):
-@@ -444,6 +449,11 @@ class QManifestLineEdit(QLineEdit):
- 
- class QManifestTreeView(QTreeView):
-     topreached = pyqtSignal(int)
-+
-+    def __init__(self, *args, **kwargs):
-+        QTreeView.__init__(self, *args, **kwargs)
-+        self._paletteswitcher = qtlib.PaletteSwitcher(self)
-+
-     def keyPressEvent(self, event):
-         if self.currentIndex().row() == 0 \
-                 and not self.currentIndex().parent().isValid():
-@@ -453,3 +463,6 @@ class QManifestTreeView(QTreeView):
-                 return
-         # default handler for event
-         super(QManifestTreeView, self).keyPressEvent(event)
-+
-+    def enablefilterpalette(self, enable):
-+        self._paletteswitcher.enablefilterpalette(enable)
-diff --git a/tortoisehg/hgqt/qtlib.py b/tortoisehg/hgqt/qtlib.py
---- a/tortoisehg/hgqt/qtlib.py
-+++ b/tortoisehg/hgqt/qtlib.py
-@@ -1135,3 +1135,45 @@ def newshortcutsforstdkey(key, *args, **
-     """Create [QShortcut,...] for all key bindings of the given StandardKey"""
-     return [QShortcut(keyseq, *args, **kwargs)
-             for keyseq in QKeySequence.keyBindings(key)]
-+
-+class PaletteSwitcher(object):
-+    """
-+    Class that can be used to enable a predefined, alterantive background color
-+    for a widget
-+
-+    This is normally used to change the color of widgets when they display some
-+    "filtered" content which is a subset of the actual widget contents.
-+
-+    The alternative background color is fixed, and depends on the original
-+    background color (dark and light backgrounds use a different alternative
-+    color).
-+
-+    The alterenative color cannot be changed because the idea is to set a
-+    consistent "filter" style for all widgets.
-+
-+    An instance of this class must be added as a property of the widget whose
-+    background we want to change. The constructor takes the "target widget" as
-+    its only parameter.
-+
-+    In order to enable or disable the background change, simply call the
-+    enablefilterpalette() method.
-+    """
-+    def __init__(self, targetwidget):
-+        self._targetwidget = targetwidget
-+        self._defaultpalette = targetwidget.palette()
-+        bgcolor = self._defaultpalette.color(QPalette.Base)
-+        if bgcolor.black() <= 128:
-+            # Light theme
-+            filterbgcolor = QColor('#FFFFB7')
-+        else:
-+            # Dark theme
-+            filterbgcolor = QColor('darkgrey')
-+        self._filterpalette = QPalette()
-+        self._filterpalette.setColor(QPalette.Base, filterbgcolor)
-+
-+    def enablefilterpalette(self, enabled=False):
-+        if enabled:
-+            pl = self._filterpalette
-+        else:
-+            pl = self._defaultpalette
-+        self._targetwidget.setPalette(pl)
-diff --git a/tortoisehg/hgqt/repoview.py b/tortoisehg/hgqt/repoview.py
---- a/tortoisehg/hgqt/repoview.py
-+++ b/tortoisehg/hgqt/repoview.py
-@@ -18,7 +18,7 @@ from mercurial import error
- 
- from tortoisehg.util import hglib
- from tortoisehg.hgqt.i18n import _
--from tortoisehg.hgqt import htmldelegate
-+from tortoisehg.hgqt import htmldelegate, qtlib
- from tortoisehg.hgqt.logcolumns import ColumnSelectDialog
- 
- from PyQt4.QtCore import *
-@@ -68,6 +68,7 @@ class HgRepoView(QTableView):
-         self.setDragDropMode(QAbstractItemView.InternalMove)
- 
-         self.setStyle(HgRepoViewStyle(self.style()))
-+        self._paletteswitcher = qtlib.PaletteSwitcher(self)
- 
-         self.setSelectionMode(QAbstractItemView.ExtendedSelection)
-         self.setSelectionBehavior(QAbstractItemView.SelectRows)
-@@ -321,6 +322,9 @@ class HgRepoView(QTableView):
- 
-         super(HgRepoView, self).resizeEvent(e)
- 
-+    def enablefilterpalette(self, enable):
-+        self._paletteswitcher.enablefilterpalette(enable)
-+
- class HgRepoViewStyle(QStyle):
-     "Override a style's drawPrimitive method to customize the drop indicator"
-     def __init__(self, style):
-diff --git a/tortoisehg/hgqt/repowidget.py b/tortoisehg/hgqt/repowidget.py
---- a/tortoisehg/hgqt/repowidget.py
-+++ b/tortoisehg/hgqt/repowidget.py
-@@ -514,6 +514,7 @@ class RepoWidget(QWidget):
-     def _unapplyRevisionSet(self):
-         self.toolbarVisibilityChanged.emit()
-         self.outgoingMode = False
-+        self.repoview.enablefilterpalette(False)
-         if not self.revset:
-             return False
-         self.revset = []
-@@ -536,6 +537,7 @@ class RepoWidget(QWidget):
-             self.refresh()
-         self.repoview.resetBrowseHistory(self.revset)
-         self._reload_rev = self.revset[0]
-+        self.repoview._paletteswitcher.enablefilterpalette(revs)
- 
-     @pyqtSlot(bool)
-     def filterToggled(self, checked):
-diff --git a/tortoisehg/hgqt/status.py b/tortoisehg/hgqt/status.py
---- a/tortoisehg/hgqt/status.py
-+++ b/tortoisehg/hgqt/status.py
-@@ -352,6 +352,7 @@ class StatusWidget(QWidget):
-         model = self.tv.model()
-         if model:
-             model.setFilter(match)
-+            self.tv.enablefilterpalette(bool(match))
- 
-     def updateCheckCount(self):
-         model = self.tv.model()
-@@ -500,6 +501,7 @@ class WctxFileTree(QTreeView):
-         self.setContextMenuPolicy(Qt.CustomContextMenu)
-         self.customContextMenuRequested.connect(self.menuRequested)
-         self.setTextElideMode(Qt.ElideLeft)
-+        self._paletteswitcher = qtlib.PaletteSwitcher(self)
- 
-     def scrollTo(self, index, hint=QAbstractItemView.EnsureVisible):
-         # don't update horizontal position by selection change
-@@ -553,6 +555,9 @@ class WctxFileTree(QTreeView):
-         # Invalid selectionModel found
-         return []
- 
-+    def enablefilterpalette(self, enable):
-+        self._paletteswitcher.enablefilterpalette(enable)
-+
- class WctxModel(QAbstractTableModel):
-     checkToggled = pyqtSignal()
- 

mani-applyfilter.diff

-# HG changeset patch
-# Date 1346682042 -32400
-# Parent e54292f5da98433740028f4d0ff85c29dd5dc14f
-manifest: bind applyFilter() to instance for ease of lifecycle handling
-
-GC can be blocked by dynamic function/lambda connected to long-lived signal
-in some cases.
-
-diff --git a/tortoisehg/hgqt/manifestdialog.py b/tortoisehg/hgqt/manifestdialog.py
---- a/tortoisehg/hgqt/manifestdialog.py
-+++ b/tortoisehg/hgqt/manifestdialog.py
-@@ -283,13 +283,13 @@ class ManifestWidget(QWidget, qtlib.Task
-         self._filterupdatetimer = QTimer(self, interval=200, singleShot=True)
-         self.le.returnPressed.connect(self._treeview.expandAll)
-         self.le.textChanged.connect(self._filterupdatetimer.start)
--        def applyFilter():
--            filtertext = self.le.text()
--            self._treemodel.setNameFilter(filtertext)
--            self._treeview.enablefilterpalette(filtertext)
-+        self._filterupdatetimer.timeout.connect(self._applyFilter)
- 
--        self._filterupdatetimer.timeout.connect(
--            applyFilter)
-+    @pyqtSlot()
-+    def _applyFilter(self):
-+        filtertext = self.le.text()
-+        self._treemodel.setNameFilter(filtertext)
-+        self._treeview.enablefilterpalette(filtertext)
- 
-     @pyqtSlot()
-     def _autoexpandtree(self):

mani-autoexpand.patch

-# HG changeset patch
-# User Angel Ezquerra <angel.ezquerra@gmail.com>
-# Date 1344374954 -7200
-# Node ID 07638e2f5444499048240ed38fa74c2c3c11b3e4
-# Parent  c1718bb37efd902533495110b1b913e4daa7ee27
-manifest: automatically expand the tree if the number of items is large, collapse it otherwise
-
-Up until now, using the manifest file filter would not automatically expand the
-manifest tree unless the clean files were not being shown. The result was that
-many filter matches would be hidden by default, and the user had to expand the
-correspoding tree folders to view them, with no way to expand them all.
-
-The reason for this behavoir was that it is expensive to expand a tree when the
-number of items is large.
-
-This change makes it so that if the number of items in the tree is less than 40,
-the tree will be automatically expanded. Otherwise the tree is automatically
-collapsed.
-
-In addition, it is possible to change this number of items limit, and whether
-the tree is collapsed when the number of items is greater than that limit. In
-order to do so, you can set the following configuration keys on the tortoisehg
-section:
-
-- manifest.autoexpand: Can be an integer or a boolean. Defaults to 40.
-    - integer: The maximum number of items that causes the tree to be
-    automatically expanded
-    - boolean: if True, always expand the tree; if False, never expand it
-    automatically
-- manifest.autocollapse: A boolean. Defaults to True
-    - if True, automatically collapse the tree when it is not automatically
-    expanded.
-
-diff --git a/tortoisehg/hgqt/manifestdialog.py b/tortoisehg/hgqt/manifestdialog.py
---- a/tortoisehg/hgqt/manifestdialog.py
-+++ b/tortoisehg/hgqt/manifestdialog.py
-@@ -260,6 +260,7 @@
-         self._treemodel = ManifestModel(self._repo, self._rev,
-                                         statusfilter=self._statusfilter.status(),
-                                         parent=self)
-+        self._treemodel.fileringCompleted.connect(self._autoexpandtree)
-         self._treemodel.setNameFilter(self.le.text())
- 
-         oldmodel = self._treeview.model()
-@@ -294,8 +295,33 @@
-     @pyqtSlot()
-     def _autoexpandtree(self):
-         """expand file tree if the number of the items isn't large"""
--        if 'C' not in self._statusfilter.status():
-+        model = self._treeview.model()
-+        if model.numitems == 0:
-+            return
-+        # There may several conditions that may lead us to expand the tree
-+        # Always expand if:
-+        # 1. clean files are not being shown
-+        expand = 'C' not in self._statusfilter.status()
-+        if not expand:
-+            # 2. an autoexpand limit has not been set and there
-+            #    are not many files in the tree
-+            # 3. an autoexpand limit has been set
-+            #     This can be set as a number of items or as a boolean
-+            try:
-+                expandlimit = self._repo.ui.configint('tortoisehg',
-+                    'manifest.autoexpand', 40)
-+                expand = (model.numitems <= expandlimit)
-+            except:
-+                expand = self._repo.ui.configbool('tortoisehg',
-+                    'manifest.autoexpand', False)
-+        if expand:
-             self._treeview.expandAll()
-+        else:
-+            collapse = self._repo.ui.configbool('tortoisehg',
-+                'manifest.autocollapse', True)
-+            if collapse:
-+                self._treeview.collapseAll()
-+
- 
-     def reload(self):
-         # TODO
-diff --git a/tortoisehg/hgqt/manifestmodel.py b/tortoisehg/hgqt/manifestmodel.py
---- a/tortoisehg/hgqt/manifestmodel.py
-+++ b/tortoisehg/hgqt/manifestmodel.py
-@@ -23,6 +23,7 @@
-     Qt model to display a hg manifest, ie. the tree of files at a
-     given revision. To be used with a QTreeView.
-     """
-+    fileringCompleted = pyqtSignal()
- 
-     StatusRole = Qt.UserRole + 1
-     """Role for file change status"""
-@@ -36,6 +37,7 @@
- 
-         self._diricon = QApplication.style().standardIcon(QStyle.SP_DirIcon)
-         self._fileicon = QApplication.style().standardIcon(QStyle.SP_FileIcon)
-+        self.numitems = 0
-         self._repo = repo
-         self._rev = rev
-         self._subinfo = {}
-@@ -232,6 +234,7 @@
-             return
-         self._namefilter = pattern
-         self._rebuildrootentry()
-+        self.fileringCompleted.emit()
- 
-     @property
-     def nameFilter(self):
-@@ -305,7 +308,9 @@
-             """Add files to the tree according to their state"""
-             if self._namefilter:
-                 files = fnmatch.filter(files, '*%s*' % self._namefilter)
-+            numfiles = 0
-             for path in files:
-+                numfiles += 1
-                 if not pathinstatus(path, status, uncleanpaths):
-                     continue
- 
-@@ -324,9 +329,11 @@
-                         break
-                 else:
-                     e.setstatus('C')
-+            return numfiles
- 
-         # Add subrepos to the tree
-         def addrepocontentstotree(roote, ctx, toproot=''):
-+            numitems = 0
-             subpaths = ctx.substate.keys()
-             for path in subpaths:
-                 if not 'S' in self._statusfilter:
-@@ -374,20 +381,22 @@
-                             self._subinfo[toprelpath]['ctx'] = sctx
- 
-                             # Add the subrepo contents to the tree
--                            e = addrepocontentstotree(e, sctx, toprelpath)
-+                            e, numitemsinsub = \
-+                                addrepocontentstotree(e, sctx, toprelpath)
-+                            numitems += numitemsinsub
- 
-             # Add regular files to the tree
-             status, uncleanpaths, files = getctxtreeinfo(ctx)
- 
--            addfilestotree(roote, files, status, uncleanpaths)
--            return roote
-+            numitems += addfilestotree(roote, files, status, uncleanpaths)
-+            return roote, numitems
- 
-         # Clear the _subinfo
-         self._subinfo = {}
-         roote = _Entry()
-         ctx = self._repo[self._rev]
- 
--        addrepocontentstotree(roote, ctx)
-+        e, self.numitems = addrepocontentstotree(roote, ctx)
-         roote.sort()
-         return roote
- 

move.diff

-# HG changeset patch
-# Parent b0d15930286f5f16bfa5af098ba4eff1984d6463
-docklog: change _commandComplete() to a free function
-
-It does not depend on self.
-
-diff --git a/tortoisehg/hgqt/docklog.py b/tortoisehg/hgqt/docklog.py
---- a/tortoisehg/hgqt/docklog.py
-+++ b/tortoisehg/hgqt/docklog.py
-@@ -238,6 +238,57 @@ def _searchhistory(items, text, directio
-         idx += direction
-     return None, idx
- 
-+def _findsubcommands(cmdtype, cmdline):
-+    matches = []
-+    cmd = cmdline.split()
-+    if cmdtype == 'hg':
-+        cmdtable = commands.table
-+    else:
-+        cmdtable = run.table
-+    subcmd = ''
-+    if len(cmd) >= 2:
-+        subcmd = cmd[1].lower()
-+    def findhgcmd(cmdstart):
-+        matchinfo = {}
-+        for cmdspec in cmdtable:
-+            for cmdname in cmdspec.split('|'):
-+                if cmdname[0] == '^':
-+                    cmdname = cmdname[1:]
-+                if cmdname.startswith(cmdstart):
-+                    matchinfo[cmdname] = cmdspec
-+        return matchinfo
-+    matchingcmds = findhgcmd(subcmd)
-+    if not matchingcmds:
-+        return matches
-+    if len(matchingcmds) > 1:
-+        basecmdline = '%s %%s' % (cmdtype)
-+        matches = [basecmdline % c for c in matchingcmds]
-+    else:
-+        scmdtype = matchingcmds.keys()[0]
-+        cmdspec = matchingcmds[scmdtype]
-+        opts = cmdtable[cmdspec][1]
-+        def findcmdopt(cmdopt):
-+            cmdopt = cmdopt.lower()
-+            while(cmdopt.startswith('-')):
-+                cmdopt = cmdopt[1:]
-+            matchingopts = []
-+            for opt in opts:
-+                if opt[1].startswith(cmdopt):
-+                    matchingopts.append(opt)
-+            return matchingopts
-+        basecmdline = '%s %s --%%s' % (cmdtype, scmdtype)
-+        if len(cmd) == 2:
-+            matches = ['%s %s ' % (cmdtype, scmdtype)]
-+            matches += [basecmdline % opt[1] for opt in opts]
-+        else:
-+            cmdopt = cmd[-1]
-+            if cmdopt.startswith('-'):
-+                # find the matching options
-+                basecmdline = ' '.join(cmd[:-1]) + ' --%s'
-+                cmdopts = findcmdopt(cmdopt)
-+                matches = [basecmdline % opt[1] for opt in cmdopts]
-+    return sorted(matches)
-+
- class _ConsoleCmdTable(dict):
-     """Command table for ConsoleWidget"""
-     _cmdfuncprefix = '_cmd_'
-@@ -294,57 +345,6 @@ class ConsoleWidget(QWidget):
-         else:
-             self._logwidget.flash()
- 
--    def _commandComplete(self, cmdtype, cmdline):
--        matches = []
--        cmd = cmdline.split()
--        if cmdtype == 'hg':
--            cmdtable = commands.table
--        else:
--            cmdtable = run.table
--        subcmd = ''
--        if len(cmd) >= 2:
--            subcmd = cmd[1].lower()
--        def findhgcmd(cmdstart):
--            matchinfo = {}
--            for cmdspec in cmdtable:
--                for cmdname in cmdspec.split('|'):
--                    if cmdname[0] == '^':
--                        cmdname = cmdname[1:]
--                    if cmdname.startswith(cmdstart):
--                        matchinfo[cmdname] = cmdspec
--            return matchinfo
--        matchingcmds = findhgcmd(subcmd)
--        if not matchingcmds:
--            return matches
--        if len(matchingcmds) > 1:
--            basecmdline = '%s %%s' % (cmdtype)
--            matches = [basecmdline % c for c in matchingcmds]
--        else:
--            scmdtype = matchingcmds.keys()[0]
--            cmdspec = matchingcmds[scmdtype]
--            opts = cmdtable[cmdspec][1]
--            def findcmdopt(cmdopt):
--                cmdopt = cmdopt.lower()
--                while(cmdopt.startswith('-')):
--                    cmdopt = cmdopt[1:]
--                matchingopts = []
--                for opt in opts:
--                    if opt[1].startswith(cmdopt):
--                        matchingopts.append(opt)
--                return matchingopts
--            basecmdline = '%s %s --%%s' % (cmdtype, scmdtype)
--            if len(cmd) == 2:
--                matches = ['%s %s ' % (cmdtype, scmdtype)]
--                matches += [basecmdline % opt[1] for opt in opts]
--            else:
--                cmdopt = cmd[-1]
--                if cmdopt.startswith('-'):
--                    # find the matching options
--                    basecmdline = ' '.join(cmd[:-1]) + ' --%s'
--                    cmdopts = findcmdopt(cmdopt)
--                    matches = [basecmdline % opt[1] for opt in cmdopts]
--        return sorted(matches)
--
-     @pyqtSlot(unicode)
-     def completeCommandText(self, text):
-         """Show the list of history or known commands matching the search text
-@@ -367,7 +367,7 @@ class ConsoleWidget(QWidget):
-         cmd = text.split()
-         cmdtype = cmd[0].lower()
-         if cmdtype in ('hg', 'thg'):
--            hgcommandmatches = self._commandComplete(cmdtype, text)
-+            hgcommandmatches = _findsubcommands(cmdtype, text)
-             if hgcommandmatches:
-                 if not commonprefix:
-                     commonprefix = os.path.commonprefix(hgcommandmatches)
-shortcut.diff
 docdiff-base.diff
-filter-palette.patch
-mani-applyfilter.diff
 fileview-time.diff
 reporeg-moveactions.diff
 reporeg-saverestore.diff
 sync-exc.diff
 expandall-exp.diff
 syncwidget-test.diff
-mani-autoexpand.patch
 status-show-all-exp.diff
 13074.diff
 import-history.patch
-move.diff
-curbring.diff
 fd-filled.diff
 try1.diff
 setpathdebug.diff

shortcut.diff

-# HG changeset patch
-# Date 1346680656 -32400
-# Parent cd0980debb0a5a331ee1d625b00beca032dad375
-shortcuts: give Ctrl+Shift+L for openlocal (fixes #2118)
-
-Ctrl+Shift+O conflicts with "Show Repository Registry".
-
-This unifies the shortcut for openlocal (=openfile), and removes the shortcut
-from FilectxActions.editlocal, which was previously Ctrl+Shift+L.
-
-In manifest view, Ctrl+Shift+E, which is the shortcut for WctxActions.edit,
-is assigned not to editlocal, but to editfile action. I guess that's because
-the manifest view is intended to handle committed (non-local) data.
-
-diff --git a/tortoisehg/hgqt/filectxactions.py b/tortoisehg/hgqt/filectxactions.py
---- a/tortoisehg/hgqt/filectxactions.py
-+++ b/tortoisehg/hgqt/filectxactions.py
-@@ -69,9 +69,9 @@ class FilectxActions(QObject):
-              _('View file as it appeared at this revision'), self.editfile),
-             ('save', _('Save at Revision'), None, 'Shift+Ctrl+S',
-              _('Save file as it appeared at this revision'), self.savefile),
--            ('ledit', _('Edit Local'), 'edit-file', 'Shift+Ctrl+L',
-+            ('ledit', _('Edit Local'), 'edit-file', None,
-              _('Edit current file in working copy'), self.editlocal),
--            ('lopen', _('Open Local'), '', 'Shift+Ctrl+O',
-+            ('lopen', _('Open Local'), '', 'Shift+Ctrl+L',
-              _('Edit current file in working copy'), self.openlocal),
-             ('copypath', _('Copy Path'), '', 'Shift+Ctrl+C',
-              _('Copy full path of file(s) to the clipboard'), self.copypath),
-diff --git a/tortoisehg/hgqt/wctxactions.py b/tortoisehg/hgqt/wctxactions.py
---- a/tortoisehg/hgqt/wctxactions.py
-+++ b/tortoisehg/hgqt/wctxactions.py
-@@ -40,7 +40,7 @@ class WctxActions(QObject):
-         make(_('&Diff to parent'), vdiff, frozenset('MAR!'), 'visualdiff', 'CTRL+D')
-         make(_('Copy patch'), copyPatch, frozenset('MAR!'), 'copy-patch')
-         make(_('Edit'), edit, frozenset('MACI?'), 'edit-file', 'SHIFT+CTRL+E')
--        make(_('Open'), openfile, frozenset('MACI?'), '', 'SHIFT+CTRL+O')
-+        make(_('Open'), openfile, frozenset('MACI?'), '', 'SHIFT+CTRL+L')
-         allactions.append(None)
-         make(_('Open subrepository'), opensubrepo, frozenset('S'),
-             'thg-repository-open', 'Shift+Ctrl+O')