1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-09 03:03:12 +02:00

api: add support of case insensitive search and search by buffer full name in function buffer_search (bug #34318)

This commit is contained in:
Sebastien Helleu
2014-03-11 15:07:36 +01:00
parent 925ba52793
commit 9c838d2628
7 changed files with 102 additions and 46 deletions
+50 -25
View File
@@ -2035,6 +2035,40 @@ gui_buffer_search_main ()
return NULL;
}
/*
* Searches for a buffer by full name (example: "irc.freenode.#weechat").
*/
struct t_gui_buffer *
gui_buffer_search_by_full_name (const char *full_name)
{
struct t_gui_buffer *ptr_buffer;
int case_sensitive;
case_sensitive = 1;
if (strncmp (full_name, "(?i)", 4) == 0)
{
case_sensitive = 0;
full_name += 4;
}
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->full_name
&& ((case_sensitive
&& strcmp (ptr_buffer->full_name, full_name) == 0)
|| (!case_sensitive
&& string_strcasecmp (ptr_buffer->full_name, full_name) == 0)))
{
return ptr_buffer;
}
}
/* buffer not found */
return NULL;
}
/*
* Searches for a buffer by plugin and name.
*/
@@ -2043,11 +2077,21 @@ struct t_gui_buffer *
gui_buffer_search_by_name (const char *plugin, const char *name)
{
struct t_gui_buffer *ptr_buffer;
int plugin_match;
int plugin_match, case_sensitive;
if (!name || !name[0])
return gui_current_window->buffer;
if (plugin && (strcmp (plugin, "==") == 0))
return gui_buffer_search_by_full_name (name);
case_sensitive = 1;
if (strncmp (name, "(?i)", 4) == 0)
{
case_sensitive = 0;
name += 4;
}
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
@@ -2059,7 +2103,11 @@ gui_buffer_search_by_name (const char *plugin, const char *name)
if (strcmp (plugin, gui_buffer_get_plugin_name (ptr_buffer)) != 0)
plugin_match = 0;
}
if (plugin_match && (strcmp (ptr_buffer->name, name) == 0))
if (plugin_match
&& ((case_sensitive
&& strcmp (ptr_buffer->name, name) == 0)
|| (!case_sensitive
&& string_strcasecmp (ptr_buffer->name, name) == 0)))
{
return ptr_buffer;
}
@@ -2070,29 +2118,6 @@ gui_buffer_search_by_name (const char *plugin, const char *name)
return NULL;
}
/*
* Searches for a buffer by full name (example: "irc.freenode.#weechat").
*/
struct t_gui_buffer *
gui_buffer_search_by_full_name (const char *full_name)
{
struct t_gui_buffer *ptr_buffer;
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer->full_name
&& (strcmp (ptr_buffer->full_name, full_name) == 0))
{
return ptr_buffer;
}
}
/* buffer not found */
return NULL;
}
/*
* Searches for a buffer by plugin and partial name.
*/