aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/eval.c
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2017-04-02 01:00:40 +0300
committerZyX <kp-pav@yandex.ru>2017-06-27 01:34:54 +0300
commit407abb3a6c5c1c706bf8797a1431e57e97a6b797 (patch)
treef4d2171c0ea34db451b43495b284d7f73d72e98e /src/nvim/eval.c
parentd82741f8c04d003bb9925d9c46d7e07179810ed4 (diff)
downloadrneovim-407abb3a6c5c1c706bf8797a1431e57e97a6b797.tar.gz
rneovim-407abb3a6c5c1c706bf8797a1431e57e97a6b797.tar.bz2
rneovim-407abb3a6c5c1c706bf8797a1431e57e97a6b797.zip
eval,ex_getln: Add support for coloring input() prompts
Diffstat (limited to 'src/nvim/eval.c')
-rw-r--r--src/nvim/eval.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 18aa5bf763..1cc4a3eb15 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -11010,6 +11010,7 @@ void get_user_input(const typval_T *const argvars,
const char *defstr = "";
const char *cancelreturn = NULL;
const char *xp_name = NULL;
+ Callback input_callback = { .type = kCallbackNone };
char prompt_buf[NUMBUFLEN];
char defstr_buf[NUMBUFLEN];
char cancelreturn_buf[NUMBUFLEN];
@@ -11019,7 +11020,7 @@ void get_user_input(const typval_T *const argvars,
emsgf(_("E5050: {opts} must be the only argument"));
return;
}
- const dict_T *const dict = argvars[0].vval.v_dict;
+ dict_T *const dict = argvars[0].vval.v_dict;
prompt = tv_dict_get_string_buf_chk(dict, S_LEN("prompt"), prompt_buf, "");
if (prompt == NULL) {
return;
@@ -11045,6 +11046,9 @@ void get_user_input(const typval_T *const argvars,
if (xp_name == def) { // default to NULL
xp_name = NULL;
}
+ if (!tv_dict_get_callback(dict, S_LEN("highlight"), &input_callback)) {
+ return;
+ }
} else {
prompt = tv_get_string_buf_chk(&argvars[0], prompt_buf);
if (prompt == NULL) {
@@ -11103,12 +11107,16 @@ void get_user_input(const typval_T *const argvars,
stuffReadbuffSpec(defstr);
- int save_ex_normal_busy = ex_normal_busy;
+ const int save_ex_normal_busy = ex_normal_busy;
+ const Callback save_getln_input_callback = getln_input_callback;
ex_normal_busy = 0;
+ getln_input_callback = input_callback;
rettv->vval.v_string =
getcmdline_prompt(inputsecret_flag ? NUL : '@', (char_u *)p, echo_attr,
xp_type, (char_u *)xp_arg);
+ getln_input_callback = save_getln_input_callback;
ex_normal_busy = save_ex_normal_busy;
+ callback_free(&input_callback);
if (rettv->vval.v_string == NULL && cancelreturn != NULL) {
rettv->vval.v_string = (char_u *)xstrdup(cancelreturn);