1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-11-03 19:37:16 -05:00

Look for URLs via regex

This commit is contained in:
Michael Vetter 2020-05-19 17:46:40 +02:00
parent 03334664fb
commit 22ca81e0b6
3 changed files with 29 additions and 16 deletions

View File

@ -3919,19 +3919,14 @@ _software_autocomplete(ProfWin *window, const char *const input, gboolean previo
static char*
_urlopen_autocomplete(ProfWin *window, const char *const input, gboolean previous)
{
if (window->type == WIN_CONSOLE){
return NULL;
}
char *result = NULL;
ProfBuffEntry *entry = buffer_get_url(window->layout->buffer, NULL);
if (entry && entry->message) {
GString *result_str = g_string_new("/urlopen ");
g_string_append(result_str, entry->message);
char *result = result_str->str;
g_string_free(result_str, FALSE);
if (window->type == WIN_CONSOLE){
return result;
}
return NULL;
result = autocomplete_param_no_with_func(input, "/urlopen", 2, buffer_get_url, previous, window->layout->buffer);
return result;
}

View File

@ -162,19 +162,37 @@ buffer_get_entry_by_id(ProfBuff buffer, const char *const id)
return NULL;
}
ProfBuffEntry*
buffer_get_url(ProfBuff buffer, const char *const id)
char*
buffer_get_url(const char *const search_str, gboolean previous, void *context)
{
Autocomplete urls_ac = autocomplete_new();
ProfBuff buffer = (ProfBuff)context;
GSList *entries = buffer->entries;
while (entries) {
ProfBuffEntry *entry = entries->data;
if (strstr(entry->message, "http://")) {
return entry;
GRegex *regex;
GMatchInfo *match_info;
regex = g_regex_new("https?://\\S+", 0, 0, NULL);
g_regex_match (regex, entry->message, 0, &match_info);
while (g_match_info_matches (match_info))
{
gchar *word = g_match_info_fetch (match_info, 0);
autocomplete_add(urls_ac, word);
g_free (word);
g_match_info_next (match_info, NULL);
}
g_match_info_free (match_info);
g_regex_unref (regex);
entries = g_slist_next(entries);
}
return NULL;
return autocomplete_complete(urls_ac, "", FALSE, previous);
}
static void

View File

@ -73,6 +73,6 @@ int buffer_size(ProfBuff buffer);
ProfBuffEntry* buffer_get_entry(ProfBuff buffer, int entry);
ProfBuffEntry* buffer_get_entry_by_id(ProfBuff buffer, const char *const id);
gboolean buffer_mark_received(ProfBuff buffer, const char *const id);
ProfBuffEntry* buffer_get_url(ProfBuff buffer, const char *const id);
char* buffer_get_url(const char *const search_str, gboolean previous, void *context);
#endif