Mercurial > vim
comparison src/eval.c @ 685:d7e33248b9c8 v7.0206
updated for version 7.0206
author | vimboss |
---|---|
date | Fri, 24 Feb 2006 23:53:04 +0000 |
parents | 9364d114ed8d |
children | d7860ee7eb7e |
comparison
equal
deleted
inserted
replaced
684:a8caf7dd853d | 685:d7e33248b9c8 |
---|---|
14932 typval_T *argvars; | 14932 typval_T *argvars; |
14933 typval_T *rettv; | 14933 typval_T *rettv; |
14934 { | 14934 { |
14935 int nr = 1; | 14935 int nr = 1; |
14936 #ifdef FEAT_WINDOWS | 14936 #ifdef FEAT_WINDOWS |
14937 tabpage_T *tp; | |
14938 char_u *arg; | 14937 char_u *arg; |
14939 | 14938 |
14940 if (argvars[0].v_type != VAR_UNKNOWN) | 14939 if (argvars[0].v_type != VAR_UNKNOWN) |
14941 { | 14940 { |
14942 arg = get_tv_string_chk(&argvars[0]); | 14941 arg = get_tv_string_chk(&argvars[0]); |
14943 nr = 0; | 14942 nr = 0; |
14944 if (arg != NULL) | 14943 if (arg != NULL) |
14945 { | 14944 { |
14946 if (STRCMP(arg, "$") == 0) | 14945 if (STRCMP(arg, "$") == 0) |
14947 for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) | 14946 nr = tabpage_index(NULL); |
14948 ++nr; | |
14949 else | 14947 else |
14950 EMSG2(_(e_invexpr2), arg); | 14948 EMSG2(_(e_invexpr2), arg); |
14951 } | 14949 } |
14952 } | 14950 } |
14953 else | 14951 else |
14954 for (tp = first_tabpage; tp != curtab; tp = tp->tp_next) | 14952 nr = tabpage_index(curtab); |
14955 ++nr; | |
14956 #endif | 14953 #endif |
14957 rettv->vval.v_number = nr; | 14954 rettv->vval.v_number = nr; |
14958 } | 14955 } |
14959 | 14956 |
14960 | 14957 |
15614 rettv->vval.v_number = ret; | 15611 rettv->vval.v_number = ret; |
15615 } | 15612 } |
15616 | 15613 |
15617 /* | 15614 /* |
15618 * Translate a String variable into a position. | 15615 * Translate a String variable into a position. |
15616 * Returns NULL when there is an error. | |
15619 */ | 15617 */ |
15620 static pos_T * | 15618 static pos_T * |
15621 var2fpos(varp, lnum) | 15619 var2fpos(varp, lnum) |
15622 typval_T *varp; | 15620 typval_T *varp; |
15623 int lnum; /* TRUE when $ is last line */ | 15621 int lnum; /* TRUE when $ is last line */ |
15624 { | 15622 { |
15625 char_u *name; | 15623 char_u *name; |
15626 static pos_T pos; | 15624 static pos_T pos; |
15627 pos_T *pp; | 15625 pos_T *pp; |
15626 | |
15627 /* Argument can be [lnum, col]. */ | |
15628 if (varp->v_type == VAR_LIST) | |
15629 { | |
15630 list_T *l; | |
15631 listitem_T *li; | |
15632 int len; | |
15633 | |
15634 l = varp->vval.v_list; | |
15635 if (l == NULL) | |
15636 return NULL; | |
15637 | |
15638 /* Get the line number */ | |
15639 li = list_find(l, 0L); | |
15640 if (li == NULL) | |
15641 return NULL; | |
15642 pos.lnum = get_tv_number(&li->li_tv); | |
15643 if (pos.lnum <= 0 || pos.lnum > curbuf->b_ml.ml_line_count) | |
15644 return NULL; /* invalid line number */ | |
15645 | |
15646 /* Get the column number */ | |
15647 li = list_find(l, 1L); | |
15648 if (li == NULL) | |
15649 return NULL; | |
15650 pos.col = get_tv_number(&li->li_tv); | |
15651 len = (long)STRLEN(ml_get(pos.lnum)); | |
15652 if (pos.col <= 0 || ((len == 0 && pos.col > 1) | |
15653 || (len > 0 && pos.col > len))) | |
15654 return NULL; /* invalid column number */ | |
15655 | |
15656 pos.col--; | |
15657 return &pos; | |
15658 } | |
15628 | 15659 |
15629 name = get_tv_string_chk(varp); | 15660 name = get_tv_string_chk(varp); |
15630 if (name == NULL) | 15661 if (name == NULL) |
15631 return NULL; | 15662 return NULL; |
15632 if (name[0] == '.') /* cursor */ | 15663 if (name[0] == '.') /* cursor */ |