diff options
| author | Norbert Preining <[email protected]> | 2020-03-18 10:33:55 +0900 | 
|---|---|---|
| committer | Pablo Barciela <[email protected]> | 2020-03-20 13:54:44 +0100 | 
| commit | c317ee81763e0a1f26368e6258cbe6bbcc89562e (patch) | |
| tree | fd341aeb5cf998977300838d1d69f99f2934d696 | |
| parent | 6387a93145e764f763e6fc2da3dbc6fc3de8acdf (diff) | |
| download | mate-terminal-c317ee81763e0a1f26368e6258cbe6bbcc89562e.tar.bz2 mate-terminal-c317ee81763e0a1f26368e6258cbe6bbcc89562e.tar.xz  | |
fix url highlighting due to deprecation of vte_terminal_match_add_gregex
| -rw-r--r-- | src/terminal-screen.c | 41 | 
1 files changed, 21 insertions, 20 deletions
diff --git a/src/terminal-screen.c b/src/terminal-screen.c index eb6e614..1ebe973 100644 --- a/src/terminal-screen.c +++ b/src/terminal-screen.c @@ -45,6 +45,9 @@  #include "eggshell.h" +#define PCRE2_CODE_UNIT_WIDTH 0 +#include <pcre2.h> +  #define URL_MATCH_CURSOR  (GDK_HAND2)  #define SKEY_MATCH_CURSOR (GDK_HAND2) @@ -158,19 +161,19 @@ typedef struct  {  	const char *pattern;  	TerminalURLFlavour flavor; -	GRegexCompileFlags flags; +	guint32 flags;  } TerminalRegexPattern;  static const TerminalRegexPattern url_regex_patterns[] =  { -	{ SCHEME "//(?:" USERPASS "\\@)?" HOST PORT URLPATH, FLAVOR_AS_IS, G_REGEX_CASELESS }, -	{ "(?:www|ftp)" HOSTCHARS_CLASS "*\\." HOST PORT URLPATH , FLAVOR_DEFAULT_TO_HTTP, G_REGEX_CASELESS  }, -	{ "(?:callto:|h323:|sip:)" USERCHARS_CLASS "[" USERCHARS ".]*(?:" PORT "/[a-z0-9]+)?\\@" HOST, FLAVOR_VOIP_CALL, G_REGEX_CASELESS  }, -	{ "(?:mailto:)?" USERCHARS_CLASS "[" USERCHARS ".]*\\@" HOSTCHARS_CLASS "+\\." HOST, FLAVOR_EMAIL, G_REGEX_CASELESS  }, -	{ "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", FLAVOR_AS_IS, G_REGEX_CASELESS  }, +	{ SCHEME "//(?:" USERPASS "\\@)?" HOST PORT URLPATH, FLAVOR_AS_IS, PCRE2_CASELESS }, +	{ "(?:www|ftp)" HOSTCHARS_CLASS "*\\." HOST PORT URLPATH , FLAVOR_DEFAULT_TO_HTTP, PCRE2_CASELESS  }, +	{ "(?:callto:|h323:|sip:)" USERCHARS_CLASS "[" USERCHARS ".]*(?:" PORT "/[a-z0-9]+)?\\@" HOST, FLAVOR_VOIP_CALL, PCRE2_CASELESS  }, +	{ "(?:mailto:)?" USERCHARS_CLASS "[" USERCHARS ".]*\\@" HOSTCHARS_CLASS "+\\." HOST, FLAVOR_EMAIL, PCRE2_CASELESS  }, +	{ "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", FLAVOR_AS_IS, PCRE2_CASELESS  },  }; -static GRegex **url_regexes; +static VteRegex **url_regexes;  static TerminalURLFlavour *url_regex_flavors;  static guint n_url_regexes; @@ -180,11 +183,11 @@ static void terminal_screen_url_match_remove (TerminalScreen *screen);  #ifdef ENABLE_SKEY  static const TerminalRegexPattern skey_regex_patterns[] =  { -	{ "s/key [[:digit:]]* [-[:alnum:]]*",         FLAVOR_AS_IS }, -	{ "otp-[a-z0-9]* [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS }, +	{ "s/key [[:digit:]]* [-[:alnum:]]*",         FLAVOR_AS_IS, 0 }, +	{ "otp-[a-z0-9]* [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS, 0 },  }; -static GRegex **skey_regexes; +static VteRegex **skey_regexes;  static guint n_skey_regexes;  static void  terminal_screen_skey_match_remove (TerminalScreen            *screen); @@ -570,16 +573,15 @@ terminal_screen_class_init (TerminalScreenClass *klass)  	/* Precompile the regexes */  	n_url_regexes = G_N_ELEMENTS (url_regex_patterns); -	url_regexes = g_new0 (GRegex*, n_url_regexes); +	url_regexes = g_new0 (VteRegex*, n_url_regexes);  	url_regex_flavors = g_new0 (TerminalURLFlavour, n_url_regexes);  	for (i = 0; i < n_url_regexes; ++i)  	{  		GError *error = NULL; -		url_regexes[i] = g_regex_new (url_regex_patterns[i].pattern, -		                              url_regex_patterns[i].flags | G_REGEX_OPTIMIZE | G_REGEX_MULTILINE, -		                              0, &error); +		url_regexes[i] = vte_regex_new_for_match(url_regex_patterns[i].pattern, -1, +				                         url_regex_patterns[i].flags | PCRE2_MULTILINE, &error);  		if (error)  		{  			g_message ("%s", error->message); @@ -591,15 +593,14 @@ terminal_screen_class_init (TerminalScreenClass *klass)  #ifdef ENABLE_SKEY  	n_skey_regexes = G_N_ELEMENTS (skey_regex_patterns); -	skey_regexes = g_new0 (GRegex*, n_skey_regexes); +	skey_regexes = g_new0 (VteRegex*, n_skey_regexes);  	for (i = 0; i < n_skey_regexes; ++i)  	{  		GError *error = NULL; -		skey_regexes[i] = g_regex_new (skey_regex_patterns[i].pattern, -		                               G_REGEX_OPTIMIZE | G_REGEX_MULTILINE, -		                               0, &error); +		skey_regexes[i] = vte_regex_new_for_match(skey_regex_patterns[i].pattern, -1, +							  PCRE2_MULTILINE, &error);  		if (error)  		{  			g_message ("%s", error->message); @@ -1014,7 +1015,7 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile,  				tag_data = g_slice_new (TagData);  				tag_data->flavor = FLAVOR_SKEY; -				tag_data->tag = vte_terminal_match_add_gregex (vte_terminal, skey_regexes[i], 0); +				tag_data->tag = vte_terminal_match_add_regex (vte_terminal, skey_regexes[i], 0);  				vte_terminal_match_set_cursor_type (vte_terminal, tag_data->tag, SKEY_MATCH_CURSOR);  				priv->match_tags = g_slist_prepend (priv->match_tags, tag_data); @@ -1059,7 +1060,7 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile,  				tag_data = g_slice_new (TagData);  				tag_data->flavor = url_regex_flavors[i]; -				tag_data->tag = vte_terminal_match_add_gregex (vte_terminal, url_regexes[i], 0); +				tag_data->tag = vte_terminal_match_add_regex (vte_terminal, url_regexes[i], 0);  				vte_terminal_match_set_cursor_type (vte_terminal, tag_data->tag, URL_MATCH_CURSOR);  				priv->match_tags = g_slist_prepend (priv->match_tags, tag_data);  | 
