Keyboard shortcut for copy in diff view

This commit is contained in:
Kovid Goyal 2014-01-27 21:36:27 +05:30
parent 66e4fc9ae1
commit cb63a16439
2 changed files with 9 additions and 3 deletions

View File

@ -11,7 +11,7 @@ from functools import partial
from PyQt4.Qt import ( from PyQt4.Qt import (
QGridLayout, QToolButton, QIcon, QRadioButton, QMenu, QApplication, Qt, QGridLayout, QToolButton, QIcon, QRadioButton, QMenu, QApplication, Qt,
QSize, QWidget, QLabel, QStackedLayout, QPainter, QRect, QVBoxLayout, QSize, QWidget, QLabel, QStackedLayout, QPainter, QRect, QVBoxLayout,
QCursor, QEventLoop) QCursor, QEventLoop, QKeySequence)
from calibre.gui2 import info_dialog from calibre.gui2 import info_dialog
from calibre.gui2.progress_indicator import ProgressIndicator from calibre.gui2.progress_indicator import ProgressIndicator
@ -244,6 +244,10 @@ class Diff(Dialog):
return # The enter key is used by the search box, so prevent it closing the dialog return # The enter key is used by the search box, so prevent it closing the dialog
if ev.key() == Qt.Key_Slash: if ev.key() == Qt.Key_Slash:
return self.search.setFocus(Qt.OtherFocusReason) return self.search.setFocus(Qt.OtherFocusReason)
if ev.matches(QKeySequence.Copy):
text = self.view.view.left.selected_text + self.view.view.right.selected_text
if text:
QApplication.clipboard().setText(text)
return Dialog.keyPressEvent(self, ev) return Dialog.keyPressEvent(self, ev)
if __name__ == '__main__': if __name__ == '__main__':

View File

@ -20,7 +20,7 @@ from PyQt4.Qt import (
QTextCursor, QTextCharFormat, Qt, QRect, QPainter, QPalette, QPen, QBrush, QTextCursor, QTextCharFormat, Qt, QRect, QPainter, QPalette, QPen, QBrush,
QColor, QTextLayout, QCursor, QFont, QSplitterHandle, QPainterPath, QColor, QTextLayout, QCursor, QFont, QSplitterHandle, QPainterPath,
QHBoxLayout, QWidget, QScrollBar, QEventLoop, pyqtSignal, QImage, QPixmap, QHBoxLayout, QWidget, QScrollBar, QEventLoop, pyqtSignal, QImage, QPixmap,
QMenu, QIcon) QMenu, QIcon, QKeySequence)
from calibre import human_readable, fit_image from calibre import human_readable, fit_image
from calibre.gui2 import info_dialog from calibre.gui2 import info_dialog
@ -119,7 +119,7 @@ class TextBrowser(PlainTextEdit): # {{{
a = m.addAction a = m.addAction
i = unicode(self.textCursor().selectedText()) i = unicode(self.textCursor().selectedText())
if i: if i:
a(QIcon(I('edit-copy.png')), _('Copy to clipboard'), self.copy) a(QIcon(I('edit-copy.png')), _('Copy to clipboard'), self.copy).setShortcut(QKeySequence.Copy)
if len(self.changes) > 0: if len(self.changes) > 0:
try: try:
@ -148,6 +148,8 @@ class TextBrowser(PlainTextEdit): # {{{
m.exec_(self.mapToGlobal(pos)) m.exec_(self.mapToGlobal(pos))
def search(self, query, reverse=False): def search(self, query, reverse=False):
''' Search for query, also searching the headers. Matches in headers
are not highlighted as managing the highlight is too much of a pain.'''
if not query.strip(): if not query.strip():
return return
c = self.textCursor() c = self.textCursor()