summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNorbert Preining <[email protected]>2020-03-20 07:53:04 +0900
committerraveit65 <[email protected]>2020-03-30 15:36:31 +0200
commit9d128954c0e60b6cd8a10a55a243a070fc780fd8 (patch)
treee696debe72577e2554ae92f305a8dfac3aad6440
parent858bbdfcb12307edb0442d5d021dbd269f43663c (diff)
downloadmate-terminal-9d128954c0e60b6cd8a10a55a243a070fc780fd8.tar.bz2
mate-terminal-9d128954c0e60b6cd8a10a55a243a070fc780fd8.tar.xz
fix searching in terminal window
Make sure are regex are compiled with PCRE2_MULTILINE which is a requirement by the vte library
-rw-r--r--src/terminal-screen.c2
-rw-r--r--src/terminal-search-dialog.c27
-rw-r--r--src/terminal-search-dialog.h3
-rw-r--r--src/terminal-window.c6
4 files changed, 22 insertions, 16 deletions
diff --git a/src/terminal-screen.c b/src/terminal-screen.c
index 1ebe973..9ead8be 100644
--- a/src/terminal-screen.c
+++ b/src/terminal-screen.c
@@ -600,7 +600,7 @@ terminal_screen_class_init (TerminalScreenClass *klass)
GError *error = NULL;
skey_regexes[i] = vte_regex_new_for_match(skey_regex_patterns[i].pattern, -1,
- PCRE2_MULTILINE, &error);
+ PCRE2_MULTILINE | PCRE2_UTF | PCRE2_NO_UTF_CHECK, &error);
if (error)
{
g_message ("%s", error->message);
diff --git a/src/terminal-search-dialog.c b/src/terminal-search-dialog.c
index 7ff80e8..86d0ce7 100644
--- a/src/terminal-search-dialog.c
+++ b/src/terminal-search-dialog.c
@@ -25,6 +25,9 @@
#include "terminal-search-dialog.h"
#include "terminal-util.h"
+#define PCRE2_CODE_UNIT_WIDTH 0
+#include <pcre2.h>
+
#define HISTORY_MIN_ITEM_LEN 3
#define HISTORY_LENGTH 10
@@ -60,8 +63,8 @@ typedef struct _TerminalSearchDialogPrivate
GtkEntryCompletion *completion;
/* Cached regex */
- GRegex *regex;
- GRegexCompileFlags regex_compile_flags;
+ VteRegex *regex;
+ guint32 regex_compile_flags;
} TerminalSearchDialogPrivate;
@@ -153,7 +156,7 @@ terminal_search_dialog_private_destroy (TerminalSearchDialogPrivate *priv)
{
if (priv->regex)
- g_regex_unref (priv->regex);
+ vte_regex_unref (priv->regex);
g_object_unref (priv->store);
g_object_unref (priv->completion);
@@ -171,7 +174,7 @@ update_sensitivity (void *unused, GtkWidget *dialog)
if (priv->regex)
{
- g_regex_unref (priv->regex);
+ vte_regex_unref (priv->regex);
priv->regex = NULL;
}
@@ -336,11 +339,11 @@ terminal_search_dialog_get_search_flags (GtkWidget *dialog)
return flags;
}
-GRegex *
+VteRegex *
terminal_search_dialog_get_regex (GtkWidget *dialog)
{
TerminalSearchDialogPrivate *priv;
- GRegexCompileFlags compile_flags;
+ guint32 compile_flags;
const char *text, *pattern;
g_return_val_if_fail (GTK_IS_DIALOG (dialog), NULL);
@@ -350,13 +353,13 @@ terminal_search_dialog_get_regex (GtkWidget *dialog)
pattern = text = terminal_search_dialog_get_search_text (dialog);
- compile_flags = G_REGEX_OPTIMIZE;
+ compile_flags = PCRE2_MULTILINE | PCRE2_UTF | PCRE2_NO_UTF_CHECK;
if (!GET_FLAG (match_case_checkbutton))
- compile_flags |= G_REGEX_CASELESS;
+ compile_flags |= PCRE2_CASELESS;
if (GET_FLAG (regex_checkbutton))
- compile_flags |= G_REGEX_MULTILINE;
+ compile_flags |= PCRE2_UCP;
else
pattern = g_regex_escape_string (text, -1);
@@ -372,10 +375,12 @@ terminal_search_dialog_get_regex (GtkWidget *dialog)
{
priv->regex_compile_flags = compile_flags;
if (priv->regex)
- g_regex_unref (priv->regex);
+ vte_regex_unref (priv->regex);
/* TODO Error handling */
- priv->regex = g_regex_new (pattern, compile_flags, 0, NULL);
+ priv->regex = vte_regex_new_for_search(pattern, -1,
+ compile_flags, NULL);
+
}
if (pattern != text)
diff --git a/src/terminal-search-dialog.h b/src/terminal-search-dialog.h
index 593290a..8c87e91 100644
--- a/src/terminal-search-dialog.h
+++ b/src/terminal-search-dialog.h
@@ -22,6 +22,7 @@
#define TERMINAL_SEARCH_DIALOG_H
#include <gtk/gtk.h>
+#include <vte/vte.h>
G_BEGIN_DECLS
@@ -43,7 +44,7 @@ const gchar *terminal_search_dialog_get_search_text (GtkWidget *dialog);
TerminalSearchFlags
terminal_search_dialog_get_search_flags(GtkWidget *dialog);
-GRegex *terminal_search_dialog_get_regex (GtkWidget *dialog);
+VteRegex *terminal_search_dialog_get_regex (GtkWidget *dialog);
G_END_DECLS
diff --git a/src/terminal-window.c b/src/terminal-window.c
index 9949fdf..f61dc17 100644
--- a/src/terminal-window.c
+++ b/src/terminal-window.c
@@ -4064,7 +4064,7 @@ search_find_response_callback (GtkWidget *dialog,
TerminalWindow *window = TERMINAL_WINDOW (user_data);
TerminalWindowPrivate *priv = window->priv;
TerminalSearchFlags flags;
- GRegex *regex;
+ VteRegex *regex;
if (response != GTK_RESPONSE_ACCEPT)
return;
@@ -4077,7 +4077,7 @@ search_find_response_callback (GtkWidget *dialog,
flags = terminal_search_dialog_get_search_flags (dialog);
- vte_terminal_search_set_gregex (VTE_TERMINAL (priv->active_screen), regex, 0);
+ vte_terminal_search_set_regex (VTE_TERMINAL (priv->active_screen), regex, 0);
vte_terminal_search_set_wrap_around (VTE_TERMINAL (priv->active_screen),
(flags & TERMINAL_SEARCH_FLAG_WRAP_AROUND));
@@ -4148,7 +4148,7 @@ search_clear_highlight_callback (GtkAction *action,
if (G_UNLIKELY (!window->priv->active_screen))
return;
- vte_terminal_search_set_gregex (VTE_TERMINAL (window->priv->active_screen), NULL, 0);
+ vte_terminal_search_set_regex (VTE_TERMINAL (window->priv->active_screen), NULL, 0);
}
static void