components/vim/vim72-patches/7.2.031
changeset 198 172fc01ce997
equal deleted inserted replaced
197:fd801ec0737c 198:172fc01ce997
       
     1 To: [email protected]
       
     2 Subject: Patch 7.2.031
       
     3 Fcc: outbox
       
     4 From: Bram Moolenaar <[email protected]>
       
     5 Mime-Version: 1.0
       
     6 Content-Type: text/plain; charset=ISO-8859-1
       
     7 Content-Transfer-Encoding: 8bit
       
     8 ------------
       
     9 
       
    10 Patch 7.2.031
       
    11 Problem:    Information in the viminfo file about previously edited files is
       
    12 	    not available to the user.  There is no way to get a complete list
       
    13 	    of files edited in previous Vim sessions.
       
    14 Solution:   Add v:oldfiles and fill it with the list of old file names when
       
    15 	    first reading the viminfo file.  Add the ":oldfiles" command,
       
    16 	    ":browse oldfiles" and the "#<123" special file name.  Increase
       
    17 	    the default value for 'viminfo' from '20 to '100.
       
    18 Files:	    runtime/doc/cmdline.txt, runtime/doc/eval.txt,
       
    19 	    runtime/doc/starting.txt, runtime/doc/usr_21.txt, src/eval.c,
       
    20 	    src/ex_cmds.c, src/ex_cmds.h, src/ex_docmd.c, src/feature.h,
       
    21 	    src/fileio.c, src/main.c, src/mark.c, src/misc1.c,
       
    22 	    src/proto/eval.pro, src/proto/ex_cmds.pro, src/proto/mark.pro,
       
    23 	    src/option.c, src/structs.h, src/vim.h
       
    24 
       
    25 
       
    26 *** ../vim-7.2.030/runtime/doc/cmdline.txt	Sat Aug  9 19:36:46 2008
       
    27 --- runtime/doc/cmdline.txt	Thu Sep 18 22:55:27 2008
       
    28 ***************
       
    29 *** 1,4 ****
       
    30 ! *cmdline.txt*   For Vim version 7.2.  Last change: 2008 Jul 29
       
    31   
       
    32   
       
    33   		  VIM REFERENCE MANUAL    by Bram Moolenaar
       
    34 --- 1,4 ----
       
    35 ! *cmdline.txt*   For Vim version 7.2.  Last change: 2008 Sep 18
       
    36   
       
    37   
       
    38   		  VIM REFERENCE MANUAL    by Bram Moolenaar
       
    39 ***************
       
    40 *** 157,162 ****
       
    41 --- 157,167 ----
       
    42   				(doesn't work at the expression prompt; some
       
    43   				things such as changing the buffer or current
       
    44   				window are not allowed to avoid side effects)
       
    45 + 				When the result is a |List| the items are used
       
    46 + 				as lines.  They can have line breaks inside
       
    47 + 				too.
       
    48 + 				When the result is a Float it's automatically
       
    49 + 				converted to a String.
       
    50   		See |registers| about registers.  {not in Vi}
       
    51   		Implementation detail: When using the |expression| register
       
    52   		and invoking setcmdpos(), this sets the position before
       
    53 ***************
       
    54 *** 730,748 ****
       
    55   In Ex commands, at places where a file name can be used, the following
       
    56   characters have a special meaning.  These can also be used in the expression
       
    57   function expand() |expand()|.
       
    58 ! 	%	is replaced with the current file name			*:_%*
       
    59 ! 	#	is replaced with the alternate file name		*:_#*
       
    60   	#n	(where n is a number) is replaced with the file name of
       
    61 ! 		buffer n.  "#0" is the same as "#"
       
    62 ! 	##	is replaced with all names in the argument list		*:_##*
       
    63   		concatenated, separated by spaces.  Each space in a name
       
    64   		is preceded with a backslash.
       
    65 ! Note that these give the file name as it was typed.  If an absolute path is
       
    66 ! needed (when using the file name from a different directory), you need to add
       
    67 ! ":p".  See |filename-modifiers|.
       
    68   Note that backslashes are inserted before spaces, so that the command will
       
    69   correctly interpret the file name.  But this doesn't happen for shell
       
    70 ! commands.  For those you probably have to use quotes: >
       
    71   	:!ls "%"
       
    72   	:r !spell "%"
       
    73   
       
    74 --- 735,763 ----
       
    75   In Ex commands, at places where a file name can be used, the following
       
    76   characters have a special meaning.  These can also be used in the expression
       
    77   function expand() |expand()|.
       
    78 ! 	%	Is replaced with the current file name.		  *:_%* *c_%*
       
    79 ! 	#	Is replaced with the alternate file name.	  *:_#* *c_#*
       
    80   	#n	(where n is a number) is replaced with the file name of
       
    81 ! 		buffer n.  "#0" is the same as "#".
       
    82 ! 	##	Is replaced with all names in the argument list	  *:_##* *c_##*
       
    83   		concatenated, separated by spaces.  Each space in a name
       
    84   		is preceded with a backslash.
       
    85 ! 	#<n	(where n is a number > 0) is replaced with old	  *:_#<* *c_#<*
       
    86 ! 		file name n.  See |:oldfiles| or |v:oldfiles| to get the
       
    87 ! 		number.							*E809*
       
    88 ! 		{only when compiled with the +eval and +viminfo features}
       
    89 ! 
       
    90 ! Note that these, except "#<n", give the file name as it was typed.  If an
       
    91 ! absolute path is needed (when using the file name from a different directory),
       
    92 ! you need to add ":p".  See |filename-modifiers|.
       
    93 ! 
       
    94 ! The "#<n" item returns an absolute path, but it will start with "~/" for files
       
    95 ! below your home directory.
       
    96 ! 
       
    97   Note that backslashes are inserted before spaces, so that the command will
       
    98   correctly interpret the file name.  But this doesn't happen for shell
       
    99 ! commands.  For those you probably have to use quotes (this fails for files
       
   100 ! that contain a quote and wildcards): >
       
   101   	:!ls "%"
       
   102   	:r !spell "%"
       
   103   
       
   104 *** ../vim-7.2.030/runtime/doc/eval.txt	Sat Aug  9 19:36:47 2008
       
   105 --- runtime/doc/eval.txt	Sun Nov  2 14:25:38 2008
       
   106 ***************
       
   107 *** 1,4 ****
       
   108 ! *eval.txt*	For Vim version 7.2.  Last change: 2008 Aug 09
       
   109   
       
   110   
       
   111   		  VIM REFERENCE MANUAL	  by Bram Moolenaar
       
   112 --- 1,4 ----
       
   113 ! *eval.txt*	For Vim version 7.2.  Last change: 2008 Nov 02
       
   114   
       
   115   
       
   116   		  VIM REFERENCE MANUAL	  by Bram Moolenaar
       
   117 ***************
       
   118 *** 1484,1489 ****
       
   119 --- 1484,1500 ----
       
   120   		This is the screen column number, like with |virtcol()|.  The
       
   121   		value is zero when there was no mouse button click.
       
   122   
       
   123 + 					*v:oldfiles* *oldfiles-variable*
       
   124 + v:oldfiles	List of file names that is loaded from the |viminfo| file on
       
   125 + 		startup.  These are the files that Vim remembers marks for.
       
   126 + 		The length of the List is limited by the ' argument of the
       
   127 + 		'viminfo' option (default is 100).
       
   128 + 		Also see |:oldfiles| and |c_#<|.
       
   129 + 		The List can be modified, but this has no effect on what is
       
   130 + 		stored in the |viminfo| file later.  If you use values other
       
   131 + 		than String this will cause trouble.
       
   132 + 		{only when compiled with the +viminfo feature}
       
   133 + 
       
   134   					*v:operator* *operator-variable*
       
   135   v:operator	The last operator given in Normal mode.  This is a single
       
   136   		character except for commands starting with <g> or <z>,
       
   137 *** ../vim-7.2.030/runtime/doc/starting.txt	Sat Aug  9 19:36:52 2008
       
   138 --- runtime/doc/starting.txt	Sun Nov  9 12:12:19 2008
       
   139 ***************
       
   140 *** 1,4 ****
       
   141 ! *starting.txt*  For Vim version 7.2.  Last change: 2008 Jun 21
       
   142   
       
   143   
       
   144   		  VIM REFERENCE MANUAL    by Bram Moolenaar
       
   145 --- 1,4 ----
       
   146 ! *starting.txt*  For Vim version 7.2.  Last change: 2008 Nov 09
       
   147   
       
   148   
       
   149   		  VIM REFERENCE MANUAL    by Bram Moolenaar
       
   150 ***************
       
   151 *** 1337,1344 ****
       
   152   							*viminfo-read*
       
   153   When Vim is started and the 'viminfo' option is non-empty, the contents of
       
   154   the viminfo file are read and the info can be used in the appropriate places.
       
   155 ! The marks are not read in at startup (but file marks are).  See
       
   156 ! |initialization| for how to set the 'viminfo' option upon startup.
       
   157   
       
   158   							*viminfo-write*
       
   159   When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
       
   160 --- 1335,1343 ----
       
   161   							*viminfo-read*
       
   162   When Vim is started and the 'viminfo' option is non-empty, the contents of
       
   163   the viminfo file are read and the info can be used in the appropriate places.
       
   164 ! The |v:oldfiles| variable is filled.  The marks are not read in at startup
       
   165 ! (but file marks are).  See |initialization| for how to set the 'viminfo'
       
   166 ! option upon startup.
       
   167   
       
   168   							*viminfo-write*
       
   169   When Vim exits and 'viminfo' is non-empty, the info is stored in the viminfo
       
   170 ***************
       
   171 *** 1372,1377 ****
       
   172 --- 1371,1378 ----
       
   173   that start with any string given with the "r" flag in 'viminfo'.  This can be
       
   174   used to avoid saving marks for files on removable media (for MS-DOS you would
       
   175   use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:").
       
   176 + The |v:oldfiles| variable is filled with the file names that the viminfo file
       
   177 + has marks for.
       
   178   
       
   179   							*viminfo-file-marks*
       
   180   Uppercase marks ('A to 'Z) are stored when writing the viminfo file.  The
       
   181 ***************
       
   182 *** 1463,1470 ****
       
   183   						   *:rv* *:rviminfo* *E195*
       
   184   :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
       
   185   			If [!] is given, then any information that is
       
   186 ! 			already set (registers, marks, etc.) will be
       
   187 ! 			overwritten.  {not in Vi}
       
   188   
       
   189   					*:wv* *:wviminfo* *E137* *E138* *E574*
       
   190   :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
       
   191 --- 1464,1471 ----
       
   192   						   *:rv* *:rviminfo* *E195*
       
   193   :rv[iminfo][!] [file]	Read from viminfo file [file] (default: see above).
       
   194   			If [!] is given, then any information that is
       
   195 ! 			already set (registers, marks, |v:oldfiles|, etc.)
       
   196 ! 			will be overwritten   {not in Vi}
       
   197   
       
   198   					*:wv* *:wviminfo* *E137* *E138* *E574*
       
   199   :wv[iminfo][!] [file]	Write to viminfo file [file] (default: see above).
       
   200 ***************
       
   201 *** 1479,1482 ****
       
   202 --- 1480,1499 ----
       
   203   			the .viminfo file.
       
   204   			{not in Vi}
       
   205   
       
   206 + 						*:ol* *:oldfiles*
       
   207 + :ol[dfiles]		List the files that have marks stored in the viminfo
       
   208 + 			file.  This list is read on startup and only changes
       
   209 + 			afterwards with ":rviminfo!".  Also see |v:oldfiles|.
       
   210 + 			The number can be used with |c_#<|.
       
   211 + 			{not in Vi, only when compiled with the +eval feature}
       
   212 + 
       
   213 + :bro[wse] ol[dfiles][!]
       
   214 + 			List file names as with |:oldfiles|, and then prompt
       
   215 + 			for a number.  When the number is valid that file from
       
   216 + 			the list is edited.
       
   217 + 			If you get the |press-enter| prompt you can press "q"
       
   218 + 			and still get the prompt to enter a file number.
       
   219 + 			Use ! to abondon a modified buffer. |abandon|
       
   220 + 			{not when compiled with tiny or small features}
       
   221 + 
       
   222    vim:tw=78:ts=8:ft=help:norl:
       
   223 *** ../vim-7.2.030/runtime/doc/usr_21.txt	Sat Aug  9 19:36:53 2008
       
   224 --- runtime/doc/usr_21.txt	Sun Nov  9 12:14:10 2008
       
   225 ***************
       
   226 *** 1,4 ****
       
   227 ! *usr_21.txt*	For Vim version 7.2.  Last change: 2007 May 01
       
   228   
       
   229   		     VIM USER MANUAL - by Bram Moolenaar
       
   230   
       
   231 --- 1,4 ----
       
   232 ! *usr_21.txt*	For Vim version 7.2.  Last change: 2008 Nov 09
       
   233   
       
   234   		     VIM USER MANUAL - by Bram Moolenaar
       
   235   
       
   236 ***************
       
   237 *** 153,159 ****
       
   238   to be lost.  Each item can be remembered only once.
       
   239   
       
   240   
       
   241 ! GETTING BACK TO WHERE YOU WERE
       
   242   
       
   243   You are halfway editing a file and it's time to leave for holidays.  You exit
       
   244   Vim and go enjoy yourselves, forgetting all about your work.  After a couple
       
   245 --- 153,159 ----
       
   246   to be lost.  Each item can be remembered only once.
       
   247   
       
   248   
       
   249 ! GETTING BACK TO WHERE YOU STOPPED VIM
       
   250   
       
   251   You are halfway editing a file and it's time to leave for holidays.  You exit
       
   252   Vim and go enjoy yourselves, forgetting all about your work.  After a couple
       
   253 ***************
       
   254 *** 168,173 ****
       
   255 --- 168,215 ----
       
   256      The |:marks| command is useful to find out where '0 to '9 will take you.
       
   257   
       
   258   
       
   259 + GETTING BACK TO SOME FILE
       
   260 + 
       
   261 + If you want to go back to a file that you edited recently, but not when
       
   262 + exiting Vim, there is a slightly more complicated way.  You can see a list of
       
   263 + files by typing the command: >
       
   264 + 
       
   265 + 	:oldfiles
       
   266 + <	1: ~/.viminfo ~
       
   267 + 	2: ~/text/resume.txt ~
       
   268 + 	3: /tmp/draft ~
       
   269 + 
       
   270 + Now you would like to edit the second file, which is in the list preceded by
       
   271 + "2:".  You type: >
       
   272 + 
       
   273 + 	:e #<2
       
   274 + 
       
   275 + Instead of ":e" you can use any command that has a file name argument, the
       
   276 + "#<2" item works in the same place as "%" (current file name) and "#"
       
   277 + (alternate file name).  So you can also split the window to edit the third
       
   278 + file: >
       
   279 + 
       
   280 + 	:split #<3
       
   281 + 
       
   282 + That #<123 thing is a bit complicated when you just want to edit a file.
       
   283 + Fortunately there is a simpler way: >
       
   284 + 
       
   285 + 	:browse oldfiles
       
   286 + <	1: ~/.viminfo ~
       
   287 + 	2: ~/text/resume.txt ~
       
   288 + 	3: /tmp/draft ~
       
   289 + 	-- More --
       
   290 + 
       
   291 + You get the same list of files as with |:oldfiles|.  If you want to edit
       
   292 + "resume.txt" first press "q" to stop the listing.  You will get a prompt:
       
   293 + 
       
   294 + 	Type number and <Enter> (empty cancels): ~
       
   295 + 
       
   296 + Type "2" and press <Enter> to edit the second file.
       
   297 + 
       
   298 + More info at |:oldfiles|, |v:oldfiles| and |c_#<|.
       
   299 + 
       
   300 + 
       
   301   MOVE INFO FROM ONE VIM TO ANOTHER
       
   302   
       
   303   You can use the ":wviminfo" and ":rviminfo" commands to save and restore the
       
   304 *** ../vim-7.2.030/src/eval.c	Thu Nov  6 11:04:50 2008
       
   305 --- src/eval.c	Sun Nov  9 11:59:39 2008
       
   306 ***************
       
   307 *** 348,353 ****
       
   308 --- 348,354 ----
       
   309       {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
       
   310       {VV_NAME("operator",	 VAR_STRING), VV_RO},
       
   311       {VV_NAME("searchforward",	 VAR_NUMBER), 0},
       
   312 +     {VV_NAME("oldfiles",	 VAR_LIST), 0},
       
   313   };
       
   314   
       
   315   /* shorthand */
       
   316 ***************
       
   317 *** 355,360 ****
       
   318 --- 356,362 ----
       
   319   #define vv_nr		vv_di.di_tv.vval.v_number
       
   320   #define vv_float	vv_di.di_tv.vval.v_float
       
   321   #define vv_str		vv_di.di_tv.vval.v_string
       
   322 + #define vv_list		vv_di.di_tv.vval.v_list
       
   323   #define vv_tv		vv_di.di_tv
       
   324   
       
   325   /*
       
   326 ***************
       
   327 *** 426,432 ****
       
   328   static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
       
   329   static void list_append __ARGS((list_T *l, listitem_T *item));
       
   330   static int list_append_tv __ARGS((list_T *l, typval_T *tv));
       
   331 - static int list_append_string __ARGS((list_T *l, char_u *str, int len));
       
   332   static int list_append_number __ARGS((list_T *l, varnumber_T n));
       
   333   static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
       
   334   static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
       
   335 --- 428,433 ----
       
   336 ***************
       
   337 *** 845,852 ****
       
   338   	p = &vimvars[i];
       
   339   	if (p->vv_di.di_tv.v_type == VAR_STRING)
       
   340   	{
       
   341 ! 	    vim_free(p->vv_di.di_tv.vval.v_string);
       
   342 ! 	    p->vv_di.di_tv.vval.v_string = NULL;
       
   343   	}
       
   344       }
       
   345       hash_clear(&vimvarht);
       
   346 --- 846,858 ----
       
   347   	p = &vimvars[i];
       
   348   	if (p->vv_di.di_tv.v_type == VAR_STRING)
       
   349   	{
       
   350 ! 	    vim_free(p->vv_string);
       
   351 ! 	    p->vv_string = NULL;
       
   352 ! 	}
       
   353 ! 	else if (p->vv_di.di_tv.v_type == VAR_LIST)
       
   354 ! 	{
       
   355 ! 	    list_unref(p->vv_list);
       
   356 ! 	    p->vv_list = NULL;
       
   357   	}
       
   358       }
       
   359       hash_clear(&vimvarht);
       
   360 ***************
       
   361 *** 6057,6062 ****
       
   362 --- 6063,6087 ----
       
   363   }
       
   364   
       
   365   /*
       
   366 +  * Get list item "l[idx - 1]" as a string.  Returns NULL for failure.
       
   367 +  */
       
   368 +     char_u *
       
   369 + list_find_str(l, idx)
       
   370 +     list_T	*l;
       
   371 +     long	idx;
       
   372 + {
       
   373 +     listitem_T	*li;
       
   374 + 
       
   375 +     li = list_find(l, idx - 1);
       
   376 +     if (li == NULL)
       
   377 +     {
       
   378 + 	EMSGN(_(e_listidx), idx);
       
   379 + 	return NULL;
       
   380 +     }
       
   381 +     return get_tv_string(&li->li_tv);
       
   382 + }
       
   383 + 
       
   384 + /*
       
   385    * Locate "item" list "l" and return its index.
       
   386    * Returns -1 when "item" is not in the list.
       
   387    */
       
   388 ***************
       
   389 *** 6147,6153 ****
       
   390    * When "len" >= 0 use "str[len]".
       
   391    * Returns FAIL when out of memory.
       
   392    */
       
   393 !     static int
       
   394   list_append_string(l, str, len)
       
   395       list_T	*l;
       
   396       char_u	*str;
       
   397 --- 6172,6178 ----
       
   398    * When "len" >= 0 use "str[len]".
       
   399    * Returns FAIL when out of memory.
       
   400    */
       
   401 !     int
       
   402   list_append_string(l, str, len)
       
   403       list_T	*l;
       
   404       char_u	*str;
       
   405 ***************
       
   406 *** 6507,6512 ****
       
   407 --- 6532,6540 ----
       
   408   	set_ref_in_ht(&fc->l_avars.dv_hashtab, copyID);
       
   409       }
       
   410   
       
   411 +     /* v: vars */
       
   412 +     set_ref_in_ht(&vimvarht, copyID);
       
   413 + 
       
   414       /*
       
   415        * 2. Go through the list of dicts and free items without the copyID.
       
   416        */
       
   417 ***************
       
   418 *** 6597,6603 ****
       
   419       {
       
   420   	case VAR_DICT:
       
   421   	    dd = tv->vval.v_dict;
       
   422 ! 	    if (dd->dv_copyID != copyID)
       
   423   	    {
       
   424   		/* Didn't see this dict yet. */
       
   425   		dd->dv_copyID = copyID;
       
   426 --- 6625,6631 ----
       
   427       {
       
   428   	case VAR_DICT:
       
   429   	    dd = tv->vval.v_dict;
       
   430 ! 	    if (dd != NULL && dd->dv_copyID != copyID)
       
   431   	    {
       
   432   		/* Didn't see this dict yet. */
       
   433   		dd->dv_copyID = copyID;
       
   434 ***************
       
   435 *** 6607,6613 ****
       
   436   
       
   437   	case VAR_LIST:
       
   438   	    ll = tv->vval.v_list;
       
   439 ! 	    if (ll->lv_copyID != copyID)
       
   440   	    {
       
   441   		/* Didn't see this list yet. */
       
   442   		ll->lv_copyID = copyID;
       
   443 --- 6635,6641 ----
       
   444   
       
   445   	case VAR_LIST:
       
   446   	    ll = tv->vval.v_list;
       
   447 ! 	    if (ll != NULL && ll->lv_copyID != copyID)
       
   448   	    {
       
   449   		/* Didn't see this list yet. */
       
   450   		ll->lv_copyID = copyID;
       
   451 ***************
       
   452 *** 18106,18111 ****
       
   453 --- 18134,18150 ----
       
   454   }
       
   455   
       
   456   /*
       
   457 +  * Get List v: variable value.  Caller must take care of reference count when
       
   458 +  * needed.
       
   459 +  */
       
   460 +     list_T *
       
   461 + get_vim_var_list(idx)
       
   462 +     int		idx;
       
   463 + {
       
   464 +     return vimvars[idx].vv_list;
       
   465 + }
       
   466 + 
       
   467 + /*
       
   468    * Set v:count, v:count1 and v:prevcount.
       
   469    */
       
   470       void
       
   471 ***************
       
   472 *** 18141,18146 ****
       
   473 --- 18180,18199 ----
       
   474   }
       
   475   
       
   476   /*
       
   477 +  * Set List v: variable to "val".
       
   478 +  */
       
   479 +     void
       
   480 + set_vim_var_list(idx, val)
       
   481 +     int		idx;
       
   482 +     list_T	*val;
       
   483 + {
       
   484 +     list_unref(vimvars[idx].vv_list);
       
   485 +     vimvars[idx].vv_list = val;
       
   486 +     if (val != NULL)
       
   487 + 	++val->lv_refcount;
       
   488 + }
       
   489 + 
       
   490 + /*
       
   491    * Set v:register if needed.
       
   492    */
       
   493       void
       
   494 ***************
       
   495 *** 21900,21905 ****
       
   496 --- 21953,22014 ----
       
   497       }
       
   498   }
       
   499   
       
   500 + /*
       
   501 +  * List v:oldfiles in a nice way.
       
   502 +  */
       
   503 + /*ARGSUSED*/
       
   504 +     void
       
   505 + ex_oldfiles(eap)
       
   506 +     exarg_T	*eap;
       
   507 + {
       
   508 +     list_T	*l = vimvars[VV_OLDFILES].vv_list;
       
   509 +     listitem_T	*li;
       
   510 +     int		nr = 0;
       
   511 + 
       
   512 +     if (l == NULL)
       
   513 + 	msg((char_u *)_("No old files"));
       
   514 +     else
       
   515 +     {
       
   516 + 	msg_start();
       
   517 + 	msg_scroll = TRUE;
       
   518 + 	for (li = l->lv_first; li != NULL && !got_int; li = li->li_next)
       
   519 + 	{
       
   520 + 	    msg_outnum((long)++nr);
       
   521 + 	    MSG_PUTS(": ");
       
   522 + 	    msg_outtrans(get_tv_string(&li->li_tv));
       
   523 + 	    msg_putchar('\n');
       
   524 + 	    out_flush();	    /* output one line at a time */
       
   525 + 	    ui_breakcheck();
       
   526 + 	}
       
   527 + 	/* Assume "got_int" was set to truncate the listing. */
       
   528 + 	got_int = FALSE;
       
   529 + 
       
   530 + #ifdef FEAT_BROWSE_CMD
       
   531 + 	if (cmdmod.browse)
       
   532 + 	{
       
   533 + 	    quit_more = FALSE;
       
   534 + 	    nr = prompt_for_number(FALSE);
       
   535 + 	    msg_starthere();
       
   536 + 	    if (nr > 0)
       
   537 + 	    {
       
   538 + 		char_u *p = list_find_str(get_vim_var_list(VV_OLDFILES),
       
   539 + 								    (long)nr);
       
   540 + 
       
   541 + 		if (p != NULL)
       
   542 + 		{
       
   543 + 		    p = expand_env_save(p);
       
   544 + 		    eap->arg = p;
       
   545 + 		    eap->cmdidx = CMD_edit;
       
   546 + 		    cmdmod.browse = FALSE;
       
   547 + 		    do_exedit(eap, NULL);
       
   548 + 		    vim_free(p);
       
   549 + 		}
       
   550 + 	    }
       
   551 + 	}
       
   552 + #endif
       
   553 +     }
       
   554 + }
       
   555 + 
       
   556   #endif /* FEAT_EVAL */
       
   557   
       
   558   
       
   559 *** ../vim-7.2.030/src/ex_cmds.c	Sun Sep 14 21:40:26 2008
       
   560 --- src/ex_cmds.c	Sun Sep 14 13:45:03 2008
       
   561 ***************
       
   562 *** 24,30 ****
       
   563   static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
       
   564   #ifdef FEAT_VIMINFO
       
   565   static char_u *viminfo_filename __ARGS((char_u	*));
       
   566 ! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int want_info, int want_marks, int force_read));
       
   567   static int viminfo_encoding __ARGS((vir_T *virp));
       
   568   static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
       
   569   #endif
       
   570 --- 24,30 ----
       
   571   static void do_filter __ARGS((linenr_T line1, linenr_T line2, exarg_T *eap, char_u *cmd, int do_in, int do_out));
       
   572   #ifdef FEAT_VIMINFO
       
   573   static char_u *viminfo_filename __ARGS((char_u	*));
       
   574 ! static void do_viminfo __ARGS((FILE *fp_in, FILE *fp_out, int flags));
       
   575   static int viminfo_encoding __ARGS((vir_T *virp));
       
   576   static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
       
   577   #endif
       
   578 ***************
       
   579 *** 1676,1689 ****
       
   580   
       
   581   /*
       
   582    * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
       
   583 !  * set are not over-written unless force is TRUE. -- webb
       
   584    */
       
   585       int
       
   586 ! read_viminfo(file, want_info, want_marks, forceit)
       
   587 !     char_u	*file;
       
   588 !     int		want_info;
       
   589 !     int		want_marks;
       
   590 !     int		forceit;
       
   591   {
       
   592       FILE	*fp;
       
   593       char_u	*fname;
       
   594 --- 1676,1687 ----
       
   595   
       
   596   /*
       
   597    * read_viminfo() -- Read the viminfo file.  Registers etc. which are already
       
   598 !  * set are not over-written unless "flags" includes VIF_FORCEIT. -- webb
       
   599    */
       
   600       int
       
   601 ! read_viminfo(file, flags)
       
   602 !     char_u	*file;	    /* file name or NULL to use default name */
       
   603 !     int		flags;	    /* VIF_WANT_INFO et al. */
       
   604   {
       
   605       FILE	*fp;
       
   606       char_u	*fname;
       
   607 ***************
       
   608 *** 1691,1697 ****
       
   609       if (no_viminfo())
       
   610   	return FAIL;
       
   611   
       
   612 !     fname = viminfo_filename(file);	    /* may set to default if NULL */
       
   613       if (fname == NULL)
       
   614   	return FAIL;
       
   615       fp = mch_fopen((char *)fname, READBIN);
       
   616 --- 1689,1695 ----
       
   617       if (no_viminfo())
       
   618   	return FAIL;
       
   619   
       
   620 !     fname = viminfo_filename(file);	/* get file name in allocated buffer */
       
   621       if (fname == NULL)
       
   622   	return FAIL;
       
   623       fp = mch_fopen((char *)fname, READBIN);
       
   624 ***************
       
   625 *** 1701,1708 ****
       
   626   	verbose_enter();
       
   627   	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
       
   628   		fname,
       
   629 ! 		want_info ? _(" info") : "",
       
   630 ! 		want_marks ? _(" marks") : "",
       
   631   		fp == NULL ? _(" FAILED") : "");
       
   632   	verbose_leave();
       
   633       }
       
   634 --- 1699,1707 ----
       
   635   	verbose_enter();
       
   636   	smsg((char_u *)_("Reading viminfo file \"%s\"%s%s%s"),
       
   637   		fname,
       
   638 ! 		(flags & VIF_WANT_INFO) ? _(" info") : "",
       
   639 ! 		(flags & VIF_WANT_MARKS) ? _(" marks") : "",
       
   640 ! 		(flags & VIF_GET_OLDFILES) ? _(" oldfiles") : "",
       
   641   		fp == NULL ? _(" FAILED") : "");
       
   642   	verbose_leave();
       
   643       }
       
   644 ***************
       
   645 *** 1712,1721 ****
       
   646   	return FAIL;
       
   647   
       
   648       viminfo_errcnt = 0;
       
   649 !     do_viminfo(fp, NULL, want_info, want_marks, forceit);
       
   650   
       
   651       fclose(fp);
       
   652 - 
       
   653       return OK;
       
   654   }
       
   655   
       
   656 --- 1711,1719 ----
       
   657   	return FAIL;
       
   658   
       
   659       viminfo_errcnt = 0;
       
   660 !     do_viminfo(fp, NULL, flags);
       
   661   
       
   662       fclose(fp);
       
   663       return OK;
       
   664   }
       
   665   
       
   666 ***************
       
   667 *** 1968,1974 ****
       
   668       }
       
   669   
       
   670       viminfo_errcnt = 0;
       
   671 !     do_viminfo(fp_in, fp_out, !forceit, !forceit, FALSE);
       
   672   
       
   673       fclose(fp_out);	    /* errors are ignored !? */
       
   674       if (fp_in != NULL)
       
   675 --- 1966,1972 ----
       
   676       }
       
   677   
       
   678       viminfo_errcnt = 0;
       
   679 !     do_viminfo(fp_in, fp_out, forceit ? 0 : (VIF_WANT_INFO | VIF_WANT_MARKS));
       
   680   
       
   681       fclose(fp_out);	    /* errors are ignored !? */
       
   682       if (fp_in != NULL)
       
   683 ***************
       
   684 *** 2041,2052 ****
       
   685    * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
       
   686    */
       
   687       static void
       
   688 ! do_viminfo(fp_in, fp_out, want_info, want_marks, force_read)
       
   689       FILE	*fp_in;
       
   690       FILE	*fp_out;
       
   691 !     int		want_info;
       
   692 !     int		want_marks;
       
   693 !     int		force_read;
       
   694   {
       
   695       int		count = 0;
       
   696       int		eof = FALSE;
       
   697 --- 2039,2048 ----
       
   698    * do_viminfo() -- Should only be called from read_viminfo() & write_viminfo().
       
   699    */
       
   700       static void
       
   701 ! do_viminfo(fp_in, fp_out, flags)
       
   702       FILE	*fp_in;
       
   703       FILE	*fp_out;
       
   704 !     int		flags;
       
   705   {
       
   706       int		count = 0;
       
   707       int		eof = FALSE;
       
   708 ***************
       
   709 *** 2061,2068 ****
       
   710   
       
   711       if (fp_in != NULL)
       
   712       {
       
   713 ! 	if (want_info)
       
   714 ! 	    eof = read_viminfo_up_to_marks(&vir, force_read, fp_out != NULL);
       
   715   	else
       
   716   	    /* Skip info, find start of marks */
       
   717   	    while (!(eof = viminfo_readline(&vir))
       
   718 --- 2057,2065 ----
       
   719   
       
   720       if (fp_in != NULL)
       
   721       {
       
   722 ! 	if (flags & VIF_WANT_INFO)
       
   723 ! 	    eof = read_viminfo_up_to_marks(&vir,
       
   724 ! 					 flags & VIF_FORCEIT, fp_out != NULL);
       
   725   	else
       
   726   	    /* Skip info, find start of marks */
       
   727   	    while (!(eof = viminfo_readline(&vir))
       
   728 ***************
       
   729 *** 2092,2099 ****
       
   730   	write_viminfo_bufferlist(fp_out);
       
   731   	count = write_viminfo_marks(fp_out);
       
   732       }
       
   733 !     if (fp_in != NULL && want_marks)
       
   734 ! 	copy_viminfo_marks(&vir, fp_out, count, eof);
       
   735   
       
   736       vim_free(vir.vir_line);
       
   737   #ifdef FEAT_MBYTE
       
   738 --- 2089,2097 ----
       
   739   	write_viminfo_bufferlist(fp_out);
       
   740   	count = write_viminfo_marks(fp_out);
       
   741       }
       
   742 !     if (fp_in != NULL
       
   743 ! 	    && (flags & (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)))
       
   744 ! 	copy_viminfo_marks(&vir, fp_out, count, eof, flags);
       
   745   
       
   746       vim_free(vir.vir_line);
       
   747   #ifdef FEAT_MBYTE
       
   748 *** ../vim-7.2.030/src/ex_cmds.h	Thu Nov  6 20:47:00 2008
       
   749 --- src/ex_cmds.h	Thu Sep 18 22:18:14 2008
       
   750 ***************
       
   751 *** 653,658 ****
       
   752 --- 653,660 ----
       
   753   			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
       
   754   EX(CMD_open,		"open",		ex_open,
       
   755   			RANGE|EXTRA),
       
   756 + EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
       
   757 + 			BANG|TRLBAR|SBOXOK|CMDWIN),
       
   758   EX(CMD_omap,		"omap",		ex_map,
       
   759   			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
       
   760   EX(CMD_omapclear,	"omapclear",	ex_mapclear,
       
   761 *** ../vim-7.2.030/src/ex_docmd.c	Thu Nov  6 17:16:06 2008
       
   762 --- src/ex_docmd.c	Mon Nov  3 21:21:17 2008
       
   763 ***************
       
   764 *** 364,369 ****
       
   765 --- 364,370 ----
       
   766   # define ex_function		ex_ni
       
   767   # define ex_delfunction		ex_ni
       
   768   # define ex_return		ex_ni
       
   769 + # define ex_oldfiles		ex_ni
       
   770   #endif
       
   771   static char_u	*arg_all __ARGS((void));
       
   772   #ifdef FEAT_SESSION
       
   773 ***************
       
   774 *** 1770,1776 ****
       
   775   			}
       
   776   			if (checkforcmd(&ea.cmd, "browse", 3))
       
   777   			{
       
   778 ! #ifdef FEAT_BROWSE
       
   779   			    cmdmod.browse = TRUE;
       
   780   #endif
       
   781   			    continue;
       
   782 --- 1771,1777 ----
       
   783   			}
       
   784   			if (checkforcmd(&ea.cmd, "browse", 3))
       
   785   			{
       
   786 ! #ifdef FEAT_BROWSE_CMD
       
   787   			    cmdmod.browse = TRUE;
       
   788   #endif
       
   789   			    continue;
       
   790 ***************
       
   791 *** 9508,9531 ****
       
   792   		    break;
       
   793   		}
       
   794   		s = src + 1;
       
   795   		i = (int)getdigits(&s);
       
   796   		*usedlen = (int)(s - src); /* length of what we expand */
       
   797   
       
   798 ! 		buf = buflist_findnr(i);
       
   799 ! 		if (buf == NULL)
       
   800   		{
       
   801 ! 		    *errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
       
   802   		    return NULL;
       
   803   		}
       
   804 ! 		if (lnump != NULL)
       
   805 ! 		    *lnump = ECMD_LAST;
       
   806 ! 		if (buf->b_fname == NULL)
       
   807   		{
       
   808 ! 		    result = (char_u *)"";
       
   809 ! 		    valid = 0;	    /* Must have ":p:h" to be valid */
       
   810   		}
       
   811 - 		else
       
   812 - 		    result = buf->b_fname;
       
   813   		break;
       
   814   
       
   815   #ifdef FEAT_SEARCHPATH
       
   816 --- 9509,9558 ----
       
   817   		    break;
       
   818   		}
       
   819   		s = src + 1;
       
   820 + 		if (*s == '<')		/* "#<99" uses v:oldfiles */
       
   821 + 		    ++s;
       
   822   		i = (int)getdigits(&s);
       
   823   		*usedlen = (int)(s - src); /* length of what we expand */
       
   824   
       
   825 ! 		if (src[1] == '<')
       
   826   		{
       
   827 ! 		    if (*usedlen < 2)
       
   828 ! 		    {
       
   829 ! 			/* Should we give an error message for #<text? */
       
   830 ! 			*usedlen = 1;
       
   831 ! 			return NULL;
       
   832 ! 		    }
       
   833 ! #ifdef FEAT_EVAL
       
   834 ! 		    result = list_find_str(get_vim_var_list(VV_OLDFILES),
       
   835 ! 								     (long)i);
       
   836 ! 		    if (result == NULL)
       
   837 ! 		    {
       
   838 ! 			*errormsg = (char_u *)"";
       
   839 ! 			return NULL;
       
   840 ! 		    }
       
   841 ! #else
       
   842 ! 		    *errormsg = (char_u *)_("E809: #< is not available without the +eval feature");
       
   843   		    return NULL;
       
   844 + #endif
       
   845   		}
       
   846 ! 		else
       
   847   		{
       
   848 ! 		    buf = buflist_findnr(i);
       
   849 ! 		    if (buf == NULL)
       
   850 ! 		    {
       
   851 ! 			*errormsg = (char_u *)_("E194: No alternate file name to substitute for '#'");
       
   852 ! 			return NULL;
       
   853 ! 		    }
       
   854 ! 		    if (lnump != NULL)
       
   855 ! 			*lnump = ECMD_LAST;
       
   856 ! 		    if (buf->b_fname == NULL)
       
   857 ! 		    {
       
   858 ! 			result = (char_u *)"";
       
   859 ! 			valid = 0;	    /* Must have ":p:h" to be valid */
       
   860 ! 		    }
       
   861 ! 		    else
       
   862 ! 			result = buf->b_fname;
       
   863   		}
       
   864   		break;
       
   865   
       
   866   #ifdef FEAT_SEARCHPATH
       
   867 ***************
       
   868 *** 10700,10706 ****
       
   869   	p_viminfo = (char_u *)"'100";
       
   870       if (eap->cmdidx == CMD_rviminfo)
       
   871       {
       
   872 ! 	if (read_viminfo(eap->arg, TRUE, TRUE, eap->forceit) == FAIL)
       
   873   	    EMSG(_("E195: Cannot open viminfo file for reading"));
       
   874       }
       
   875       else
       
   876 --- 10727,10734 ----
       
   877   	p_viminfo = (char_u *)"'100";
       
   878       if (eap->cmdidx == CMD_rviminfo)
       
   879       {
       
   880 ! 	if (read_viminfo(eap->arg, VIF_WANT_INFO | VIF_WANT_MARKS
       
   881 ! 				  | (eap->forceit ? VIF_FORCEIT : 0)) == FAIL)
       
   882   	    EMSG(_("E195: Cannot open viminfo file for reading"));
       
   883       }
       
   884       else
       
   885 *** ../vim-7.2.030/src/feature.h	Wed Aug  6 18:45:07 2008
       
   886 --- src/feature.h	Fri Sep 19 19:14:22 2008
       
   887 ***************
       
   888 *** 767,775 ****
       
   889   
       
   890   /*
       
   891    * +browse		":browse" command.
       
   892    */
       
   893 ! #if defined(FEAT_NORMAL) && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
       
   894 ! # define FEAT_BROWSE
       
   895   #endif
       
   896   
       
   897   /*
       
   898 --- 767,779 ----
       
   899   
       
   900   /*
       
   901    * +browse		":browse" command.
       
   902 +  *			or just the ":browse" command modifier
       
   903    */
       
   904 ! #if defined(FEAT_NORMAL)
       
   905 ! # define FEAT_BROWSE_CMD
       
   906 ! # if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC)
       
   907 ! #  define FEAT_BROWSE
       
   908 ! # endif
       
   909   #endif
       
   910   
       
   911   /*
       
   912 *** ../vim-7.2.030/src/fileio.c	Thu Sep 18 21:29:07 2008
       
   913 --- src/fileio.c	Mon Nov  3 21:21:47 2008
       
   914 ***************
       
   915 *** 2711,2717 ****
       
   916   {
       
   917       if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
       
   918   						  && curbuf->b_ffname != NULL)
       
   919 ! 	read_viminfo(NULL, FALSE, TRUE, FALSE);
       
   920   
       
   921       /* Always set b_marks_read; needed when 'viminfo' is changed to include
       
   922        * the ' parameter after opening a buffer. */
       
   923 --- 2711,2717 ----
       
   924   {
       
   925       if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
       
   926   						  && curbuf->b_ffname != NULL)
       
   927 ! 	read_viminfo(NULL, VIF_WANT_MARKS);
       
   928   
       
   929       /* Always set b_marks_read; needed when 'viminfo' is changed to include
       
   930        * the ' parameter after opening a buffer. */
       
   931 ***************
       
   932 *** 9108,9114 ****
       
   933   set_context_in_autocmd(xp, arg, doautocmd)
       
   934       expand_T	*xp;
       
   935       char_u	*arg;
       
   936 !     int		doautocmd;	/* TRUE for :doautocmd, FALSE for :autocmd */
       
   937   {
       
   938       char_u	*p;
       
   939       int		group;
       
   940 --- 9109,9115 ----
       
   941   set_context_in_autocmd(xp, arg, doautocmd)
       
   942       expand_T	*xp;
       
   943       char_u	*arg;
       
   944 !     int		doautocmd;	/* TRUE for :doauto*, FALSE for :autocmd */
       
   945   {
       
   946       char_u	*p;
       
   947       int		group;
       
   948 *** ../vim-7.2.030/src/main.c	Thu Sep 18 20:55:19 2008
       
   949 --- src/main.c	Sun Sep 14 13:26:10 2008
       
   950 ***************
       
   951 *** 645,655 ****
       
   952   
       
   953   #ifdef FEAT_VIMINFO
       
   954       /*
       
   955 !      * Read in registers, history etc, but not marks, from the viminfo file
       
   956        */
       
   957       if (*p_viminfo != NUL)
       
   958       {
       
   959 ! 	read_viminfo(NULL, TRUE, FALSE, FALSE);
       
   960   	TIME_MSG("reading viminfo");
       
   961       }
       
   962   #endif
       
   963 --- 645,656 ----
       
   964   
       
   965   #ifdef FEAT_VIMINFO
       
   966       /*
       
   967 !      * Read in registers, history etc, but not marks, from the viminfo file.
       
   968 !      * This is where v:oldfiles gets filled.
       
   969        */
       
   970       if (*p_viminfo != NUL)
       
   971       {
       
   972 ! 	read_viminfo(NULL, VIF_WANT_INFO | VIF_GET_OLDFILES);
       
   973   	TIME_MSG("reading viminfo");
       
   974       }
       
   975   #endif
       
   976 *** ../vim-7.2.030/src/mark.c	Sat Aug  9 19:37:29 2008
       
   977 --- src/mark.c	Sun Sep 14 13:46:19 2008
       
   978 ***************
       
   979 *** 1627,1641 ****
       
   980   
       
   981   /*
       
   982    * Handle marks in the viminfo file:
       
   983 !  * fp_out == NULL   read marks for current buffer only
       
   984 !  * fp_out != NULL   copy marks for buffers not in buffer list
       
   985    */
       
   986       void
       
   987 ! copy_viminfo_marks(virp, fp_out, count, eof)
       
   988       vir_T	*virp;
       
   989       FILE	*fp_out;
       
   990       int		count;
       
   991       int		eof;
       
   992   {
       
   993       char_u	*line = virp->vir_line;
       
   994       buf_T	*buf;
       
   995 --- 1627,1643 ----
       
   996   
       
   997   /*
       
   998    * Handle marks in the viminfo file:
       
   999 !  * fp_out != NULL: copy marks for buffers not in buffer list
       
  1000 !  * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
       
  1001 !  * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
       
  1002    */
       
  1003       void
       
  1004 ! copy_viminfo_marks(virp, fp_out, count, eof, flags)
       
  1005       vir_T	*virp;
       
  1006       FILE	*fp_out;
       
  1007       int		count;
       
  1008       int		eof;
       
  1009 +     int		flags;
       
  1010   {
       
  1011       char_u	*line = virp->vir_line;
       
  1012       buf_T	*buf;
       
  1013 ***************
       
  1014 *** 1647,1656 ****
       
  1015 --- 1649,1671 ----
       
  1016       char_u	*p;
       
  1017       char_u	*name_buf;
       
  1018       pos_T	pos;
       
  1019 + #ifdef FEAT_EVAL
       
  1020 +     list_T	*list = NULL;
       
  1021 + #endif
       
  1022   
       
  1023       if ((name_buf = alloc(LSIZE)) == NULL)
       
  1024   	return;
       
  1025       *name_buf = NUL;
       
  1026 + 
       
  1027 + #ifdef FEAT_EVAL
       
  1028 +     if (fp_out == NULL && (flags & (VIF_GET_OLDFILES | VIF_FORCEIT)))
       
  1029 +     {
       
  1030 + 	list = list_alloc();
       
  1031 + 	if (list != NULL)
       
  1032 + 	    set_vim_var_list(VV_OLDFILES, list);
       
  1033 +     }
       
  1034 + #endif
       
  1035 + 
       
  1036       num_marked_files = get_viminfo_parameter('\'');
       
  1037       while (!eof && (count < num_marked_files || fp_out == NULL))
       
  1038       {
       
  1039 ***************
       
  1040 *** 1681,1686 ****
       
  1041 --- 1696,1706 ----
       
  1042   	    p++;
       
  1043   	*p = NUL;
       
  1044   
       
  1045 + #ifdef FEAT_EVAL
       
  1046 + 	if (list != NULL)
       
  1047 + 	    list_append_string(list, str, -1);
       
  1048 + #endif
       
  1049 + 
       
  1050   	/*
       
  1051   	 * If fp_out == NULL, load marks for current buffer.
       
  1052   	 * If fp_out != NULL, copy marks for buffers not in buflist.
       
  1053 ***************
       
  1054 *** 1688,1694 ****
       
  1055   	load_marks = copy_marks_out = FALSE;
       
  1056   	if (fp_out == NULL)
       
  1057   	{
       
  1058 ! 	    if (curbuf->b_ffname != NULL)
       
  1059   	    {
       
  1060   		if (*name_buf == NUL)	    /* only need to do this once */
       
  1061   		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
       
  1062 --- 1708,1714 ----
       
  1063   	load_marks = copy_marks_out = FALSE;
       
  1064   	if (fp_out == NULL)
       
  1065   	{
       
  1066 ! 	    if ((flags & VIF_WANT_MARKS) && curbuf->b_ffname != NULL)
       
  1067   	    {
       
  1068   		if (*name_buf == NUL)	    /* only need to do this once */
       
  1069   		    home_replace(NULL, curbuf->b_ffname, name_buf, LSIZE, TRUE);
       
  1070 *** ../vim-7.2.030/src/misc1.c	Wed Jun 25 00:24:52 2008
       
  1071 --- src/misc1.c	Sun Nov  9 11:47:00 2008
       
  1072 ***************
       
  1073 *** 3245,3253 ****
       
  1074   
       
  1075       /* When using ":silent" assume that <CR> was entered. */
       
  1076       if (mouse_used != NULL)
       
  1077 ! 	MSG_PUTS(_("Type number or click with mouse (<Enter> cancels): "));
       
  1078       else
       
  1079 ! 	MSG_PUTS(_("Choice number (<Enter> cancels): "));
       
  1080   
       
  1081       /* Set the state such that text can be selected/copied/pasted and we still
       
  1082        * get mouse events. */
       
  1083 --- 3245,3253 ----
       
  1084   
       
  1085       /* When using ":silent" assume that <CR> was entered. */
       
  1086       if (mouse_used != NULL)
       
  1087 ! 	MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): "));
       
  1088       else
       
  1089 ! 	MSG_PUTS(_("Type number and <Enter> (empty cancels): "));
       
  1090   
       
  1091       /* Set the state such that text can be selected/copied/pasted and we still
       
  1092        * get mouse events. */
       
  1093 *** ../vim-7.2.030/src/proto/eval.pro	Sun Jan  6 20:06:30 2008
       
  1094 --- src/proto/eval.pro	Sun Nov  9 12:05:56 2008
       
  1095 ***************
       
  1096 *** 17,23 ****
       
  1097   int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
       
  1098   char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
       
  1099   int skip_expr __ARGS((char_u **pp));
       
  1100 ! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int dolist));
       
  1101   char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
       
  1102   int eval_to_number __ARGS((char_u *expr));
       
  1103   list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
       
  1104 --- 17,23 ----
       
  1105   int eval_to_bool __ARGS((char_u *arg, int *error, char_u **nextcmd, int skip));
       
  1106   char_u *eval_to_string_skip __ARGS((char_u *arg, char_u **nextcmd, int skip));
       
  1107   int skip_expr __ARGS((char_u **pp));
       
  1108 ! char_u *eval_to_string __ARGS((char_u *arg, char_u **nextcmd, int convert));
       
  1109   char_u *eval_to_string_safe __ARGS((char_u *arg, char_u **nextcmd, int use_sandbox));
       
  1110   int eval_to_number __ARGS((char_u *expr));
       
  1111   list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
       
  1112 ***************
       
  1113 *** 46,52 ****
       
  1114 --- 46,54 ----
       
  1115   void list_unref __ARGS((list_T *l));
       
  1116   void list_free __ARGS((list_T *l, int recurse));
       
  1117   dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
       
  1118 + char_u *list_find_str __ARGS((list_T *l, long idx));
       
  1119   int list_append_dict __ARGS((list_T *list, dict_T *dict));
       
  1120 + int list_append_string __ARGS((list_T *l, char_u *str, int len));
       
  1121   int garbage_collect __ARGS((void));
       
  1122   dict_T *dict_alloc __ARGS((void));
       
  1123   int dict_add_nr_str __ARGS((dict_T *d, char *key, long nr, char_u *str));
       
  1124 ***************
       
  1125 *** 58,65 ****
       
  1126 --- 60,69 ----
       
  1127   void set_vim_var_nr __ARGS((int idx, long val));
       
  1128   long get_vim_var_nr __ARGS((int idx));
       
  1129   char_u *get_vim_var_str __ARGS((int idx));
       
  1130 + list_T *get_vim_var_list __ARGS((int idx));
       
  1131   void set_vcount __ARGS((long count, long count1));
       
  1132   void set_vim_var_string __ARGS((int idx, char_u *val, int len));
       
  1133 + void set_vim_var_list __ARGS((int idx, list_T *val));
       
  1134   void set_reg_var __ARGS((int c));
       
  1135   char_u *v_exception __ARGS((char_u *oldval));
       
  1136   char_u *v_throwpoint __ARGS((char_u *oldval));
       
  1137 ***************
       
  1138 *** 94,99 ****
       
  1139 --- 98,104 ----
       
  1140   void write_viminfo_varlist __ARGS((FILE *fp));
       
  1141   int store_session_globals __ARGS((FILE *fd));
       
  1142   void last_set_msg __ARGS((scid_T scriptID));
       
  1143 + void ex_oldfiles __ARGS((exarg_T *eap));
       
  1144   int modify_fname __ARGS((char_u *src, int *usedlen, char_u **fnamep, char_u **bufp, int *fnamelen));
       
  1145   char_u *do_string_sub __ARGS((char_u *str, char_u *pat, char_u *sub, char_u *flags));
       
  1146   /* vim: set ft=c : */
       
  1147 *** ../vim-7.2.030/src/proto/ex_cmds.pro	Sat May  5 20:13:58 2007
       
  1148 --- src/proto/ex_cmds.pro	Sat Sep 13 17:27:21 2008
       
  1149 ***************
       
  1150 *** 11,17 ****
       
  1151   char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
       
  1152   void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
       
  1153   int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
       
  1154 ! int read_viminfo __ARGS((char_u *file, int want_info, int want_marks, int forceit));
       
  1155   void write_viminfo __ARGS((char_u *file, int forceit));
       
  1156   int viminfo_readline __ARGS((vir_T *virp));
       
  1157   char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
       
  1158 --- 11,17 ----
       
  1159   char_u *make_filter_cmd __ARGS((char_u *cmd, char_u *itmp, char_u *otmp));
       
  1160   void append_redir __ARGS((char_u *buf, char_u *opt, char_u *fname));
       
  1161   int viminfo_error __ARGS((char *errnum, char *message, char_u *line));
       
  1162 ! int read_viminfo __ARGS((char_u *file, int flags));
       
  1163   void write_viminfo __ARGS((char_u *file, int forceit));
       
  1164   int viminfo_readline __ARGS((vir_T *virp));
       
  1165   char_u *viminfo_readstring __ARGS((vir_T *virp, int off, int convert));
       
  1166 *** ../vim-7.2.030/src/proto/mark.pro	Sat May  5 19:29:37 2007
       
  1167 --- src/proto/mark.pro	Sat Sep 13 18:06:20 2008
       
  1168 ***************
       
  1169 *** 26,30 ****
       
  1170   void write_viminfo_filemarks __ARGS((FILE *fp));
       
  1171   int removable __ARGS((char_u *name));
       
  1172   int write_viminfo_marks __ARGS((FILE *fp_out));
       
  1173 ! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof));
       
  1174   /* vim: set ft=c : */
       
  1175 --- 26,30 ----
       
  1176   void write_viminfo_filemarks __ARGS((FILE *fp));
       
  1177   int removable __ARGS((char_u *name));
       
  1178   int write_viminfo_marks __ARGS((FILE *fp_out));
       
  1179 ! void copy_viminfo_marks __ARGS((vir_T *virp, FILE *fp_out, int count, int eof, int flags));
       
  1180   /* vim: set ft=c : */
       
  1181 *** ../vim-7.2.030/src/option.c	Thu Oct  2 22:48:01 2008
       
  1182 --- src/option.c	Fri Sep 26 22:20:20 2008
       
  1183 ***************
       
  1184 *** 2593,2605 ****
       
  1185   #ifdef FEAT_VIMINFO
       
  1186   			    (char_u *)&p_viminfo, PV_NONE,
       
  1187   #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
       
  1188 ! 			    {(char_u *)"", (char_u *)"'20,<50,s10,h,rA:,rB:"}
       
  1189   #else
       
  1190   # ifdef AMIGA
       
  1191   			    {(char_u *)"",
       
  1192 ! 				 (char_u *)"'20,<50,s10,h,rdf0:,rdf1:,rdf2:"}
       
  1193   # else
       
  1194 ! 			    {(char_u *)"", (char_u *)"'20,<50,s10,h"}
       
  1195   # endif
       
  1196   #endif
       
  1197   #else
       
  1198 --- 2593,2605 ----
       
  1199   #ifdef FEAT_VIMINFO
       
  1200   			    (char_u *)&p_viminfo, PV_NONE,
       
  1201   #if defined(MSDOS) || defined(MSWIN) || defined(OS2)
       
  1202 ! 			    {(char_u *)"", (char_u *)"'100,<50,s10,h,rA:,rB:"}
       
  1203   #else
       
  1204   # ifdef AMIGA
       
  1205   			    {(char_u *)"",
       
  1206 ! 				 (char_u *)"'100,<50,s10,h,rdf0:,rdf1:,rdf2:"}
       
  1207   # else
       
  1208 ! 			    {(char_u *)"", (char_u *)"'100,<50,s10,h"}
       
  1209   # endif
       
  1210   #endif
       
  1211   #else
       
  1212 *** ../vim-7.2.030/src/structs.h	Thu Jul 31 22:04:27 2008
       
  1213 --- src/structs.h	Fri Sep 19 19:15:18 2008
       
  1214 ***************
       
  1215 *** 459,465 ****
       
  1216   typedef struct
       
  1217   {
       
  1218       int		hide;			/* TRUE when ":hide" was used */
       
  1219 ! # ifdef FEAT_BROWSE
       
  1220       int		browse;			/* TRUE to invoke file dialog */
       
  1221   # endif
       
  1222   # ifdef FEAT_WINDOWS
       
  1223 --- 459,465 ----
       
  1224   typedef struct
       
  1225   {
       
  1226       int		hide;			/* TRUE when ":hide" was used */
       
  1227 ! # ifdef FEAT_BROWSE_CMD
       
  1228       int		browse;			/* TRUE to invoke file dialog */
       
  1229   # endif
       
  1230   # ifdef FEAT_WINDOWS
       
  1231 *** ../vim-7.2.030/src/vim.h	Sat Aug  9 19:37:40 2008
       
  1232 --- src/vim.h	Sat Sep 13 17:41:24 2008
       
  1233 ***************
       
  1234 *** 1728,1734 ****
       
  1235   #define VV_MOUSE_COL	51
       
  1236   #define VV_OP		52
       
  1237   #define VV_SEARCHFORWARD 53
       
  1238 ! #define VV_LEN		54	/* number of v: vars */
       
  1239   
       
  1240   #ifdef FEAT_CLIPBOARD
       
  1241   
       
  1242 --- 1728,1735 ----
       
  1243   #define VV_MOUSE_COL	51
       
  1244   #define VV_OP		52
       
  1245   #define VV_SEARCHFORWARD 53
       
  1246 ! #define VV_OLDFILES	54
       
  1247 ! #define VV_LEN		55	/* number of v: vars */
       
  1248   
       
  1249   #ifdef FEAT_CLIPBOARD
       
  1250   
       
  1251 ***************
       
  1252 *** 2054,2057 ****
       
  1253 --- 2055,2064 ----
       
  1254   #define DOSO_VIMRC	1	/* loading vimrc file */
       
  1255   #define DOSO_GVIMRC	2	/* loading gvimrc file */
       
  1256   
       
  1257 + /* flags for read_viminfo() and children */
       
  1258 + #define VIF_WANT_INFO		1	/* load non-mark info */
       
  1259 + #define VIF_WANT_MARKS		2	/* load file marks */
       
  1260 + #define VIF_FORCEIT		4	/* overwrite info already read */
       
  1261 + #define VIF_GET_OLDFILES	8	/* load v:oldfiles */
       
  1262 + 
       
  1263   #endif /* VIM__H */
       
  1264 *** ../vim-7.2.030/src/version.c	Thu Nov  6 20:47:00 2008
       
  1265 --- src/version.c	Sun Nov  9 13:39:19 2008
       
  1266 ***************
       
  1267 *** 678,679 ****
       
  1268 --- 678,681 ----
       
  1269   {   /* Add new patch number below this line */
       
  1270 + /**/
       
  1271 +     31,
       
  1272   /**/
       
  1273 
       
  1274 -- 
       
  1275 hundred-and-one symptoms of being an internet addict:
       
  1276 217. Your sex life has drastically improved...so what if it's only cyber-sex!
       
  1277 
       
  1278  /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
       
  1279 ///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
       
  1280 \\\        download, build and distribute -- http://www.A-A-P.org        ///
       
  1281  \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///