[f0590dc] | 1 | Submitted By: Jim Gifford (jim at linuxfromscratch dot org) |
---|
| 2 | Date: 07-23-2007 |
---|
| 3 | Initial Package Version: 7.1 |
---|
| 4 | Origin: Upstream |
---|
| 5 | Upstream Status: Applied |
---|
| 6 | Description: Contains all upstream patches up to 7.1.033 |
---|
| 7 | The following patches were skipped |
---|
| 8 | 0 003 007 |
---|
| 9 | |
---|
| 10 | diff -Naur vim71.orig/runtime/doc/change.txt vim71/runtime/doc/change.txt |
---|
| 11 | --- vim71.orig/runtime/doc/change.txt 2007-05-12 06:18:46.000000000 -0400 |
---|
| 12 | +++ vim71/runtime/doc/change.txt 2007-07-23 19:57:09.000000000 -0400 |
---|
| 13 | @@ -1571,6 +1571,10 @@ |
---|
| 14 | in their original order, right before the sorted |
---|
| 15 | lines. |
---|
| 16 | |
---|
| 17 | + If {pattern} is empty (e.g. // is specified), the |
---|
| 18 | + last search pattern is used. This allows trying out |
---|
| 19 | + a pattern first. |
---|
| 20 | + |
---|
| 21 | Note that using ":sort" with ":global" doesn't sort the matching lines, it's |
---|
| 22 | quite useless. |
---|
| 23 | |
---|
| 24 | diff -Naur vim71.orig/runtime/doc/eval.txt vim71/runtime/doc/eval.txt |
---|
| 25 | --- vim71.orig/runtime/doc/eval.txt 2007-05-12 06:18:46.000000000 -0400 |
---|
| 26 | +++ vim71/runtime/doc/eval.txt 2007-07-23 19:57:09.000000000 -0400 |
---|
| 27 | @@ -1,4 +1,4 @@ |
---|
| 28 | -*eval.txt* For Vim version 7.1. Last change: 2007 May 11 |
---|
| 29 | +*eval.txt* For Vim version 7.1. Last change: 2007 Jul 11 |
---|
| 30 | |
---|
| 31 | |
---|
| 32 | VIM REFERENCE MANUAL by Bram Moolenaar |
---|
| 33 | @@ -2020,6 +2020,10 @@ |
---|
| 34 | number of characters in the cursor line plus one) |
---|
| 35 | 'x position of mark x (if the mark is not set, 0 is |
---|
| 36 | returned) |
---|
| 37 | + Additionally {expr} can be [lnum, col]: a |List| with the line |
---|
| 38 | + and column number. Most useful when the column is "$", to get |
---|
| 39 | + the las column of a specific line. When "lnum" or "col" is |
---|
| 40 | + out of range then col() returns zero. |
---|
| 41 | To get the line number use |line()|. To get both use |
---|
| 42 | |getpos()|. |
---|
| 43 | For the screen column position use |virtcol()|. |
---|
| 44 | @@ -2824,6 +2828,8 @@ |
---|
| 45 | given file {fname}. |
---|
| 46 | If {fname} is a directory, 0 is returned. |
---|
| 47 | If the file {fname} can't be found, -1 is returned. |
---|
| 48 | + If the size of {fname} is too big to fit in a Number then -2 |
---|
| 49 | + is returned. |
---|
| 50 | |
---|
| 51 | getfontname([{name}]) *getfontname()* |
---|
| 52 | Without an argument returns the name of the normal font being |
---|
| 53 | @@ -5022,14 +5028,12 @@ |
---|
| 54 | position, the returned Number will be the column at the end of |
---|
| 55 | the <Tab>. For example, for a <Tab> in column 1, with 'ts' |
---|
| 56 | set to 8, it returns 8. |
---|
| 57 | - For the use of {expr} see |col()|. Additionally you can use |
---|
| 58 | - [lnum, col]: a |List| with the line and column number. When |
---|
| 59 | - "lnum" or "col" is out of range then virtcol() returns zero. |
---|
| 60 | - When 'virtualedit' is used it can be [lnum, col, off], where |
---|
| 61 | + For the byte position use |col()|. |
---|
| 62 | + For the use of {expr} see |col()|. |
---|
| 63 | + When 'virtualedit' is used {expr} can be [lnum, col, off], where |
---|
| 64 | "off" is the offset in screen columns from the start of the |
---|
| 65 | character. E.g., a position within a <Tab> or after the last |
---|
| 66 | character. |
---|
| 67 | - For the byte position use |col()|. |
---|
| 68 | When Virtual editing is active in the current mode, a position |
---|
| 69 | beyond the end of the line can be returned. |'virtualedit'| |
---|
| 70 | The accepted positions are: |
---|
| 71 | diff -Naur vim71.orig/runtime/filetype.vim vim71/runtime/filetype.vim |
---|
| 72 | --- vim71.orig/runtime/filetype.vim 2007-05-10 11:14:37.000000000 -0400 |
---|
| 73 | +++ vim71/runtime/filetype.vim 2007-07-23 19:57:05.000000000 -0400 |
---|
| 74 | @@ -1,7 +1,7 @@ |
---|
| 75 | " Vim support file to detect file types |
---|
| 76 | " |
---|
| 77 | " Maintainer: Bram Moolenaar <Bram@vim.org> |
---|
| 78 | -" Last Change: 2007 May 10 |
---|
| 79 | +" Last Change: 2007 May 15 |
---|
| 80 | |
---|
| 81 | " Listen very carefully, I will say this only once |
---|
| 82 | if exists("did_load_filetypes") |
---|
| 83 | @@ -1286,7 +1286,7 @@ |
---|
| 84 | au BufNewFile,BufRead *.it,*.ih setf ppwiz |
---|
| 85 | |
---|
| 86 | " Oracle Pro*C/C++ |
---|
| 87 | -au BufNewFile,BufRead .pc setf proc |
---|
| 88 | +au BufNewFile,BufRead *.pc setf proc |
---|
| 89 | |
---|
| 90 | " Privoxy actions file |
---|
| 91 | au BufNewFile,BufRead *.action setf privoxy |
---|
| 92 | diff -Naur vim71.orig/src/auto/configure vim71/src/auto/configure |
---|
| 93 | --- vim71.orig/src/auto/configure 2007-05-12 07:49:09.000000000 -0400 |
---|
| 94 | +++ vim71/src/auto/configure 2007-07-23 19:57:08.000000000 -0400 |
---|
| 95 | @@ -3843,7 +3843,9 @@ |
---|
| 96 | fi |
---|
| 97 | |
---|
| 98 | if test "X$vi_cv_path_mzscheme_pfx" != "X"; then |
---|
| 99 | - if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then |
---|
| 100 | + if test "x$MACOSX" = "xyes"; then |
---|
| 101 | + MZSCHEME_LIBS="-framework PLT_MzScheme" |
---|
| 102 | + elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then |
---|
| 103 | MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" |
---|
| 104 | else |
---|
| 105 | MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" |
---|
| 106 | diff -Naur vim71.orig/src/buffer.c vim71/src/buffer.c |
---|
| 107 | --- vim71.orig/src/buffer.c 2007-05-10 11:25:59.000000000 -0400 |
---|
| 108 | +++ vim71/src/buffer.c 2007-07-23 19:57:07.000000000 -0400 |
---|
| 109 | @@ -171,6 +171,13 @@ |
---|
| 110 | /* Put the cursor on the first line. */ |
---|
| 111 | curwin->w_cursor.lnum = 1; |
---|
| 112 | curwin->w_cursor.col = 0; |
---|
| 113 | + |
---|
| 114 | + /* Set or reset 'modified' before executing autocommands, so that |
---|
| 115 | + * it can be changed there. */ |
---|
| 116 | + if (!readonlymode && !bufempty()) |
---|
| 117 | + changed(); |
---|
| 118 | + else if (retval != FAIL) |
---|
| 119 | + unchanged(curbuf, FALSE); |
---|
| 120 | #ifdef FEAT_AUTOCMD |
---|
| 121 | # ifdef FEAT_EVAL |
---|
| 122 | apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE, |
---|
| 123 | @@ -194,16 +201,16 @@ |
---|
| 124 | /* When reading stdin, the buffer contents always needs writing, so set |
---|
| 125 | * the changed flag. Unless in readonly mode: "ls | gview -". |
---|
| 126 | * When interrupted and 'cpoptions' contains 'i' set changed flag. */ |
---|
| 127 | - if ((read_stdin && !readonlymode && !bufempty()) |
---|
| 128 | + if ((got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL) |
---|
| 129 | #ifdef FEAT_AUTOCMD |
---|
| 130 | || modified_was_set /* ":set modified" used in autocmd */ |
---|
| 131 | # ifdef FEAT_EVAL |
---|
| 132 | || (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL) |
---|
| 133 | # endif |
---|
| 134 | #endif |
---|
| 135 | - || (got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL)) |
---|
| 136 | + ) |
---|
| 137 | changed(); |
---|
| 138 | - else if (retval != FAIL) |
---|
| 139 | + else if (retval != FAIL && !read_stdin) |
---|
| 140 | unchanged(curbuf, FALSE); |
---|
| 141 | save_file_ff(curbuf); /* keep this fileformat */ |
---|
| 142 | |
---|
| 143 | diff -Naur vim71.orig/src/configure.in vim71/src/configure.in |
---|
| 144 | --- vim71.orig/src/configure.in 2007-05-12 05:19:27.000000000 -0400 |
---|
| 145 | +++ vim71/src/configure.in 2007-07-23 19:57:08.000000000 -0400 |
---|
| 146 | @@ -423,7 +423,9 @@ |
---|
| 147 | fi |
---|
| 148 | |
---|
| 149 | if test "X$vi_cv_path_mzscheme_pfx" != "X"; then |
---|
| 150 | - if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then |
---|
| 151 | + if test "x$MACOSX" = "xyes"; then |
---|
| 152 | + MZSCHEME_LIBS="-framework PLT_MzScheme" |
---|
| 153 | + elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then |
---|
| 154 | MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a" |
---|
| 155 | else |
---|
| 156 | MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc" |
---|
| 157 | diff -Naur vim71.orig/src/digraph.c vim71/src/digraph.c |
---|
| 158 | --- vim71.orig/src/digraph.c 2006-05-02 14:24:04.000000000 -0400 |
---|
| 159 | +++ vim71/src/digraph.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 160 | @@ -2349,8 +2349,10 @@ |
---|
| 161 | |
---|
| 162 | if (*curbuf->b_p_keymap == NUL) |
---|
| 163 | { |
---|
| 164 | - /* Stop any active keymap and clear the table. */ |
---|
| 165 | + /* Stop any active keymap and clear the table. Also remove |
---|
| 166 | + * b:keymap_unload, as no keymap is active now. */ |
---|
| 167 | keymap_unload(); |
---|
| 168 | + do_cmdline_cmd((char_u *)"unlet! b:keymap_name"); |
---|
| 169 | } |
---|
| 170 | else |
---|
| 171 | { |
---|
| 172 | @@ -2500,7 +2502,6 @@ |
---|
| 173 | |
---|
| 174 | ga_clear(&curbuf->b_kmap_ga); |
---|
| 175 | curbuf->b_kmap_state &= ~KEYMAP_LOADED; |
---|
| 176 | - do_cmdline_cmd((char_u *)"unlet! b:keymap_name"); |
---|
| 177 | #ifdef FEAT_WINDOWS |
---|
| 178 | status_redraw_curbuf(); |
---|
| 179 | #endif |
---|
| 180 | diff -Naur vim71.orig/src/edit.c vim71/src/edit.c |
---|
| 181 | --- vim71.orig/src/edit.c 2007-05-07 15:43:55.000000000 -0400 |
---|
| 182 | +++ vim71/src/edit.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 183 | @@ -7215,6 +7215,8 @@ |
---|
| 184 | p = ml_get_curline(); |
---|
| 185 | if (cin_iscase(p) || cin_isscopedecl(p) || cin_islabel(30)) |
---|
| 186 | return TRUE; |
---|
| 187 | + /* Need to get the line again after cin_islabel(). */ |
---|
| 188 | + p = ml_get_curline(); |
---|
| 189 | if (curwin->w_cursor.col > 2 |
---|
| 190 | && p[curwin->w_cursor.col - 1] == ':' |
---|
| 191 | && p[curwin->w_cursor.col - 2] == ':') |
---|
| 192 | diff -Naur vim71.orig/src/eval.c vim71/src/eval.c |
---|
| 193 | --- vim71.orig/src/eval.c 2007-05-07 15:47:32.000000000 -0400 |
---|
| 194 | +++ vim71/src/eval.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 195 | @@ -672,7 +672,7 @@ |
---|
| 196 | static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv)); |
---|
| 197 | |
---|
| 198 | static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump)); |
---|
| 199 | -static pos_T *var2fpos __ARGS((typval_T *varp, int lnum, int *fnum)); |
---|
| 200 | +static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum)); |
---|
| 201 | static int get_env_len __ARGS((char_u **arg)); |
---|
| 202 | static int get_id_len __ARGS((char_u **arg)); |
---|
| 203 | static int get_name_len __ARGS((char_u **arg, char_u **alias, int evaluate, int verbose)); |
---|
| 204 | @@ -10136,7 +10136,13 @@ |
---|
| 205 | if (mch_isdir(fname)) |
---|
| 206 | rettv->vval.v_number = 0; |
---|
| 207 | else |
---|
| 208 | + { |
---|
| 209 | rettv->vval.v_number = (varnumber_T)st.st_size; |
---|
| 210 | + |
---|
| 211 | + /* non-perfect check for overflow */ |
---|
| 212 | + if ((off_t)rettv->vval.v_number != (off_t)st.st_size) |
---|
| 213 | + rettv->vval.v_number = -2; |
---|
| 214 | + } |
---|
| 215 | } |
---|
| 216 | else |
---|
| 217 | rettv->vval.v_number = -1; |
---|
| 218 | @@ -13919,6 +13925,8 @@ |
---|
| 219 | /* If 'n' flag is used: restore cursor position. */ |
---|
| 220 | if (flags & SP_NOMOVE) |
---|
| 221 | curwin->w_cursor = save_cursor; |
---|
| 222 | + else |
---|
| 223 | + curwin->w_set_curswant = TRUE; |
---|
| 224 | theend: |
---|
| 225 | p_ws = save_p_ws; |
---|
| 226 | |
---|
| 227 | @@ -16497,9 +16505,9 @@ |
---|
| 228 | * Returns NULL when there is an error. |
---|
| 229 | */ |
---|
| 230 | static pos_T * |
---|
| 231 | -var2fpos(varp, lnum, fnum) |
---|
| 232 | +var2fpos(varp, dollar_lnum, fnum) |
---|
| 233 | typval_T *varp; |
---|
| 234 | - int lnum; /* TRUE when $ is last line */ |
---|
| 235 | + int dollar_lnum; /* TRUE when $ is last line */ |
---|
| 236 | int *fnum; /* set to fnum for '0, 'A, etc. */ |
---|
| 237 | { |
---|
| 238 | char_u *name; |
---|
| 239 | @@ -16512,6 +16520,7 @@ |
---|
| 240 | list_T *l; |
---|
| 241 | int len; |
---|
| 242 | int error = FALSE; |
---|
| 243 | + listitem_T *li; |
---|
| 244 | |
---|
| 245 | l = varp->vval.v_list; |
---|
| 246 | if (l == NULL) |
---|
| 247 | @@ -16527,6 +16536,14 @@ |
---|
| 248 | if (error) |
---|
| 249 | return NULL; |
---|
| 250 | len = (long)STRLEN(ml_get(pos.lnum)); |
---|
| 251 | + |
---|
| 252 | + /* We accept "$" for the column number: last column. */ |
---|
| 253 | + li = list_find(l, 1L); |
---|
| 254 | + if (li != NULL && li->li_tv.v_type == VAR_STRING |
---|
| 255 | + && li->li_tv.vval.v_string != NULL |
---|
| 256 | + && STRCMP(li->li_tv.vval.v_string, "$") == 0) |
---|
| 257 | + pos.col = len + 1; |
---|
| 258 | + |
---|
| 259 | /* Accept a position up to the NUL after the line. */ |
---|
| 260 | if (pos.col == 0 || (int)pos.col > len + 1) |
---|
| 261 | return NULL; /* invalid column number */ |
---|
| 262 | @@ -16559,7 +16576,7 @@ |
---|
| 263 | pos.coladd = 0; |
---|
| 264 | #endif |
---|
| 265 | |
---|
| 266 | - if (name[0] == 'w' && lnum) |
---|
| 267 | + if (name[0] == 'w' && dollar_lnum) |
---|
| 268 | { |
---|
| 269 | pos.col = 0; |
---|
| 270 | if (name[1] == '0') /* "w0": first visible line */ |
---|
| 271 | @@ -16577,7 +16594,7 @@ |
---|
| 272 | } |
---|
| 273 | else if (name[0] == '$') /* last column or line */ |
---|
| 274 | { |
---|
| 275 | - if (lnum) |
---|
| 276 | + if (dollar_lnum) |
---|
| 277 | { |
---|
| 278 | pos.lnum = curbuf->b_ml.ml_line_count; |
---|
| 279 | pos.col = 0; |
---|
| 280 | diff -Naur vim71.orig/src/ex_cmds.c vim71/src/ex_cmds.c |
---|
| 281 | --- vim71.orig/src/ex_cmds.c 2007-05-07 15:41:01.000000000 -0400 |
---|
| 282 | +++ vim71/src/ex_cmds.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 283 | @@ -408,7 +408,11 @@ |
---|
| 284 | goto sortend; |
---|
| 285 | } |
---|
| 286 | *s = NUL; |
---|
| 287 | - regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC); |
---|
| 288 | + /* Use last search pattern if sort pattern is empty. */ |
---|
| 289 | + if (s == p + 1 && last_search_pat() != NULL) |
---|
| 290 | + regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC); |
---|
| 291 | + else |
---|
| 292 | + regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC); |
---|
| 293 | if (regmatch.regprog == NULL) |
---|
| 294 | goto sortend; |
---|
| 295 | p = s; /* continue after the regexp */ |
---|
| 296 | @@ -2912,22 +2916,35 @@ |
---|
| 297 | } |
---|
| 298 | |
---|
| 299 | /* |
---|
| 300 | - * Check if a buffer is read-only. Ask for overruling in a dialog. |
---|
| 301 | - * Return TRUE and give an error message when the buffer is readonly. |
---|
| 302 | + * Check if a buffer is read-only (either 'readonly' option is set or file is |
---|
| 303 | + * read-only). Ask for overruling in a dialog. Return TRUE and give an error |
---|
| 304 | + * message when the buffer is readonly. |
---|
| 305 | */ |
---|
| 306 | static int |
---|
| 307 | check_readonly(forceit, buf) |
---|
| 308 | int *forceit; |
---|
| 309 | buf_T *buf; |
---|
| 310 | { |
---|
| 311 | - if (!*forceit && buf->b_p_ro) |
---|
| 312 | + struct stat st; |
---|
| 313 | + |
---|
| 314 | + /* Handle a file being readonly when the 'readonly' option is set or when |
---|
| 315 | + * the file exists and permissions are read-only. |
---|
| 316 | + * We will send 0777 to check_file_readonly(), as the "perm" variable is |
---|
| 317 | + * important for device checks but not here. */ |
---|
| 318 | + if (!*forceit && (buf->b_p_ro |
---|
| 319 | + || (mch_stat((char *)buf->b_ffname, &st) >= 0 |
---|
| 320 | + && check_file_readonly(buf->b_ffname, 0777)))) |
---|
| 321 | { |
---|
| 322 | #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) |
---|
| 323 | if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL) |
---|
| 324 | { |
---|
| 325 | char_u buff[IOSIZE]; |
---|
| 326 | |
---|
| 327 | - dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"), |
---|
| 328 | + if (buf->b_p_ro) |
---|
| 329 | + dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"), |
---|
| 330 | + buf->b_fname); |
---|
| 331 | + else |
---|
| 332 | + dialog_msg(buff, _("File permissions of \"%s\" are read-only.\nIt may still be possible to write it.\nDo you wish to try?"), |
---|
| 333 | buf->b_fname); |
---|
| 334 | |
---|
| 335 | if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) == VIM_YES) |
---|
| 336 | @@ -2941,9 +2958,14 @@ |
---|
| 337 | } |
---|
| 338 | else |
---|
| 339 | #endif |
---|
| 340 | + if (buf->b_p_ro) |
---|
| 341 | EMSG(_(e_readonly)); |
---|
| 342 | + else |
---|
| 343 | + EMSG2(_("E505: \"%s\" is read-only (add ! to override)"), |
---|
| 344 | + buf->b_fname); |
---|
| 345 | return TRUE; |
---|
| 346 | } |
---|
| 347 | + |
---|
| 348 | return FALSE; |
---|
| 349 | } |
---|
| 350 | |
---|
| 351 | @@ -3367,7 +3389,7 @@ |
---|
| 352 | * was in this window (or another window). If not used |
---|
| 353 | * before, reset the local window options to the global |
---|
| 354 | * values. Also restores old folding stuff. */ |
---|
| 355 | - get_winopts(buf); |
---|
| 356 | + get_winopts(curbuf); |
---|
| 357 | #ifdef FEAT_SPELL |
---|
| 358 | did_get_winopts = TRUE; |
---|
| 359 | #endif |
---|
| 360 | @@ -3649,8 +3671,8 @@ |
---|
| 361 | #ifdef FEAT_SPELL |
---|
| 362 | /* If the window options were changed may need to set the spell language. |
---|
| 363 | * Can only do this after the buffer has been properly setup. */ |
---|
| 364 | - if (did_get_winopts && curwin->w_p_spell && *buf->b_p_spl != NUL) |
---|
| 365 | - did_set_spelllang(buf); |
---|
| 366 | + if (did_get_winopts && curwin->w_p_spell && *curbuf->b_p_spl != NUL) |
---|
| 367 | + did_set_spelllang(curbuf); |
---|
| 368 | #endif |
---|
| 369 | |
---|
| 370 | if (command == NULL) |
---|
| 371 | diff -Naur vim71.orig/src/ex_docmd.c vim71/src/ex_docmd.c |
---|
| 372 | --- vim71.orig/src/ex_docmd.c 2007-05-07 15:49:38.000000000 -0400 |
---|
| 373 | +++ vim71/src/ex_docmd.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 374 | @@ -133,6 +133,7 @@ |
---|
| 375 | static void get_flags __ARGS((exarg_T *eap)); |
---|
| 376 | #if !defined(FEAT_PERL) || !defined(FEAT_PYTHON) || !defined(FEAT_TCL) \ |
---|
| 377 | || !defined(FEAT_RUBY) || !defined(FEAT_MZSCHEME) |
---|
| 378 | +# define HAVE_EX_SCRIPT_NI |
---|
| 379 | static void ex_script_ni __ARGS((exarg_T *eap)); |
---|
| 380 | #endif |
---|
| 381 | static char_u *invalid_range __ARGS((exarg_T *eap)); |
---|
| 382 | @@ -2118,7 +2119,11 @@ |
---|
| 383 | #ifdef FEAT_USR_CMDS |
---|
| 384 | !USER_CMDIDX(ea.cmdidx) && |
---|
| 385 | #endif |
---|
| 386 | - cmdnames[ea.cmdidx].cmd_func == ex_ni); |
---|
| 387 | + (cmdnames[ea.cmdidx].cmd_func == ex_ni |
---|
| 388 | +#ifdef HAVE_EX_SCRIPT_NI |
---|
| 389 | + || cmdnames[ea.cmdidx].cmd_func == ex_script_ni |
---|
| 390 | +#endif |
---|
| 391 | + )); |
---|
| 392 | |
---|
| 393 | #ifndef FEAT_EVAL |
---|
| 394 | /* |
---|
| 395 | @@ -3997,8 +4002,7 @@ |
---|
| 396 | eap->errmsg = (char_u *)N_("E319: Sorry, the command is not available in this version"); |
---|
| 397 | } |
---|
| 398 | |
---|
| 399 | -#if !defined(FEAT_PERL) || !defined(FEAT_PYTHON) || !defined(FEAT_TCL) \ |
---|
| 400 | - || !defined(FEAT_RUBY) || !defined(FEAT_MZSCHEME) |
---|
| 401 | +#ifdef HAVE_EX_SCRIPT_NI |
---|
| 402 | /* |
---|
| 403 | * Function called for script command which is Not Implemented. NI! |
---|
| 404 | * Skips over ":perl <<EOF" constructs. |
---|
| 405 | diff -Naur vim71.orig/src/ex_getln.c vim71/src/ex_getln.c |
---|
| 406 | --- vim71.orig/src/ex_getln.c 2007-05-07 15:47:23.000000000 -0400 |
---|
| 407 | +++ vim71/src/ex_getln.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 408 | @@ -484,7 +484,8 @@ |
---|
| 409 | if (xpc.xp_context == EXPAND_MENUNAMES && p_wmnu) |
---|
| 410 | { |
---|
| 411 | /* Hitting <Down> after "emenu Name.": complete submenu */ |
---|
| 412 | - if (ccline.cmdbuff[ccline.cmdpos - 1] == '.' && c == K_DOWN) |
---|
| 413 | + if (c == K_DOWN && ccline.cmdpos > 0 |
---|
| 414 | + && ccline.cmdbuff[ccline.cmdpos - 1] == '.') |
---|
| 415 | c = p_wc; |
---|
| 416 | else if (c == K_UP) |
---|
| 417 | { |
---|
| 418 | @@ -533,9 +534,11 @@ |
---|
| 419 | upseg[3] = PATHSEP; |
---|
| 420 | upseg[4] = NUL; |
---|
| 421 | |
---|
| 422 | - if (ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP |
---|
| 423 | - && c == K_DOWN |
---|
| 424 | - && (ccline.cmdbuff[ccline.cmdpos - 2] != '.' |
---|
| 425 | + if (c == K_DOWN |
---|
| 426 | + && ccline.cmdpos > 0 |
---|
| 427 | + && ccline.cmdbuff[ccline.cmdpos - 1] == PATHSEP |
---|
| 428 | + && (ccline.cmdpos < 3 |
---|
| 429 | + || ccline.cmdbuff[ccline.cmdpos - 2] != '.' |
---|
| 430 | || ccline.cmdbuff[ccline.cmdpos - 3] != '.')) |
---|
| 431 | { |
---|
| 432 | /* go down a directory */ |
---|
| 433 | @@ -730,8 +733,8 @@ |
---|
| 434 | /* In Ex mode a backslash escapes a newline. */ |
---|
| 435 | if (exmode_active |
---|
| 436 | && c != ESC |
---|
| 437 | - && ccline.cmdpos > 0 |
---|
| 438 | && ccline.cmdpos == ccline.cmdlen |
---|
| 439 | + && ccline.cmdpos > 0 |
---|
| 440 | && ccline.cmdbuff[ccline.cmdpos - 1] == '\\') |
---|
| 441 | { |
---|
| 442 | if (c == K_KENTER) |
---|
| 443 | diff -Naur vim71.orig/src/fileio.c vim71/src/fileio.c |
---|
| 444 | --- vim71.orig/src/fileio.c 2007-05-10 07:29:44.000000000 -0400 |
---|
| 445 | +++ vim71/src/fileio.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 446 | @@ -44,6 +44,10 @@ |
---|
| 447 | /* Is there any system that doesn't have access()? */ |
---|
| 448 | #define USE_MCH_ACCESS |
---|
| 449 | |
---|
| 450 | +#if defined(sun) && defined(S_ISCHR) |
---|
| 451 | +# define OPEN_CHR_FILES |
---|
| 452 | +static int is_dev_fd_file(char_u *fname); |
---|
| 453 | +#endif |
---|
| 454 | #ifdef FEAT_MBYTE |
---|
| 455 | static char_u *next_fenc __ARGS((char_u **pp)); |
---|
| 456 | # ifdef FEAT_EVAL |
---|
| 457 | @@ -406,6 +410,10 @@ |
---|
| 458 | # ifdef S_ISSOCK |
---|
| 459 | && !S_ISSOCK(perm) /* ... or socket */ |
---|
| 460 | # endif |
---|
| 461 | +# ifdef OPEN_CHR_FILES |
---|
| 462 | + && !(S_ISCHR(perm) && is_dev_fd_file(fname)) |
---|
| 463 | + /* ... or a character special file named /dev/fd/<n> */ |
---|
| 464 | +# endif |
---|
| 465 | ) |
---|
| 466 | { |
---|
| 467 | if (S_ISDIR(perm)) |
---|
| 468 | @@ -424,7 +432,7 @@ |
---|
| 469 | */ |
---|
| 470 | if (!p_odev && mch_nodetype(fname) == NODE_WRITABLE) |
---|
| 471 | { |
---|
| 472 | - filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option"), 0); |
---|
| 473 | + filemess(curbuf, fname, (char_u *)_("is a device (disabled with 'opendevice' option)"), 0); |
---|
| 474 | msg_end(); |
---|
| 475 | msg_scroll = msg_save; |
---|
| 476 | return FAIL; |
---|
| 477 | @@ -2265,6 +2273,13 @@ |
---|
| 478 | } |
---|
| 479 | # endif |
---|
| 480 | # endif |
---|
| 481 | +# ifdef OPEN_CHR_FILES |
---|
| 482 | + if (S_ISCHR(perm)) /* or character special */ |
---|
| 483 | + { |
---|
| 484 | + STRCAT(IObuff, _("[character special]")); |
---|
| 485 | + c = TRUE; |
---|
| 486 | + } |
---|
| 487 | +# endif |
---|
| 488 | #endif |
---|
| 489 | if (curbuf->b_p_ro) |
---|
| 490 | { |
---|
| 491 | @@ -2464,6 +2479,25 @@ |
---|
| 492 | return OK; |
---|
| 493 | } |
---|
| 494 | |
---|
| 495 | +#ifdef OPEN_CHR_FILES |
---|
| 496 | +/* |
---|
| 497 | + * Returns TRUE if the file name argument is of the form "/dev/fd/\d\+", |
---|
| 498 | + * which is the name of files used for process substitution output by |
---|
| 499 | + * some shells on some operating systems, e.g., bash on SunOS. |
---|
| 500 | + * Do not accept "/dev/fd/[012]", opening these may hang Vim. |
---|
| 501 | + */ |
---|
| 502 | + static int |
---|
| 503 | +is_dev_fd_file(fname) |
---|
| 504 | + char_u *fname; |
---|
| 505 | +{ |
---|
| 506 | + return (STRNCMP(fname, "/dev/fd/", 8) == 0 |
---|
| 507 | + && VIM_ISDIGIT(fname[8]) |
---|
| 508 | + && *skipdigits(fname + 9) == NUL |
---|
| 509 | + && (fname[9] != NUL |
---|
| 510 | + || (fname[8] != '0' && fname[8] != '1' && fname[8] != '2'))); |
---|
| 511 | +} |
---|
| 512 | +#endif |
---|
| 513 | + |
---|
| 514 | #ifdef FEAT_MBYTE |
---|
| 515 | |
---|
| 516 | /* |
---|
| 517 | @@ -2734,6 +2768,32 @@ |
---|
| 518 | #endif |
---|
| 519 | |
---|
| 520 | /* |
---|
| 521 | + * Return TRUE if a file appears to be read-only from the file permissions. |
---|
| 522 | + */ |
---|
| 523 | + int |
---|
| 524 | +check_file_readonly(fname, perm) |
---|
| 525 | + char_u *fname; /* full path to file */ |
---|
| 526 | + int perm; /* known permissions on file */ |
---|
| 527 | +{ |
---|
| 528 | +#ifndef USE_MCH_ACCESS |
---|
| 529 | + int fd = 0; |
---|
| 530 | +#endif |
---|
| 531 | + |
---|
| 532 | + return ( |
---|
| 533 | +#ifdef USE_MCH_ACCESS |
---|
| 534 | +# ifdef UNIX |
---|
| 535 | + (perm & 0222) == 0 || |
---|
| 536 | +# endif |
---|
| 537 | + mch_access((char *)fname, W_OK) |
---|
| 538 | +#else |
---|
| 539 | + (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0 |
---|
| 540 | + ? TRUE : (close(fd), FALSE) |
---|
| 541 | +#endif |
---|
| 542 | + ); |
---|
| 543 | +} |
---|
| 544 | + |
---|
| 545 | + |
---|
| 546 | +/* |
---|
| 547 | * buf_write() - write to file "fname" lines "start" through "end" |
---|
| 548 | * |
---|
| 549 | * We do our own buffering here because fwrite() is so slow. |
---|
| 550 | @@ -3219,17 +3279,8 @@ |
---|
| 551 | * Check if the file is really writable (when renaming the file to |
---|
| 552 | * make a backup we won't discover it later). |
---|
| 553 | */ |
---|
| 554 | - file_readonly = ( |
---|
| 555 | -# ifdef USE_MCH_ACCESS |
---|
| 556 | -# ifdef UNIX |
---|
| 557 | - (perm & 0222) == 0 || |
---|
| 558 | -# endif |
---|
| 559 | - mch_access((char *)fname, W_OK) |
---|
| 560 | -# else |
---|
| 561 | - (fd = mch_open((char *)fname, O_RDWR | O_EXTRA, 0)) < 0 |
---|
| 562 | - ? TRUE : (close(fd), FALSE) |
---|
| 563 | -# endif |
---|
| 564 | - ); |
---|
| 565 | + file_readonly = check_file_readonly(fname, (int)perm); |
---|
| 566 | + |
---|
| 567 | if (!forceit && file_readonly) |
---|
| 568 | { |
---|
| 569 | if (vim_strchr(p_cpo, CPO_FWRITE) != NULL) |
---|
| 570 | diff -Naur vim71.orig/src/gui_gtk.c vim71/src/gui_gtk.c |
---|
| 571 | --- vim71.orig/src/gui_gtk.c 2007-05-10 04:37:37.000000000 -0400 |
---|
| 572 | +++ vim71/src/gui_gtk.c 2007-07-23 19:57:05.000000000 -0400 |
---|
| 573 | @@ -53,8 +53,8 @@ |
---|
| 574 | # ifdef bindtextdomain |
---|
| 575 | # undef bindtextdomain |
---|
| 576 | # endif |
---|
| 577 | -# ifdef bindtextdomain_codeset |
---|
| 578 | -# undef bindtextdomain_codeset |
---|
| 579 | +# ifdef bind_textdomain_codeset |
---|
| 580 | +# undef bind_textdomain_codeset |
---|
| 581 | # endif |
---|
| 582 | # if defined(FEAT_GETTEXT) && !defined(ENABLE_NLS) |
---|
| 583 | # define ENABLE_NLS /* so the texts in the dialog boxes are translated */ |
---|
| 584 | diff -Naur vim71.orig/src/gui_gtk_x11.c vim71/src/gui_gtk_x11.c |
---|
| 585 | --- vim71.orig/src/gui_gtk_x11.c 2007-05-10 04:37:49.000000000 -0400 |
---|
| 586 | +++ vim71/src/gui_gtk_x11.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 587 | @@ -36,8 +36,8 @@ |
---|
| 588 | # ifdef bindtextdomain |
---|
| 589 | # undef bindtextdomain |
---|
| 590 | # endif |
---|
| 591 | -# ifdef bindtextdomain_codeset |
---|
| 592 | -# undef bindtextdomain_codeset |
---|
| 593 | +# ifdef bind_textdomain_codeset |
---|
| 594 | +# undef bind_textdomain_codeset |
---|
| 595 | # endif |
---|
| 596 | # if defined(FEAT_GETTEXT) && !defined(ENABLE_NLS) |
---|
| 597 | # define ENABLE_NLS /* so the texts in the dialog boxes are translated */ |
---|
| 598 | @@ -2188,8 +2188,10 @@ |
---|
| 599 | escaped_filename = vim_strsave_escaped(filename, escape_chars); |
---|
| 600 | if (escaped_filename == NULL) |
---|
| 601 | return FALSE; |
---|
| 602 | - mksession_cmdline = g_strconcat("mksession ", (char *)escaped_filename, NULL); |
---|
| 603 | + mksession_cmdline = g_strconcat("mksession ", (char *)escaped_filename, |
---|
| 604 | + NULL); |
---|
| 605 | vim_free(escaped_filename); |
---|
| 606 | + |
---|
| 607 | /* |
---|
| 608 | * Use a reasonable hardcoded set of 'sessionoptions' flags to avoid |
---|
| 609 | * unpredictable effects when the session is saved automatically. Also, |
---|
| 610 | @@ -2199,7 +2201,7 @@ |
---|
| 611 | */ |
---|
| 612 | save_ssop_flags = ssop_flags; |
---|
| 613 | ssop_flags = (SSOP_BLANK|SSOP_CURDIR|SSOP_FOLDS|SSOP_GLOBALS |
---|
| 614 | - |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE); |
---|
| 615 | + |SSOP_HELP|SSOP_OPTIONS|SSOP_WINSIZE|SSOP_TABPAGES); |
---|
| 616 | |
---|
| 617 | do_cmdline_cmd((char_u *)"let Save_VV_this_session = v:this_session"); |
---|
| 618 | failed = (do_cmdline_cmd((char_u *)mksession_cmdline) == FAIL); |
---|
| 619 | diff -Naur vim71.orig/src/if_mzsch.c vim71/src/if_mzsch.c |
---|
| 620 | --- vim71.orig/src/if_mzsch.c 2007-05-12 07:13:47.000000000 -0400 |
---|
| 621 | +++ vim71/src/if_mzsch.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 622 | @@ -308,6 +308,8 @@ |
---|
| 623 | static Scheme_Config *(*dll_scheme_current_config)(void); |
---|
| 624 | static Scheme_Object *(*dll_scheme_char_string_to_byte_string) |
---|
| 625 | (Scheme_Object *s); |
---|
| 626 | +static Scheme_Object *(*dll_scheme_char_string_to_path) |
---|
| 627 | + (Scheme_Object *s); |
---|
| 628 | # endif |
---|
| 629 | |
---|
| 630 | /* arrays are imported directly */ |
---|
| 631 | @@ -398,6 +400,8 @@ |
---|
| 632 | # define scheme_current_config dll_scheme_current_config |
---|
| 633 | # define scheme_char_string_to_byte_string \ |
---|
| 634 | dll_scheme_char_string_to_byte_string |
---|
| 635 | +# define scheme_char_string_to_path \ |
---|
| 636 | + dll_scheme_char_string_to_path |
---|
| 637 | # endif |
---|
| 638 | |
---|
| 639 | typedef struct |
---|
| 640 | @@ -498,6 +502,8 @@ |
---|
| 641 | {"scheme_current_config", (void **)&dll_scheme_current_config}, |
---|
| 642 | {"scheme_char_string_to_byte_string", |
---|
| 643 | (void **)&dll_scheme_char_string_to_byte_string}, |
---|
| 644 | + {"scheme_char_string_to_path", |
---|
| 645 | + (void **)&dll_scheme_char_string_to_path}, |
---|
| 646 | # endif |
---|
| 647 | {NULL, NULL}}; |
---|
| 648 | |
---|
| 649 | @@ -773,7 +779,14 @@ |
---|
| 650 | #ifdef MZSCHEME_COLLECTS |
---|
| 651 | /* setup 'current-library-collection-paths' parameter */ |
---|
| 652 | scheme_set_param(scheme_config, MZCONFIG_COLLECTION_PATHS, |
---|
| 653 | - scheme_make_pair(scheme_make_string(MZSCHEME_COLLECTS), |
---|
| 654 | + scheme_make_pair( |
---|
| 655 | +# if MZSCHEME_VERSION_MAJOR >= 299 |
---|
| 656 | + scheme_char_string_to_path( |
---|
| 657 | + scheme_byte_string_to_char_string( |
---|
| 658 | + scheme_make_byte_string(MZSCHEME_COLLECTS))), |
---|
| 659 | +# else |
---|
| 660 | + scheme_make_string(MZSCHEME_COLLECTS), |
---|
| 661 | +# endif |
---|
| 662 | scheme_null)); |
---|
| 663 | #endif |
---|
| 664 | #ifdef HAVE_SANDBOX |
---|
| 665 | diff -Naur vim71.orig/src/main.c vim71/src/main.c |
---|
| 666 | --- vim71.orig/src/main.c 2007-05-07 15:38:44.000000000 -0400 |
---|
| 667 | +++ vim71/src/main.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 668 | @@ -1360,8 +1360,7 @@ |
---|
| 669 | p = vim_getenv((char_u *)"VIMRUNTIME", &mustfree); |
---|
| 670 | if (p != NULL && *p != NUL) |
---|
| 671 | { |
---|
| 672 | - STRCPY(NameBuff, p); |
---|
| 673 | - STRCAT(NameBuff, "/lang"); |
---|
| 674 | + vim_snprintf((char *)NameBuff, MAXPATHL, "%s/lang", p); |
---|
| 675 | bindtextdomain(VIMPACKAGE, (char *)NameBuff); |
---|
| 676 | } |
---|
| 677 | if (mustfree) |
---|
| 678 | diff -Naur vim71.orig/src/message.c vim71/src/message.c |
---|
| 679 | --- vim71.orig/src/message.c 2007-05-07 15:31:59.000000000 -0400 |
---|
| 680 | +++ vim71/src/message.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 681 | @@ -3456,11 +3456,11 @@ |
---|
| 682 | /* advance to next hotkey and set default hotkey */ |
---|
| 683 | #ifdef FEAT_MBYTE |
---|
| 684 | if (has_mbyte) |
---|
| 685 | - hotkp += (*mb_ptr2len)(hotkp); |
---|
| 686 | + hotkp += STRLEN(hotkp); |
---|
| 687 | else |
---|
| 688 | #endif |
---|
| 689 | ++hotkp; |
---|
| 690 | - (void)copy_char(r + 1, hotkp, TRUE); |
---|
| 691 | + hotkp[copy_char(r + 1, hotkp, TRUE)] = NUL; |
---|
| 692 | if (dfltbutton) |
---|
| 693 | --dfltbutton; |
---|
| 694 | |
---|
| 695 | @@ -3493,7 +3493,7 @@ |
---|
| 696 | *msgp++ = (dfltbutton == 1) ? ']' : ')'; |
---|
| 697 | |
---|
| 698 | /* redefine hotkey */ |
---|
| 699 | - (void)copy_char(r, hotkp, TRUE); |
---|
| 700 | + hotkp[copy_char(r, hotkp, TRUE)] = NUL; |
---|
| 701 | } |
---|
| 702 | } |
---|
| 703 | else |
---|
| 704 | @@ -3519,8 +3519,6 @@ |
---|
| 705 | *msgp++ = ':'; |
---|
| 706 | *msgp++ = ' '; |
---|
| 707 | *msgp = NUL; |
---|
| 708 | - mb_ptr_adv(hotkp); |
---|
| 709 | - *hotkp = NUL; |
---|
| 710 | } |
---|
| 711 | else |
---|
| 712 | { |
---|
| 713 | @@ -3555,8 +3553,9 @@ |
---|
| 714 | msgp = confirm_msg + 1 + STRLEN(message); |
---|
| 715 | hotkp = hotk; |
---|
| 716 | |
---|
| 717 | - /* define first default hotkey */ |
---|
| 718 | - (void)copy_char(buttons, hotkp, TRUE); |
---|
| 719 | + /* Define first default hotkey. Keep the hotkey string NUL |
---|
| 720 | + * terminated to avoid reading past the end. */ |
---|
| 721 | + hotkp[copy_char(buttons, hotkp, TRUE)] = NUL; |
---|
| 722 | |
---|
| 723 | /* Remember where the choices start, displaying starts here when |
---|
| 724 | * "hotkp" typed at the more prompt. */ |
---|
| 725 | diff -Naur vim71.orig/src/normal.c vim71/src/normal.c |
---|
| 726 | --- vim71.orig/src/normal.c 2007-05-07 15:34:39.000000000 -0400 |
---|
| 727 | +++ vim71/src/normal.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 728 | @@ -6379,7 +6379,7 @@ |
---|
| 729 | */ |
---|
| 730 | else if (cap->nchar == 'p' || cap->nchar == 'P') |
---|
| 731 | { |
---|
| 732 | - if (!checkclearopq(cap->oap)) |
---|
| 733 | + if (!checkclearop(cap->oap)) |
---|
| 734 | { |
---|
| 735 | prep_redo_cmd(cap); |
---|
| 736 | do_put(cap->oap->regname, |
---|
| 737 | diff -Naur vim71.orig/src/ops.c vim71/src/ops.c |
---|
| 738 | --- vim71.orig/src/ops.c 2007-05-07 15:33:47.000000000 -0400 |
---|
| 739 | +++ vim71/src/ops.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 740 | @@ -3404,7 +3404,9 @@ |
---|
| 741 | |
---|
| 742 | #ifdef FEAT_VIRTUALEDIT |
---|
| 743 | col += curwin->w_cursor.coladd; |
---|
| 744 | - if (ve_flags == VE_ALL && curwin->w_cursor.coladd > 0) |
---|
| 745 | + if (ve_flags == VE_ALL |
---|
| 746 | + && (curwin->w_cursor.coladd > 0 |
---|
| 747 | + || endcol2 == curwin->w_cursor.col)) |
---|
| 748 | { |
---|
| 749 | if (dir == FORWARD && c == NUL) |
---|
| 750 | ++col; |
---|
| 751 | diff -Naur vim71.orig/src/option.c vim71/src/option.c |
---|
| 752 | --- vim71.orig/src/option.c 2007-05-01 07:26:10.000000000 -0400 |
---|
| 753 | +++ vim71/src/option.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 754 | @@ -8219,6 +8219,25 @@ |
---|
| 755 | varp = get_varp(&options[opt_idx]); |
---|
| 756 | if (varp != NULL) /* hidden option is not changed */ |
---|
| 757 | { |
---|
| 758 | + if (number == 0 && string != NULL) |
---|
| 759 | + { |
---|
| 760 | + int index; |
---|
| 761 | + |
---|
| 762 | + /* Either we are given a string or we are setting option |
---|
| 763 | + * to zero. */ |
---|
| 764 | + for (index = 0; string[index] == '0'; ++index) |
---|
| 765 | + ; |
---|
| 766 | + if (string[index] != NUL || index == 0) |
---|
| 767 | + { |
---|
| 768 | + /* There's another character after zeros or the string |
---|
| 769 | + * is empty. In both cases, we are trying to set a |
---|
| 770 | + * num option using a string. */ |
---|
| 771 | + EMSG3(_("E521: Number required: &%s = '%s'"), |
---|
| 772 | + name, string); |
---|
| 773 | + return; /* do nothing as we hit an error */ |
---|
| 774 | + |
---|
| 775 | + } |
---|
| 776 | + } |
---|
| 777 | if (flags & P_NUM) |
---|
| 778 | (void)set_num_option(opt_idx, varp, number, |
---|
| 779 | NULL, 0, opt_flags); |
---|
| 780 | @@ -10605,6 +10624,9 @@ |
---|
| 781 | file_ff_differs(buf) |
---|
| 782 | buf_T *buf; |
---|
| 783 | { |
---|
| 784 | + /* In a buffer that was never loaded the options are not valid. */ |
---|
| 785 | + if (buf->b_flags & BF_NEVERLOADED) |
---|
| 786 | + return FALSE; |
---|
| 787 | if ((buf->b_flags & BF_NEW) |
---|
| 788 | && buf->b_ml.ml_line_count == 1 |
---|
| 789 | && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL) |
---|
| 790 | diff -Naur vim71.orig/src/os_unix.h vim71/src/os_unix.h |
---|
| 791 | --- vim71.orig/src/os_unix.h 2007-05-07 15:35:05.000000000 -0400 |
---|
| 792 | +++ vim71/src/os_unix.h 2007-07-23 19:57:09.000000000 -0400 |
---|
| 793 | @@ -508,6 +508,9 @@ |
---|
| 794 | #if !defined(S_ISFIFO) && defined(S_IFIFO) |
---|
| 795 | # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) |
---|
| 796 | #endif |
---|
| 797 | +#if !defined(S_ISCHR) && defined(S_IFCHR) |
---|
| 798 | +# define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) |
---|
| 799 | +#endif |
---|
| 800 | |
---|
| 801 | /* Note: Some systems need both string.h and strings.h (Savage). However, |
---|
| 802 | * some systems can't handle both, only use string.h in that case. */ |
---|
| 803 | diff -Naur vim71.orig/src/popupmnu.c vim71/src/popupmnu.c |
---|
| 804 | --- vim71.orig/src/popupmnu.c 2007-03-24 16:07:39.000000000 -0400 |
---|
| 805 | +++ vim71/src/popupmnu.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 806 | @@ -466,7 +466,7 @@ |
---|
| 807 | set_option_value((char_u *)"bh", 0L, |
---|
| 808 | (char_u *)"wipe", OPT_LOCAL); |
---|
| 809 | set_option_value((char_u *)"diff", 0L, |
---|
| 810 | - (char_u *)"", OPT_LOCAL); |
---|
| 811 | + NULL, OPT_LOCAL); |
---|
| 812 | } |
---|
| 813 | } |
---|
| 814 | if (res == OK) |
---|
| 815 | diff -Naur vim71.orig/src/proto/fileio.pro vim71/src/proto/fileio.pro |
---|
| 816 | --- vim71.orig/src/proto/fileio.pro 2007-05-12 06:39:14.000000000 -0400 |
---|
| 817 | +++ vim71/src/proto/fileio.pro 2007-07-23 19:57:08.000000000 -0400 |
---|
| 818 | @@ -2,6 +2,7 @@ |
---|
| 819 | void filemess __ARGS((buf_T *buf, char_u *name, char_u *s, int attr)); |
---|
| 820 | int readfile __ARGS((char_u *fname, char_u *sfname, linenr_T from, linenr_T lines_to_skip, linenr_T lines_to_read, exarg_T *eap, int flags)); |
---|
| 821 | int prep_exarg __ARGS((exarg_T *eap, buf_T *buf)); |
---|
| 822 | +int check_file_readonly __ARGS((char_u *fname, int perm)); |
---|
| 823 | int buf_write __ARGS((buf_T *buf, char_u *fname, char_u *sfname, linenr_T start, linenr_T end, exarg_T *eap, int append, int forceit, int reset_changed, int filtering)); |
---|
| 824 | void msg_add_fname __ARGS((buf_T *buf, char_u *fname)); |
---|
| 825 | void msg_add_lines __ARGS((int insert_space, long lnum, long nchars)); |
---|
| 826 | diff -Naur vim71.orig/src/quickfix.c vim71/src/quickfix.c |
---|
| 827 | --- vim71.orig/src/quickfix.c 2007-02-03 19:50:17.000000000 -0500 |
---|
| 828 | +++ vim71/src/quickfix.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 829 | @@ -2331,7 +2331,7 @@ |
---|
| 830 | set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix", |
---|
| 831 | OPT_LOCAL); |
---|
| 832 | set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL); |
---|
| 833 | - set_option_value((char_u *)"diff", 0L, (char_u *)"", OPT_LOCAL); |
---|
| 834 | + set_option_value((char_u *)"diff", 0L, NULL, OPT_LOCAL); |
---|
| 835 | } |
---|
| 836 | |
---|
| 837 | /* Only set the height when still in the same tab page and there is no |
---|
| 838 | diff -Naur vim71.orig/src/screen.c vim71/src/screen.c |
---|
| 839 | --- vim71.orig/src/screen.c 2007-05-07 15:27:53.000000000 -0400 |
---|
| 840 | +++ vim71/src/screen.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 841 | @@ -3459,9 +3459,11 @@ |
---|
| 842 | #ifdef FEAT_DIFF |
---|
| 843 | if (diff_hlf != (hlf_T)0) |
---|
| 844 | { |
---|
| 845 | - if (diff_hlf == HLF_CHD && ptr - line >= change_start) |
---|
| 846 | + if (diff_hlf == HLF_CHD && ptr - line >= change_start |
---|
| 847 | + && n_extra == 0) |
---|
| 848 | diff_hlf = HLF_TXD; /* changed text */ |
---|
| 849 | - if (diff_hlf == HLF_TXD && ptr - line > change_end) |
---|
| 850 | + if (diff_hlf == HLF_TXD && ptr - line > change_end |
---|
| 851 | + && n_extra == 0) |
---|
| 852 | diff_hlf = HLF_CHD; /* changed line */ |
---|
| 853 | line_attr = hl_attr(diff_hlf); |
---|
| 854 | } |
---|
| 855 | diff -Naur vim71.orig/src/search.c vim71/src/search.c |
---|
| 856 | --- vim71.orig/src/search.c 2007-05-07 15:42:02.000000000 -0400 |
---|
| 857 | +++ vim71/src/search.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 858 | @@ -573,8 +573,12 @@ |
---|
| 859 | /* |
---|
| 860 | * Start searching in current line, unless searching backwards and |
---|
| 861 | * we're in column 0. |
---|
| 862 | + * If we are searching backwards, in column 0, and not including the |
---|
| 863 | + * current position, gain some efficiency by skipping back a line. |
---|
| 864 | + * Otherwise begin the search in the current line. |
---|
| 865 | */ |
---|
| 866 | - if (dir == BACKWARD && start_pos.col == 0) |
---|
| 867 | + if (dir == BACKWARD && start_pos.col == 0 |
---|
| 868 | + && (options & SEARCH_START) == 0) |
---|
| 869 | { |
---|
| 870 | lnum = pos->lnum - 1; |
---|
| 871 | at_first_line = FALSE; |
---|
| 872 | @@ -2124,6 +2128,9 @@ |
---|
| 873 | else if (!backwards) |
---|
| 874 | inquote = TRUE; |
---|
| 875 | } |
---|
| 876 | + |
---|
| 877 | + /* ml_get() only keeps one line, need to get linep again */ |
---|
| 878 | + linep = ml_get(pos.lnum); |
---|
| 879 | } |
---|
| 880 | } |
---|
| 881 | } |
---|
| 882 | @@ -2795,7 +2802,7 @@ |
---|
| 883 | i = inc_cursor(); |
---|
| 884 | if (i == -1 || (i >= 1 && last_line)) /* started at last char in file */ |
---|
| 885 | return FAIL; |
---|
| 886 | - if (i == 1 && eol && count == 0) /* started at last char in line */ |
---|
| 887 | + if (i >= 1 && eol && count == 0) /* started at last char in line */ |
---|
| 888 | return OK; |
---|
| 889 | |
---|
| 890 | /* |
---|
| 891 | @@ -3600,13 +3607,16 @@ |
---|
| 892 | { |
---|
| 893 | oap->start = start_pos; |
---|
| 894 | oap->motion_type = MCHAR; |
---|
| 895 | + oap->inclusive = FALSE; |
---|
| 896 | if (sol) |
---|
| 897 | - { |
---|
| 898 | incl(&curwin->w_cursor); |
---|
| 899 | - oap->inclusive = FALSE; |
---|
| 900 | - } |
---|
| 901 | - else |
---|
| 902 | + else if (lt(start_pos, curwin->w_cursor)) |
---|
| 903 | + /* Include the character under the cursor. */ |
---|
| 904 | oap->inclusive = TRUE; |
---|
| 905 | + else |
---|
| 906 | + /* End is before the start (no text in between <>, [], etc.): don't |
---|
| 907 | + * operate on any text. */ |
---|
| 908 | + curwin->w_cursor = start_pos; |
---|
| 909 | } |
---|
| 910 | |
---|
| 911 | return OK; |
---|
| 912 | @@ -3734,7 +3744,7 @@ |
---|
| 913 | |
---|
| 914 | if (in_html_tag(FALSE)) |
---|
| 915 | { |
---|
| 916 | - /* cursor on start tag, move to just after it */ |
---|
| 917 | + /* cursor on start tag, move to its '>' */ |
---|
| 918 | while (*ml_get_cursor() != '>') |
---|
| 919 | if (inc_cursor() < 0) |
---|
| 920 | break; |
---|
| 921 | @@ -3838,7 +3848,7 @@ |
---|
| 922 | /* Exclude the start tag. */ |
---|
| 923 | curwin->w_cursor = start_pos; |
---|
| 924 | while (inc_cursor() >= 0) |
---|
| 925 | - if (*ml_get_cursor() == '>' && lt(curwin->w_cursor, end_pos)) |
---|
| 926 | + if (*ml_get_cursor() == '>') |
---|
| 927 | { |
---|
| 928 | inc_cursor(); |
---|
| 929 | start_pos = curwin->w_cursor; |
---|
| 930 | @@ -3860,7 +3870,11 @@ |
---|
| 931 | #ifdef FEAT_VISUAL |
---|
| 932 | if (VIsual_active) |
---|
| 933 | { |
---|
| 934 | - if (*p_sel == 'e') |
---|
| 935 | + /* If the end is before the start there is no text between tags, select |
---|
| 936 | + * the char under the cursor. */ |
---|
| 937 | + if (lt(end_pos, start_pos)) |
---|
| 938 | + curwin->w_cursor = start_pos; |
---|
| 939 | + else if (*p_sel == 'e') |
---|
| 940 | ++curwin->w_cursor.col; |
---|
| 941 | VIsual = start_pos; |
---|
| 942 | VIsual_mode = 'v'; |
---|
| 943 | @@ -3872,7 +3886,15 @@ |
---|
| 944 | { |
---|
| 945 | oap->start = start_pos; |
---|
| 946 | oap->motion_type = MCHAR; |
---|
| 947 | - oap->inclusive = TRUE; |
---|
| 948 | + if (lt(end_pos, start_pos)) |
---|
| 949 | + { |
---|
| 950 | + /* End is before the start: there is no text between tags; operate |
---|
| 951 | + * on an empty area. */ |
---|
| 952 | + curwin->w_cursor = start_pos; |
---|
| 953 | + oap->inclusive = FALSE; |
---|
| 954 | + } |
---|
| 955 | + else |
---|
| 956 | + oap->inclusive = TRUE; |
---|
| 957 | } |
---|
| 958 | retval = OK; |
---|
| 959 | |
---|
| 960 | diff -Naur vim71.orig/src/syntax.c vim71/src/syntax.c |
---|
| 961 | --- vim71.orig/src/syntax.c 2007-05-07 15:42:55.000000000 -0400 |
---|
| 962 | +++ vim71/src/syntax.c 2007-07-23 19:57:08.000000000 -0400 |
---|
| 963 | @@ -4460,8 +4460,8 @@ |
---|
| 964 | current_syn_inc_tag = ++running_syn_inc_tag; |
---|
| 965 | prev_toplvl_grp = curbuf->b_syn_topgrp; |
---|
| 966 | curbuf->b_syn_topgrp = sgl_id; |
---|
| 967 | - if (source ? do_source(eap->arg, FALSE, FALSE) == FAIL |
---|
| 968 | - : source_runtime(eap->arg, DOSO_NONE) == FAIL) |
---|
| 969 | + if (source ? do_source(eap->arg, FALSE, DOSO_NONE) == FAIL |
---|
| 970 | + : source_runtime(eap->arg, TRUE) == FAIL) |
---|
| 971 | EMSG2(_(e_notopen), eap->arg); |
---|
| 972 | curbuf->b_syn_topgrp = prev_toplvl_grp; |
---|
| 973 | current_syn_inc_tag = prev_syn_inc_tag; |
---|
| 974 | diff -Naur vim71.orig/src/version.c vim71/src/version.c |
---|
| 975 | --- vim71.orig/src/version.c 2007-05-12 06:23:44.000000000 -0400 |
---|
| 976 | +++ vim71/src/version.c 2007-07-23 19:57:09.000000000 -0400 |
---|
| 977 | @@ -667,6 +667,68 @@ |
---|
| 978 | static int included_patches[] = |
---|
| 979 | { /* Add new patch number below this line */ |
---|
| 980 | /**/ |
---|
| 981 | + 33, |
---|
| 982 | +/**/ |
---|
| 983 | + 32, |
---|
| 984 | +/**/ |
---|
| 985 | + 31, |
---|
| 986 | +/**/ |
---|
| 987 | + 30, |
---|
| 988 | +/**/ |
---|
| 989 | + 29, |
---|
| 990 | +/**/ |
---|
| 991 | + 28, |
---|
| 992 | +/**/ |
---|
| 993 | + 27, |
---|
| 994 | +/**/ |
---|
| 995 | + 26, |
---|
| 996 | +/**/ |
---|
| 997 | + 25, |
---|
| 998 | +/**/ |
---|
| 999 | + 24, |
---|
| 1000 | +/**/ |
---|
| 1001 | + 23, |
---|
| 1002 | +/**/ |
---|
| 1003 | + 22, |
---|
| 1004 | +/**/ |
---|
| 1005 | + 21, |
---|
| 1006 | +/**/ |
---|
| 1007 | + 20, |
---|
| 1008 | +/**/ |
---|
| 1009 | + 19, |
---|
| 1010 | +/**/ |
---|
| 1011 | + 18, |
---|
| 1012 | +/**/ |
---|
| 1013 | + 17, |
---|
| 1014 | +/**/ |
---|
| 1015 | + 16, |
---|
| 1016 | +/**/ |
---|
| 1017 | + 15, |
---|
| 1018 | +/**/ |
---|
| 1019 | + 14, |
---|
| 1020 | +/**/ |
---|
| 1021 | + 13, |
---|
| 1022 | +/**/ |
---|
| 1023 | + 12, |
---|
| 1024 | +/**/ |
---|
| 1025 | + 11, |
---|
| 1026 | +/**/ |
---|
| 1027 | + 10, |
---|
| 1028 | +/**/ |
---|
| 1029 | + 9, |
---|
| 1030 | +/**/ |
---|
| 1031 | + 8, |
---|
| 1032 | +/**/ |
---|
| 1033 | + 6, |
---|
| 1034 | +/**/ |
---|
| 1035 | + 5, |
---|
| 1036 | +/**/ |
---|
| 1037 | + 4, |
---|
| 1038 | +/**/ |
---|
| 1039 | + 2, |
---|
| 1040 | +/**/ |
---|
| 1041 | + 1, |
---|
| 1042 | +/**/ |
---|
| 1043 | 0 |
---|
| 1044 | }; |
---|
| 1045 | |
---|
| 1046 | diff -Naur vim71.orig/src/vimtutor vim71/src/vimtutor |
---|
| 1047 | --- vim71.orig/src/vimtutor 2004-06-07 10:32:27.000000000 -0400 |
---|
| 1048 | +++ vim71/src/vimtutor 2007-07-23 19:57:09.000000000 -0400 |
---|
| 1049 | @@ -39,18 +39,22 @@ |
---|
| 1050 | # remove the copy of the tutor on exit |
---|
| 1051 | trap "rm -rf $TODELETE" 0 1 2 3 9 11 13 15 |
---|
| 1052 | |
---|
| 1053 | -# Vim could be called "vim" or "vi". Also check for "vim6", for people who |
---|
| 1054 | -# have Vim 5.x installed as "vim" and Vim 6.0 as "vim6". |
---|
| 1055 | -testvim=`which vim6 2>/dev/null` |
---|
| 1056 | -if test -f "$testvim"; then |
---|
| 1057 | - VIM=vim6 |
---|
| 1058 | -else |
---|
| 1059 | - testvim=`which vim` |
---|
| 1060 | +# Vim could be called "vim" or "vi". Also check for "vimN", for people who |
---|
| 1061 | +# have Vim installed with its version number. |
---|
| 1062 | +# We anticipate up to a future Vim 8 version :-). |
---|
| 1063 | +seq="vim vim8 vim75 vim74 vim73 vim72 vim71 vim70 vim7 vim6 vi" |
---|
| 1064 | +for i in $seq; do |
---|
| 1065 | + testvim=`which $i 2>/dev/null` |
---|
| 1066 | if test -f "$testvim"; then |
---|
| 1067 | - VIM=vim |
---|
| 1068 | - else |
---|
| 1069 | - VIM=vi |
---|
| 1070 | + VIM=$i |
---|
| 1071 | + break |
---|
| 1072 | fi |
---|
| 1073 | +done |
---|
| 1074 | + |
---|
| 1075 | +# When no Vim version was found fall back to "vim", you'll get an error message |
---|
| 1076 | +# below. |
---|
| 1077 | +if test -z "$VIM"; then |
---|
| 1078 | + VIM=vim |
---|
| 1079 | fi |
---|
| 1080 | |
---|
| 1081 | # Use Vim to copy the tutor, it knows the value of $VIMRUNTIME |
---|