fix url highlighting due to deprecation of vte_terminal_match_add_gregex
parent
de8961da7d
commit
c21a7b374f
|
@ -45,6 +45,9 @@
|
||||||
|
|
||||||
#include "eggshell.h"
|
#include "eggshell.h"
|
||||||
|
|
||||||
|
#define PCRE2_CODE_UNIT_WIDTH 0
|
||||||
|
#include <pcre2.h>
|
||||||
|
|
||||||
#define URL_MATCH_CURSOR (GDK_HAND2)
|
#define URL_MATCH_CURSOR (GDK_HAND2)
|
||||||
#define SKEY_MATCH_CURSOR (GDK_HAND2)
|
#define SKEY_MATCH_CURSOR (GDK_HAND2)
|
||||||
|
|
||||||
|
@ -158,19 +161,19 @@ typedef struct
|
||||||
{
|
{
|
||||||
const char *pattern;
|
const char *pattern;
|
||||||
TerminalURLFlavour flavor;
|
TerminalURLFlavour flavor;
|
||||||
GRegexCompileFlags flags;
|
guint32 flags;
|
||||||
} TerminalRegexPattern;
|
} TerminalRegexPattern;
|
||||||
|
|
||||||
static const TerminalRegexPattern url_regex_patterns[] =
|
static const TerminalRegexPattern url_regex_patterns[] =
|
||||||
{
|
{
|
||||||
{ SCHEME "//(?:" USERPASS "\\@)?" HOST PORT URLPATH, 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, G_REGEX_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, G_REGEX_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, G_REGEX_CASELESS },
|
{ "(?:mailto:)?" USERCHARS_CLASS "[" USERCHARS ".]*\\@" HOSTCHARS_CLASS "+\\." HOST, FLAVOR_EMAIL, PCRE2_CASELESS },
|
||||||
{ "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", FLAVOR_AS_IS, G_REGEX_CASELESS },
|
{ "news:[[:alnum:]\\Q^_{|}~!\"#$%&'()*+,./;:=?`\\E]+", FLAVOR_AS_IS, PCRE2_CASELESS },
|
||||||
};
|
};
|
||||||
|
|
||||||
static GRegex **url_regexes;
|
static VteRegex **url_regexes;
|
||||||
static TerminalURLFlavour *url_regex_flavors;
|
static TerminalURLFlavour *url_regex_flavors;
|
||||||
static guint n_url_regexes;
|
static guint n_url_regexes;
|
||||||
|
|
||||||
|
@ -180,11 +183,11 @@ static void terminal_screen_url_match_remove (TerminalScreen *screen);
|
||||||
#ifdef ENABLE_SKEY
|
#ifdef ENABLE_SKEY
|
||||||
static const TerminalRegexPattern skey_regex_patterns[] =
|
static const TerminalRegexPattern skey_regex_patterns[] =
|
||||||
{
|
{
|
||||||
{ "s/key [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS },
|
{ "s/key [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS, 0 },
|
||||||
{ "otp-[a-z0-9]* [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS },
|
{ "otp-[a-z0-9]* [[:digit:]]* [-[:alnum:]]*", FLAVOR_AS_IS, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static GRegex **skey_regexes;
|
static VteRegex **skey_regexes;
|
||||||
static guint n_skey_regexes;
|
static guint n_skey_regexes;
|
||||||
|
|
||||||
static void terminal_screen_skey_match_remove (TerminalScreen *screen);
|
static void terminal_screen_skey_match_remove (TerminalScreen *screen);
|
||||||
|
@ -570,16 +573,15 @@ terminal_screen_class_init (TerminalScreenClass *klass)
|
||||||
|
|
||||||
/* Precompile the regexes */
|
/* Precompile the regexes */
|
||||||
n_url_regexes = G_N_ELEMENTS (url_regex_patterns);
|
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);
|
url_regex_flavors = g_new0 (TerminalURLFlavour, n_url_regexes);
|
||||||
|
|
||||||
for (i = 0; i < n_url_regexes; ++i)
|
for (i = 0; i < n_url_regexes; ++i)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
url_regexes[i] = g_regex_new (url_regex_patterns[i].pattern,
|
url_regexes[i] = vte_regex_new_for_match(url_regex_patterns[i].pattern, -1,
|
||||||
url_regex_patterns[i].flags | G_REGEX_OPTIMIZE | G_REGEX_MULTILINE,
|
url_regex_patterns[i].flags | PCRE2_MULTILINE, &error);
|
||||||
0, &error);
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
g_message ("%s", error->message);
|
g_message ("%s", error->message);
|
||||||
|
@ -591,15 +593,14 @@ terminal_screen_class_init (TerminalScreenClass *klass)
|
||||||
|
|
||||||
#ifdef ENABLE_SKEY
|
#ifdef ENABLE_SKEY
|
||||||
n_skey_regexes = G_N_ELEMENTS (skey_regex_patterns);
|
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)
|
for (i = 0; i < n_skey_regexes; ++i)
|
||||||
{
|
{
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
skey_regexes[i] = g_regex_new (skey_regex_patterns[i].pattern,
|
skey_regexes[i] = vte_regex_new_for_match(skey_regex_patterns[i].pattern, -1,
|
||||||
G_REGEX_OPTIMIZE | G_REGEX_MULTILINE,
|
PCRE2_MULTILINE, &error);
|
||||||
0, &error);
|
|
||||||
if (error)
|
if (error)
|
||||||
{
|
{
|
||||||
g_message ("%s", error->message);
|
g_message ("%s", error->message);
|
||||||
|
@ -1014,7 +1015,7 @@ terminal_screen_profile_notify_cb (TerminalProfile *profile,
|
||||||
|
|
||||||
tag_data = g_slice_new (TagData);
|
tag_data = g_slice_new (TagData);
|
||||||
tag_data->flavor = FLAVOR_SKEY;
|
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);
|
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);
|
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 = g_slice_new (TagData);
|
||||||
tag_data->flavor = url_regex_flavors[i];
|
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);
|
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);
|
priv->match_tags = g_slist_prepend (priv->match_tags, tag_data);
|
||||||
|
|
Loading…
Reference in New Issue