diff --git a/src/calibre/gui2/tweak_book/boss.py b/src/calibre/gui2/tweak_book/boss.py index 9f350008c7..c52109cbf8 100644 --- a/src/calibre/gui2/tweak_book/boss.py +++ b/src/calibre/gui2/tweak_book/boss.py @@ -676,6 +676,9 @@ class Boss(QObject): self.gui.action_save.setEnabled(True) def request_completion(self, name, completion_type, completion_data, query=None): + if completion_type is None: + completion_worker().clear_caches(completion_data) + return request_id = (self.completion_request_count, name) self.completion_request_count += 1 completion_worker().queue_completion(request_id, completion_type, completion_data, query) diff --git a/src/calibre/gui2/tweak_book/completion/basic.py b/src/calibre/gui2/tweak_book/completion/basic.py index 8831fbd382..4326da4827 100644 --- a/src/calibre/gui2/tweak_book/completion/basic.py +++ b/src/calibre/gui2/tweak_book/completion/basic.py @@ -22,12 +22,19 @@ from calibre.utils.matcher import Matcher Request = namedtuple('Request', 'id type data query') names_cache = {} +file_cache = {} @control def clear_caches(cache_type, data_conn): - global names_cache - if cache_type is None or cache_type == 'names': + global names_cache, file_cache + if cache_type is None: names_cache.clear() + file_cache.clear() + return + if cache_type == 'names': + names_cache.clear() + elif cache_type.startswith('file:'): + file_cache.pop(cache_type.partition(':')[2], None) @data def names_data(request_data): diff --git a/src/calibre/gui2/tweak_book/editor/smarts/html.py b/src/calibre/gui2/tweak_book/editor/smarts/html.py index 46067f2583..fa0559e903 100644 --- a/src/calibre/gui2/tweak_book/editor/smarts/html.py +++ b/src/calibre/gui2/tweak_book/editor/smarts/html.py @@ -642,7 +642,7 @@ class Smarts(NullSmarts): if m is None: return attr = m.group(1).lower().split(':')[-1] - doc_name = editor.highlighter.doc_name + doc_name = editor.completion_doc_name if doc_name and attr in {'href', 'src'}: # A link query = m.group(2) or m.group(3) or '' diff --git a/src/calibre/gui2/tweak_book/editor/text.py b/src/calibre/gui2/tweak_book/editor/text.py index 6f453744b1..390d5eaae0 100644 --- a/src/calibre/gui2/tweak_book/editor/text.py +++ b/src/calibre/gui2/tweak_book/editor/text.py @@ -141,6 +141,9 @@ class TextEdit(PlainTextEdit): PlainTextEdit.__init__(self, parent) self.completion_popup = CompletionPopup(self) self.request_completion = self.completion_doc_name = None + self.clear_completion_cache_timer = t = QTimer(self) + t.setInterval(5000), t.timeout.connect(self.clear_completion_cache), t.setSingleShot(True) + self.textChanged.connect(t.start) self.last_completion_request = -1 self.gutter_width = 0 self.tw = 2 @@ -803,6 +806,10 @@ class TextEdit(PlainTextEdit): if result.request_id[0] >= self.last_completion_request: self.completion_popup.handle_result(result) + def clear_completion_cache(self): + if self.request_completion is not None and self.completion_doc_name: + self.request_completion(None, 'file:' + self.completion_doc_name) + def replace_possible_unicode_sequence(self): c = self.textCursor() has_selection = c.hasSelection()