raveit65 72f9af5
From aac75ca18ece815b0634b85e201724f3ed3d0559 Mon Sep 17 00:00:00 2001
raveit65 72f9af5
From: Norbert Preining <norbert@preining.info>
raveit65 72f9af5
Date: Fri, 20 Mar 2020 07:53:04 +0900
raveit65 72f9af5
Subject: [PATCH] fix searching in terminal window
raveit65 72f9af5
raveit65 72f9af5
---
raveit65 72f9af5
 src/terminal-search-dialog.c | 27 ++++++++++++++++-----------
raveit65 72f9af5
 src/terminal-search-dialog.h |  3 ++-
raveit65 72f9af5
 src/terminal-window.c        |  6 +++---
raveit65 72f9af5
 3 files changed, 21 insertions(+), 15 deletions(-)
raveit65 72f9af5
raveit65 72f9af5
diff --git a/src/terminal-search-dialog.c b/src/terminal-search-dialog.c
raveit65 72f9af5
index 7ff80e8..8babb31 100644
raveit65 72f9af5
--- a/src/terminal-search-dialog.c
raveit65 72f9af5
+++ b/src/terminal-search-dialog.c
raveit65 72f9af5
@@ -25,6 +25,9 @@
raveit65 72f9af5
 #include "terminal-search-dialog.h"
raveit65 72f9af5
 #include "terminal-util.h"
raveit65 72f9af5
 
raveit65 72f9af5
+#define PCRE2_CODE_UNIT_WIDTH 0
raveit65 72f9af5
+#include <pcre2.h>
raveit65 72f9af5
+
raveit65 72f9af5
 #define HISTORY_MIN_ITEM_LEN 3
raveit65 72f9af5
 #define HISTORY_LENGTH 10
raveit65 72f9af5
 
raveit65 72f9af5
@@ -60,8 +63,8 @@ typedef struct _TerminalSearchDialogPrivate
raveit65 72f9af5
 	GtkEntryCompletion *completion;
raveit65 72f9af5
 
raveit65 72f9af5
 	/* Cached regex */
raveit65 72f9af5
-	GRegex *regex;
raveit65 72f9af5
-	GRegexCompileFlags regex_compile_flags;
raveit65 72f9af5
+	VteRegex *regex;
raveit65 72f9af5
+	guint32 regex_compile_flags;
raveit65 72f9af5
 } TerminalSearchDialogPrivate;
raveit65 72f9af5
 
raveit65 72f9af5
 
raveit65 72f9af5
@@ -153,7 +156,7 @@ terminal_search_dialog_private_destroy (TerminalSearchDialogPrivate *priv)
raveit65 72f9af5
 {
raveit65 72f9af5
 
raveit65 72f9af5
 	if (priv->regex)
raveit65 72f9af5
-		g_regex_unref (priv->regex);
raveit65 72f9af5
+		vte_regex_unref (priv->regex);
raveit65 72f9af5
 
raveit65 72f9af5
 	g_object_unref (priv->store);
raveit65 72f9af5
 	g_object_unref (priv->completion);
raveit65 72f9af5
@@ -171,7 +174,7 @@ update_sensitivity (void *unused, GtkWidget *dialog)
raveit65 72f9af5
 
raveit65 72f9af5
 	if (priv->regex)
raveit65 72f9af5
 	{
raveit65 72f9af5
-		g_regex_unref (priv->regex);
raveit65 72f9af5
+		vte_regex_unref (priv->regex);
raveit65 72f9af5
 		priv->regex = NULL;
raveit65 72f9af5
 	}
raveit65 72f9af5
 
raveit65 72f9af5
@@ -336,11 +339,11 @@ terminal_search_dialog_get_search_flags (GtkWidget *dialog)
raveit65 72f9af5
 	return flags;
raveit65 72f9af5
 }
raveit65 72f9af5
 
raveit65 72f9af5
-GRegex *
raveit65 72f9af5
+VteRegex *
raveit65 72f9af5
 terminal_search_dialog_get_regex (GtkWidget *dialog)
