Merged from the latest developing branch.
authoredyfox <edyfox@2a77ed30-b011-0410-a7ad-c7884a0aa172>
Thu, 18 Mar 2010 05:06:11 +0000 (18 05:06 +0000)
committeredyfox <edyfox@2a77ed30-b011-0410-a7ad-c7884a0aa172>
Thu, 18 Mar 2010 05:06:11 +0000 (18 05:06 +0000)
git-svn-id: https://vim.svn.sourceforge.net/svnroot/vim/trunk@1813 2a77ed30-b011-0410-a7ad-c7884a0aa172

src/Make_ming.mak
src/eval.c
src/ex_getln.c
src/fold.c
src/if_ruby.c
src/normal.c
src/popupmnu.c
src/version.c
src/window.c

index 0a91789..19896e2 100644 (file)
@@ -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)
index f9babb3..ad127b5 100644 (file)
@@ -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 */
index 0f0f170..dea4b13 100644 (file)
@@ -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
index a23a35c..c88e8f7 100644 (file)
@@ -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;
 }
 
index 802e1c1..41cb791 100644 (file)
 # 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 <ruby.h>
-#if defined(RUBY_VERSION) && RUBY_VERSION >= 19
+#ifdef RUBY19_OR_LATER
 # include <ruby/encoding.h>
 #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);
 
index fade0fc..8b9fea7 100644 (file)
@@ -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
index bef9dd5..9dce378 100644 (file)
@@ -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))
index c799bd8..c625dff 100644 (file)
@@ -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,
index 0845768..cc114cc 100644 (file)
@@ -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)