From: edyfox Date: Thu, 18 Mar 2010 05:06:11 +0000 (+0000) Subject: Merged from the latest developing branch. X-Git-Url: https://repo.or.cz/w/MacVim.git/commitdiff_plain/bf87c2bc45d4181f15dfafddcd9f4d44c2675434 Merged from the latest developing branch. git-svn-id: https://vim.svn.sourceforge.net/svnroot/vim/trunk@1813 2a77ed30-b011-0410-a7ad-c7884a0aa172 --- diff --git a/src/Make_ming.mak b/src/Make_ming.mak index 0a917890..19896e23 100644 --- a/src/Make_ming.mak +++ b/src/Make_ming.mak @@ -215,12 +215,14 @@ endif ifndef RUBY_PLATFORM ifeq ($(RUBY_VER), 16) RUBY_PLATFORM = i586-mswin32 -else ifneq ("X$(wildcard, $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32)", X) +else +ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),) RUBY_PLATFORM = i386-mingw32 else RUBY_PLATFORM = i386-mswin32 endif endif +endif ifndef RUBY_INSTALL_NAME ifeq ($(RUBY_VER), 16) diff --git a/src/eval.c b/src/eval.c index f9babb3f..ad127b5b 100644 --- a/src/eval.c +++ b/src/eval.c @@ -19103,6 +19103,14 @@ set_var(name, tv, copy) hashtab_T *ht; char_u *p; + ht = find_var_ht(name, &varname); + if (ht == NULL || *varname == NUL) + { + EMSG2(_(e_illvar), name); + return; + } + v = find_var_in_ht(ht, varname, TRUE); + if (tv->v_type == VAR_FUNC) { if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':') @@ -19112,7 +19120,10 @@ set_var(name, tv, copy) EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name); return; } - if (function_exists(name)) + /* Don't allow hiding a function. When "v" is not NULL we migth be + * assigning another function to the same var, the type is checked + * below. */ + if (v == NULL && function_exists(name)) { EMSG2(_("E705: Variable name conflicts with existing function: %s"), name); @@ -19120,14 +19131,6 @@ set_var(name, tv, copy) } } - ht = find_var_ht(name, &varname); - if (ht == NULL || *varname == NUL) - { - EMSG2(_(e_illvar), name); - return; - } - - v = find_var_in_ht(ht, varname, TRUE); if (v != NULL) { /* existing variable, need to clear the value */ diff --git a/src/ex_getln.c b/src/ex_getln.c index 0f0f1707..dea4b134 100644 --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -3948,8 +3948,12 @@ showmatches(xp, wildmenu) || xp->xp_context == EXPAND_SHELLCMD || xp->xp_context == EXPAND_BUFFERS) { - /* highlight directories */ - j = (mch_isdir(files_found[k])); + char_u *halved_slash; + + /* highlight directories */ + halved_slash = backslash_halve_save(files_found[k]); + j = mch_isdir(halved_slash); + vim_free(halved_slash); if (showtail) p = L_SHOWFILE(k); else diff --git a/src/fold.c b/src/fold.c index a23a35c2..c88e8f79 100644 --- a/src/fold.c +++ b/src/fold.c @@ -1053,15 +1053,14 @@ find_wl_entry(win, lnum) { int i; - if (win->w_lines_valid > 0) - for (i = 0; i < win->w_lines_valid; ++i) - if (win->w_lines[i].wl_valid) - { - if (lnum < win->w_lines[i].wl_lnum) - return -1; - if (lnum <= win->w_lines[i].wl_lastlnum) - return i; - } + for (i = 0; i < win->w_lines_valid; ++i) + if (win->w_lines[i].wl_valid) + { + if (lnum < win->w_lines[i].wl_lnum) + return -1; + if (lnum <= win->w_lines[i].wl_lastlnum) + return i; + } return -1; } diff --git a/src/if_ruby.c b/src/if_ruby.c index 802e1c1c..41cb7917 100644 --- a/src/if_ruby.c +++ b/src/if_ruby.c @@ -53,6 +53,11 @@ # undef _WIN32_WINNT #endif +#if (defined(RUBY_VERSION) && RUBY_VERSION >= 19) \ + || (defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19) +# define RUBY19_OR_LATER 1 +#endif + #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 /* Ruby 1.9 defines a number of static functions which use rb_num2long and * rb_int2big */ @@ -61,7 +66,7 @@ #endif #include -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER # include #endif @@ -172,8 +177,7 @@ static void ruby_vim_init(void); # define rb_ary_new dll_rb_ary_new # define rb_ary_push dll_rb_ary_push #endif -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 \ - || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER # define rb_errinfo dll_rb_errinfo #else # define ruby_errinfo (*dll_ruby_errinfo) @@ -185,12 +189,13 @@ static void ruby_vim_init(void); # define rb_w32_snprintf dll_rb_w32_snprintf #endif -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER # define ruby_script dll_ruby_script # define rb_enc_find_index dll_rb_enc_find_index # define rb_enc_find dll_rb_enc_find # define rb_enc_str_new dll_rb_enc_str_new # define rb_sprintf dll_rb_sprintf +# define ruby_init_stack dll_ruby_init_stack #endif /* @@ -240,8 +245,7 @@ static VALUE (*dll_rb_str_cat) (VALUE, const char*, long); static VALUE (*dll_rb_str_concat) (VALUE, VALUE); static VALUE (*dll_rb_str_new) (const char*, long); static VALUE (*dll_rb_str_new2) (const char*); -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 \ - || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER static VALUE (*dll_rb_errinfo) (void); #else static VALUE *dll_ruby_errinfo; @@ -255,22 +259,23 @@ static VALUE (*dll_rb_float_new) (double); static VALUE (*dll_rb_ary_new) (void); static VALUE (*dll_rb_ary_push) (VALUE, VALUE); #endif -#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER static VALUE (*dll_rb_int2big)(SIGNED_VALUE); #endif #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18 static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...); #endif -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER static void (*dll_ruby_script) (const char*); static int (*dll_rb_enc_find_index) (const char*); static rb_encoding* (*dll_rb_enc_find) (const char*); static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*); static VALUE (*dll_rb_sprintf) (const char*, ...); +static void (*ruby_init_stack)(VALUE*); #endif -#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER static SIGNED_VALUE rb_num2long_stub(VALUE x) { return dll_rb_num2long(x); @@ -336,8 +341,7 @@ static struct {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat}, {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new}, {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2}, -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 \ - || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo}, #else {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo}, @@ -360,15 +364,14 @@ static struct {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new}, {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push}, #endif -#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big}, -#endif -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 {"ruby_script", (RUBY_PROC*)&dll_ruby_script}, {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index}, {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find}, {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new}, {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf}, + {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack}, #endif {"", NULL}, }; @@ -467,7 +470,7 @@ void ex_ruby(exarg_T *eap) static VALUE vim_str2rb_enc_str(const char *s) { -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER int isnum; long lval; char_u *sval; @@ -489,7 +492,7 @@ vim_str2rb_enc_str(const char *s) static VALUE eval_enc_string_protect(const char *str, int *state) { -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER int isnum; long lval; char_u *sval; @@ -591,16 +594,16 @@ static int ensure_ruby_initialized(void) char *argv[] = {"gvim.exe"}; NtInitialize(&argc, &argv); #endif -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER RUBY_INIT_STACK; #endif ruby_init(); -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER ruby_script("vim-ruby"); #endif ruby_init_loadpath(); ruby_io_init(); -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 +#ifdef RUBY19_OR_LATER rb_enc_find_index("encdb"); #endif ruby_vim_init(); @@ -657,8 +660,7 @@ static void error_print(int state) break; case TAG_RAISE: case TAG_FATAL: -#if defined(RUBY_VERSION) && RUBY_VERSION >= 19 \ - || defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 19 +#ifdef RUBY19_OR_LATER eclass = CLASS_OF(rb_errinfo()); einfo = rb_obj_as_string(rb_errinfo()); #else @@ -720,56 +722,57 @@ static VALUE vim_to_ruby(typval_T *tv) if (tv->v_type == VAR_STRING) { - result = rb_str_new2((char *)tv->vval.v_string); + result = rb_str_new2((char *)(tv->vval.v_string == NULL + ? "" : tv->vval.v_string)); } else if (tv->v_type == VAR_NUMBER) { - result = INT2NUM(tv->vval.v_number); + result = INT2NUM(tv->vval.v_number); } # ifdef FEAT_FLOAT else if (tv->v_type == VAR_FLOAT) { - result = rb_float_new(tv->vval.v_float); + result = rb_float_new(tv->vval.v_float); } # endif else if (tv->v_type == VAR_LIST) { - list_T *list = tv->vval.v_list; - listitem_T *curr; - - result = rb_ary_new(); - - if (list != NULL) - { - for (curr = list->lv_first; curr != NULL; curr = curr->li_next) - { - rb_ary_push(result, vim_to_ruby(&curr->li_tv)); - } - } + list_T *list = tv->vval.v_list; + listitem_T *curr; + + result = rb_ary_new(); + + if (list != NULL) + { + for (curr = list->lv_first; curr != NULL; curr = curr->li_next) + { + rb_ary_push(result, vim_to_ruby(&curr->li_tv)); + } + } } else if (tv->v_type == VAR_DICT) { - result = rb_hash_new(); - - if (tv->vval.v_dict != NULL) - { - hashtab_T *ht = &tv->vval.v_dict->dv_hashtab; - long_u todo = ht->ht_used; - hashitem_T *hi; - dictitem_T *di; - - for (hi = ht->ht_array; todo > 0; ++hi) - { - if (!HASHITEM_EMPTY(hi)) - { - --todo; - - di = dict_lookup(hi); - rb_hash_aset(result, rb_str_new2((char *)hi->hi_key), + result = rb_hash_new(); + + if (tv->vval.v_dict != NULL) + { + hashtab_T *ht = &tv->vval.v_dict->dv_hashtab; + long_u todo = ht->ht_used; + hashitem_T *hi; + dictitem_T *di; + + for (hi = ht->ht_array; todo > 0; ++hi) + { + if (!HASHITEM_EMPTY(hi)) + { + --todo; + + di = dict_lookup(hi); + rb_hash_aset(result, rb_str_new2((char *)hi->hi_key), vim_to_ruby(&di->di_tv)); - } - } - } + } + } + } } /* else return Qnil; */ return result; @@ -785,7 +788,7 @@ static VALUE vim_evaluate(VALUE self UNUSED, VALUE str) tv = eval_expr((char_u *)StringValuePtr(str), NULL); if (tv == NULL) { - return Qnil; + return Qnil; } result = vim_to_ruby(tv); diff --git a/src/normal.c b/src/normal.c index fade0fc3..8b9fea76 100644 --- a/src/normal.c +++ b/src/normal.c @@ -5526,11 +5526,11 @@ nv_ident(cap) break; default: + tag_cmd = TRUE; if (curbuf->b_help) STRCPY(buf, "he! "); else { - tag_cmd = TRUE; if (g_cmd) STRCPY(buf, "tj "); else diff --git a/src/popupmnu.c b/src/popupmnu.c index bef9dd5e..9dce3784 100644 --- a/src/popupmnu.c +++ b/src/popupmnu.c @@ -640,7 +640,7 @@ pum_set_selected(n, repeat) curbuf->b_changed = 0; curbuf->b_p_ma = FALSE; - curwin->w_cursor.lnum = 0; + curwin->w_cursor.lnum = 1; curwin->w_cursor.col = 0; if (curwin != curwin_save && win_valid(curwin_save)) diff --git a/src/version.c b/src/version.c index c799bd8a..c625dffa 100644 --- a/src/version.c +++ b/src/version.c @@ -682,6 +682,22 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 402, +/**/ + 401, +/**/ + 400, +/**/ + 399, +/**/ + 398, +/**/ + 397, +/**/ + 396, +/**/ + 395, +/**/ 394, /**/ 393, diff --git a/src/window.c b/src/window.c index 08457683..cc114cca 100644 --- a/src/window.c +++ b/src/window.c @@ -991,28 +991,28 @@ win_split_ins(size, flags, newwin, dir) wp->w_p_scr = curwin->w_p_scr; if (need_status) { - --oldwin->w_height; + win_new_height(oldwin, oldwin->w_height - 1); oldwin->w_status_height = need_status; } if (flags & (WSP_TOP | WSP_BOT)) { /* set height and row of new window to full height */ wp->w_winrow = tabline_height(); - wp->w_height = curfrp->fr_height - (p_ls > 0); + win_new_height(wp, curfrp->fr_height - (p_ls > 0)); wp->w_status_height = (p_ls > 0); } else { /* height and row of new window is same as current window */ wp->w_winrow = oldwin->w_winrow; - wp->w_height = oldwin->w_height; + win_new_height(wp, oldwin->w_height); wp->w_status_height = oldwin->w_status_height; } frp->fr_height = curfrp->fr_height; /* "new_size" of the current window goes to the new window, use * one column for the vertical separator */ - wp->w_width = new_size; + win_new_width(wp, new_size); if (before) wp->w_vsep_width = 1; else @@ -1049,13 +1049,13 @@ win_split_ins(size, flags, newwin, dir) if (flags & (WSP_TOP | WSP_BOT)) { wp->w_wincol = 0; - wp->w_width = Columns; + win_new_width(wp, Columns); wp->w_vsep_width = 0; } else { wp->w_wincol = oldwin->w_wincol; - wp->w_width = oldwin->w_width; + win_new_width(wp, oldwin->w_width); wp->w_vsep_width = oldwin->w_vsep_width; } frp->fr_width = curfrp->fr_width; @@ -1111,7 +1111,7 @@ win_split_ins(size, flags, newwin, dir) } /* - * make the new window the current window and redraw + * equalize the window sizes. */ if (do_equal || dir != 0) win_equal(wp, TRUE, @@ -1143,6 +1143,10 @@ win_split_ins(size, flags, newwin, dir) if (size != 0) p_wh = size; } + + /* + * make the new window the current window + */ win_enter(wp, FALSE); #ifdef FEAT_VERTSPLIT if (flags & WSP_VERT)