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

Add default template completion (by default: nick or IRC channel)

This commit is contained in:
Sebastien Helleu
2009-04-01 19:03:05 +02:00
parent 51af351c15
commit ff83985ef4
29 changed files with 181 additions and 57 deletions
+8
View File
@@ -144,6 +144,7 @@ struct t_config_option *config_color_nicklist_separator;
/* config, completion section */
struct t_config_option *config_completion_default_template;
struct t_config_option *config_completion_nick_completor;
struct t_config_option *config_completion_nick_first_only;
struct t_config_option *config_completion_nick_ignore_chars;
@@ -1597,6 +1598,13 @@ config_weechat_init_options ()
return 0;
}
config_completion_default_template = config_file_new_option (
weechat_config_file, ptr_section,
"default_template", "string",
N_("default completion template (please see documentation for template "
"codes and values)"),
NULL, 0, 0, "%n|%(irc_channels)", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL);
config_completion_nick_completor = config_file_new_option (
weechat_config_file, ptr_section,
"nick_completor", "string",
+1
View File
@@ -146,6 +146,7 @@ extern struct t_config_option *config_color_nicklist_prefix5;
extern struct t_config_option *config_color_nicklist_more;
extern struct t_config_option *config_color_nicklist_separator;
extern struct t_config_option *config_completion_default_template;
extern struct t_config_option *config_completion_nick_completor;
extern struct t_config_option *config_completion_nick_first_only;
extern struct t_config_option *config_completion_nick_ignore_chars;
+3 -1
View File
@@ -139,7 +139,8 @@ weelist_insert (struct t_weelist *weelist, struct t_weelist_item *item,
*/
struct t_weelist_item *
weelist_add (struct t_weelist *weelist, const char *data, const char *where)
weelist_add (struct t_weelist *weelist, const char *data, const char *where,
void *user_data)
{
struct t_weelist_item *new_item;
@@ -150,6 +151,7 @@ weelist_add (struct t_weelist *weelist, const char *data, const char *where)
if (new_item)
{
new_item->data = strdup (data);
new_item->user_data = user_data;
weelist_insert (weelist, new_item, where);
weelist->size++;
}
+3 -1
View File
@@ -23,6 +23,7 @@
struct t_weelist_item
{
char *data; /* item data */
void *user_data; /* pointer to user data */
struct t_weelist_item *prev_item; /* link to previous item */
struct t_weelist_item *next_item; /* link to next item */
};
@@ -36,7 +37,8 @@ struct t_weelist
extern struct t_weelist *weelist_new ();
extern struct t_weelist_item *weelist_add (struct t_weelist *weelist,
const char *data, const char *where);
const char *data, const char *where,
void *user_data);
extern struct t_weelist_item *weelist_search (struct t_weelist *weelist,
const char *data);
extern struct t_weelist_item *weelist_casesearch (struct t_weelist *weelist,
+23 -13
View File
@@ -77,6 +77,7 @@ gui_completion_init (struct t_gui_completion *completion,
completion->completion_list = weelist_new ();
completion->word_found = NULL;
completion->word_found_is_nick = 0;
completion->position_replace = 0;
completion->diff_size = 0;
completion->diff_length = 0;
@@ -316,7 +317,8 @@ gui_completion_list_add (struct t_gui_completion *completion, const char *word,
|| (!nick_completion && (string_strncasecmp (completion->base_word, word,
strlen (completion->base_word)) == 0)))
{
weelist_add (completion->completion_list, word, where);
weelist_add (completion->completion_list, word, where,
(nick_completion) ? (void *)1 : (void *)0);
}
}
@@ -1381,7 +1383,7 @@ gui_completion_partial_build_list (struct t_gui_completion *completion,
ptr_item = ptr_item->next_item)
{
weelist_add (weelist_temp, ptr_item->data + common_prefix_size,
WEECHAT_LIST_POS_END);
WEECHAT_LIST_POS_END, NULL);
}
while (weelist_temp->items)
@@ -1432,7 +1434,7 @@ gui_completion_complete (struct t_gui_completion *completion,
int nick_completion)
{
int length, word_found_seen, other_completion, partial_completion;
int common_prefix_size;
int common_prefix_size, item_is_nick;
struct t_weelist_item *ptr_item, *ptr_item2;
length = strlen (completion->base_word);
@@ -1482,10 +1484,11 @@ gui_completion_complete (struct t_gui_completion *completion,
while (ptr_item)
{
if ((nick_completion
item_is_nick = ((int)(ptr_item->user_data) == 1);
if ((item_is_nick
&& (gui_completion_nickncmp (completion->base_word, ptr_item->data,
length) == 0))
|| ((!nick_completion)
|| ((!item_is_nick)
&& (string_strncasecmp (completion->base_word, ptr_item->data,
length) == 0)))
{
@@ -1494,9 +1497,10 @@ gui_completion_complete (struct t_gui_completion *completion,
if (completion->word_found)
free (completion->word_found);
completion->word_found = strdup (ptr_item->data);
completion->word_found_is_nick = item_is_nick;
/* stop after first nick if user asked that */
if (nick_completion
if (item_is_nick
&& CONFIG_BOOLEAN(config_completion_nick_first_only))
{
gui_completion_stop (completion, 1);
@@ -1510,11 +1514,11 @@ gui_completion_complete (struct t_gui_completion *completion,
while (ptr_item2)
{
if ((nick_completion
if ((item_is_nick
&& (gui_completion_nickncmp (completion->base_word,
ptr_item2->data,
length) == 0))
|| ((!nick_completion)
|| ((!item_is_nick)
&& (string_strncasecmp (completion->base_word,
ptr_item2->data,
length) == 0)))
@@ -1540,6 +1544,7 @@ gui_completion_complete (struct t_gui_completion *completion,
&& (other_completion > 0))
{
completion->word_found[common_prefix_size] = '\0';
completion->word_found_is_nick = 0;
completion->add_space = 0;
completion->position = -1;
string_tolower (completion->word_found);
@@ -1579,6 +1584,7 @@ gui_completion_complete (struct t_gui_completion *completion,
{
free (completion->word_found);
completion->word_found = NULL;
completion->word_found_is_nick = 0;
gui_completion_complete (completion, nick_completion);
}
}
@@ -1643,11 +1649,14 @@ gui_completion_auto (struct t_gui_completion *completion)
return;
}
/* default: nick completion (if there's a nicklist) */
if (completion->buffer->nicklist_root)
gui_completion_nick (completion);
else
completion->context = GUI_COMPLETION_NULL;
/* use default template completion */
if (!completion->completion_list->items)
{
gui_completion_build_list_template (completion,
CONFIG_STRING(config_completion_default_template),
NULL);
}
gui_completion_complete (completion, 0);
}
/*
@@ -1668,6 +1677,7 @@ gui_completion_search (struct t_gui_completion *completion, int direction,
if (completion->word_found)
free (completion->word_found);
completion->word_found = NULL;
completion->word_found_is_nick = 0;
gui_completion_find_context (completion, data, size, pos);
completion->force_partial_completion = (direction < 0);
}
+1
View File
@@ -47,6 +47,7 @@ struct t_gui_completion
/* completion found */
char *word_found; /* word found (to replace base word) */
int word_found_is_nick; /* word found is nick? */
int position_replace; /* position where word has to be replaced */
int diff_size; /* size difference (< 0 = char(s) deleted) */
int diff_length; /* length difference (<= diff_size) */
+1 -1
View File
@@ -365,7 +365,7 @@ gui_input_complete (struct t_gui_buffer *buffer)
/* add nick completor if position 0 and completing nick */
if ((buffer->completion->base_word_pos == 0)
&& (buffer->completion->context == GUI_COMPLETION_NICK))
&& buffer->completion->word_found_is_nick)
{
if (buffer->completion->add_space)
{
+1 -1
View File
@@ -334,7 +334,7 @@ irc_channel_nick_speaking_add (struct t_irc_channel *channel,
/* add nick in list */
weechat_list_add (channel->nicks_speaking[highlight], nick_name,
WEECHAT_LIST_POS_END);
WEECHAT_LIST_POS_END, NULL);
/* reduce list size if it's too big */
size = weechat_list_size (channel->nicks_speaking[highlight]);
+1 -1
View File
@@ -278,7 +278,7 @@ jabber_muc_buddy_speaking_add (struct t_jabber_muc *muc, const char *buddy_name,
/* add buddy in list */
weechat_list_add (muc->buddies_speaking[highlight], buddy_name,
WEECHAT_LIST_POS_END);
WEECHAT_LIST_POS_END, NULL);
/* reduce list size if it's too big */
size = weechat_list_size (muc->buddies_speaking[highlight]);
+1 -1
View File
@@ -910,7 +910,7 @@ plugin_display_short_list ()
ptr_plugin = ptr_plugin->next_plugin)
{
length += strlen (ptr_plugin->name) + 2;
weelist_add (list, ptr_plugin->name, WEECHAT_LIST_POS_SORT);
weelist_add (list, ptr_plugin->name, WEECHAT_LIST_POS_SORT, NULL);
}
length++;
+9 -6
View File
@@ -550,7 +550,7 @@ weechat_lua_api_list_new (lua_State *L)
static int
weechat_lua_api_list_add (lua_State *L)
{
const char *weelist, *data, *where;
const char *weelist, *data, *where, *user_data;
char *result;
int n;
@@ -566,22 +566,25 @@ weechat_lua_api_list_add (lua_State *L)
weelist = NULL;
data = NULL;
where = NULL;
user_data = NULL;
n = lua_gettop (lua_current_interpreter);
if (n < 3)
if (n < 4)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("list_add");
LUA_RETURN_EMPTY;
}
weelist = lua_tostring (lua_current_interpreter, -3);
data = lua_tostring (lua_current_interpreter, -2);
where = lua_tostring (lua_current_interpreter, -1);
weelist = lua_tostring (lua_current_interpreter, -4);
data = lua_tostring (lua_current_interpreter, -3);
where = lua_tostring (lua_current_interpreter, -2);
user_data = lua_tostring (lua_current_interpreter, -1);
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
data,
where));
where,
script_str2ptr (user_data)));
LUA_RETURN_STRING_FREE(result);
}
+5 -3
View File
@@ -462,7 +462,7 @@ static XS (XS_weechat_api_list_new)
static XS (XS_weechat_api_list_add)
{
char *result, *weelist, *data, *where;
char *result, *weelist, *data, *where, *user_data;
dXSARGS;
/* make C compiler happy */
@@ -474,7 +474,7 @@ static XS (XS_weechat_api_list_add)
PERL_RETURN_EMPTY;
}
if (items < 3)
if (items < 4)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("list_add");
PERL_RETURN_EMPTY;
@@ -483,9 +483,11 @@ static XS (XS_weechat_api_list_add)
weelist = SvPV (ST (0), PL_na);
data = SvPV (ST (1), PL_na);
where = SvPV (ST (2), PL_na);
user_data = SvPV (ST (3), PL_na);
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
data,
where));
where,
script_str2ptr (user_data)));
PERL_RETURN_STRING_FREE(result);
}
@@ -485,7 +485,7 @@ weechat_python_api_list_new (PyObject *self, PyObject *args)
static PyObject *
weechat_python_api_list_add (PyObject *self, PyObject *args)
{
char *weelist, *data, *where, *result;
char *weelist, *data, *where, *user_data, *result;
PyObject *object;
/* make C compiler happy */
@@ -500,8 +500,9 @@ weechat_python_api_list_add (PyObject *self, PyObject *args)
weelist = NULL;
data = NULL;
where = NULL;
user_data = NULL;
if (!PyArg_ParseTuple (args, "sss", &weelist, &data, &where))
if (!PyArg_ParseTuple (args, "ssss", &weelist, &data, &where, &user_data))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("list_add");
PYTHON_RETURN_EMPTY;
@@ -509,7 +510,8 @@ weechat_python_api_list_add (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
data,
where));
where,
script_str2ptr (user_data)));
PYTHON_RETURN_STRING_FREE(result);
}
+10 -5
View File
@@ -556,9 +556,10 @@ weechat_ruby_api_list_new (VALUE class)
*/
static VALUE
weechat_ruby_api_list_add (VALUE class, VALUE weelist, VALUE data, VALUE where)
weechat_ruby_api_list_add (VALUE class, VALUE weelist, VALUE data, VALUE where,
VALUE user_data)
{
char *c_weelist, *c_data, *c_where, *result;
char *c_weelist, *c_data, *c_where, *c_user_data, *result;
/* make C compiler happy */
(void) class;
@@ -572,8 +573,9 @@ weechat_ruby_api_list_add (VALUE class, VALUE weelist, VALUE data, VALUE where)
c_weelist = NULL;
c_data = NULL;
c_where = NULL;
c_user_data = NULL;
if (NIL_P (weelist) || NIL_P (data) || NIL_P (where))
if (NIL_P (weelist) || NIL_P (data) || NIL_P (where) || NIL_P (user_data))
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("list_add");
RUBY_RETURN_EMPTY;
@@ -582,14 +584,17 @@ weechat_ruby_api_list_add (VALUE class, VALUE weelist, VALUE data, VALUE where)
Check_Type (weelist, T_STRING);
Check_Type (data, T_STRING);
Check_Type (where, T_STRING);
Check_Type (user_data, T_STRING);
c_weelist = STR2CSTR (weelist);
c_data = STR2CSTR (data);
c_where = STR2CSTR (where);
c_user_data = STR2CSTR (user_data);
result = script_ptr2str (weechat_list_add (script_str2ptr(c_weelist),
c_data,
c_where));
c_where,
script_str2ptr (c_user_data)));
RUBY_RETURN_STRING(result);
}
@@ -6590,7 +6595,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
rb_define_module_function (ruby_mWeechat, "mkdir", &weechat_ruby_api_mkdir, 2);
rb_define_module_function (ruby_mWeechat, "mkdir_parents", &weechat_ruby_api_mkdir_parents, 2);
rb_define_module_function (ruby_mWeechat, "list_new", &weechat_ruby_api_list_new, 0);
rb_define_module_function (ruby_mWeechat, "list_add", &weechat_ruby_api_list_add, 3);
rb_define_module_function (ruby_mWeechat, "list_add", &weechat_ruby_api_list_add, 4);
rb_define_module_function (ruby_mWeechat, "list_search", &weechat_ruby_api_list_search, 2);
rb_define_module_function (ruby_mWeechat, "list_casesearch", &weechat_ruby_api_list_casesearch, 2);
rb_define_module_function (ruby_mWeechat, "list_get", &weechat_ruby_api_list_get, 2);
+5 -3
View File
@@ -622,7 +622,7 @@ weechat_tcl_api_list_add (ClientData clientData, Tcl_Interp *interp,
int objc, Tcl_Obj *CONST objv[])
{
Tcl_Obj* objp;
char *result, *weelist, *data, *where;
char *result, *weelist, *data, *where, *user_data;
int i;
/* make C compiler happy */
@@ -635,7 +635,7 @@ weechat_tcl_api_list_add (ClientData clientData, Tcl_Interp *interp,
TCL_RETURN_EMPTY;
}
if (objc < 4)
if (objc < 5)
{
WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("list_add");
TCL_RETURN_EMPTY;
@@ -644,9 +644,11 @@ weechat_tcl_api_list_add (ClientData clientData, Tcl_Interp *interp,
weelist = Tcl_GetStringFromObj (objv[1], &i);
data = Tcl_GetStringFromObj (objv[2], &i);
where = Tcl_GetStringFromObj (objv[3], &i);
user_data = Tcl_GetStringFromObj (objv[4], &i);
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
data,
where));
where,
script_str2ptr (user_data)));
TCL_RETURN_STRING_FREE(result);
}
+4 -3
View File
@@ -203,7 +203,8 @@ struct t_weechat_plugin
struct t_weelist *(*list_new) ();
struct t_weelist_item *(*list_add) (struct t_weelist *weelist,
const char *data,
const char *where);
const char *where,
void *user_data);
struct t_weelist_item *(*list_search) (struct t_weelist *weelist,
const char *data);
struct t_weelist_item *(*list_casesearch) (struct t_weelist *weelist,
@@ -752,8 +753,8 @@ extern int weechat_plugin_end (struct t_weechat_plugin *plugin);
/* sorted list */
#define weechat_list_new() \
weechat_plugin->list_new()
#define weechat_list_add(__list, __string, __where) \
weechat_plugin->list_add(__list, __string, __where)
#define weechat_list_add(__list, __string, __where, __user_data) \
weechat_plugin->list_add(__list, __string, __where, __user_data)
#define weechat_list_search(__list, __string) \
weechat_plugin->list_search(__list, __string)
#define weechat_list_casesearch(__list, __string) \