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

Added new key to find previous completion (shift-tab by default)

This commit is contained in:
Sebastien Helleu
2006-05-13 00:06:18 +00:00
parent 293bf5988b
commit 78ca78855e
36 changed files with 1276 additions and 1068 deletions
+1
View File
@@ -51,6 +51,7 @@ gui_keyboard_default_bindings ()
gui_keyboard_bind ( /* RC */ "ctrl-M", "return");
gui_keyboard_bind ( /* RC */ "ctrl-J", "return");
gui_keyboard_bind ( /* tab */ "ctrl-I", "tab");
gui_keyboard_bind ( /* s-tab */ "meta2-Z", "tab_previous");
gui_keyboard_bind ( /* basckp */ "ctrl-H", "backspace");
gui_keyboard_bind ( /* basckp */ "ctrl-?", "backspace");
gui_keyboard_bind ( /* del */ "meta2-3~", "delete");
+20 -102
View File
@@ -125,114 +125,32 @@ gui_action_return (t_gui_window *window)
void
gui_action_tab (t_gui_window *window)
{
int i;
if (window->buffer->has_input)
{
completion_search (&(window->buffer->completion),
completion_search (&(window->buffer->completion), 1,
window->buffer->input_buffer,
window->buffer->input_buffer_size,
utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos));
if (window->buffer->completion.word_found)
{
/* replace word with new completed word into input buffer */
if (window->buffer->completion.diff_size > 0)
{
window->buffer->input_buffer_size +=
window->buffer->completion.diff_size;
window->buffer->input_buffer_length +=
window->buffer->completion.diff_length;
gui_input_optimize_size (window->buffer);
window->buffer->input_buffer[window->buffer->input_buffer_size] = '\0';
window->buffer->input_buffer_color_mask[window->buffer->input_buffer_size] = '\0';
for (i = window->buffer->input_buffer_size - 1;
i >= window->buffer->completion.position_replace +
(int)strlen (window->buffer->completion.word_found); i--)
{
window->buffer->input_buffer[i] =
window->buffer->input_buffer[i - window->buffer->completion.diff_size];
window->buffer->input_buffer_color_mask[i] =
window->buffer->input_buffer_color_mask[i - window->buffer->completion.diff_size];
}
}
else
{
for (i = window->buffer->completion.position_replace +
strlen (window->buffer->completion.word_found);
i < window->buffer->input_buffer_size; i++)
{
window->buffer->input_buffer[i] =
window->buffer->input_buffer[i - window->buffer->completion.diff_size];
window->buffer->input_buffer_color_mask[i] =
window->buffer->input_buffer_color_mask[i - window->buffer->completion.diff_size];
}
window->buffer->input_buffer_size +=
window->buffer->completion.diff_size;
window->buffer->input_buffer_length +=
window->buffer->completion.diff_length;
gui_input_optimize_size (window->buffer);
window->buffer->input_buffer[window->buffer->input_buffer_size] = '\0';
window->buffer->input_buffer_color_mask[window->buffer->input_buffer_size] = '\0';
}
strncpy (window->buffer->input_buffer + window->buffer->completion.position_replace,
window->buffer->completion.word_found,
strlen (window->buffer->completion.word_found));
for (i = 0; i < (int)strlen (window->buffer->completion.word_found); i++)
{
window->buffer->input_buffer_color_mask[window->buffer->completion.position_replace + i] = ' ';
}
window->buffer->input_buffer_pos =
utf8_pos (window->buffer->input_buffer,
window->buffer->completion.position_replace) +
utf8_strlen (window->buffer->completion.word_found);
/* position is < 0 this means only one word was found to complete,
so reinit to stop completion */
if (window->buffer->completion.position >= 0)
window->buffer->completion.position =
utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos);
/* add space or completor to the end of completion, if needed */
if ((window->buffer->completion.context == COMPLETION_COMMAND)
|| (window->buffer->completion.context == COMPLETION_COMMAND_ARG))
{
if (window->buffer->input_buffer[utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos)] != ' ')
gui_insert_string_input (window, " ",
window->buffer->input_buffer_pos);
if (window->buffer->completion.position >= 0)
window->buffer->completion.position++;
window->buffer->input_buffer_pos++;
}
else
{
/* add nick completor if position 0 and completing nick */
if ((window->buffer->completion.base_word_pos == 0)
&& (window->buffer->completion.context == COMPLETION_NICK))
{
if (strncmp (utf8_add_offset (window->buffer->input_buffer,
window->buffer->input_buffer_pos),
cfg_look_nick_completor, strlen (cfg_look_nick_completor)) != 0)
gui_insert_string_input (window, cfg_look_nick_completor,
window->buffer->input_buffer_pos);
if (window->buffer->completion.position >= 0)
window->buffer->completion.position += strlen (cfg_look_nick_completor);
window->buffer->input_buffer_pos += utf8_strlen (cfg_look_nick_completor);
if (window->buffer->input_buffer[utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos)] != ' ')
gui_insert_string_input (window, " ",
window->buffer->input_buffer_pos);
if (window->buffer->completion.position >= 0)
window->buffer->completion.position++;
window->buffer->input_buffer_pos++;
}
}
gui_input_draw (window->buffer, 0);
}
gui_input_complete (window);
}
}
/*
* gui_action_tab_previous: shift-tab key => find previous completion
*/
void
gui_action_tab_previous (t_gui_window *window)
{
if (window->buffer->has_input)
{
completion_search (&(window->buffer->completion), -1,
window->buffer->input_buffer,
window->buffer->input_buffer_size,
utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos));
gui_input_complete (window);
}
}
+109
View File
@@ -552,6 +552,115 @@ gui_input_move (t_gui_buffer *buffer, char *target, char *source, int size)
buffer->input_buffer_color_mask + pos_source, size);
}
/*
* gui_input_complete: complete a word in input buffer
*/
void
gui_input_complete (t_gui_window *window)
{
int i;
if (window->buffer->completion.word_found)
{
/* replace word with new completed word into input buffer */
if (window->buffer->completion.diff_size > 0)
{
window->buffer->input_buffer_size +=
window->buffer->completion.diff_size;
window->buffer->input_buffer_length +=
window->buffer->completion.diff_length;
gui_input_optimize_size (window->buffer);
window->buffer->input_buffer[window->buffer->input_buffer_size] = '\0';
window->buffer->input_buffer_color_mask[window->buffer->input_buffer_size] = '\0';
for (i = window->buffer->input_buffer_size - 1;
i >= window->buffer->completion.position_replace +
(int)strlen (window->buffer->completion.word_found); i--)
{
window->buffer->input_buffer[i] =
window->buffer->input_buffer[i - window->buffer->completion.diff_size];
window->buffer->input_buffer_color_mask[i] =
window->buffer->input_buffer_color_mask[i - window->buffer->completion.diff_size];
}
}
else
{
for (i = window->buffer->completion.position_replace +
strlen (window->buffer->completion.word_found);
i < window->buffer->input_buffer_size; i++)
{
window->buffer->input_buffer[i] =
window->buffer->input_buffer[i - window->buffer->completion.diff_size];
window->buffer->input_buffer_color_mask[i] =
window->buffer->input_buffer_color_mask[i - window->buffer->completion.diff_size];
}
window->buffer->input_buffer_size +=
window->buffer->completion.diff_size;
window->buffer->input_buffer_length +=
window->buffer->completion.diff_length;
gui_input_optimize_size (window->buffer);
window->buffer->input_buffer[window->buffer->input_buffer_size] = '\0';
window->buffer->input_buffer_color_mask[window->buffer->input_buffer_size] = '\0';
}
strncpy (window->buffer->input_buffer + window->buffer->completion.position_replace,
window->buffer->completion.word_found,
strlen (window->buffer->completion.word_found));
for (i = 0; i < (int)strlen (window->buffer->completion.word_found); i++)
{
window->buffer->input_buffer_color_mask[window->buffer->completion.position_replace + i] = ' ';
}
window->buffer->input_buffer_pos =
utf8_pos (window->buffer->input_buffer,
window->buffer->completion.position_replace) +
utf8_strlen (window->buffer->completion.word_found);
/* position is < 0 this means only one word was found to complete,
so reinit to stop completion */
if (window->buffer->completion.position >= 0)
window->buffer->completion.position =
utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos);
/* add space or completor to the end of completion, if needed */
if ((window->buffer->completion.context == COMPLETION_COMMAND)
|| (window->buffer->completion.context == COMPLETION_COMMAND_ARG))
{
if (window->buffer->input_buffer[utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos)] != ' ')
gui_insert_string_input (window, " ",
window->buffer->input_buffer_pos);
if (window->buffer->completion.position >= 0)
window->buffer->completion.position++;
window->buffer->input_buffer_pos++;
}
else
{
/* add nick completor if position 0 and completing nick */
if ((window->buffer->completion.base_word_pos == 0)
&& (window->buffer->completion.context == COMPLETION_NICK))
{
if (strncmp (utf8_add_offset (window->buffer->input_buffer,
window->buffer->input_buffer_pos),
cfg_look_nick_completor, strlen (cfg_look_nick_completor)) != 0)
gui_insert_string_input (window, cfg_look_nick_completor,
window->buffer->input_buffer_pos);
if (window->buffer->completion.position >= 0)
window->buffer->completion.position += strlen (cfg_look_nick_completor);
window->buffer->input_buffer_pos += utf8_strlen (cfg_look_nick_completor);
if (window->buffer->input_buffer[utf8_real_pos (window->buffer->input_buffer,
window->buffer->input_buffer_pos)] != ' ')
gui_insert_string_input (window, " ",
window->buffer->input_buffer_pos);
if (window->buffer->completion.position >= 0)
window->buffer->completion.position++;
window->buffer->input_buffer_pos++;
}
}
gui_input_draw (window->buffer, 0);
}
}
/*
* gui_exec_action_dcc: execute an action on a DCC after a user input
* return -1 if DCC buffer was closed due to action,
+2
View File
@@ -49,6 +49,8 @@ t_gui_key_function gui_key_functions[] =
N_("terminate line") },
{ "tab", gui_action_tab,
N_("complete word") },
{ "tab_previous", gui_action_tab_previous,
N_("find previous completion for word") },
{ "backspace", gui_action_backspace,
N_("delete previous char") },
{ "delete", gui_action_delete,
+2
View File
@@ -106,6 +106,7 @@ extern void gui_action_clipboard_copy (char *, int);
extern void gui_action_clipboard_paste (t_gui_window *);
extern void gui_action_return (t_gui_window *);
extern void gui_action_tab (t_gui_window *);
extern void gui_action_tab_previous (t_gui_window *);
extern void gui_action_backspace (t_gui_window *);
extern void gui_action_delete (t_gui_window *);
extern void gui_action_delete_previous_word (t_gui_window *);
@@ -174,6 +175,7 @@ extern void gui_printf_raw_data (void *, int, char *);
extern void gui_input_optimize_size (t_gui_buffer *);
extern void gui_input_init_color_mask (t_gui_buffer *);
extern void gui_input_move (t_gui_buffer *, char *, char *, int );
extern void gui_input_complete (t_gui_window *);
extern void gui_exec_action_dcc (t_gui_window *, char *);
extern void gui_exec_action_raw_data (t_gui_window *, char *);
extern int gui_insert_string_input (t_gui_window *, char *, int);