core: add buffer local variable "completion_default_template" (evaluated) (closes #1600)
When this local variable is set, it overrides the value of option "weechat.completion.default_template". It is evaluated, that means the global default template can be used to append some custom completion. For example: /buffer set localvar_set_completion_default_template ${weechat.completion.default_template}|%(my_completion)
This commit is contained in:
parent
e4152c3535
commit
0294b246f6
@ -20,6 +20,7 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
|
|||||||
|
|
||||||
New features::
|
New features::
|
||||||
|
|
||||||
|
* core: add buffer local variable "completion_default_template" (evaluated) to override the value of option "weechat.completion.default_template" (issue #1600)
|
||||||
* core: add option "recreate" in command /filter
|
* core: add option "recreate" in command /filter
|
||||||
* core: add evaluation of conditions in evaluation of expressions with "eval_cond:" (issue #1582)
|
* core: add evaluation of conditions in evaluation of expressions with "eval_cond:" (issue #1582)
|
||||||
* trigger: add variable "${tg_trigger_name}" in command trigger evaluated strings (issue #1580)
|
* trigger: add variable "${tg_trigger_name}" in command trigger evaluated strings (issue #1580)
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "../core/wee-arraylist.h"
|
#include "../core/wee-arraylist.h"
|
||||||
#include "../core/wee-completion.h"
|
#include "../core/wee-completion.h"
|
||||||
#include "../core/wee-config.h"
|
#include "../core/wee-config.h"
|
||||||
|
#include "../core/wee-eval.h"
|
||||||
#include "../core/wee-hashtable.h"
|
#include "../core/wee-hashtable.h"
|
||||||
#include "../core/wee-hdata.h"
|
#include "../core/wee-hdata.h"
|
||||||
#include "../core/wee-hook.h"
|
#include "../core/wee-hook.h"
|
||||||
@ -1337,6 +1338,46 @@ gui_completion_command (struct t_gui_completion *completion)
|
|||||||
gui_completion_complete (completion);
|
gui_completion_complete (completion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Gets default completion template: from buffer local variable
|
||||||
|
* "completion_default_template" if defined, or the value of option
|
||||||
|
* "weechat.completion.default_template".
|
||||||
|
*
|
||||||
|
* Note: result must be freed after use.
|
||||||
|
*/
|
||||||
|
|
||||||
|
char *
|
||||||
|
gui_completion_get_default_template(struct t_gui_completion *completion)
|
||||||
|
{
|
||||||
|
const char *ptr_default_template;
|
||||||
|
char *value;
|
||||||
|
struct t_hashtable *pointers;
|
||||||
|
|
||||||
|
/* search buffer local variable "completion_default_template" */
|
||||||
|
ptr_default_template = hashtable_get (
|
||||||
|
completion->buffer->local_variables,
|
||||||
|
"completion_default_template");
|
||||||
|
|
||||||
|
if (!ptr_default_template)
|
||||||
|
{
|
||||||
|
/* return the global default completion template */
|
||||||
|
ptr_default_template = CONFIG_STRING(config_completion_default_template);
|
||||||
|
return strdup ((ptr_default_template) ? ptr_default_template : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* evaluate the buffer local variable */
|
||||||
|
pointers = hashtable_new (32,
|
||||||
|
WEECHAT_HASHTABLE_STRING,
|
||||||
|
WEECHAT_HASHTABLE_POINTER,
|
||||||
|
NULL, NULL);
|
||||||
|
hashtable_set (pointers, "buffer", completion->buffer);
|
||||||
|
value = eval_expression (ptr_default_template, pointers, NULL, NULL);
|
||||||
|
if (pointers)
|
||||||
|
hashtable_free (pointers);
|
||||||
|
|
||||||
|
return (value) ? value : strdup ("");
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Auto-completes: nick, filename or channel.
|
* Auto-completes: nick, filename or channel.
|
||||||
*/
|
*/
|
||||||
@ -1344,6 +1385,8 @@ gui_completion_command (struct t_gui_completion *completion)
|
|||||||
void
|
void
|
||||||
gui_completion_auto (struct t_gui_completion *completion)
|
gui_completion_auto (struct t_gui_completion *completion)
|
||||||
{
|
{
|
||||||
|
char *default_completion;
|
||||||
|
|
||||||
/* filename completion */
|
/* filename completion */
|
||||||
if ((completion->base_word[0] == '/')
|
if ((completion->base_word[0] == '/')
|
||||||
|| (completion->base_word[0] == '~'))
|
|| (completion->base_word[0] == '~'))
|
||||||
@ -1358,10 +1401,13 @@ gui_completion_auto (struct t_gui_completion *completion)
|
|||||||
/* use default template completion */
|
/* use default template completion */
|
||||||
if (completion->list->size == 0)
|
if (completion->list->size == 0)
|
||||||
{
|
{
|
||||||
|
default_completion = gui_completion_get_default_template (completion);
|
||||||
gui_completion_build_list_template (
|
gui_completion_build_list_template (
|
||||||
completion,
|
completion,
|
||||||
CONFIG_STRING(config_completion_default_template),
|
(default_completion) ? default_completion : "",
|
||||||
NULL);
|
NULL);
|
||||||
|
if (default_completion)
|
||||||
|
free (default_completion);
|
||||||
}
|
}
|
||||||
gui_completion_complete (completion);
|
gui_completion_complete (completion);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user