diff --git a/zulipterminal/helper.py b/zulipterminal/helper.py
index c9817fc..12f402b 100644
--- a/zulipterminal/helper.py
+++ b/zulipterminal/helper.py
@@ -535,9 +535,20 @@ def match_emoji(emoji: str, text: str) -> bool:
 
 
 def match_topics(topic_names: List[str], search_text: str) -> List[str]:
-    return [
-        name for name in topic_names if name.lower().startswith(search_text.lower())
-    ]
+    matching_topics = []
+    delimiters = "-_/"
+    trans = str.maketrans(delimiters, len(delimiters) * " ")
+    for full_topic_name in topic_names:
+        # "abc def-gh" --> ["abc def gh", "def", "gh"]
+        words_to_be_matched = [full_topic_name] + full_topic_name.translate(
+            trans
+        ).split()[1:]
+
+        for word in words_to_be_matched:
+            if word.lower().startswith(search_text.lower()):
+                matching_topics.append(full_topic_name)
+                break
+    return matching_topics
 
 
 DataT = TypeVar("DataT")

diff --git a/tests/conftest.py b/tests/conftest.py
index 07e8313..ffafd35 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -587,7 +587,14 @@ def message_history(request: Any) -> List[Dict[str, Any]]:
 
 @pytest.fixture
 def topics() -> List[str]:
