*** org\option.c	Tue Apr 14 01:38:04 2009
--- src\option.c	Sat May 02 18:25:57 2009
***************
*** 227,232 ****
--- 227,233 ----
  #ifdef FEAT_SYN_HL
  # define PV_CUC		OPT_WIN(WV_CUC)
  # define PV_CUL		OPT_WIN(WV_CUL)
+ # define PV_MC		OPT_WIN(WV_MC)
  #endif
  #ifdef FEAT_STL_OPT
  # define PV_STL		OPT_BOTH(OPT_WIN(WV_STL))
***************
*** 446,452 ****
  #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
  	|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
  	|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL)
! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine"
  #else
  # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
  #endif
--- 447,453 ----
  #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
  	|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
  	|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL)
! # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,g:MarginColumn"
  #else
  # define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
  #endif
***************
*** 1666,1671 ****
--- 1667,1679 ----
  			    {(char_u *)NULL, (char_u *)0L}
  #endif
  			    },
+     {"margincolumn", "mc",  P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SYN_HL
+ 			    (char_u *)VAR_WIN, PV_MC,
+ #else
+ 			    (char_u *)NULL, PV_NONE,
+ #endif
+ 			    {(char_u *)0L, (char_u *)0L}},
      {"matchpairs",  "mps",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
  			    (char_u *)&p_mps, PV_MPS,
  			    {(char_u *)"(:),{:},[:]", (char_u *)0L}},
***************
*** 2465,2471 ****
  			    (char_u *)FALSE,
  #endif
  				(char_u *)0L}},
!     {"textwidth",   "tw",   P_NUM|P_VI_DEF|P_VIM,
  			    (char_u *)&p_tw, PV_TW,
  			    {(char_u *)0L, (char_u *)0L}},
      {"thesaurus",   "tsr",  P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
--- 2473,2479 ----
  			    (char_u *)FALSE,
  #endif
  				(char_u *)0L}},
