mirror of
https://github.com/weechat/weechat.git
synced 2026-07-03 00:03:12 +02:00
Added case-sensitive search in buffer, display marker for each line matching search
This commit is contained in:
+71
-47
@@ -209,6 +209,7 @@ gui_buffer_new (t_gui_window *window, void *server, void *channel, int type,
|
||||
|
||||
/* text search */
|
||||
new_buffer->text_search = TEXT_SEARCH_DISABLED;
|
||||
new_buffer->text_search_exact = 0;
|
||||
new_buffer->text_search_input = NULL;
|
||||
|
||||
/* add buffer to buffers queue */
|
||||
@@ -647,7 +648,7 @@ gui_buffer_line_search (t_gui_line *line, char *text, int case_sensitive)
|
||||
char *data;
|
||||
int rc;
|
||||
|
||||
if (!text)
|
||||
if (!text || !text[0])
|
||||
return 0;
|
||||
|
||||
rc = 0;
|
||||
@@ -655,7 +656,7 @@ gui_buffer_line_search (t_gui_line *line, char *text, int case_sensitive)
|
||||
if (data)
|
||||
{
|
||||
if ((case_sensitive && (strstr (data, text)))
|
||||
|| (!case_sensitive && (strcasestr (data, text))))
|
||||
|| (!case_sensitive && (ascii_strcasestr (data, text))))
|
||||
rc = 1;
|
||||
free (data);
|
||||
}
|
||||
@@ -977,49 +978,6 @@ gui_buffer_move_to_number (t_gui_buffer *buffer, int number)
|
||||
gui_window_redraw_buffer (buffer);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search_start: start search in a buffer
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_search_start (t_gui_window *window)
|
||||
{
|
||||
window->buffer->text_search = TEXT_SEARCH_BACKWARD;
|
||||
if (window->buffer->text_search_input)
|
||||
{
|
||||
free (window->buffer->text_search_input);
|
||||
window->buffer->text_search_input = NULL;
|
||||
}
|
||||
if (window->buffer->input_buffer && window->buffer->input_buffer[0])
|
||||
window->buffer->text_search_input =
|
||||
strdup (window->buffer->input_buffer);
|
||||
gui_action_delete_line (window, NULL);
|
||||
gui_status_draw (window->buffer, 1);
|
||||
gui_input_draw (window->buffer, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search_stop: stop search in a buffer
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_search_stop (t_gui_window *window)
|
||||
{
|
||||
window->buffer->text_search = TEXT_SEARCH_DISABLED;
|
||||
gui_action_delete_line (window, NULL);
|
||||
if (window->buffer->text_search_input)
|
||||
{
|
||||
gui_insert_string_input (window, window->buffer->text_search_input, -1);
|
||||
free (window->buffer->text_search_input);
|
||||
window->buffer->text_search_input = NULL;
|
||||
}
|
||||
window->start_line = NULL;
|
||||
window->start_line_pos = 0;
|
||||
gui_chat_draw (window->buffer, 0);
|
||||
gui_status_draw (window->buffer, 1);
|
||||
gui_input_draw (window->buffer, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search_text: search text in a buffer
|
||||
*/
|
||||
@@ -1038,7 +996,8 @@ gui_buffer_search_text (t_gui_window *window)
|
||||
window->start_line->prev_line : window->buffer->last_line;
|
||||
while (ptr_line)
|
||||
{
|
||||
if (gui_buffer_line_search (ptr_line, window->buffer->input_buffer, 0))
|
||||
if (gui_buffer_line_search (ptr_line, window->buffer->input_buffer,
|
||||
window->buffer->text_search_exact))
|
||||
{
|
||||
window->start_line = ptr_line;
|
||||
window->start_line_pos = 0;
|
||||
@@ -1061,7 +1020,8 @@ gui_buffer_search_text (t_gui_window *window)
|
||||
window->start_line->next_line : window->buffer->lines->next_line;
|
||||
while (ptr_line)
|
||||
{
|
||||
if (gui_buffer_line_search (ptr_line, window->buffer->input_buffer, 0))
|
||||
if (gui_buffer_line_search (ptr_line, window->buffer->input_buffer,
|
||||
window->buffer->text_search_exact))
|
||||
{
|
||||
window->start_line = ptr_line;
|
||||
window->start_line_pos = 0;
|
||||
@@ -1078,6 +1038,69 @@ gui_buffer_search_text (t_gui_window *window)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search_start: start search in a buffer
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_search_start (t_gui_window *window)
|
||||
{
|
||||
window->buffer->text_search = TEXT_SEARCH_BACKWARD;
|
||||
window->buffer->text_search_exact = 0;
|
||||
if (window->buffer->text_search_input)
|
||||
{
|
||||
free (window->buffer->text_search_input);
|
||||
window->buffer->text_search_input = NULL;
|
||||
}
|
||||
if (window->buffer->input_buffer && window->buffer->input_buffer[0])
|
||||
window->buffer->text_search_input =
|
||||
strdup (window->buffer->input_buffer);
|
||||
gui_action_delete_line (window, NULL);
|
||||
gui_status_draw (window->buffer, 1);
|
||||
gui_input_draw (window->buffer, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search_restart: restart search (after input changes or exact
|
||||
* flag (un)set)
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_search_restart (t_gui_window *window)
|
||||
{
|
||||
window->start_line = NULL;
|
||||
window->start_line_pos = 0;
|
||||
window->buffer->text_search = TEXT_SEARCH_BACKWARD;
|
||||
if (!gui_buffer_search_text (window))
|
||||
{
|
||||
gui_chat_draw (window->buffer, 1);
|
||||
gui_status_draw (window->buffer, 1);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_search_stop: stop search in a buffer
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_search_stop (t_gui_window *window)
|
||||
{
|
||||
window->buffer->text_search = TEXT_SEARCH_DISABLED;
|
||||
window->buffer->text_search = 0;
|
||||
gui_action_delete_line (window, NULL);
|
||||
if (window->buffer->text_search_input)
|
||||
{
|
||||
gui_insert_string_input (window, window->buffer->text_search_input, -1);
|
||||
free (window->buffer->text_search_input);
|
||||
window->buffer->text_search_input = NULL;
|
||||
}
|
||||
window->start_line = NULL;
|
||||
window->start_line_pos = 0;
|
||||
gui_chat_draw (window->buffer, 0);
|
||||
gui_status_draw (window->buffer, 1);
|
||||
gui_input_draw (window->buffer, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_print_log: print buffer infos in log (usually for crash dump)
|
||||
*/
|
||||
@@ -1117,6 +1140,7 @@ gui_buffer_print_log (t_gui_buffer *buffer)
|
||||
weechat_log_printf (" ptr_history. . . . . . : 0x%X\n", buffer->ptr_history);
|
||||
weechat_log_printf (" num_history. . . . . . : %d\n", buffer->num_history);
|
||||
weechat_log_printf (" text_search. . . . . . : %d\n", buffer->text_search);
|
||||
weechat_log_printf (" text_search_exact. . . : %d\n", buffer->text_search_exact);
|
||||
weechat_log_printf (" text_search_input. . . : '%s'\n", buffer->text_search_input);
|
||||
weechat_log_printf (" prev_buffer. . . . . . : 0x%X\n", buffer->prev_buffer);
|
||||
weechat_log_printf (" next_buffer. . . . . . : 0x%X\n", buffer->next_buffer);
|
||||
|
||||
Reference in New Issue
Block a user