From 8dd9308fa9bd283726584a861b3a0c9e9d5ebc56 Mon Sep 17 00:00:00 2001 From: BarbUk Date: Fri, 9 Jan 2026 21:44:14 +0100 Subject: [PATCH 1/2] vte_regex_jit all regex --- termite.cc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/termite.cc b/termite.cc index e03e5a3..039a070 100644 --- a/termite.cc +++ b/termite.cc @@ -1657,14 +1657,14 @@ static void set_config(GtkWindow *window, VteTerminal *vte, GtkWidget *scrollbar } if (info->clickable_url) { - for (int i = 0; i < G_N_ELEMENTS (url_regex_patterns); ++i) - { - info->tag = vte_terminal_match_add_regex(vte, - vte_regex_new_for_match(url_regex_patterns[i], - (gssize) strlen(url_regex_patterns[i]), - PCRE2_UTF | PCRE2_NO_UTF_CHECK | PCRE2_UCP | PCRE2_MULTILINE, - nullptr), - 0); + for (size_t i = 0; i < G_N_ELEMENTS(url_regex_patterns); ++i) { + VteRegex *regex = vte_regex_new_for_match( + url_regex_patterns[i], (gssize)strlen(url_regex_patterns[i]), + PCRE2_UTF | PCRE2_NO_UTF_CHECK | PCRE2_UCP | PCRE2_MULTILINE, nullptr); + vte_regex_jit(regex, PCRE2_JIT_COMPLETE, nullptr); + vte_regex_jit(regex, PCRE2_JIT_PARTIAL_SOFT, nullptr); + info->tag = vte_terminal_match_add_regex(vte, regex, 0); + vte_regex_unref(regex); } vte_terminal_match_set_cursor_name(vte, info->tag, "hand"); } else if (info->tag != -1) { From e8df9f49a8bdd55ef7b3bbb37af9532d9fe95f11 Mon Sep 17 00:00:00 2001 From: BarbUk Date: Fri, 9 Jan 2026 21:52:18 +0100 Subject: [PATCH 2/2] Search regex and URL hints regex ptimization --- termite.cc | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/termite.cc b/termite.cc index 039a070..bf8838b 100644 --- a/termite.cc +++ b/termite.cc @@ -342,7 +342,7 @@ static void launch_in_directory(VteTerminal *vte) { static void find_urls(VteTerminal *vte, search_panel_info *panel_info) { - g_autoptr(GRegex) regex = g_regex_new(url_regex, G_REGEX_CASELESS, G_REGEX_MATCH_NOTEMPTY, nullptr); + static GRegex *regex = g_regex_new(url_regex, (GRegexCompileFlags)(G_REGEX_CASELESS | G_REGEX_OPTIMIZE), G_REGEX_MATCH_NOTEMPTY, nullptr); g_autofree char* content = vte_terminal_get_text_format(vte, VTE_FORMAT_TEXT); const char *start_pos = content; @@ -1402,13 +1402,18 @@ GtkTreeModel *create_completion_model(VteTerminal *vte) { void search(VteTerminal *vte, const char *pattern, bool reverse) { auto terminal_search = reverse ? vte_terminal_search_find_previous : vte_terminal_search_find_next; - VteRegex *regex = vte_terminal_search_get_regex(vte); - if (regex) vte_regex_unref(regex); - vte_terminal_search_set_regex(vte, - vte_regex_new_for_search(pattern, + VteRegex *regex = vte_regex_new_for_search(pattern, (gssize) strlen(pattern), PCRE2_MULTILINE | PCRE2_CASELESS, - nullptr), 0); + nullptr); + if (regex) { + vte_regex_jit(regex, PCRE2_JIT_COMPLETE, nullptr); + vte_regex_jit(regex, PCRE2_JIT_PARTIAL_SOFT, nullptr); + vte_terminal_search_set_regex(vte, regex, 0); + vte_regex_unref(regex); + } else { + vte_terminal_search_set_regex(vte, nullptr, 0); + } if (!terminal_search(vte)) { vte_terminal_unselect_all(vte);