-    return ["Topic 1", "This is a topic", "Hello there!"]
+    return [
+        "Topic 1",
+        "This is a topic",
+        "Hello there!",
+        "He-llo there!",
+        "Hello t/here!",
+        "Hello from out-er_space!",
+    ]
 
 
 @pytest.fixture(
diff --git a/tests/ui_tools/test_boxes.py b/tests/ui_tools/test_boxes.py
index d9fb8b1..975b14c 100644
--- a/tests/ui_tools/test_boxes.py
+++ b/tests/ui_tools/test_boxes.py
@@ -96,22 +96,39 @@ class TestWriteBox:
         [
             ("#**Stream 1>T", 0, True, "#**Stream 1>Topic 1**"),
             ("#**Stream 1>T", 1, True, "#**Stream 1>This is a topic**"),
-            ("#**Stream 1>T", 2, True, None),
-            ("#**Stream 1>T", -1, True, "#**Stream 1>This is a topic**"),
-            ("#**Stream 1>T", -2, True, "#**Stream 1>Topic 1**"),
-            ("#**Stream 1>T", -3, True, None),
+            ("#**Stream 1>T", 2, True, "#**Stream 1>Hello there!**"),
+            ("#**Stream 1>T", 3, True, "#**Stream 1>He-llo there!**"),
+            ("#**Stream 1>T", 4, True, "#**Stream 1>Hello t/here!**"),
+            ("#**Stream 1>T", 5, True, None),
+            ("#**Stream 1>T", -1, True, "#**Stream 1>Hello t/here!**"),
+            ("#**Stream 1>T", -2, True, "#**Stream 1>He-llo there!**"),
+            ("#**Stream 1>T", -3, True, "#**Stream 1>Hello there!**"),
+            ("#**Stream 1>T", -4, True, "#**Stream 1>This is a topic**"),
+            ("#**Stream 1>T", -5, True, "#**Stream 1>Topic 1**"),
+            ("#**Stream 1>T", -6, True, None),
             ("#**Stream 1>To", 0, True, "#**Stream 1>Topic 1**"),
             ("#**Stream 1>H", 0, True, "#**Stream 1>Hello there!**"),
             ("#**Stream 1>Hello ", 0, True, "#**Stream 1>Hello there!**"),
             ("#**Stream 1>", 0, True, "#**Stream 1>Topic 1**"),
             ("#**Stream 1>", 1, True, "#**Stream 1>This is a topic**"),
-            ("#**Stream 1>", -1, True, "#**Stream 1>Hello there!**"),
-            ("#**Stream 1>", -2, True, "#**Stream 1>This is a topic**"),
+            ("#**Stream 1>", 2, True, "#**Stream 1>Hello there!**"),
+            ("#**Stream 1>", 3, True, "#**Stream 1>He-llo there!**"),
+            ("#**Stream 1>", 4, True, "#**Stream 1>Hello t/here!**"),
+            ("#**Stream 1>", 5, True, "#**Stream 1>Hello from out-er_space!**"),
+            ("#**Stream 1>", 6, True, None),
+            ("#**Stream 1>", -1, True, "#**Stream 1>Hello from out-er_space!**"),
+            ("#**Stream 1>", -2, True, "#**Stream 1>Hello t/here!**"),
+            ("#**Stream 1>", -3, True, "#**Stream 1>He-llo there!**"),
+            ("#**Stream 1>", -4, True, "#**Stream 1>Hello there!**"),
+            ("#**Stream 1>", -5, True, "#**Stream 1>This is a topic**"),
+            ("#**Stream 1>", -6, True, "#**Stream 1>Topic 1**"),
+            ("#**Stream 1>", -7, True, None),
             # Fenced prefix
             ("#**Stream 1**>T", 0, True, "#**Stream 1>Topic 1**"),
             # Unfenced prefix
             ("#Stream 1>T", 0, True, "#**Stream 1>Topic 1**"),
             ("#Stream 1>T", 1, True, "#**Stream 1>This is a topic**"),
+            ("#Stream 1>T", 2, True, "#**Stream 1>Hello there!**"),
             # Invalid stream
             ("#**invalid stream>", 0, False, None),
             ("#**invalid stream**>", 0, False, None),
@@ -1306,12 +1323,30 @@ class TestWriteBox:
     @pytest.mark.parametrize(
         "text, matching_topics",
         [
-            ("", ["Topic 1", "This is a topic", "Hello there!"]),
-            ("Th", ["This is a topic"]),
+            (
+                "",
+                [
+                    "Topic 1",
+                    "This is a topic",
+                    "Hello there!",
+                    "He-llo there!",
+                    "Hello t/here!",
+                    "Hello from out-er_space!",
+                ],
+            ),
+            ("Th", ["This is a topic", "Hello there!", "He-llo there!"]),
+            ("ll", ["He-llo there!"]),
+            ("her", ["Hello t/here!"]),
+            ("er", ["Hello from out-er_space!"]),
+            ("spa", ["Hello from out-er_space!"]),
         ],
         ids=[
             "no_search_text",
             "single_word_search_text",
+            "split_in_first_word",
+            "split_in_second_word",
+            "first_split_in_third_word",
+            "second_split_in_third_word",
         ],
     )
     def test__topic_box_autocomplete(

Support multi-word matching when autocompleting topics
When autocompleting other items such as streams, we check the search term against different 'words' in the possible matches. For example, `doc` can match both `documentation` and `api documentation`, `cod` can match `code review` and `live coding`, and `term` can match both `terminal clients` and `zulip-terminal`.

For topics, we do not do so, so that `PR ` only matches topics starting with exactly those characters, not any later 'word'. You should be able to confirm this on chat.zulip.org using zulip terminal.

We should extend the current topic autocompletion logic to behave similarly to that for streams, to handle these kinds of cases - likely with the same ordering as with streams, though that may need confirming since there could be a *lot* of topics compared to streams, and we currently only show up to 10 matches. The web app logic may be useful for comparison.

The UI logic for this is in `boxes.py`, so that's a good place to start. The logic is likely common between the topic searches, but extra test cases to ensure this is working would be important. However, if the matching logic can be completely unified with topics then we may be able to remove some tests later.
tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[#**Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[#Stream tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete[single_word_search_text] tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete[split_in_first_word] tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete[split_in_second_word] tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete[first_split_in_third_word] tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete[second_split_in_third_word]
tests/ui_tools/test_boxes.py::TestWriteBox::test_init tests/ui_tools/test_boxes.py::TestWriteBox::test_not_calling_typing_method_without_recipients tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[#**invalid tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[#invalid tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[#*Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[(#**Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[&#**Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[@#**Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[@_#**Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_stream_and_topic[:#**Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_not_calling_typing_method_to_oneself[pm_only_with_oneself] tests/ui_tools/test_boxes.py::TestWriteBox::test_not_calling_typing_method_to_oneself[group_pm] tests/ui_tools/test_boxes.py::TestWriteBox::test_not_calling_send_private_message_without_recipients[ctrl tests/ui_tools/test_boxes.py::TestWriteBox::test_not_calling_send_private_message_without_recipients[meta tests/ui_tools/test_boxes.py::TestWriteBox::test__compose_attributes_reset_for_private_compose[esc] tests/ui_tools/test_boxes.py::TestWriteBox::test__compose_attributes_reset_for_stream_compose[esc] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[ctrl tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[meta tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-untidy_with_improper_formatting] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-untidy_with_extra_text] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-untidy_first_recipient_out_of_two] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-untidy_second_recipient_out_of_two] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-two_untidy_recipients] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-three_untidy_recipients] tests/ui_tools/test_boxes.py::TestWriteBox::test_tidying_recipients_on_keypresses[tab-untidy_middle_recipient_out_of_three] tests/ui_tools/test_boxes.py::TestWriteBox::test_footer_notification_on_invalid_recipients[ctrl tests/ui_tools/test_boxes.py::TestWriteBox::test_footer_notification_on_invalid_recipients[meta tests/ui_tools/test_boxes.py::TestWriteBox::test_footer_notification_on_invalid_recipients[tab-name_email_mismatch] tests/ui_tools/test_boxes.py::TestWriteBox::test_footer_notification_on_invalid_recipients[tab-no_name_specified] tests/ui_tools/test_boxes.py::TestWriteBox::test_footer_notification_on_invalid_recipients[tab-no_email_specified] tests/ui_tools/test_boxes.py::TestWriteBox::test_update_recipients[single_recipient] tests/ui_tools/test_boxes.py::TestWriteBox::test_update_recipients[multiple_recipients] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_no_prefix[Plain tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@-0-footer_text0] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@*-0-footer_text1] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@**-0-footer_text2] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@Human-0-footer_text3] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@**Human-0-footer_text4] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@_Human-0-footer_text5] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@_*Human-None-footer_text6] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@_**Human-0-footer_text7] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@Human-None-footer_text8] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[@NoMatch-None-footer_text9] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[#Stream-0-footer_text10] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[#*Stream-None-footer_text11] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[#**Stream-0-footer_text12] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[#Stream-None-footer_text13] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[#NoMatch-None-footer_text14] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[:smi-0-footer_text15] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[:smi-None-footer_text16] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_set_footer[:NoMatch-None-footer_text17] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human-0-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human-2-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human-3-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human-4-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human--1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human--2-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human--3-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human--4-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human--5-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human--6-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Human-0-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Human-1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Human-2-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Human-3-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Human-4-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@H-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Hu-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Hum-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Huma-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_H-1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Hu-1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Hum-1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Huma-1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Group-0-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Group-1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@G-0-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Gr-0-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Gro-0-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Grou-0-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@G-1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Gr-1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Gro-1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@Grou-1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-0-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-2-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-3-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-4-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-5-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-6-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-7-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-8-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-9-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@-10-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@**-0-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@**-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@**-2-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@**-5-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@**-6-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@*-0-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@*-1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@*-2-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@*-3-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@*-4-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@*-5-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-0-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-2-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-3-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-4-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-5-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_-6-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_--1-@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[(@H-0-(@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[(@H-1-(@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[-@G-0--@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[-@G-1--@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[_@H-0-_@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[_@G-0-_@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@@H-0-@@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[:@H-0-:@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[#@H-0-#@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_@H-0-@_@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[>@_H-0->@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[>@_H-1->@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@_@_H-0-@_@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@@_H-0-@@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[:@_H-0-:@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[#@_H-0-#@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@@_*H-0-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions[@@_**H-0-@@_**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions_subscribers[@-0-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions_subscribers[@-1-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions_subscribers[@-2-@**Human tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_mentions_subscribers[@--1-@*Group tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@H-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@Hu-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@Hum-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@Huma-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@Human-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@**-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@**H-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@**Hu-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@**Hum-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@**Huma-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@**Human-@] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@_-@_] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@_H-@_] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@_Hu-@_] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@_Hum-@_] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@_Huma-@_] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_user_mentions[@_Human-@_] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead0-stream_categories0] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#S-state_and_required_typeahead1-stream_categories1] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#So-state_and_required_typeahead2-stream_categories2] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Se-state_and_required_typeahead3-stream_categories3] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#St-state_and_required_typeahead4-stream_categories4] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#g-state_and_required_typeahead5-stream_categories5] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#nomatch-state_and_required_typeahead7-stream_categories7] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#ene-state_and_required_typeahead8-stream_categories8] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[[#Stream-state_and_required_typeahead9-stream_categories9] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[(#Stream-state_and_required_typeahead10-stream_categories10] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[@#Stream-state_and_required_typeahead11-stream_categories11] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[@_#Stream-state_and_required_typeahead12-stream_categories12] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[:#Stream-state_and_required_typeahead13-stream_categories13] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[##Stream-state_and_required_typeahead14-stream_categories14] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[##*Stream-state_and_required_typeahead15-stream_categories15] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[##**Stream-state_and_required_typeahead16-stream_categories16] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead17-stream_categories17] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead18-stream_categories18] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead19-stream_categories19] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead20-stream_categories20] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead21-stream_categories21] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead22-stream_categories22] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead23-stream_categories23] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#S-state_and_required_typeahead24-stream_categories24] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_streams[#Stream-state_and_required_typeahead25-stream_categories25] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:rock_o-0-:rock_on:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:rock_o-1-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:rock_o--1-:rock_on:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:rock_o--2-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:smi-0-:smile:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:smi-1-:smiley:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:smi-2-:smirk:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:jo-0-:joker:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:jo-1-:joy_cat:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:jok-0-:joker:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:-0-:happy:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:-1-:joker:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:--3-:smiley:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:--2-:smirk:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:nomatch-0-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[:nomatch--1-None] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[(:smi-0-(:smile:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[&:smi-1-&:smiley:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[@:smi-0-@:smile:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[@_:smi-0-@_:smile:] tests/ui_tools/test_boxes.py::TestWriteBox::test_generic_autocomplete_emojis[#:smi-0-#:smile:] tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete[no_search_text] tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete[single_word_search_text] tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete_with_spaces[Hu-Human tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete_with_spaces[Human tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete_with_multiple_recipients[name_search_text_with_space_after_separator] tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete_with_multiple_recipients[email_search_text_with_space_after_separator] tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete_with_multiple_recipients[name_search_text_without_space_after_separator] tests/ui_tools/test_boxes.py::TestWriteBox::test__to_box_autocomplete_with_multiple_recipients[email_search_text_without_space_after_separator] tests/ui_tools/test_boxes.py::TestWriteBox::test__stream_box_autocomplete[no_search_text] tests/ui_tools/test_boxes.py::TestWriteBox::test__stream_box_autocomplete[no_search_text_with_pinned_stream] tests/ui_tools/test_boxes.py::TestWriteBox::test__stream_box_autocomplete[single_word_search_text] tests/ui_tools/test_boxes.py::TestWriteBox::test__stream_box_autocomplete[single_word_search_text_with_pinned_stream] tests/ui_tools/test_boxes.py::TestWriteBox::test__set_stream_write_box_style_markers[web_public_stream] tests/ui_tools/test_boxes.py::TestWriteBox::test__set_stream_write_box_style_markers[private_stream] tests/ui_tools/test_boxes.py::TestWriteBox::test__set_stream_write_box_style_markers[public_stream] tests/ui_tools/test_boxes.py::TestWriteBox::test__set_stream_write_box_style_markers[invalid_stream_name] tests/ui_tools/test_boxes.py::TestWriteBox::test__stream_box_autocomplete_with_spaces[Som-Some tests/ui_tools/test_boxes.py::TestWriteBox::test__stream_box_autocomplete_with_spaces[Some tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete[no_search_text] tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete_with_spaces[Th-This tests/ui_tools/test_boxes.py::TestWriteBox::test__topic_box_autocomplete_with_spaces[This tests/ui_tools/test_boxes.py::TestWriteBox::test__process_typeaheads[fewer_than_10_typeaheads] tests/ui_tools/test_boxes.py::TestWriteBox::test__process_typeaheads[more_than_10_typeaheads] tests/ui_tools/test_boxes.py::TestWriteBox::test__process_typeaheads[invalid_state-None] tests/ui_tools/test_boxes.py::TestWriteBox::test__process_typeaheads[invalid_state-greater_than_possible_index] tests/ui_tools/test_boxes.py::TestWriteBox::test__process_typeaheads[invalid_state-less_than_possible_index] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_SEND_MESSAGE_no_topic[ctrl tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_SEND_MESSAGE_no_topic[meta tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_typeahead_mode_autocomplete_key[ctrl tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_typeahead_mode_autocomplete_key[esc-True-False-True] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_typeahead_mode_autocomplete_key[space-True-False-True] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_typeahead_mode_autocomplete_key[k-True-False-True] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-stream_name_to_topic_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-topic_to_message_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-topic_edit_only-topic_to_edit_mode_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-topic_edit_only-edit_mode_to_topic_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-message_to_stream_name_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-edit_box-stream_name_to_topic_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-edit_box-topic_to_edit_mode_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-edit_box-edit_mode_to_message_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-edit_box-message_to_stream_name_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-recipient_to_message_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_CYCLE_COMPOSE_FOCUS[tab-message_to_recipient_box] tests/ui_tools/test_boxes.py::TestWriteBox::test_keypress_MARKDOWN_HELP[meta tests/ui_tools/test_boxes.py::TestWriteBox::test_write_box_header_contents[private_message] tests/ui_tools/test_boxes.py::TestWriteBox::test_write_box_header_contents[stream_message] tests/ui_tools/test_boxes.py::TestWriteBox::test_write_box_header_contents[stream_edit_message] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_init tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_reset_search_text tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[no_text-disallow_urwid_backspace] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[no_text-disallow_unicode_backspace] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[no_text-disallow_unicode_em_space] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[no_text-allow_entry_of_x] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[no_text-allow_entry_of_delta] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[no_text-disallow_entry_of_space] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[text-allow_entry_of_space] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_valid_char[text-disallow_urwid_backspace] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_keypress_ENTER[enter-log0-False] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_keypress_ENTER[enter-log1-True] tests/ui_tools/test_boxes.py::TestPanelSearchBox::test_keypress_GO_BACK[esc]