Blob Blame History Raw
To: vim-dev@vim.org
Subject: Patch 7.1.248
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 7.1.248
Problem:    Can't set the '" mark.  Can't know if setpos() was successful.
Solution:   Allow setting the '" mark with setpos().  Have setpos() return a
	    value indicating success/failure.
Files:	    runtime/doc/eval.txt, src/eval.c, src/mark.c


*** ../vim-7.1.247/runtime/doc/eval.txt	Sat Jan 12 16:45:25 2008
--- runtime/doc/eval.txt	Wed Feb 13 11:49:16 2008
***************
*** 1,4 ****
! *eval.txt*      For Vim version 7.1.  Last change: 2008 Jan 11
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
--- 1,4 ----
! *eval.txt*      For Vim version 7.1.  Last change: 2008 Feb 13
  
  
  		  VIM REFERENCE MANUAL    by Bram Moolenaar
***************
*** 4523,4528 ****
--- 4528,4536 ----
  		character.  E.g., a position within a <Tab> or after the last
  		character.
  
+ 		Returns 0 when the position could be set, -1 otherwise.
+ 		An error message is given if {expr} is invalid.
+ 
  		Also see |getpos()|
  
  		This does not restore the preferred column for moving
*** ../vim-7.1.247/src/eval.c	Tue Jan 22 11:58:41 2008
--- src/eval.c	Wed Feb 13 11:54:09 2008
***************
*** 14776,14799 ****
      int		fnum;
      char_u	*name;
  
      name = get_tv_string_chk(argvars);
      if (name != NULL)
      {
  	if (list2fpos(&argvars[1], &pos, &fnum) == OK)
  	{
  	    --pos.col;
! 	    if (name[0] == '.')		/* cursor */
  	    {
  		if (fnum == curbuf->b_fnum)
  		{
  		    curwin->w_cursor = pos;
  		    check_cursor();
  		}
  		else
  		    EMSG(_(e_invarg));
  	    }
! 	    else if (name[0] == '\'')	/* mark */
! 		(void)setmark_pos(name[1], &pos, fnum);
  	    else
  		EMSG(_(e_invarg));
  	}
--- 14778,14808 ----
      int		fnum;
      char_u	*name;
  
+     rettv->vval.v_number = -1;
      name = get_tv_string_chk(argvars);
      if (name != NULL)
      {
  	if (list2fpos(&argvars[1], &pos, &fnum) == OK)
  	{
  	    --pos.col;
! 	    if (name[0] == '.' && name[1] == NUL)
  	    {
+ 		/* set cursor */
  		if (fnum == curbuf->b_fnum)
  		{
  		    curwin->w_cursor = pos;
  		    check_cursor();
+ 		    rettv->vval.v_number = 0;
  		}
  		else
  		    EMSG(_(e_invarg));
  	    }
! 	    else if (name[0] == '\'' && name[1] != NUL && name[2] == NUL)
! 	    {
! 		/* set mark */
! 		if (setmark_pos(name[1], &pos, fnum) == OK)
! 		    rettv->vval.v_number = 0;
! 	    }
  	    else
  		EMSG(_(e_invarg));
  	}
*** ../vim-7.1.247/src/mark.c	Thu Jan  3 20:21:34 2008
--- src/mark.c	Wed Feb 13 11:42:30 2008
***************
*** 79,84 ****
--- 79,90 ----
  	return OK;
      }
  
+     if (c == '"')
+     {
+ 	curbuf->b_last_cursor = *pos;
+ 	return OK;
+     }
+ 
      /* Allow setting '[ and '] for an autocommand that simulates reading a
       * file. */
      if (c == '[')
*** ../vim-7.1.247/src/version.c	Wed Feb 13 10:57:11 2008
--- src/version.c	Wed Feb 13 12:39:23 2008
***************
*** 668,669 ****
--- 668,671 ----
  {   /* Add new patch number below this line */
+ /**/
+     248,
  /**/

-- 
"Making it up?  Why should I want to make anything up?  Life's bad enough
as it is without wanting to invent any more of it."
		-- Marvin, the Paranoid Android in Douglas Adams'
		   "The Hitchhiker's Guide to the Galaxy"

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\        download, build and distribute -- http://www.A-A-P.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///