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
guidecolumn.patch
Description: Binary data