mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
Added 'colorcolumn' option. Partly by Gregor Uhlenheuer.
This commit is contained in:
parent
b28ebbca84
commit
1a38442dbc
@ -2163,7 +2163,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
column. This option is useful for viewing the
|
column. This option is useful for viewing the
|
||||||
differences between two versions of a file (see 'diff'); in diff mode,
|
differences between two versions of a file (see 'diff'); in diff mode,
|
||||||
inserted and deleted lines (though not characters within a line) are
|
inserted and deleted lines (though not characters within a line) are
|
||||||
taken into account.
|
taken into account.
|
||||||
|
|
||||||
|
|
||||||
*'cursorcolumn'* *'cuc'* *'nocursorcolumn'* *'nocuc'*
|
*'cursorcolumn'* *'cuc'* *'nocursorcolumn'* *'nocuc'*
|
||||||
@ -4547,6 +4547,25 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
< This option cannot be set from a |modeline| or in the |sandbox|, for
|
< This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
|
*'colorcolumn'* *'cc'*
|
||||||
|
'colorcolumn' 'cc' string (default "")
|
||||||
|
local to window
|
||||||
|
{not in Vi}
|
||||||
|
{not available when compiled without the |+syntax|
|
||||||
|
feature}
|
||||||
|
'colorcolumn' is a comma separated list of screen columns that are
|
||||||
|
highlighted with ColorColumn |hl-ColorColumn|. Useful to align
|
||||||
|
text. Will make screen redrawing slower.
|
||||||
|
The screen column can be an absolute number, or a number preceded with
|
||||||
|
'+' or '-', which is added to or subtracted from 'textwidth'. >
|
||||||
|
|
||||||
|
:set cc=+1 " highlight column after 'textwidth'
|
||||||
|
:set cc=+1,+2,+3 " highlight three columns after 'textwidth'
|
||||||
|
:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
|
||||||
|
<
|
||||||
|
When 'textwidth' is zero then the items with '-' and '+' are not used.
|
||||||
|
A maximum of 256 columns are highlighted.
|
||||||
|
|
||||||
*'matchpairs'* *'mps'*
|
*'matchpairs'* *'mps'*
|
||||||
'matchpairs' 'mps' string (default "(:),{:},[:]")
|
'matchpairs' 'mps' string (default "(:),{:},[:]")
|
||||||
local to buffer
|
local to buffer
|
||||||
@ -6013,7 +6032,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
:set showbreak=>\
|
:set showbreak=>\
|
||||||
< Note the backslash to escape the trailing space. It's easier like
|
< Note the backslash to escape the trailing space. It's easier like
|
||||||
this: >
|
this: >
|
||||||
:let &showbreak = '+++ '
|
:let &showbreak = '+++ '
|
||||||
< Only printable single-cell characters are allowed, excluding <Tab> and
|
< Only printable single-cell characters are allowed, excluding <Tab> and
|
||||||
comma (in a future version the comma might be used to separate the
|
comma (in a future version the comma might be used to separate the
|
||||||
part that is shown at the end and at the start of a line).
|
part that is shown at the end and at the start of a line).
|
||||||
|
@ -4212,6 +4212,8 @@ These are the default highlighting groups. These groups are used by the
|
|||||||
'highlight' option default. Note that the highlighting depends on the value
|
'highlight' option default. Note that the highlighting depends on the value
|
||||||
of 'background'. You can see the current settings with the ":highlight"
|
of 'background'. You can see the current settings with the ":highlight"
|
||||||
command.
|
command.
|
||||||
|
*hl-ColorColumn*
|
||||||
|
ColorColumn used for the columns set with 'colorcolumn'
|
||||||
*hl-Conceal*
|
*hl-Conceal*
|
||||||
Conceal placeholder characters substituted for concealed
|
Conceal placeholder characters substituted for concealed
|
||||||
text (see 'conceallevel')
|
text (see 'conceallevel')
|
||||||
|
@ -101,6 +101,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
|||||||
'buftype' options.txt /*'buftype'*
|
'buftype' options.txt /*'buftype'*
|
||||||
'casemap' options.txt /*'casemap'*
|
'casemap' options.txt /*'casemap'*
|
||||||
'cb' options.txt /*'cb'*
|
'cb' options.txt /*'cb'*
|
||||||
|
'cc' options.txt /*'cc'*
|
||||||
'ccv' options.txt /*'ccv'*
|
'ccv' options.txt /*'ccv'*
|
||||||
'cd' options.txt /*'cd'*
|
'cd' options.txt /*'cd'*
|
||||||
'cdpath' options.txt /*'cdpath'*
|
'cdpath' options.txt /*'cdpath'*
|
||||||
@ -126,6 +127,7 @@ $VIMRUNTIME starting.txt /*$VIMRUNTIME*
|
|||||||
'cmp' options.txt /*'cmp'*
|
'cmp' options.txt /*'cmp'*
|
||||||
'cms' options.txt /*'cms'*
|
'cms' options.txt /*'cms'*
|
||||||
'co' options.txt /*'co'*
|
'co' options.txt /*'co'*
|
||||||
|
'colorcolumn' options.txt /*'colorcolumn'*
|
||||||
'columns' options.txt /*'columns'*
|
'columns' options.txt /*'columns'*
|
||||||
'com' options.txt /*'com'*
|
'com' options.txt /*'com'*
|
||||||
'comments' options.txt /*'comments'*
|
'comments' options.txt /*'comments'*
|
||||||
|
@ -1098,12 +1098,8 @@ Vim 7.3:
|
|||||||
- Conceal feature: no update when moving to another window. (Dominique Pelle,
|
- Conceal feature: no update when moving to another window. (Dominique Pelle,
|
||||||
2010 Jul 5) Vince will look into it.
|
2010 Jul 5) Vince will look into it.
|
||||||
Patches to possibly include:
|
Patches to possibly include:
|
||||||
- Patch for vertical line at certain column position, 'guidecolumn' option.
|
- 'colorcolumn': make it local to window.
|
||||||
(Pankaj Garg, 2009 Apr 14, aka Lone, Apr 15)
|
|
||||||
Update 2009 May 2, 'margincolumn'
|
|
||||||
Alternative patch. (2010 Feb 2, Gregor Uhlenheuer, update 2010 Jul 12)
|
Alternative patch. (2010 Feb 2, Gregor Uhlenheuer, update 2010 Jul 12)
|
||||||
Fix by Lech Lorens, Apr 19
|
|
||||||
When there are multiple columns it makes sense to call it 'guidecolumn'
|
|
||||||
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
- Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
|
||||||
Needs a few tests.
|
Needs a few tests.
|
||||||
- Add different highlighting for a fold line depending on the fold level.
|
- Add different highlighting for a fold line depending on the fold level.
|
||||||
|
137
src/option.c
137
src/option.c
@ -232,6 +232,7 @@
|
|||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
# define PV_CUC OPT_WIN(WV_CUC)
|
# define PV_CUC OPT_WIN(WV_CUC)
|
||||||
# define PV_CUL OPT_WIN(WV_CUL)
|
# define PV_CUL OPT_WIN(WV_CUL)
|
||||||
|
# define PV_CC OPT_WIN(WV_CC)
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_STL_OPT
|
#ifdef FEAT_STL_OPT
|
||||||
# define PV_STL OPT_BOTH(OPT_WIN(WV_STL))
|
# define PV_STL OPT_BOTH(OPT_WIN(WV_STL))
|
||||||
@ -466,7 +467,7 @@ struct vimoption
|
|||||||
#if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
|
#if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
|
||||||
|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
|
|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
|
||||||
|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
|
|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
|
||||||
# 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,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine"
|
# 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,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
|
||||||
#else
|
#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"
|
# 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
|
#endif
|
||||||
@ -774,6 +775,13 @@ static struct vimoption
|
|||||||
(char_u *)NULL, PV_NONE,
|
(char_u *)NULL, PV_NONE,
|
||||||
#endif
|
#endif
|
||||||
{(char_u *)7L, (char_u *)0L} SCRIPTID_INIT},
|
{(char_u *)7L, (char_u *)0L} SCRIPTID_INIT},
|
||||||
|
{"colorcolumn", "cc", P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_RWIN,
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
(char_u *)VAR_WIN, PV_CC,
|
||||||
|
#else
|
||||||
|
(char_u *)NULL, PV_NONE,
|
||||||
|
#endif
|
||||||
|
{(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
|
||||||
{"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
|
{"columns", "co", P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
|
||||||
(char_u *)&Columns, PV_NONE,
|
(char_u *)&Columns, PV_NONE,
|
||||||
{(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
|
{(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
|
||||||
@ -2526,7 +2534,7 @@ static struct vimoption
|
|||||||
(char_u *)FALSE,
|
(char_u *)FALSE,
|
||||||
#endif
|
#endif
|
||||||
(char_u *)0L} SCRIPTID_INIT},
|
(char_u *)0L} SCRIPTID_INIT},
|
||||||
{"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM,
|
{"textwidth", "tw", P_NUM|P_VI_DEF|P_VIM|P_RBUF,
|
||||||
(char_u *)&p_tw, PV_TW,
|
(char_u *)&p_tw, PV_TW,
|
||||||
{(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
|
{(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
|
||||||
{"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
|
{"thesaurus", "tsr", P_STRING|P_EXPAND|P_VI_DEF|P_COMMA|P_NODUP,
|
||||||
@ -2975,6 +2983,9 @@ static void set_string_option_global __ARGS((int opt_idx, char_u **varp));
|
|||||||
static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
|
static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
|
||||||
static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags));
|
static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags));
|
||||||
static char_u *set_chars_option __ARGS((char_u **varp));
|
static char_u *set_chars_option __ARGS((char_u **varp));
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
static int int_cmp __ARGS((const void *a, const void *b));
|
||||||
|
#endif
|
||||||
#ifdef FEAT_CLIPBOARD
|
#ifdef FEAT_CLIPBOARD
|
||||||
static char_u *check_clipboard_option __ARGS((void));
|
static char_u *check_clipboard_option __ARGS((void));
|
||||||
#endif
|
#endif
|
||||||
@ -5638,6 +5649,12 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
/* 'colorcolumn' */
|
||||||
|
else if (varp == &curwin->w_p_cc)
|
||||||
|
errmsg = check_colorcolumn(curwin);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_MULTI_LANG
|
#ifdef FEAT_MULTI_LANG
|
||||||
/* 'helplang' */
|
/* 'helplang' */
|
||||||
else if (varp == &p_hlg)
|
else if (varp == &p_hlg)
|
||||||
@ -6911,6 +6928,85 @@ did_set_string_option(opt_idx, varp, new_value_alloced, oldval, errbuf,
|
|||||||
return errmsg;
|
return errmsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
/*
|
||||||
|
* Simple int comparison function for use with qsort()
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
int_cmp(a, b)
|
||||||
|
const void *a;
|
||||||
|
const void *b;
|
||||||
|
{
|
||||||
|
return *(const int *)a - *(const int *)b;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Handle setting 'colorcolumn' or 'textwidth' in window "wp".
|
||||||
|
* Returns error message, NULL if it's OK.
|
||||||
|
*/
|
||||||
|
char_u *
|
||||||
|
check_colorcolumn(wp)
|
||||||
|
win_T *wp;
|
||||||
|
{
|
||||||
|
char_u *s;
|
||||||
|
int col;
|
||||||
|
int count = 0;
|
||||||
|
int color_cols[256];
|
||||||
|
int i;
|
||||||
|
int j = 0;
|
||||||
|
|
||||||
|
for (s = wp->w_p_cc; *s != NUL && count < 255; ++s)
|
||||||
|
{
|
||||||
|
if (*s == '-' || *s == '+')
|
||||||
|
{
|
||||||
|
/* -N and +N: add to 'textwidth' */
|
||||||
|
col = (*s == '-') ? -1 : 1;
|
||||||
|
++s;
|
||||||
|
if (!VIM_ISDIGIT(*s))
|
||||||
|
return e_invarg;
|
||||||
|
col = col * getdigits(&s);
|
||||||
|
if (wp->w_buffer->b_p_tw == 0)
|
||||||
|
continue; /* 'textwidth' not set, skip this item */
|
||||||
|
col += wp->w_buffer->b_p_tw;
|
||||||
|
if (col < 0)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
else if (VIM_ISDIGIT(*s))
|
||||||
|
col = getdigits(&s);
|
||||||
|
else
|
||||||
|
return e_invarg;
|
||||||
|
color_cols[count++] = col - 1; /* 1-based to 0-based */
|
||||||
|
|
||||||
|
if (*s == NUL)
|
||||||
|
break;
|
||||||
|
if (*s != ',')
|
||||||
|
return e_invarg;
|
||||||
|
}
|
||||||
|
|
||||||
|
vim_free(wp->w_p_cc_cols);
|
||||||
|
if (count == 0)
|
||||||
|
wp->w_p_cc_cols = NULL;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wp->w_p_cc_cols = (int *)alloc((unsigned)sizeof(int) * (count + 1));
|
||||||
|
if (wp->w_p_cc_cols != NULL)
|
||||||
|
{
|
||||||
|
/* sort the columns for faster usage on screen redraw inside
|
||||||
|
* win_line() */
|
||||||
|
qsort(color_cols, count, sizeof(int), int_cmp);
|
||||||
|
|
||||||
|
for (i = 0; i < count; ++i)
|
||||||
|
/* skip duplicates */
|
||||||
|
if (j == 0 || wp->w_p_cc_cols[j - 1] != color_cols[i])
|
||||||
|
wp->w_p_cc_cols[j++] = color_cols[i];
|
||||||
|
wp->w_p_cc_cols[j] = -1; /* end marker */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return NULL; /* no error */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Handle setting 'listchars' or 'fillchars'.
|
* Handle setting 'listchars' or 'fillchars'.
|
||||||
* Returns error message, NULL if it's OK.
|
* Returns error message, NULL if it's OK.
|
||||||
@ -8179,6 +8275,28 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
else if (pp == &curbuf->b_p_tw)
|
||||||
|
{
|
||||||
|
if (curbuf->b_p_tw < 0)
|
||||||
|
{
|
||||||
|
errmsg = e_positive;
|
||||||
|
curbuf->b_p_tw = 0;
|
||||||
|
}
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
# ifdef FEAT_WINDOWS
|
||||||
|
{
|
||||||
|
win_T *wp;
|
||||||
|
tabpage_T *tp;
|
||||||
|
|
||||||
|
FOR_ALL_TAB_WINDOWS(tp, wp)
|
||||||
|
check_colorcolumn(wp);
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
check_colorcolumn(curwin);
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check the bounds for numeric options here
|
* Check the bounds for numeric options here
|
||||||
*/
|
*/
|
||||||
@ -8251,11 +8369,6 @@ set_num_option(opt_idx, varp, value, errbuf, errbuflen, opt_flags)
|
|||||||
errmsg = e_positive;
|
errmsg = e_positive;
|
||||||
curbuf->b_p_ts = 8;
|
curbuf->b_p_ts = 8;
|
||||||
}
|
}
|
||||||
if (curbuf->b_p_tw < 0)
|
|
||||||
{
|
|
||||||
errmsg = e_positive;
|
|
||||||
curbuf->b_p_tw = 0;
|
|
||||||
}
|
|
||||||
if (p_tm < 0)
|
if (p_tm < 0)
|
||||||
{
|
{
|
||||||
errmsg = e_positive;
|
errmsg = e_positive;
|
||||||
@ -9341,6 +9454,7 @@ get_varp(p)
|
|||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
case PV_CUC: return (char_u *)&(curwin->w_p_cuc);
|
case PV_CUC: return (char_u *)&(curwin->w_p_cuc);
|
||||||
case PV_CUL: return (char_u *)&(curwin->w_p_cul);
|
case PV_CUL: return (char_u *)&(curwin->w_p_cul);
|
||||||
|
case PV_CC: return (char_u *)&(curwin->w_p_cc);
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
case PV_DIFF: return (char_u *)&(curwin->w_p_diff);
|
case PV_DIFF: return (char_u *)&(curwin->w_p_diff);
|
||||||
@ -9582,6 +9696,7 @@ copy_winopt(from, to)
|
|||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
to->wo_cuc = from->wo_cuc;
|
to->wo_cuc = from->wo_cuc;
|
||||||
to->wo_cul = from->wo_cul;
|
to->wo_cul = from->wo_cul;
|
||||||
|
to->wo_cc = vim_strsave(from->wo_cc);
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_DIFF
|
#ifdef FEAT_DIFF
|
||||||
to->wo_diff = from->wo_diff;
|
to->wo_diff = from->wo_diff;
|
||||||
@ -9636,6 +9751,9 @@ check_winopt(wop)
|
|||||||
#ifdef FEAT_STL_OPT
|
#ifdef FEAT_STL_OPT
|
||||||
check_string_option(&wop->wo_stl);
|
check_string_option(&wop->wo_stl);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
check_string_option(&wop->wo_cc);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -9660,6 +9778,9 @@ clear_winopt(wop)
|
|||||||
#ifdef FEAT_STL_OPT
|
#ifdef FEAT_STL_OPT
|
||||||
clear_string_option(&wop->wo_stl);
|
clear_string_option(&wop->wo_stl);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
clear_string_option(&wop->wo_cc);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -9682,7 +9803,7 @@ buf_copy_options(buf, flags)
|
|||||||
int did_isk = FALSE;
|
int did_isk = FALSE;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Don't do anything of the buffer is invalid.
|
* Don't do anything if the buffer is invalid.
|
||||||
*/
|
*/
|
||||||
if (buf == NULL || !buf_valid(buf))
|
if (buf == NULL || !buf_valid(buf))
|
||||||
return;
|
return;
|
||||||
|
@ -589,6 +589,10 @@ EXTERN int p_magic; /* 'magic' */
|
|||||||
EXTERN char_u *p_mef; /* 'makeef' */
|
EXTERN char_u *p_mef; /* 'makeef' */
|
||||||
EXTERN char_u *p_mp; /* 'makeprg' */
|
EXTERN char_u *p_mp; /* 'makeprg' */
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
EXTERN char_u *p_cc; /* 'colorcolumn' */
|
||||||
|
EXTERN int p_cc_cols[256]; /* array for 'colorcolumn' columns */
|
||||||
|
#endif
|
||||||
EXTERN long p_mat; /* 'matchtime' */
|
EXTERN long p_mat; /* 'matchtime' */
|
||||||
#ifdef FEAT_MBYTE
|
#ifdef FEAT_MBYTE
|
||||||
EXTERN long p_mco; /* 'maxcombine' */
|
EXTERN long p_mco; /* 'maxcombine' */
|
||||||
@ -1069,6 +1073,7 @@ enum
|
|||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
, WV_CUC
|
, WV_CUC
|
||||||
, WV_CUL
|
, WV_CUL
|
||||||
|
, WV_CC
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_STL_OPT
|
#ifdef FEAT_STL_OPT
|
||||||
, WV_STL
|
, WV_STL
|
||||||
|
@ -544,75 +544,6 @@ iconv_errno()
|
|||||||
}
|
}
|
||||||
#endif /* MACOS_X_ICONVEMU */
|
#endif /* MACOS_X_ICONVEMU */
|
||||||
|
|
||||||
#ifdef USE_MCH_GETTEXT
|
|
||||||
|
|
||||||
#define GETTEXT_BUFNUM 64
|
|
||||||
#define GETTEXT_BUFSIZE 256
|
|
||||||
|
|
||||||
char *
|
|
||||||
mch_gettext(const char *msgid)
|
|
||||||
{
|
|
||||||
static char buf[GETTEXT_BUFNUM][GETTEXT_BUFSIZE];
|
|
||||||
static int bufnum = 0;
|
|
||||||
const char *msg = NULL;
|
|
||||||
CFStringRef strkey = NULL, strmsg = NULL;
|
|
||||||
CFStringEncoding enc;
|
|
||||||
|
|
||||||
if (!msgid)
|
|
||||||
goto MCH_GETTEXT_FINISH;
|
|
||||||
enc = CFStringGetSystemEncoding();
|
|
||||||
TRACE("mch_gettext(%s)\n", msgid);
|
|
||||||
|
|
||||||
strkey = CFStringCreateWithCString(NULL, msgid, enc);
|
|
||||||
if (!strkey)
|
|
||||||
{
|
|
||||||
TRACE(" Can't create a CFString for msgid.\n");
|
|
||||||
goto MCH_GETTEXT_FINISH;
|
|
||||||
}
|
|
||||||
|
|
||||||
strmsg = CFCopyLocalizedString(strkey, NULL);
|
|
||||||
if (!strmsg)
|
|
||||||
{
|
|
||||||
TRACE(" No localized strings for msgid.\n");
|
|
||||||
goto MCH_GETTEXT_FINISH;
|
|
||||||
}
|
|
||||||
|
|
||||||
msg = CFStringGetCStringPtr(strmsg, enc);
|
|
||||||
if (!msg)
|
|
||||||
{
|
|
||||||
/* This is as backup when CFStringGetCStringPtr was failed */
|
|
||||||
CFStringGetCString(strmsg, buf[bufnum], GETTEXT_BUFSIZE, enc);
|
|
||||||
msg = buf[bufnum];
|
|
||||||
if (++bufnum >= GETTEXT_BUFNUM)
|
|
||||||
bufnum = 0;
|
|
||||||
}
|
|
||||||
TRACE(" Localized to: %s\n", msg);
|
|
||||||
|
|
||||||
MCH_GETTEXT_FINISH:
|
|
||||||
if (strkey)
|
|
||||||
CFRelease(strkey);
|
|
||||||
if (strmsg)
|
|
||||||
CFRelease(strmsg);
|
|
||||||
return (char *)(msg ? msg : msgid);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
mch_bindtextdomain(const char *domain, const char *dirname)
|
|
||||||
{
|
|
||||||
TRACE("mch_bindtextdomain(%s, %s)\n", domain, dirname);
|
|
||||||
return (char*)dirname;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
|
||||||
mch_textdomain(const char *domain)
|
|
||||||
{
|
|
||||||
TRACE("mch_textdomain(%s)\n", domain);
|
|
||||||
return (char*)domain;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef FEAT_CLIPBOARD
|
#ifdef FEAT_CLIPBOARD
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -19,6 +19,7 @@ void clear_string_option __ARGS((char_u **pp));
|
|||||||
void set_term_option_alloced __ARGS((char_u **p));
|
void set_term_option_alloced __ARGS((char_u **p));
|
||||||
int was_set_insecurely __ARGS((char_u *opt, int opt_flags));
|
int was_set_insecurely __ARGS((char_u *opt, int opt_flags));
|
||||||
void set_string_option_direct __ARGS((char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid));
|
void set_string_option_direct __ARGS((char_u *name, int opt_idx, char_u *val, int opt_flags, int set_sid));
|
||||||
|
char_u *check_colorcolumn __ARGS((win_T *wp));
|
||||||
char_u *check_stl_option __ARGS((char_u *s));
|
char_u *check_stl_option __ARGS((char_u *s));
|
||||||
int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
|
int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
|
||||||
void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
|
void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
|
||||||
|
100
src/screen.c
100
src/screen.c
@ -2126,6 +2126,23 @@ win_draw_end(wp, c1, c2, row, endrow, hl)
|
|||||||
set_empty_rows(wp, row);
|
set_empty_rows(wp, row);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
static int advance_color_col __ARGS((int vcol, int **color_cols));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Advance **color_cols and return TRUE when there are columns to draw.
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
advance_color_col(vcol, color_cols)
|
||||||
|
int vcol;
|
||||||
|
int **color_cols;
|
||||||
|
{
|
||||||
|
while (**color_cols >= 0 && vcol > **color_cols)
|
||||||
|
++*color_cols;
|
||||||
|
return (**color_cols >= 0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_FOLDING
|
#ifdef FEAT_FOLDING
|
||||||
/*
|
/*
|
||||||
* Display one folded line.
|
* Display one folded line.
|
||||||
@ -2666,6 +2683,8 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
int has_syntax = FALSE; /* this buffer has syntax highl. */
|
int has_syntax = FALSE; /* this buffer has syntax highl. */
|
||||||
int save_did_emsg;
|
int save_did_emsg;
|
||||||
int eol_hl_off = 0; /* 1 if highlighted char after EOL */
|
int eol_hl_off = 0; /* 1 if highlighted char after EOL */
|
||||||
|
int draw_color_col = FALSE; /* highlight colorcolumn */
|
||||||
|
int *color_cols = NULL; /* pointer to according columns array */
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_SPELL
|
#ifdef FEAT_SPELL
|
||||||
int has_spell = FALSE; /* this buffer has spell checking */
|
int has_spell = FALSE; /* this buffer has spell checking */
|
||||||
@ -2795,6 +2814,11 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
extra_check = TRUE;
|
extra_check = TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Check for columns to display for 'colorcolumn'. */
|
||||||
|
color_cols = wp->w_p_cc_cols;
|
||||||
|
if (color_cols != NULL)
|
||||||
|
draw_color_col = advance_color_col(vcol, &color_cols);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_SPELL
|
#ifdef FEAT_SPELL
|
||||||
@ -3073,6 +3097,7 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
#if defined(FEAT_SYN_HL) || defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
|
#if defined(FEAT_SYN_HL) || defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
|
||||||
/* When:
|
/* When:
|
||||||
* - 'cuc' is set, or
|
* - 'cuc' is set, or
|
||||||
|
* - 'colorcolumn' is set, or
|
||||||
* - 'virtualedit' is set, or
|
* - 'virtualedit' is set, or
|
||||||
* - the visual mode is active,
|
* - the visual mode is active,
|
||||||
* the end of the line may be before the start of the displayed part.
|
* the end of the line may be before the start of the displayed part.
|
||||||
@ -3080,6 +3105,7 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
if (vcol < v && (
|
if (vcol < v && (
|
||||||
# ifdef FEAT_SYN_HL
|
# ifdef FEAT_SYN_HL
|
||||||
wp->w_p_cuc
|
wp->w_p_cuc
|
||||||
|
|| draw_color_col
|
||||||
# if defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
|
# if defined(FEAT_VIRTUALEDIT) || defined(FEAT_VISUAL)
|
||||||
||
|
||
|
||||||
# endif
|
# endif
|
||||||
@ -4641,25 +4667,41 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
--vcol;
|
--vcol;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Highlight 'cursorcolumn' past end of the line. */
|
/* Highlight 'cursorcolumn' & 'colorcolumn' past end of the line. */
|
||||||
if (wp->w_p_wrap)
|
if (wp->w_p_wrap)
|
||||||
v = wp->w_skipcol;
|
v = wp->w_skipcol;
|
||||||
else
|
else
|
||||||
v = wp->w_leftcol;
|
v = wp->w_leftcol;
|
||||||
|
|
||||||
/* check if line ends before left margin */
|
/* check if line ends before left margin */
|
||||||
if (vcol < v + col - win_col_off(wp))
|
if (vcol < v + col - win_col_off(wp))
|
||||||
|
|
||||||
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
|
if (draw_color_col)
|
||||||
&& (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
|
draw_color_col = advance_color_col(vcol, &color_cols);
|
||||||
|
|
||||||
|
if (((wp->w_p_cuc
|
||||||
|
&& (int)wp->w_virtcol >= vcol - eol_hl_off
|
||||||
|
&& (int)wp->w_virtcol < W_WIDTH(wp) * (row - startrow + 1)
|
||||||
+ v
|
+ v
|
||||||
&& lnum != wp->w_cursor.lnum
|
&& lnum != wp->w_cursor.lnum)
|
||||||
|
|| draw_color_col)
|
||||||
# ifdef FEAT_RIGHTLEFT
|
# ifdef FEAT_RIGHTLEFT
|
||||||
&& !wp->w_p_rl
|
&& !wp->w_p_rl
|
||||||
# endif
|
# endif
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
int rightmost_vcol = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (wp->w_p_cuc)
|
||||||
|
rightmost_vcol = wp->w_virtcol;
|
||||||
|
if (draw_color_col)
|
||||||
|
/* determine rightmost colorcolumn to possibly draw */
|
||||||
|
for (i = 0; color_cols[i] >= 0; ++i)
|
||||||
|
if (rightmost_vcol < color_cols[i])
|
||||||
|
rightmost_vcol = color_cols[i];
|
||||||
|
|
||||||
while (col < W_WIDTH(wp))
|
while (col < W_WIDTH(wp))
|
||||||
{
|
{
|
||||||
ScreenLines[off] = ' ';
|
ScreenLines[off] = ' ';
|
||||||
@ -4668,12 +4710,19 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
ScreenLinesUC[off] = 0;
|
ScreenLinesUC[off] = 0;
|
||||||
#endif
|
#endif
|
||||||
++col;
|
++col;
|
||||||
if (vcol == (long)wp->w_virtcol)
|
if (wp->w_p_cuc && vcol == (long)wp->w_virtcol)
|
||||||
{
|
ScreenAttrs[off++] = hl_attr(HLF_CUC);
|
||||||
ScreenAttrs[off] = hl_attr(HLF_CUC);
|
else if (draw_color_col && vcol == *color_cols)
|
||||||
|
ScreenAttrs[off++] = hl_attr(HLF_MC);
|
||||||
|
else
|
||||||
|
ScreenAttrs[off++] = 0;
|
||||||
|
|
||||||
|
if (vcol >= rightmost_vcol)
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
ScreenAttrs[off++] = 0;
|
if (draw_color_col)
|
||||||
|
draw_color_col = advance_color_col(vcol, &color_cols);
|
||||||
|
|
||||||
++vcol;
|
++vcol;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4737,18 +4786,29 @@ win_line(wp, lnum, startrow, endrow, nochange)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
|
/* advance to the next 'colorcolumn' */
|
||||||
|
if (draw_color_col)
|
||||||
|
draw_color_col = advance_color_col(vcol, &color_cols);
|
||||||
|
|
||||||
/* Highlight the cursor column if 'cursorcolumn' is set. But don't
|
/* Highlight the cursor column if 'cursorcolumn' is set. But don't
|
||||||
* highlight the cursor position itself. */
|
* highlight the cursor position itself.
|
||||||
if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
|
* Also highlight the 'colorcolumn' if it is different than
|
||||||
&& lnum != wp->w_cursor.lnum
|
* 'cursorcolumn' */
|
||||||
&& draw_state == WL_LINE
|
vcol_save_attr = -1;
|
||||||
&& !lnum_in_visual_area)
|
if (draw_state == WL_LINE && !lnum_in_visual_area)
|
||||||
{
|
{
|
||||||
vcol_save_attr = char_attr;
|
if (wp->w_p_cuc && vcol == (long)wp->w_virtcol
|
||||||
char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
|
&& lnum != wp->w_cursor.lnum)
|
||||||
|
{
|
||||||
|
vcol_save_attr = char_attr;
|
||||||
|
char_attr = hl_combine_attr(char_attr, hl_attr(HLF_CUC));
|
||||||
|
}
|
||||||
|
else if (draw_color_col && vcol == *color_cols)
|
||||||
|
{
|
||||||
|
vcol_save_attr = char_attr;
|
||||||
|
char_attr = hl_combine_attr(char_attr, hl_attr(HLF_MC));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
vcol_save_attr = -1;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -202,6 +202,8 @@ typedef struct
|
|||||||
# define w_p_cuc w_onebuf_opt.wo_cuc /* 'cursorcolumn' */
|
# define w_p_cuc w_onebuf_opt.wo_cuc /* 'cursorcolumn' */
|
||||||
int wo_cul;
|
int wo_cul;
|
||||||
# define w_p_cul w_onebuf_opt.wo_cul /* 'cursorline' */
|
# define w_p_cul w_onebuf_opt.wo_cul /* 'cursorline' */
|
||||||
|
char_u *wo_cc;
|
||||||
|
# define w_p_cc w_onebuf_opt.wo_cc /* 'colorcolumn' */
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_STL_OPT
|
#ifdef FEAT_STL_OPT
|
||||||
char_u *wo_stl;
|
char_u *wo_stl;
|
||||||
@ -2010,6 +2012,9 @@ struct window_S
|
|||||||
long_u w_p_fde_flags; /* flags for 'foldexpr' */
|
long_u w_p_fde_flags; /* flags for 'foldexpr' */
|
||||||
long_u w_p_fdt_flags; /* flags for 'foldtext' */
|
long_u w_p_fdt_flags; /* flags for 'foldtext' */
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef FEAT_SYN_HL
|
||||||
|
int *w_p_cc_cols; /* array of columns to highlight or NULL */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* transform a pointer to a "onebuf" option into a "allbuf" option */
|
/* transform a pointer to a "onebuf" option into a "allbuf" option */
|
||||||
#define GLOBAL_WO(p) ((char *)p + sizeof(winopt_T))
|
#define GLOBAL_WO(p) ((char *)p + sizeof(winopt_T))
|
||||||
|
@ -6531,6 +6531,8 @@ static char *(highlight_init_light[]) =
|
|||||||
"CursorColumn term=reverse ctermbg=LightGrey guibg=Grey90"),
|
"CursorColumn term=reverse ctermbg=LightGrey guibg=Grey90"),
|
||||||
CENT("CursorLine term=underline cterm=underline",
|
CENT("CursorLine term=underline cterm=underline",
|
||||||
"CursorLine term=underline cterm=underline guibg=Grey90"),
|
"CursorLine term=underline cterm=underline guibg=Grey90"),
|
||||||
|
CENT("ColorColumn term=reverse ctermbg=LightRed",
|
||||||
|
"ColorColumn term=reverse ctermbg=LightRed guibg=LightRed"),
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_CONCEAL
|
#ifdef FEAT_CONCEAL
|
||||||
CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
|
CENT("Conceal ctermbg=DarkGrey ctermfg=LightGrey",
|
||||||
@ -6615,6 +6617,8 @@ static char *(highlight_init_dark[]) =
|
|||||||
"CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey40"),
|
"CursorColumn term=reverse ctermbg=DarkGrey guibg=Grey40"),
|
||||||
CENT("CursorLine term=underline cterm=underline",
|
CENT("CursorLine term=underline cterm=underline",
|
||||||
"CursorLine term=underline cterm=underline guibg=Grey40"),
|
"CursorLine term=underline cterm=underline guibg=Grey40"),
|
||||||
|
CENT("ColorColumn term=reverse ctermbg=DarkRed",
|
||||||
|
"ColorColumn term=reverse ctermbg=DarkRed guibg=DarkRed"),
|
||||||
#endif
|
#endif
|
||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
CENT("MatchParen term=reverse ctermbg=DarkCyan",
|
CENT("MatchParen term=reverse ctermbg=DarkCyan",
|
||||||
|
@ -1334,6 +1334,7 @@ typedef enum
|
|||||||
, HLF_TPF /* tabpage line filler */
|
, HLF_TPF /* tabpage line filler */
|
||||||
, HLF_CUC /* 'cursurcolumn' */
|
, HLF_CUC /* 'cursurcolumn' */
|
||||||
, HLF_CUL /* 'cursurline' */
|
, HLF_CUL /* 'cursurline' */
|
||||||
|
, HLF_MC /* 'colorcolumn' */
|
||||||
, HLF_COUNT /* MUST be the last one */
|
, HLF_COUNT /* MUST be the last one */
|
||||||
} hlf_T;
|
} hlf_T;
|
||||||
|
|
||||||
@ -1343,7 +1344,7 @@ typedef enum
|
|||||||
'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
|
'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
|
||||||
'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
|
'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
|
||||||
'B', 'P', 'R', 'L', \
|
'B', 'P', 'R', 'L', \
|
||||||
'+', '=', 'x', 'X', '*', '#', '_', '!', '.'}
|
'+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Boolean constants
|
* Boolean constants
|
||||||
|
@ -1225,6 +1225,10 @@ win_init(newp, oldp, flags)
|
|||||||
# endif
|
# endif
|
||||||
|
|
||||||
win_init_some(newp, oldp);
|
win_init_some(newp, oldp);
|
||||||
|
|
||||||
|
# ifdef FEAT_SYN_HL
|
||||||
|
check_colorcolumn(newp);
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -4413,6 +4417,7 @@ win_free(wp, tp)
|
|||||||
|
|
||||||
#ifdef FEAT_SYN_HL
|
#ifdef FEAT_SYN_HL
|
||||||
reset_synblock(wp); /* free independent synblock */
|
reset_synblock(wp); /* free independent synblock */
|
||||||
|
vim_free(wp->w_p_cc_cols);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef FEAT_AUTOCMD
|
#ifdef FEAT_AUTOCMD
|
||||||
|
Loading…
x
Reference in New Issue
Block a user