diff options
| author | ZyX <kp-pav@yandex.ru> | 2017-04-02 01:00:40 +0300 | 
|---|---|---|
| committer | ZyX <kp-pav@yandex.ru> | 2017-06-27 01:34:54 +0300 | 
| commit | 407abb3a6c5c1c706bf8797a1431e57e97a6b797 (patch) | |
| tree | f4d2171c0ea34db451b43495b284d7f73d72e98e /src/nvim/eval.c | |
| parent | d82741f8c04d003bb9925d9c46d7e07179810ed4 (diff) | |
| download | rneovim-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.c | 12 | 
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);  | 
