static int button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data) { VteTerminal *terminal; char *match; int tag; GtkBorder *inner_border; int char_width, char_height; switch (event->button) { case 3: terminal = VTE_TERMINAL(widget); gtk_widget_style_get (widget, "inner-border", &inner_border, NULL); char_width = vte_terminal_get_char_width (terminal); char_height = vte_terminal_get_char_height (terminal); match = vte_terminal_match_check(terminal, (event->x - (inner_border ? inner_border->left : 0)) / char_width, (event->y - (inner_border ? inner_border->top : 0)) / char_height, &tag); gtk_border_free (inner_border); if (match != NULL) { g_print("Matched `%s' (%d).\n", match, tag); g_free(match); if (GPOINTER_TO_INT(data) != 0) { vte_terminal_match_remove(terminal, tag); } } break; case 1: case 2: default: break; } return FALSE; }
static VALUE term_match_remove(VALUE self, VALUE tag) { vte_terminal_match_remove(RVAL2TERM(self), NUM2INT(tag)); return Qnil; }
static VALUE rg_match_remove(VALUE self, VALUE tag) { vte_terminal_match_remove(_SELF(self), NUM2INT(tag)); return self; }
static int button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data) { VteTerminal *terminal; char *match; int tag; GtkBorder padding; gboolean has_extra_match; char *extra_match = NULL; switch (event->button) { case 3: terminal = VTE_TERMINAL(widget); gtk_style_context_get_padding(gtk_widget_get_style_context(widget), gtk_widget_get_state_flags(widget), &padding); match = vte_terminal_match_check_event(terminal, (GdkEvent*)event, &tag); if (match != NULL) { g_print("Matched `%s' (%d).\n", match, tag); g_free(match); if (GPOINTER_TO_INT(data) != 0) { vte_terminal_match_remove(terminal, tag); } } #ifdef WITH_PCRE2 if (!use_gregex) { VteRegex *regex = vte_regex_new("\\d+", -1, PCRE2_UTF, NULL); has_extra_match = vte_terminal_event_check_regex_simple(terminal, (GdkEvent*)event, ®ex, 1, 0, &extra_match); vte_regex_unref(regex); } else #endif { GRegex *regex = g_regex_new("\\d+", 0, 0, NULL); has_extra_match = vte_terminal_event_check_gregex_simple(terminal, (GdkEvent*)event, ®ex, 1, 0, &extra_match); g_regex_unref(regex); } if (has_extra_match) g_print("Extra regex match: %s\n", extra_match); else g_print("Extra regex didn't match\n"); g_free(extra_match); break; case 1: case 2: default: break; } return FALSE; }