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:
+50
-25
@@ -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.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user