1
0
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:
Sebastien Helleu
2007-03-20 10:18:25 +00:00
parent 25bfda26e9
commit 7f0e0b5eea
34 changed files with 1920 additions and 1608 deletions
+71 -47
View File
@@ -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);