diff --git a/novelwriter/constants.py b/novelwriter/constants.py index c20b9c47..4fde6f38 100644 --- a/novelwriter/constants.py +++ b/novelwriter/constants.py @@ -184,6 +184,10 @@ class nwKeyWords: POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY, OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY, ] + CAN_LOOKUP: Final[list[str]] = [ + POV_KEY, FOCUS_KEY, CHAR_KEY, PLOT_KEY, TIME_KEY, WORLD_KEY, + OBJECT_KEY, ENTITY_KEY, CUSTOM_KEY, STORY_KEY, MENTION_KEY, + ] # Set of Valid Keys VALID_KEYS: Final[set[str]] = set(ALL_KEYS) diff --git a/novelwriter/core/index.py b/novelwriter/core/index.py index ee108ad3..d8e9c8e4 100644 --- a/novelwriter/core/index.py +++ b/novelwriter/core/index.py @@ -757,10 +757,12 @@ class Index: """Return all tags used by a specific document.""" return self._itemIndex.allItemTags(tHandle) if tHandle else [] - def getClassTags(self, itemClass: nwItemClass | None) -> list[str]: - """Return all tags based on itemClass.""" - name = None if itemClass is None else itemClass.name - return self._tagsIndex.filterTagNames(name) + def getKeyWordTags(self, keyWord: str) -> list[str]: + """Return all tags usable for a specific keyword.""" + if keyWord in nwKeyWords.CAN_LOOKUP: + itemClass = nwKeyWords.KEY_CLASS.get(keyWord) + return self._tagsIndex.filterTagNames(itemClass.name if itemClass else None) + return [] def getTagsData( self, activeOnly: bool = True diff --git a/novelwriter/gui/doceditor.py b/novelwriter/gui/doceditor.py index 8d1c42c1..846b6317 100644 --- a/novelwriter/gui/doceditor.py +++ b/novelwriter/gui/doceditor.py @@ -2116,9 +2116,7 @@ class CommandCompleter(QMenu): length = len(lookup) suffix = "" options = sorted(filter( - lambda x: lookup in x.lower(), SHARED.project.index.getClassTags( - nwKeyWords.KEY_CLASS.get(kw.strip()) - ) + lambda x: lookup in x.lower(), SHARED.project.index.getKeyWordTags(kw.strip()) ))[:15] if not options: diff --git a/tests/test_core/test_core_index.py b/tests/test_core/test_core_index.py index bc9bef2c..dca4575a 100644 --- a/tests/test_core/test_core_index.py +++ b/tests/test_core/test_core_index.py @@ -789,11 +789,12 @@ def testCoreIndex_ExtractData(nwGUI, fncPath, mockRnd): assert index.getDocumentTags(cHandle) == ["jane"] assert index.getDocumentTags(None) == [] - # getClassTags - # ============ - assert index.getClassTags(None) == ["Jane", "John"] - assert index.getClassTags(nwItemClass.CHARACTER) == ["Jane", "John"] - assert index.getClassTags(nwItemClass.PLOT) == [] + # getKeyWordTags + # ============== + assert index.getKeyWordTags("@mention") == ["Jane", "John"] + assert index.getKeyWordTags("@char") == ["Jane", "John"] + assert index.getKeyWordTags("@plot") == [] + assert index.getKeyWordTags("@tag") == [] # getTagsData # ===========