raveit65 72f9af5
 {
raveit65 72f9af5
 	TerminalSearchDialogPrivate *priv;
raveit65 72f9af5
-	GRegexCompileFlags compile_flags;
raveit65 72f9af5
+	guint32 compile_flags;
raveit65 72f9af5
 	const char *text, *pattern;
raveit65 72f9af5
 
raveit65 72f9af5
 	g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
raveit65 72f9af5
@@ -350,13 +353,13 @@ terminal_search_dialog_get_regex (GtkWidget *dialog)
raveit65 72f9af5
 
raveit65 72f9af5
 	pattern = text = terminal_search_dialog_get_search_text (dialog);
raveit65 72f9af5
 
raveit65 72f9af5
-	compile_flags = G_REGEX_OPTIMIZE;
raveit65 72f9af5
+	compile_flags = PCRE2_UTF | PCRE2_NO_UTF_CHECK;
raveit65 72f9af5
 
raveit65 72f9af5
 	if (!GET_FLAG (match_case_checkbutton))
raveit65 72f9af5
-		compile_flags |= G_REGEX_CASELESS;
raveit65 72f9af5
+		compile_flags |= PCRE2_CASELESS;
raveit65 72f9af5
 
raveit65 72f9af5
 	if (GET_FLAG (regex_checkbutton))
raveit65 72f9af5
-		compile_flags |= G_REGEX_MULTILINE;
raveit65 72f9af5
+		compile_flags |= PCRE2_MULTILINE;
raveit65 72f9af5
 	else
raveit65 72f9af5
 		pattern = g_regex_escape_string (text, -1);
raveit65 72f9af5
 
raveit65 72f9af5
@@ -372,10 +375,12 @@ terminal_search_dialog_get_regex (GtkWidget *dialog)
raveit65 72f9af5
 	{
raveit65 72f9af5
 		priv->regex_compile_flags = compile_flags;
raveit65 72f9af5
 		if (priv->regex)
raveit65 72f9af5
-			g_regex_unref (priv->regex);
raveit65 72f9af5
+			vte_regex_unref (priv->regex);
raveit65 72f9af5
 
raveit65 72f9af5
 		/* TODO Error handling */
raveit65 72f9af5
-		priv->regex = g_regex_new (pattern, compile_flags, 0, NULL);
raveit65 72f9af5
+		priv->regex = vte_regex_new_for_search(pattern, -1,
raveit65 72f9af5
+						       compile_flags, NULL);
raveit65 72f9af5
+
raveit65 72f9af5
 	}
raveit65 72f9af5
 
raveit65 72f9af5
 	if (pattern != text)
raveit65 72f9af5
diff --git a/src/terminal-search-dialog.h b/src/terminal-search-dialog.h
raveit65 72f9af5
index 593290a..8c87e91 100644
raveit65 72f9af5
--- a/src/terminal-search-dialog.h
raveit65 72f9af5
+++ b/src/terminal-search-dialog.h
raveit65 72f9af5
@@ -22,6 +22,7 @@
raveit65 72f9af5
 #define TERMINAL_SEARCH_DIALOG_H
raveit65 72f9af5
 
raveit65 72f9af5
 #include <gtk/gtk.h>
raveit65 72f9af5
+#include <vte/vte.h>
raveit65 72f9af5
 
raveit65 72f9af5
 G_BEGIN_DECLS
raveit65 72f9af5
 
raveit65 72f9af5
@@ -43,7 +44,7 @@ const gchar 	*terminal_search_dialog_get_search_text	(GtkWidget   *dialog);
raveit65 72f9af5
 
raveit65 72f9af5
 TerminalSearchFlags
raveit65 72f9af5
 terminal_search_dialog_get_search_flags(GtkWidget   *dialog);
raveit65 72f9af5
-GRegex		*terminal_search_dialog_get_regex	(GtkWidget   *dialog);
raveit65 72f9af5
+VteRegex	*terminal_search_dialog_get_regex	(GtkWidget   *dialog);
raveit65 72f9af5
 
raveit65 72f9af5
 G_END_DECLS
raveit65 72f9af5
 
raveit65 72f9af5
diff --git a/src/terminal-window.c b/src/terminal-window.c
raveit65 72f9af5
index 2b85468..f0d5c06 100644
raveit65 72f9af5
--- a/src/terminal-window.c
raveit65 72f9af5
+++ b/src/terminal-window.c
raveit65 72f9af5
@@ -4064,7 +4064,7 @@ search_find_response_callback (GtkWidget *dialog,
raveit65 72f9af5
     TerminalWindow *window = TERMINAL_WINDOW (user_data);
raveit65 72f9af5
     TerminalWindowPrivate *priv = window->priv;
raveit65 72f9af5
     TerminalSearchFlags flags;
raveit65 72f9af5
-    GRegex *regex;
raveit65 72f9af5
+    VteRegex *regex;
raveit65 72f9af5
 
raveit65 72f9af5
     if (response != GTK_RESPONSE_ACCEPT)
raveit65 72f9af5
         return;
raveit65 72f9af5
@@ -4077,7 +4077,7 @@ search_find_response_callback (GtkWidget *dialog,
raveit65 72f9af5
 
raveit65 72f9af5
     flags = terminal_search_dialog_get_search_flags (dialog);
raveit65 72f9af5
 
raveit65 72f9af5
-    vte_terminal_search_set_gregex (VTE_TERMINAL (priv->active_screen), regex, 0);
raveit65 72f9af5
+    vte_terminal_search_set_regex (VTE_TERMINAL (priv->active_screen), regex, 0);
raveit65 72f9af5
     vte_terminal_search_set_wrap_around (VTE_TERMINAL (priv->active_screen),
raveit65 72f9af5
                                          (flags & TERMINAL_SEARCH_FLAG_WRAP_AROUND));
raveit65 72f9af5
 
raveit65 72f9af5
@@ -4148,7 +4148,7 @@ search_clear_highlight_callback (GtkAction *action,
raveit65 72f9af5
     if (G_UNLIKELY (!window->priv->active_screen))
raveit65 72f9af5
         return;
raveit65 72f9af5
 
raveit65 72f9af5
-    vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL, 0);
raveit65 72f9af5
+    vte_terminal_search_set_regex (VTE_TERMINAL (window->priv->active_screen), NULL, 0);
raveit65 72f9af5
 }
raveit65 72f9af5
 
raveit65 72f9af5
 static void
raveit65 72f9af5
-- 
raveit65 72f9af5
2.21.1
raveit65 72f9af5