!     {"textwidth",   "tw",   P_NUM|P_VI_DEF|P_VIM|P_RWIN,
  			    (char_u *)&p_tw, PV_TW,
  			    {(char_u *)0L, (char_u *)0L}},
      {"thesaurus",   "tsr",  P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
***************
*** 9095,9100 ****
--- 9103,9109 ----
  #ifdef FEAT_SYN_HL
  	case PV_CUC:	return (char_u *)&(curwin->w_p_cuc);
  	case PV_CUL:	return (char_u *)&(curwin->w_p_cul);
+ 	case PV_MC:	return (char_u *)&(curwin->w_p_mc);
  #endif
  #ifdef FEAT_DIFF
  	case PV_DIFF:	return (char_u *)&(curwin->w_p_diff);
*** org\option.h	Tue Apr 14 01:38:05 2009
--- src\option.h	Sat May 02 17:37:58 2009
***************
*** 1059,1064 ****
--- 1059,1065 ----
  #ifdef FEAT_SYN_HL
      , WV_CUC
      , WV_CUL
+     , WV_MC
  #endif
  #ifdef FEAT_STL_OPT
      , WV_STL
*** org\screen.c	Tue Apr 14 01:38:06 2009
--- src\screen.c	Sat May 02 18:19:54 2009
***************
*** 2614,2619 ****
--- 2614,2622 ----
      int		has_syntax = FALSE;	/* this buffer has syntax highl. */
      int		save_did_emsg;
      int		eol_hl_off = 0;		/* 1 if highlighted char after EOL */
+     int         margin_vcol = 0;        /* ('margincolumn'-1) (= 0 based col)*/
+     int         draw_margin_col = 0;    /* Only highlight margincolumn if 1*/
+     int         rightmost_vcol;         /* rightmost vcol that needs to draw */
  #endif
  #ifdef FEAT_SPELL
      int		has_spell = FALSE;	/* this buffer has spell checking */
***************
*** 4467,4472 ****
--- 4470,4492 ----
  	if (c == NUL)
  	{
  #ifdef FEAT_SYN_HL
+             if (wp->w_p_mc > 0)
+             {
+                 margin_vcol = wp->w_p_mc - 1;
+                 draw_margin_col = 1;
+             }
+             else if (wp->w_p_mc < 0
+                      && curbuf->b_p_tw > 0)
+             {
+                 margin_vcol = curbuf->b_p_tw;
+                 draw_margin_col = 1;
+             }
+             else
+             {
+                 margin_vcol = -1;
+                 draw_margin_col = 0;
+             }
+ 
  	    if (eol_hl_off > 0 && vcol - eol_hl_off == (long)wp->w_virtcol
  		    && lnum == wp->w_cursor.lnum)
  	    {
***************
*** 4476,4500 ****
  		--vcol;
  	    }
  
! 	    /* Highlight 'cursorcolumn' past end of the line. */
  	    if (wp->w_p_wrap)
  		v = wp->w_skipcol;
  	    else
  		v = wp->w_leftcol;
! 	    /* check if line ends before left margin */
  	    if (vcol < v + col - win_col_off(wp))
- 
  		vcol = v + col - win_col_off(wp);
! 	    if (wp->w_p_cuc
  		    && (int)wp->w_virtcol >= vcol - eol_hl_off
  		    && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
  									   + v
! 		    && lnum != wp->w_cursor.lnum
  # ifdef FEAT_RIGHTLEFT
  		    && !wp->w_p_rl
  # endif
  		    )
  	    {
  		while (col < W_WIDTH(wp))
  		{
  		    ScreenLines[off] = ' ';
--- 4496,4527 ----
  		--vcol;
  	    }
  
! 	    /* Highlight 'cursorcolumn' & 'margincolumn' past end of line. */
  	    if (wp->w_p_wrap)
  		v = wp->w_skipcol;
  	    else
  		v = wp->w_leftcol;
! 	    
!             /* check if line ends before left margin */
  	    if (vcol < v + col - win_col_off(wp))
  		vcol = v + col - win_col_off(wp);
! 
! 	    if (((wp->w_p_cuc
  		    && (int)wp->w_virtcol >= vcol - eol_hl_off
  		    && (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
  									   + v
! 		    && lnum != wp->w_cursor.lnum)
!                     || (draw_margin_col
! 		            && margin_vcol >= vcol - eol_hl_off
! 		            && margin_vcol < W_WIDTH(wp) * (row - startrow + 1)
!                                                                           + v))
  # ifdef FEAT_RIGHTLEFT
  		    && !wp->w_p_rl
  # endif
  		    )
  	    {
+                 rightmost_vcol = (margin_vcol > (long)wp->w_virtcol) ?
+                                                     margin_vcol : wp->w_virtcol;
  		while (col < W_WIDTH(wp))
  		{
  		    ScreenLines[off] = ' ';
***************
*** 4503,4514 ****
  			ScreenLinesUC[off] = 0;
  #endif
  		    ++col;
! 		    if (vcol == (long)wp->w_virtcol)
  		    {
! 			ScreenAttrs[off] = hl_attr(HLF_CUC);
! 			break;
  		    }
! 		    ScreenAttrs[off++] = 0;
  		    ++vcol;
  		}
  	    }
--- 4530,4551 ----
  			ScreenLinesUC[off] = 0;
  #endif
  		    ++col;
! 		    if (wp->w_p_cuc && vcol == (long)wp->w_virtcol)
  		    {
! 			ScreenAttrs[off++] = hl_attr(HLF_CUC);
  		    }
!                     else if (draw_margin_col && vcol == margin_vcol)
!                     {
! 			ScreenAttrs[off++] = hl_attr(HLF_MC);
!                     }
!                     else
!                     {
! 		        ScreenAttrs[off++] = 0;
!                     }
! 
!                     if (vcol >= rightmost_vcol)
!                         break;
! 
  		    ++vcol;
  		}
  	    }
***************
*** 4566,4583 ****
  	}
  
  #ifdef FEAT_SYN_HL
  	/* Highlight the cursor column if 'cursorcolumn' is set.  But don't
! 	 * highlight the cursor position itself. */
  	if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
  		&& lnum != wp->w_cursor.lnum
  		&& draw_state == WL_LINE
  		&& !lnum_in_visual_area)
  	{
! 	    vcol_save_attr = char_attr;
  	    char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
  	}
! 	else
! 	    vcol_save_attr = -1;
  #endif
  
  	/*
--- 4603,4645 ----
  	}
  
  #ifdef FEAT_SYN_HL
+         if (wp->w_p_mc > 0)
+         {
+             margin_vcol = wp->w_p_mc - 1;
+             draw_margin_col = 1;
+         }
+         else if (wp->w_p_mc < 0
+                  && curbuf->b_p_tw > 0)
+         {
+             margin_vcol = curbuf->b_p_tw;
+             draw_margin_col = 1;
+         }
+         else
+         {
+             draw_margin_col = 0;
+         }
+ 
+ 	vcol_save_attr = -1;
  	/* Highlight the cursor column if 'cursorcolumn' is set.  But don't
! 	 * highlight the cursor position itself. 
!          * Also highlight the 'margincolumn' if it is different than
!          * 'cursorcolumn' */
  	if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
  		&& lnum != wp->w_cursor.lnum
  		&& draw_state == WL_LINE
  		&& !lnum_in_visual_area)
  	{
!             vcol_save_attr = char_attr;
  	    char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
  	}
