bool Terminal::searchentry_keypress(GdkEventKey* event) { if (event->keyval == GDK_KEY_Shift_L || event->keyval == GDK_KEY_Shift_R) return false; if (event->keyval == GDK_KEY_Return || event->keyval == GDK_KEY_KP_Enter) { if (event->state & GDK_SHIFT_MASK) { if (!vte_terminal_search_find_next((VteTerminal *)vte)) { vte_terminal_unselect_all((VteTerminal *)vte); vte_terminal_search_find_next((VteTerminal *)vte); } } else { if (!vte_terminal_search_find_previous((VteTerminal *)vte)) { vte_terminal_unselect_all((VteTerminal *)vte); vte_terminal_search_find_previous((VteTerminal *)vte); } } return false; } VteRegex *regex = vte_regex_new_for_search(searchentry.get_text().c_str(), -1, PCRE2_CASELESS, NULL); vte_terminal_unselect_all((VteTerminal *)vte); vte_terminal_search_set_regex((VteTerminal *)vte, regex, 0); vte_terminal_search_find_previous((VteTerminal *)vte); return false; }
static void update_regex (IdeTerminalSearch *self) { const char *search_text; gboolean caseless; g_autofree gchar *pattern = NULL; g_autoptr(GError) error = NULL; g_assert (IDE_IS_TERMINAL_SEARCH (self)); search_text = gtk_entry_get_text (GTK_ENTRY (self->search_entry)); caseless = !gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->match_case_checkbutton)); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->regex_checkbutton))) pattern = g_strdup (search_text); else pattern = g_regex_escape_string (search_text, -1); if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (self->entire_word_checkbutton))) { char *new_pattern; new_pattern = g_strdup_printf ("\\b%s\\b", pattern); g_free (pattern); pattern = new_pattern; } if (self->regex_caseless == caseless && g_strcmp0 (self->regex_pattern, pattern) == 0) return; if (self->regex) { vte_regex_unref (self->regex); } g_clear_pointer (&self->regex_pattern, g_free); if (search_text[0] != '\0') { guint32 compile_flags; compile_flags = PCRE2_UTF | PCRE2_NO_UTF_CHECK | PCRE2_MULTILINE; if (caseless) compile_flags |= PCRE2_CASELESS; self->regex = vte_regex_new_for_search (pattern, -1, compile_flags, &error); if (self->regex != NULL) self->regex_pattern = g_steal_pointer (&pattern); } else self->regex = NULL; update_sensitivity (self); g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_REGEX]); }