diff options
Diffstat (limited to 'src/nvim/eval.c')
| -rw-r--r-- | src/nvim/eval.c | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 7b620a03e6..879600b9b1 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -420,6 +420,7 @@ static struct vimvar { VV(VV_TYPE_DICT, "t_dict", VAR_NUMBER, VV_RO), VV(VV_TYPE_FLOAT, "t_float", VAR_NUMBER, VV_RO), VV(VV_TYPE_BOOL, "t_bool", VAR_NUMBER, VV_RO), + VV(VV_ECHOSPACE, "echospace", VAR_NUMBER, VV_RO), VV(VV_EXITING, "exiting", VAR_NUMBER, VV_RO), }; #undef VV @@ -636,6 +637,8 @@ void eval_init(void) set_vim_var_special(VV_NULL, kSpecialVarNull); set_vim_var_special(VV_EXITING, kSpecialVarNull); + set_vim_var_nr(VV_ECHOSPACE, sc_col - 1); + set_reg_var(0); // default for v:register is not 0 but '"' } @@ -7354,14 +7357,19 @@ static buf_T * get_buf_arg(typval_T *arg) */ static void f_bufname(typval_T *argvars, typval_T *rettv, FunPtr fptr) { + const buf_T *buf; rettv->v_type = VAR_STRING; rettv->vval.v_string = NULL; - if (!tv_check_str_or_nr(&argvars[0])) { - return; + if (argvars[0].v_type == VAR_UNKNOWN) { + buf = curbuf; + } else { + if (!tv_check_str_or_nr(&argvars[0])) { + return; + } + emsg_off++; + buf = tv_get_buf(&argvars[0], false); + emsg_off--; } - emsg_off++; - const buf_T *const buf = tv_get_buf(&argvars[0], false); - emsg_off--; if (buf != NULL && buf->b_fname != NULL) { rettv->vval.v_string = (char_u *)xstrdup((char *)buf->b_fname); } @@ -7372,15 +7380,21 @@ static void f_bufname(typval_T *argvars, typval_T *rettv, FunPtr fptr) */ static void f_bufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr) { + const buf_T *buf; bool error = false; rettv->vval.v_number = -1; - if (!tv_check_str_or_nr(&argvars[0])) { - return; + + if (argvars[0].v_type == VAR_UNKNOWN) { + buf = curbuf; + } else { + if (!tv_check_str_or_nr(&argvars[0])) { + return; + } + emsg_off++; + buf = tv_get_buf(&argvars[0], false); + emsg_off--; } - emsg_off++; - const buf_T *buf = tv_get_buf(&argvars[0], false); - emsg_off--; // If the buffer isn't found and the second argument is not zero create a // new buffer. @@ -15209,6 +15223,7 @@ static void set_buffer_lines(buf_T *buf, linenr_T lnum_arg, bool append, } } check_cursor_col(); + update_topline(); } if (!is_curbuf) { |