Hi Everyone,

This is my first patch for VIM so pardon me if I did not follow any
instructions properly.

This patch would allow you to create a vertical highlighted line at a
specified column such as column 80. Very useful if you don't want your code
to exceed 80 columns as followed by many projects (I think including VIM).

The thread below is where I initially mentioned this and asked if it would
be a good idea.

http://groups.google.com/group/vim_use/browse_thread/thread/3ee72b0e73dee6c7/f91c21a6b00787b8?lnk=gst&q=a+border+at+fixed+width#f91c21a6b00787b8

Please let me know if there are any issues with the patch. I have tested it
and it seems to work fine (with cursorcolumn as well). But as this is my
first patch, please let me know if I missed something.

The attached guidecolumn.patch.txt contains the patch in the format
specified at the VIM WIKI and guidecolumn.patch is created using CVS patch
feature in TortoiseCVS.

Thanks
_Lone

--~--~---------~--~----~------------~-------~--~----~
You received this message from the "vim_dev" maillist.
For more information, visit http://www.vim.org/maillist.php
-~----------~----~----~----~------~----~------~--~---

*** src\option.c        Tue Apr 14 01:38:04 2009
--- mod\option.c        Tue Apr 14 00:10:12 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_GUC               OPT_WIN(WV_GUC)
  #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:GuideColumn"
  #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
***************
*** 1209,1214 ****
--- 1210,1222 ----
                            {(char_u *)NULL, (char_u *)0L}
  #endif
                                    },
+     {"guidecolumn", "guc",  P_NUM|P_VI_DEF|P_RWIN,
+ #ifdef FEAT_SYN_HL
+                           (char_u *)VAR_WIN, PV_GUC,
+ #else
+                           (char_u *)NULL, PV_NONE,
+ #endif
+                           {(char_u *)0L, (char_u *)0L}},
      {"guifont",           "gfn",  P_STRING|P_VI_DEF|P_RCLR|P_COMMA|P_NODUP,
  #ifdef FEAT_GUI
                            (char_u *)&p_guifont, PV_NONE,
***************
*** 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_GUC:    return (char_u *)&(curwin->w_p_guc);
  #endif
  #ifdef FEAT_DIFF
        case PV_DIFF:   return (char_u *)&(curwin->w_p_diff);
*** src\option.h        Tue Apr 14 01:38:05 2009
--- mod\option.h        Sun Apr 12 10:19:21 2009
***************
*** 1059,1064 ****
--- 1059,1065 ----
  #ifdef FEAT_SYN_HL
      , WV_CUC
      , WV_CUL
+     , WV_GUC
  #endif
  #ifdef FEAT_STL_OPT
      , WV_STL
*** src\screen.c        Tue Apr 14 01:38:06 2009
--- mod\screen.c        Tue Apr 14 01:30:58 2009
***************
*** 2614,2619 ****
--- 2614,2620 ----
      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         rightmost_vcol;
  #endif
  #ifdef FEAT_SPELL
      int               has_spell = FALSE;      /* this buffer has spell 
checking */
***************
*** 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] = ' ';
--- 4477,4508 ----
                --vcol;
            }
  
!           /* Highlight 'cursorcolumn' & 'guidecolumn' 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)
!                     || (wp->w_p_guc
!                           && (int)wp->w_p_guc >= vcol - eol_hl_off
!                           && (int)wp->w_p_guc < W_WIDTH(wp) * (row - startrow
!                                                                     + 1) + v))
  # ifdef FEAT_RIGHTLEFT
                    && !wp->w_p_rl
  # endif
                    )
            {
+                 rightmost_vcol = (wp->w_p_guc > (long)wp->w_virtcol) ?
+                                                     wp->w_p_guc : 
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;
                }
            }
--- 4511,4532 ----
                        ScreenLinesUC[off] = 0;
  #endif
                    ++col;
!                   if (wp->w_p_cuc && vcol == (long)wp->w_virtcol)
                    {
!                       ScreenAttrs[off++] = hl_attr(HLF_CUC);
                    }
!                     else if (wp->w_p_guc && vcol == wp->w_p_guc)
!                     {
!                       ScreenAttrs[off++] = hl_attr(HLF_GUC);
!                     }
!                     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
  
        /*
--- 4584,4610 ----
        }
  
  #ifdef FEAT_SYN_HL
+       vcol_save_attr = -1;
        /* Highlight the cursor column if 'cursorcolumn' is set.  But don't
!        * highlight the cursor position itself. 
!          * Also highlight the 'guidecolumn' 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 (wp->w_p_guc
!                     && vcol == wp->w_p_guc
!                   && draw_state == WL_LINE
!                   && !lnum_in_visual_area)
!       {
!             vcol_save_attr = char_attr;
!           char_attr = hl_combine_attr(char_attr, hl_attr(HLF_GUC));
!       }
  #endif
  
        /*
*** src\structs.h       Tue Apr 14 01:38:07 2009
--- mod\structs.h       Sun Apr 12 10:09:34 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_guc;
+ # define w_p_guc w_onebuf_opt.wo_guc  /* 'guidecolumn' */
  #endif
  #ifdef FEAT_STL_OPT
      char_u    *wo_stl;
*** src\syntax.c        Tue Apr 14 01:38:08 2009
--- mod\syntax.c        Tue Apr 14 00:03:52 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("GuideColumn term=reverse ctermbg=Red",
+            "GuideColumn 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("GuideColumn term=reverse ctermbg=DarkRed",
+            "GuideColumn term=reverse ctermbg=DarkRed guibg=DarkRed"),
  #endif
  #ifdef FEAT_AUTOCMD
        CENT("MatchParen term=reverse ctermbg=DarkCyan",
*** src\vim.h   Tue Apr 14 01:38:09 2009
--- mod\vim.h   Tue Apr 14 00:00:21 2009
***************
*** 1246,1251 ****
--- 1246,1252 ----
      , HLF_TPF     /* tabpage line filler */
      , HLF_CUC     /* 'cursurcolumn' */
      , HLF_CUL     /* 'cursurline' */
+     , HLF_GUC     /* 'guidecolumn' */
      , HLF_COUNT           /* MUST be the last one */
  } hlf_T;
  
***************
*** 1255,1261 ****
                  'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
                  'f', 'F', 'A', 'C', 'D', 'T', '>', \
                  'B', 'P', 'R', 'L', \
!                 '+', '=', 'x', 'X', '*', '#', '_', '!', '.'}
  
  /*
   * Boolean constants
--- 1256,1262 ----
                  '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

Attachment: guidecolumn.patch
Description: Binary data

Raspunde prin e-mail lui