Mercurial > vim
comparison src/eval.c @ 5796:f084024c0ddb v7.4.242
updated for version 7.4.242
Problem: getreg() does not distinguish between a NL used for a line break
and a NL used for a NUL character.
Solution: Add another argument to return a list. (ZyX)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 02 Apr 2014 19:55:10 +0200 |
parents | a63d0cd691dc |
children | 9f8fa56f1906 |
comparison
equal
deleted
inserted
replaced
5795:64e4633f0751 | 5796:f084024c0ddb |
---|---|
2456 char_u *s; | 2456 char_u *s; |
2457 | 2457 |
2458 p = get_tv_string_chk(tv); | 2458 p = get_tv_string_chk(tv); |
2459 if (p != NULL && op != NULL && *op == '.') | 2459 if (p != NULL && op != NULL && *op == '.') |
2460 { | 2460 { |
2461 s = get_reg_contents(*arg == '@' ? '"' : *arg, TRUE, TRUE); | 2461 s = get_reg_contents(*arg == '@' ? '"' : *arg, GREG_EXPR_SRC); |
2462 if (s != NULL) | 2462 if (s != NULL) |
2463 { | 2463 { |
2464 p = ptofree = concat_str(s, p); | 2464 p = ptofree = concat_str(s, p); |
2465 vim_free(s); | 2465 vim_free(s); |
2466 } | 2466 } |
5119 */ | 5119 */ |
5120 case '@': ++*arg; | 5120 case '@': ++*arg; |
5121 if (evaluate) | 5121 if (evaluate) |
5122 { | 5122 { |
5123 rettv->v_type = VAR_STRING; | 5123 rettv->v_type = VAR_STRING; |
5124 rettv->vval.v_string = get_reg_contents(**arg, TRUE, TRUE); | 5124 rettv->vval.v_string = get_reg_contents(**arg, |
5125 GREG_EXPR_SRC); | |
5125 } | 5126 } |
5126 if (**arg != NUL) | 5127 if (**arg != NUL) |
5127 ++*arg; | 5128 ++*arg; |
5128 break; | 5129 break; |
5129 | 5130 |
7968 {"getloclist", 1, 1, f_getqflist}, | 7969 {"getloclist", 1, 1, f_getqflist}, |
7969 {"getmatches", 0, 0, f_getmatches}, | 7970 {"getmatches", 0, 0, f_getmatches}, |
7970 {"getpid", 0, 0, f_getpid}, | 7971 {"getpid", 0, 0, f_getpid}, |
7971 {"getpos", 1, 1, f_getpos}, | 7972 {"getpos", 1, 1, f_getpos}, |
7972 {"getqflist", 0, 0, f_getqflist}, | 7973 {"getqflist", 0, 0, f_getqflist}, |
7973 {"getreg", 0, 2, f_getreg}, | 7974 {"getreg", 0, 3, f_getreg}, |
7974 {"getregtype", 0, 1, f_getregtype}, | 7975 {"getregtype", 0, 1, f_getregtype}, |
7975 {"gettabvar", 2, 3, f_gettabvar}, | 7976 {"gettabvar", 2, 3, f_gettabvar}, |
7976 {"gettabwinvar", 3, 4, f_gettabwinvar}, | 7977 {"gettabwinvar", 3, 4, f_gettabwinvar}, |
7977 {"getwinposx", 0, 0, f_getwinposx}, | 7978 {"getwinposx", 0, 0, f_getwinposx}, |
7978 {"getwinposy", 0, 0, f_getwinposy}, | 7979 {"getwinposy", 0, 0, f_getwinposy}, |
11797 typval_T *rettv; | 11798 typval_T *rettv; |
11798 { | 11799 { |
11799 char_u *strregname; | 11800 char_u *strregname; |
11800 int regname; | 11801 int regname; |
11801 int arg2 = FALSE; | 11802 int arg2 = FALSE; |
11803 int return_list = FALSE; | |
11802 int error = FALSE; | 11804 int error = FALSE; |
11803 | 11805 |
11804 if (argvars[0].v_type != VAR_UNKNOWN) | 11806 if (argvars[0].v_type != VAR_UNKNOWN) |
11805 { | 11807 { |
11806 strregname = get_tv_string_chk(&argvars[0]); | 11808 strregname = get_tv_string_chk(&argvars[0]); |
11807 error = strregname == NULL; | 11809 error = strregname == NULL; |
11808 if (argvars[1].v_type != VAR_UNKNOWN) | 11810 if (argvars[1].v_type != VAR_UNKNOWN) |
11811 { | |
11809 arg2 = get_tv_number_chk(&argvars[1], &error); | 11812 arg2 = get_tv_number_chk(&argvars[1], &error); |
11813 if (!error && argvars[2].v_type != VAR_UNKNOWN) | |
11814 return_list = get_tv_number_chk(&argvars[2], &error); | |
11815 } | |
11810 } | 11816 } |
11811 else | 11817 else |
11812 strregname = vimvars[VV_REG].vv_str; | 11818 strregname = vimvars[VV_REG].vv_str; |
11819 | |
11820 if (error) | |
11821 return; | |
11822 | |
11813 regname = (strregname == NULL ? '"' : *strregname); | 11823 regname = (strregname == NULL ? '"' : *strregname); |
11814 if (regname == 0) | 11824 if (regname == 0) |
11815 regname = '"'; | 11825 regname = '"'; |
11816 | 11826 |
11817 rettv->v_type = VAR_STRING; | 11827 if (return_list) |
11818 rettv->vval.v_string = error ? NULL : | 11828 { |
11819 get_reg_contents(regname, TRUE, arg2); | 11829 rettv->v_type = VAR_LIST; |
11830 rettv->vval.v_list = (list_T *)get_reg_contents(regname, | |
11831 (arg2 ? GREG_EXPR_SRC : 0) | GREG_LIST); | |
11832 } | |
11833 else | |
11834 { | |
11835 rettv->v_type = VAR_STRING; | |
11836 rettv->vval.v_string = get_reg_contents(regname, | |
11837 arg2 ? GREG_EXPR_SRC : 0); | |
11838 } | |
11820 } | 11839 } |
11821 | 11840 |
11822 /* | 11841 /* |
11823 * "getregtype()" function | 11842 * "getregtype()" function |
11824 */ | 11843 */ |
17889 f_submatch(argvars, rettv) | 17908 f_submatch(argvars, rettv) |
17890 typval_T *argvars; | 17909 typval_T *argvars; |
17891 typval_T *rettv; | 17910 typval_T *rettv; |
17892 { | 17911 { |
17893 int error = FALSE; | 17912 int error = FALSE; |
17894 char_u **match; | |
17895 char_u **s; | |
17896 listitem_T *li; | |
17897 int no; | 17913 int no; |
17898 int retList = 0; | 17914 int retList = 0; |
17899 | 17915 |
17900 no = (int)get_tv_number_chk(&argvars[0], &error); | 17916 no = (int)get_tv_number_chk(&argvars[0], &error); |
17901 if (error) | 17917 if (error) |