# HG changeset patch # User vimboss # Date 1121980277 0 # Node ID a1c5a6cb26756450d2b7065999de140c2fb6ca74 # Parent 73f016dbb279b679567fb06e0dda79ed6539c03c updated for version 7.0112 diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 7.0aa. Last change: 2005 Jul 20 +*todo.txt* For Vim version 7.0aa. Last change: 2005 Jul 21 VIM REFERENCE MANUAL by Bram Moolenaar @@ -30,37 +30,6 @@ be worked on, but only if you sponsor Vi *known-bugs* -------------------- Known bugs and current work ----------------------- -About HTML tag pairing: http://www.w3.org/TR/html4/index/elements.html - -":e *.foo" completion with file name starting with "+" should be escaped. - -VMS patch for term.c also in Vim 6.3 (Zoltan Arpadffy) - -Make_cyg.mak files for Vim 6.3 from Tony Mechelynck? - -Add extra list of file locations. Can be used with: - :ltag list of matching tags, like :tselect - - :lnext next location - :lprevious :lNext previous location - :lnfile location in next file - :lNfile :lpfile location in previous file - :lrewind :lfirst first location - :llast last location - :ll [N] go to location N (current one if N omitted) - :lwindow open window with locations (separate from quickfix window) - :lopen open window with locations - :lclose close window with locations - :llist list locations - :lfile read locations from file using 'errorformat' - :lgetfile idem, don't jump to first one - :lbuffer idem, from current buffer. - -Win32: Balloon text can't contain line break. - Hints for multiline tooltips from Alexei Alexandrov (2005 Mar 26) - Patch from Sergey Khorev, 2005 Apr 11 - Add has("balloon_multiline") - Win32: Crash when pasting Simplified Chinese in utf-8. (rainux, 2005 June 20) Netrw plugin problems: @@ -268,6 +237,25 @@ Also place vimtutor.bat in %windir%? Add gui_mch_browsedir() for Motif, KDE and Mac OS/X. +Add extra list of file locations. A bit like the quickfix list, but there is +one per window. Can be used with: + :ltag list of matching tags, like :tselect +Commands to use the location list: + :lnext next location + :lprevious :lNext previous location + :lnfile location in next file + :lNfile :lpfile location in previous file + :lrewind :lfirst first location + :llast last location + :ll [N] go to location N (current one if N omitted) + :lwindow open window with locations (separate from quickfix window) + :lopen open window with locations + :lclose close window with locations + :llist list locations + :lfile read locations from file using 'errorformat' + :lgetfile idem, don't jump to first one + :lbuffer idem, from current buffer. + 7 Add a ":cstring" command. Works like ":cfile" but reads from a string variable. Also accept a list variable? Patch from Yegappan Lakshmanan. 2005 Feb 17 Now it's ":cexpr". @@ -3137,6 +3125,8 @@ 7 Make the debug mode history availabl Various improvements: 7 [t to move to previous xml/html tag (like "vatov"), ]t to move to next ("vatv"). +7 [< to move to previous xml/html tag, e.g., previous
  • . ]< to move to + next
  • , ]< to next
  • , [< to previous . 8 Add ":rename" command: rename the file of the current buffer and rename the buffer. Buffer may be modified. - Perhaps ":cexpr" could read errors from a list? diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt --- a/runtime/doc/version7.txt +++ b/runtime/doc/version7.txt @@ -1,4 +1,4 @@ -*version7.txt* For Vim version 7.0aa. Last change: 2005 Jul 20 +*version7.txt* For Vim version 7.0aa. Last change: 2005 Jul 21 VIM REFERENCE MANUAL by Bram Moolenaar @@ -367,7 +367,7 @@ New functions: ~ |foldtextresult()| the text displayed for a closed fold at line "lnum" |function()| make a Funcref out of a function name |get()| get an item from a List or Dictionary -|getbufline()| get a line or list of lines from a specified buffer +|getbufline()| get a list of lines from a specified buffer (Yegappan Lakshmanan) |getfontname()| get actual font name being used |getfperm()| get file permission string (Nikolai Weibull) @@ -695,6 +695,9 @@ Added the "customlist" completion argume user-defined completion function should return the completion candidates as a Vim List and the returned results are not filtered by Vim. +Win32: Balloons can have multiple lines if common controls supports it. +(Sergey Khorev) + ============================================================================== COMPILE TIME CHANGES *compile-changes-7* @@ -1190,4 +1193,8 @@ the global value. Win32: When using the "Edit with Vim" entry the file name was limited to about 200 characters. +When using command line completion for ":e *foo" and the file "+foo" exists +the resulting command ":e +foo" doesn't work. Now insert a backslash: ":e +\+foo". + vim:tw=78:ts=8:ft=help:norl: diff --git a/src/eval.c b/src/eval.c --- a/src/eval.c +++ b/src/eval.c @@ -9078,27 +9078,44 @@ f_get(argvars, rettv) copy_tv(tv, rettv); } -static void get_buffer_lines __ARGS((buf_T *buf, linenr_T start, linenr_T end, typval_T *rettv)); +static void get_buffer_lines __ARGS((buf_T *buf, linenr_T start, linenr_T end, int retlist, typval_T *rettv)); /* * Get line or list of lines from buffer "buf" into "rettv". - */ - static void -get_buffer_lines(buf, start, end, rettv) + * Return a range (from start to end) of lines in rettv from the specified + * buffer. + * If 'retlist' is TRUE, then the lines are returned as a Vim List. + */ + static void +get_buffer_lines(buf, start, end, retlist, rettv) buf_T *buf; linenr_T start; linenr_T end; + int retlist; typval_T *rettv; { char_u *p; - list_T *l; + list_T *l = NULL; listitem_T *li; - if (start < 0) - rettv->vval.v_number = 0; /* failure; error message already given */ - else if (end == 0) - { - /* getline(lnum): return one line as a string */ + if (retlist) + { + l = list_alloc(); + if (l == NULL) + return; + + rettv->vval.v_list = l; + rettv->v_type = VAR_LIST; + ++l->lv_refcount; + } + else + rettv->vval.v_number = 0; + + if (buf == NULL || buf->b_ml.ml_mfp == NULL || start < 0) + return; + + if (!retlist) + { if (start >= 1 && start <= buf->b_ml.ml_line_count) p = ml_get_buf(buf, start, FALSE); else @@ -9110,35 +9127,22 @@ get_buffer_lines(buf, start, end, rettv) else { if (end < start) - { - if (end >= 0) /* else: error message already given */ - EMSG(_(e_invrange)); - rettv->vval.v_number = 0; - } - else - { - l = list_alloc(); - if (l != NULL) - { - if (start < 1) - start = 1; - if (end > buf->b_ml.ml_line_count) - end = buf->b_ml.ml_line_count; - while (start <= end) - { - li = listitem_alloc(); - if (li == NULL) - break; - list_append(l, li); - li->li_tv.v_type = VAR_STRING; - li->li_tv.v_lock = 0; - li->li_tv.vval.v_string = - vim_strsave(ml_get_buf(buf, start++, FALSE)); - } - rettv->vval.v_list = l; - rettv->v_type = VAR_LIST; - ++l->lv_refcount; - } + return; + + if (start < 1) + start = 1; + if (end > buf->b_ml.ml_line_count) + end = buf->b_ml.ml_line_count; + while (start <= end) + { + li = listitem_alloc(); + if (li == NULL) + break; + list_append(l, li); + li->li_tv.v_type = VAR_STRING; + li->li_tv.v_lock = 0; + li->li_tv.vval.v_string = + vim_strsave(ml_get_buf(buf, start++, FALSE)); } } } @@ -9160,17 +9164,12 @@ f_getbufline(argvars, rettv) buf = get_buf_tv(&argvars[0]); --emsg_off; - if (buf == NULL || buf->b_ml.ml_mfp == NULL) - rettv->vval.v_number = 0; - else - { - lnum = get_tv_lnum(&argvars[1]); - if (argvars[2].v_type == VAR_UNKNOWN) - end = lnum; - else - end = get_tv_lnum(&argvars[2]); - get_buffer_lines(buf, lnum, end, rettv); - } + lnum = get_tv_lnum(&argvars[1]); + if (argvars[2].v_type == VAR_UNKNOWN) + end = lnum; + else + end = get_tv_lnum(&argvars[2]); + get_buffer_lines(buf, lnum, end, TRUE, rettv); } /* @@ -9338,7 +9337,8 @@ f_getcwd(argvars, rettv) { rettv->vval.v_string = vim_strsave(cwd); #ifdef BACKSLASH_IN_FILENAME - slash_adjust(rettv->vval.v_string); + if (rettv->vval.v_string != NULL) + slash_adjust(rettv->vval.v_string); #endif } } @@ -9550,14 +9550,21 @@ f_getline(argvars, rettv) { linenr_T lnum; linenr_T end; + int retlist; lnum = get_tv_lnum(argvars); if (argvars[1].v_type == VAR_UNKNOWN) + { end = 0; - else + retlist = FALSE; + } + else + { end = get_tv_lnum(&argvars[1]); - - get_buffer_lines(curbuf, lnum, end, rettv); + retlist = TRUE; + } + + get_buffer_lines(curbuf, lnum, end, retlist, rettv); } /* @@ -9905,6 +9912,9 @@ f_has(argvars, rettv) #endif #ifdef FEAT_BEVAL "balloon_eval", +# ifndef FEAT_GUI_W32 /* other GUIs always have multiline balloons */ + "balloon_multiline", +# endif #endif #if defined(SOME_BUILTIN_TCAPS) || defined(ALL_BUILTIN_TCAPS) "builtin_terms", @@ -10285,6 +10295,10 @@ f_has(argvars, rettv) n = has_patch(atoi((char *)name + 5)); else if (STRICMP(name, "vim_starting") == 0) n = (starting != 0); +#if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32) + else if (STRICMP(name, "balloon_multiline") == 0) + n = multiline_balloon_available(); +#endif #ifdef DYNAMIC_TCL else if (STRICMP(name, "tcl") == 0) n = tcl_enabled(FALSE); @@ -14388,9 +14402,9 @@ f_tr(argvars, rettv) char_u *tostr; char_u *p; #ifdef FEAT_MBYTE - int inlen; - int fromlen; - int tolen; + int inlen; + int fromlen; + int tolen; int idx; char_u *cpstr; int cplen; diff --git a/src/ex_cmds.c b/src/ex_cmds.c --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -2917,7 +2917,8 @@ do_ecmd(fnum, ffname, sfname, eap, newln # ifdef USE_LONG_FNAME if (USE_LONG_FNAME) # endif - fname_case(sfname, 0); /* set correct case for short file name */ + if (sfname != NULL) + fname_case(sfname, 0); /* set correct case for sfname */ #endif #ifdef FEAT_LISTCMDS diff --git a/src/menu.c b/src/menu.c --- a/src/menu.c +++ b/src/menu.c @@ -63,7 +63,7 @@ static char_u menu_mode_chars[] = {'n', static char_u e_notsubmenu[] = N_("E327: Part of menu-item path is not sub-menu"); static char_u e_othermode[] = N_("E328: Menu only exists in another mode"); -static char_u e_nomenu[] = N_("E329: No menu of that name"); +static char_u e_nomenu[] = N_("E329: No menu \"%s\""); #ifdef FEAT_TOOLBAR static const char *toolbar_names[] = @@ -841,7 +841,7 @@ menu_nable_recurse(menu, name, modes, en } if (*name != NUL && *name != '*' && menu == NULL) { - EMSG(_(e_nomenu)); + EMSG2(_(e_nomenu), name); return FAIL; } @@ -934,7 +934,7 @@ remove_menu(menup, name, modes, silent) if (menu == NULL) { if (!silent) - EMSG(_(e_nomenu)); + EMSG2(_(e_nomenu), name); return FAIL; } @@ -1079,7 +1079,7 @@ show_menus(path_name, modes) } if (menu == NULL) { - EMSG(_(e_nomenu)); + EMSG2(_(e_nomenu), name); vim_free(path_name); return FAIL; } @@ -1396,6 +1396,7 @@ get_menu_names(xp, idx) /* * Skip over this element of the menu path and return the start of the next * element. Any \ and ^Vs are removed from the current element. + * "name" may be modified. */ char_u * menu_name_skip(name) @@ -1872,6 +1873,16 @@ gui_show_popupmenu() return; mode = menu_mode_chars[mode]; +#ifdef FEAT_AUTOCMD + { + char_u ename[2]; + + ename[0] = mode; + ename[1] = NUL; + apply_autocmds(EVENT_MENUPOPUP, ename, NULL, FALSE, curbuf); + } +#endif + for (menu = root_menu; menu != NULL; menu = menu->next) if (STRNCMP("PopUp", menu->name, 5) == 0 && menu->name[5] == mode) break;