aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/doc/nvim_terminal_emulator.txt9
-rw-r--r--runtime/doc/options.txt24
-rw-r--r--runtime/doc/syntax.txt4
-rw-r--r--runtime/doc/vim_diff.txt2
-rw-r--r--runtime/syntax/vim.vim2
-rw-r--r--src/nvim/globals.h12
-rw-r--r--src/nvim/option.c15
-rw-r--r--src/nvim/syntax.c2
-rw-r--r--src/nvim/terminal.c39
-rw-r--r--test/functional/legacy/051_highlight_spec.lua6
-rw-r--r--test/functional/terminal/cursor_spec.lua6
-rw-r--r--test/functional/terminal/helpers.lua2
12 files changed, 49 insertions, 74 deletions
diff --git a/runtime/doc/nvim_terminal_emulator.txt b/runtime/doc/nvim_terminal_emulator.txt
index 160242a7fa..850391200e 100644
--- a/runtime/doc/nvim_terminal_emulator.txt
+++ b/runtime/doc/nvim_terminal_emulator.txt
@@ -99,16 +99,13 @@ variables (set via the |TermOpen| autocmd):
- `{g,b}:terminal_color_$NUM`: The terminal color palette, where `$NUM` is the
color index, between 0 and 255 inclusive. This only affects UIs with RGB
capabilities; for normal terminals the color index is simply forwarded.
-- `{g,b}:terminal_focused_cursor_highlight`: Highlight group applied to the
- cursor in a focused terminal. The default equivalent to having a group with
- `cterm=reverse` `gui=reverse``.
-- `{g,b}:terminal_unfocused_cursor_highlight`: Highlight group applied to the
- cursor in an unfocused terminal. The default equivalent to having a group with
- `ctermbg=11` `guibg=#fce94f``.
The configuration variables are only processed when the terminal starts, which
is why it needs to be done with the |TermOpen| autocmd or setting global
variables before the terminal is started.
+The terminal cursor can be highlighted via |hl-TermCursor| and
+|hl-TermCursorNC|.
+
==============================================================================
vim:tw=78:ts=8:noet:ft=help:norl:
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index c0f1888d84..fad6557eb0 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -3651,17 +3651,19 @@ A jump table for the options with a short description can be found at |Q_op|.
*'highlight'* *'hl'*
'highlight' 'hl' string (default (as a single string):
- "8:SpecialKey,~:EndOfBuffer,@:NonText,i
- d:Directory,e:ErrorMsg,i:IncSearch,
- l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,
+ "8:SpecialKey,~:EndOfBuffer,z:TermCursor,
+ Z:TermCursorNC,@:NonText,d:Directory,
+ e:ErrorMsg,i:IncSearch,l:Search,
+ m:MoreMsg,M:ModeMsg,n:LineNr,
N:CursorLineNr,r:Question,s:StatusLine,
S:StatusLineNC,c:VertSplit,t:Title,
- v:Visual,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,-:Conceal,+:Pmenu,=:PmenuSel,
- x:PmenuSbar,X:PmenuThumb")
+ v:Visual,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,-:Conceal,
+ +:Pmenu,=:PmenuSel,x:PmenuSbar,
+ X:PmenuThumb")
global
{not in Vi}
This option can be used to set highlighting mode for various
@@ -3670,6 +3672,8 @@ A jump table for the options with a short description can be found at |Q_op|.
use for that occasion. The occasions are:
|hl-SpecialKey| 8 Meta and special keys listed with ":map"
|hl-EndOfBuffer| ~ lines after the last line in the buffer
+ |hl-TermCursor| z Cursor in a focused terminal
+ |hl-TermCursorNC| Z Cursor in an unfocused terminal
|hl-NonText| @ '@' at the end of the window and
characters from 'showbreak'
|hl-Directory| d directories in CTRL-D listing and other special
@@ -3681,7 +3685,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|hl-ModeMsg| M Mode (e.g., "-- INSERT --")
|hl-LineNr| n line number for ":number" and ":#" commands, and
when 'number' or 'relativenumber' option is set.
- |hl-CursorLineNr| N like n for when 'cursorline' or 'relativenumber' is
+ |hl-CursorLineNr| N like n for when 'cursorline' or 'relativenumber' is
set.
|hl-Question| r |hit-enter| prompt and yes/no questions
|hl-StatusLine| s status line of current window |status-line|
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 19289dafec..67e8c177f3 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -4763,6 +4763,10 @@ DiffText diff mode: Changed text within a changed line |diff.txt|
{Nvim} *hl-EndOfBuffer*
EndOfBuffer filler lines (~) after the end of the buffer.
By default, this is highlighted like |hl-NonText|.
+ {Nvim} *hl-TermCursor*
+TermCursor cursor in a focused terminal
+ {Nvim} *hl-TermCursorNC*
+TermCursorNC cursor in an unfocused terminal
*hl-ErrorMsg*
ErrorMsg error messages on the command line
*hl-VertSplit*
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index 328e1eda75..94514d7b03 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -68,6 +68,8 @@ Events:
Highlight groups:
- |hl-EndOfBuffer|
+- |hl-TermCursor|
+- |hl-TermCursorNC|
==============================================================================
5. Missing legacy features *nvim-features-missing*
diff --git a/runtime/syntax/vim.vim b/runtime/syntax/vim.vim
index 8ad6b2819f..ce17166145 100644
--- a/runtime/syntax/vim.vim
+++ b/runtime/syntax/vim.vim
@@ -68,7 +68,7 @@ syn keyword vimAutoEvent contained BufAdd BufCreate BufDelete BufEnter BufFilePo
syn keyword vimGroup contained Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo
" Default highlighting groups {{{2
-syn keyword vimHLGroup contained ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineNr DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
+syn keyword vimHLGroup contained ColorColumn Cursor CursorColumn CursorIM CursorLine CursorLineNr DiffAdd DiffChange DiffDelete DiffText Directory EndOfBuffer ErrorMsg FoldColumn Folded IncSearch LineNr MatchParen Menu ModeMsg MoreMsg NonText Normal Pmenu PmenuSbar PmenuSel PmenuThumb Question Scrollbar Search SignColumn SpecialKey SpellBad SpellCap SpellLocal SpellRare StatusLine StatusLineNC TabLine TabLineFill TabLineSel TermCursor TermCursorNC Title Tooltip VertSplit Visual VisualNOS WarningMsg WildMenu
syn match vimHLGroup contained "Conceal"
syn case match
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index d7087ee928..76ddd693a8 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -404,7 +404,9 @@ EXTERN int no_check_timestamps INIT(= 0); /* Don't check timestamps */
typedef enum {
HLF_8 = 0 /* Meta & special keys listed with ":map", text that is
displayed different from what it is */
- , HLF_EOB // after the last line in the buffer
+ , HLF_EOB //< after the last line in the buffer
+ , HLF_TERM //< terminal cursor focused
+ , HLF_TERMNC //< terminal cursor unfocused
, HLF_AT /* @ characters at end of screen, characters that
don't really exist in the text */
, HLF_D /* directories in CTRL-D listing */
@@ -451,10 +453,10 @@ typedef enum {
/* The HL_FLAGS must be in the same order as the HLF_ enums!
* When changing this also adjust the default for 'highlight'. */
-#define HL_FLAGS {'8', '~', '@', 'd', 'e', 'i', 'l', 'm', 'M', 'n', 'N', 'r', \
- 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', 'f', 'F', 'A', 'C', \
- 'D', 'T', '-', '>', 'B', 'P', 'R', 'L', '+', '=', 'x', 'X', \
- '*', '#', '_', '!', '.', 'o'}
+#define HL_FLAGS {'8', '~', 'z', 'Z', '@', 'd', 'e', 'i', 'l', 'm', 'M', 'n', \
+ 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', 'f', 'F', \
+ 'A', 'C', 'D', 'T', '-', '>', 'B', 'P', 'R', 'L', '+', '=', \
+ 'x', 'X', '*', '#', '_', '!', '.', 'o'}
EXTERN int highlight_attr[HLF_COUNT]; /* Highl. attr for each context. */
EXTERN int highlight_user[9]; /* User[1-9] attributes */
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 929b96a3f8..7e5410ff63 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -363,13 +363,14 @@ typedef struct vimoption {
# define ISP_LATIN1 (char_u *)"@,161-255"
#define HIGHLIGHT_INIT \
- "8:SpecialKey,~:EndOfBuffer,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch," \
- "l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,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"
+ "8:SpecialKey,~:EndOfBuffer,z:TermCursor,Z:TermCursorNC,@:NonText," \
+ "d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr," \
+ "N:CursorLineNr,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"
/*
* options[] is initialized here.
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 20bfbc8db4..c58c5fe897 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -5785,6 +5785,8 @@ static char *(highlight_init_both[]) =
"TabLineSel term=bold cterm=bold gui=bold"),
CENT("TabLineFill term=reverse cterm=reverse",
"TabLineFill term=reverse cterm=reverse gui=reverse"),
+ CENT("TermCursor cterm=reverse",
+ "TermCursor cterm=reverse gui=reverse"),
NULL
};
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 2149f0f998..4007dfb04d 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -130,8 +130,6 @@ struct terminal {
// the default values are used to obtain the color numbers passed to cterm
// colors
RgbValue colors[256];
- // attributes for focused/unfocused cursor cells
- int focused_cursor_attr_id, unfocused_cursor_attr_id;
};
static VTermScreenCallbacks vterm_screen_callbacks = {
@@ -260,41 +258,6 @@ Terminal *terminal_open(TerminalOptions opts)
}
}
- // Configure cursor highlighting when focused/unfocused
- char *group = get_config_string(rv, "terminal_focused_cursor_highlight");
- if (group) {
- int group_id = syn_name2id((uint8_t *)group);
- free(group);
-
- if (group_id) {
- rv->focused_cursor_attr_id = syn_id2attr(group_id);
- }
- }
- if (!rv->focused_cursor_attr_id) {
- rv->focused_cursor_attr_id = get_attr_entry(&(attrentry_T) {
- .rgb_ae_attr = HL_INVERSE, .rgb_fg_color = -1, .rgb_bg_color = -1,
- .cterm_ae_attr = HL_INVERSE, .cterm_fg_color = 0, .cterm_bg_color = 0
- });
- }
-
- group = get_config_string(rv, "terminal_unfocused_cursor_highlight");
- if (group) {
- int group_id = syn_name2id((uint8_t *)group);
- free(group);
-
- if (group_id) {
- rv->unfocused_cursor_attr_id = syn_id2attr(group_id);
- }
- }
- if (!rv->unfocused_cursor_attr_id) {
- int yellow_rgb = RGB(0xfc, 0xe9, 0x4f);
- int yellow_term = 12;
- rv->unfocused_cursor_attr_id = get_attr_entry(&(attrentry_T) {
- .rgb_ae_attr = 0, .rgb_fg_color = -1, .rgb_bg_color = yellow_rgb,
- .cterm_ae_attr = 0, .cterm_fg_color = 0, .cterm_bg_color = yellow_term,
- });
- }
-
return rv;
}
@@ -555,7 +518,7 @@ void terminal_get_line_attributes(Terminal *term, win_T *wp, int linenr,
if (term->cursor.visible && term->cursor.row == row
&& term->cursor.col == col) {
attr_id = hl_combine_attr(attr_id, is_focused(term) && wp == curwin ?
- term->focused_cursor_attr_id : term->unfocused_cursor_attr_id);
+ hl_attr(HLF_TERM) : hl_attr(HLF_TERMNC));
}
term_attrs[col] = attr_id;
diff --git a/test/functional/legacy/051_highlight_spec.lua b/test/functional/legacy/051_highlight_spec.lua
index 3d0375312d..620df97aac 100644
--- a/test/functional/legacy/051_highlight_spec.lua
+++ b/test/functional/legacy/051_highlight_spec.lua
@@ -24,10 +24,10 @@ describe(':highlight', function()
guifg=Blue |
EndOfBuffer xxx links to NonText|
|
+ TermCursor xxx cterm=reverse |
+ gui=reverse |
+ TermCursorNC xxx cleared |
NonText xxx ctermfg=12 |
- gui=bold |
- guifg=Blue |
- Directory xxx ctermfg=4 |
-- More --^ |
]])
feed('q')
diff --git a/test/functional/terminal/cursor_spec.lua b/test/functional/terminal/cursor_spec.lua
index 3e3f9cbf4f..cecb33de7c 100644
--- a/test/functional/terminal/cursor_spec.lua
+++ b/test/functional/terminal/cursor_spec.lua
@@ -129,10 +129,8 @@ describe('cursor with customized highlighting', function()
before_each(function()
clear()
- nvim('set_var', 'terminal_focused_cursor_highlight', 'CursorFocused')
- nvim('set_var', 'terminal_unfocused_cursor_highlight', 'CursorUnfocused')
- nvim('command', 'highlight CursorFocused ctermfg=45 ctermbg=46')
- nvim('command', 'highlight CursorUnfocused ctermfg=55 ctermbg=56')
+ nvim('command', 'highlight TermCursor ctermfg=45 ctermbg=46 cterm=NONE')
+ nvim('command', 'highlight TermCursorNC ctermfg=55 ctermbg=56 cterm=NONE')
screen = Screen.new(50, 7)
screen:set_default_attr_ids({
[1] = {foreground = 45, background = 46},
diff --git a/test/functional/terminal/helpers.lua b/test/functional/terminal/helpers.lua
index 631dc579d3..1bc6057a0b 100644
--- a/test/functional/terminal/helpers.lua
+++ b/test/functional/terminal/helpers.lua
@@ -34,6 +34,8 @@ local function disable_mouse() feed_termcode('[?1002l') end
local function screen_setup(extra_height)
+ nvim('command', 'highlight TermCursor cterm=reverse')
+ nvim('command', 'highlight TermCursorNC ctermbg=11')
nvim('set_var', 'terminal_scrollback_buffer_size', 10)
if not extra_height then extra_height = 0 end
local screen = Screen.new(50, 7 + extra_height)