!         else if (draw_margin_col
!                     && vcol == margin_vcol
! 		    && draw_state == WL_LINE
! 		    && !lnum_in_visual_area)
! 	{
!             vcol_save_attr = char_attr;
! 	    char_attr = hl_combine_attr(char_attr, hl_attr(HLF_MC));
! 	}
  #endif
  
  	/*
*** org\structs.h	Tue Apr 14 01:38:07 2009
--- src\structs.h	Sat May 02 17:43:58 2009
***************
*** 200,205 ****
--- 200,207 ----
  # define w_p_cuc w_onebuf_opt.wo_cuc	/* 'cursorcolumn' */
      int		wo_cul;
  # define w_p_cul w_onebuf_opt.wo_cul	/* 'cursorline' */
+     int         wo_mc;
+ # define w_p_mc w_onebuf_opt.wo_mc	/* 'margincolumn' */
  #endif
  #ifdef FEAT_STL_OPT
      char_u	*wo_stl;
*** org\syntax.c	Tue Apr 14 01:38:08 2009
--- src\syntax.c	Sat May 02 17:44:41 2009
***************
*** 6324,6329 ****
--- 6324,6331 ----
  	     "CursorColumn term=reverse ctermbg=LightGrey guibg=Grey90"),
  	CENT("CursorLine term=underline cterm=underline",
  	     "CursorLine term=underline cterm=underline guibg=Grey90"),
+ 	CENT("MarginColumn term=reverse ctermbg=Red",
+ 	     "MarginColumn term=reverse ctermbg=Red guibg=Red"),
  #endif
  #ifdef FEAT_AUTOCMD
  	CENT("MatchParen term=reverse ctermbg=Cyan",
***************
*** 6404,6409 ****
--- 6406,6413 ----
  	     "CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey40"),
  	CENT("CursorLine term=underline cterm=underline",
  	     "CursorLine term=underline cterm=underline guibg=Grey40"),
+ 	CENT("MarginColumn term=reverse ctermbg=DarkRed",
+ 	     "MarginColumn term=reverse ctermbg=DarkRed guibg=DarkRed"),
  #endif
  #ifdef FEAT_AUTOCMD
  	CENT("MatchParen term=reverse ctermbg=DarkCyan",
*** org\vim.h	Sat May 02 17:28:39 2009
--- src\vim.h	Sat May 02 17:33:27 2009
***************
*** 1247,1252 ****
--- 1247,1253 ----
      , HLF_TPF	    /* tabpage line filler */
      , HLF_CUC	    /* 'cursurcolumn' */
      , HLF_CUL	    /* 'cursurline' */
+     , HLF_MC	    /* 'margincolumn' */
      , HLF_COUNT	    /* MUST be the last one */
  } hlf_T;
  
***************
*** 1256,1262 ****
  		  'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
  		  'f', 'F', 'A', 'C', 'D', 'T', '>', \
  		  'B', 'P', 'R', 'L', \
! 		  '+', '=', 'x', 'X', '*', '#', '_', '!', '.'}
  
  /*
   * Boolean constants
--- 1257,1263 ----
  		  'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
  		  'f', 'F', 'A', 'C', 'D', 'T', '>', \
  		  'B', 'P', 'R', 'L', \
! 		  '+', '=', 'x', 'X', '*', '#', '_', '!', '.','g'}
  
  /*
   * Boolean constants
*** org\options.txt	Sat Feb 21 12:28:33 2009
--- runtime\doc\options.txt	Sat May 02 18:31:34 2009
***************
*** 3197,3202 ****
--- 3197,3203 ----
  	    :highlight Cursor gui=reverse guifg=NONE guibg=NONE
  	    :highlight Cursor gui=NONE guifg=bg guibg=fg
  <
+ 
  					*'guifont'* *'gfn'*
  						   *E235* *E596* *E610* *E611*
  'guifont' 'gfn'		string	(default "")
***************
*** 4437,4442 ****
--- 4438,4458 ----
  	    :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
  <	This option cannot be set from a |modeline| or in the |sandbox|, for
  	security reasons.
+ 
+ 			*'margincolumn'* *'mc'*
+ 'margincolumn' 'mc'	number	(default 0)
+ 			local to window
+ 			{not in Vi}
+ 			{not available when compiled without the  |+syntax|
+ 			feature}
+ 	Highlight a particular screen column with MarginColumn
+ 	|hl-MarginColumn|.  Useful to align text.  Will make screen redrawing
+ 	slower.
+         If 'margincolumn' < 0 then 'margincolumn' is set equal to 'textwidth'.
+ 	If you only want the highlighting in the current window you can use
+ 	these autocommands: >
+ 		au WinLeave * set mc=0
+ 		au WinEnter * set mc=81
  
  						*'matchpairs'* *'mps'*
  'matchpairs' 'mps'	string	(default "(:),{:},[:]")
