diff --git a/src/calibre/gui2/viewer/search.py b/src/calibre/gui2/viewer/search.py index 37aba9aa06..0a0a3258b2 100644 --- a/src/calibre/gui2/viewer/search.py +++ b/src/calibre/gui2/viewer/search.py @@ -3,14 +3,14 @@ # License: GPL v3 Copyright: 2020, Kovid Goyal import json -from collections import Counter, OrderedDict -from threading import Thread - import regex +from collections import Counter, OrderedDict from PyQt5.Qt import ( QCheckBox, QComboBox, QFont, QHBoxLayout, QIcon, QLabel, Qt, QToolButton, QTreeWidget, QTreeWidgetItem, QVBoxLayout, QWidget, pyqtSignal ) +from threading import Thread +from html import escape from calibre.ebooks.conversion.search_replace import REGEX_FLAGS from calibre.gui2 import warning_dialog @@ -282,7 +282,7 @@ def toc_nodes_for_search_result(sr): return tuple(tmap.toc_nodes_for_offset(sr.offset)) -def search_in_name(name, search_query, ctx_size=50): +def search_in_name(name, search_query, ctx_size=75): raw = searchable_text_for_name(name)[0] for match in search_query.regex.finditer(raw): start, end = match.span() @@ -479,6 +479,9 @@ class Results(QTreeWidget): # {{{ item.setFlags(Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemNeverHasChildren) item.setData(0, Qt.UserRole, result) item.setData(0, Qt.UserRole + 1, len(self.search_results)) + if isinstance(result, SearchResult): + tt = '

' + escape(result.before, False) + '' + escape(result.text, False) + '' + escape(result.after, False) + item.setData(0, Qt.ToolTipRole, tt) item.setIcon(0, self.blank_icon) self.item_map[len(self.search_results)] = item self.search_results.append(result)