Merge pull request #29290 from gpanders/push-wuqlkrkuypzz

Add StatusLineTerm highlight group and move terminal buffer defaults
This commit is contained in:
Gregory Anders 2024-06-12 11:17:53 -05:00 committed by GitHub
commit 9cac40ba1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 89 additions and 57 deletions

View File

@ -140,6 +140,8 @@ TERMINAL
• The |terminal| now understands the OSC 52 escape sequence to write to the
system clipboard (copy). Querying with OSC 52 (paste) is not supported.
• |hl-StatusLineTerm| and |hl-StatusLineTermNC| define highlights for the
status line in |terminal| windows.
TREESITTER

View File

@ -5107,6 +5107,11 @@ SpellRare Word that is recognized by the spellchecker as one that is
StatusLine Status line of current window.
*hl-StatusLineNC*
StatusLineNC Status lines of not-current windows.
*hl-StatusLineTerm*
StatusLineTerm Status line of |terminal| window.
*hl-StatusLineTermNC*
StatusLineTermNC
Status line of non-current |terminal| windows.
*hl-TabLine*
TabLine Tab pages line, not active tab page label.
*hl-TabLineFill*

View File

@ -166,6 +166,14 @@ nvim_terminal:
when 'background' is "light". While this may not reflect the actual
foreground/background color, it permits 'background' to be retained for a
nested Nvim instance running in the terminal emulator.
- TermOpen: Sets default options for |terminal| buffers:
- 'nomodifiable'
- 'undolevels' set to -1
- 'textwidth' set to 0
- 'nowrap'
- 'nolist'
- 'winhighlight' uses |hl-StatusLineTerm| and |hl-StatusLineTermNC| in
place of |hl-StatusLine| and |hl-StatusLineNC|
nvim_cmdwin:
- CmdwinEnter: Limits syntax sync to maxlines=1 in the |cmdwin|.
@ -538,6 +546,8 @@ Highlight groups:
- Highlight groups names are allowed to contain `@` characters.
- It is an error to define a highlight group with a name that doesn't match
the regexp `[a-zA-Z0-9_.@-]*` (see |group-name|).
- |hl-StatusLineTerm| |hl-StatusLineTermNC| are implemented as 'winhighlight'
window-local highlights which are set by the default |TermOpen| handler.
Macro (|recording|) behavior:
- Replay of a macro recorded during :lmap produces the same actions as when it
@ -665,17 +675,6 @@ Events:
- *SafeStateAgain*
- *SigUSR1* Use |Signal| to detect `SIGUSR1` signal instead.
Highlight groups:
- *hl-StatusLineTerm* *hl-StatusLineTermNC* are unnecessary because Nvim
supports 'winhighlight' window-local highlights. For example, to mimic Vim's
StatusLineTerm: >vim
hi StatusLineTerm ctermfg=black ctermbg=green
hi StatusLineTermNC ctermfg=green
autocmd TermOpen,WinEnter * if &buftype=='terminal'
\|setlocal winhighlight=StatusLine:StatusLineTerm,StatusLineNC:StatusLineTermNC
\|else|setlocal winhighlight=|endif
<
Options:
- *'aleph'* *'al'*
- antialias

View File

@ -282,6 +282,26 @@ do
end,
})
vim.api.nvim_create_autocmd('TermOpen', {
group = nvim_terminal_augroup,
desc = 'Default settings for :terminal buffers',
callback = function()
vim.bo.modifiable = false
vim.bo.undolevels = -1
vim.bo.scrollback = vim.o.scrollback < 0 and 10000 or math.max(1, vim.o.scrollback)
vim.bo.textwidth = 0
vim.wo.wrap = false
vim.wo.list = false
-- This is gross. Proper list options support when?
local winhl = vim.o.winhighlight
if winhl ~= '' then
winhl = winhl .. ','
end
vim.wo.winhighlight = winhl .. 'StatusLine:StatusLineTerm,StatusLineNC:StatusLineTermNC'
end,
})
vim.api.nvim_create_autocmd('CmdwinEnter', {
pattern = '[:>]',
desc = 'Limit syntax sync to maxlines=1 in the command window',

View File

@ -78,6 +78,8 @@ EXTERN const char *hlf_names[] INIT( = {
[HLF_CU] = "Cursor",
[HLF_BTITLE] = "FloatTitle",
[HLF_BFOOTER] = "FloatFooter",
[HLF_TS] = "StatusLineTerm",
[HLF_TSNC] = "StatusLineTermNC",
});
EXTERN int highlight_attr[HLF_COUNT + 1]; // Highl. attr for each context.

View File

@ -125,6 +125,8 @@ typedef enum {
HLF_CU, ///< Cursor
HLF_BTITLE, ///< Float Border Title
HLF_BFOOTER, ///< Float Border Footer
HLF_TS, ///< status line for terminal window
HLF_TSNC, ///< status line for non-current terminal window
HLF_COUNT, ///< MUST be the last one
} hlf_T;

View File

@ -151,34 +151,36 @@ static const char *highlight_init_both[] = {
"lCursor guifg=bg guibg=fg",
// UI
"default link CursorIM Cursor",
"default link CursorLineFold FoldColumn",
"default link CursorLineSign SignColumn",
"default link EndOfBuffer NonText",
"default link FloatBorder NormalFloat",
"default link FloatFooter FloatTitle",
"default link FloatTitle Title",
"default link FoldColumn SignColumn",
"default link IncSearch CurSearch",
"default link LineNrAbove LineNr",
"default link LineNrBelow LineNr",
"default link MsgSeparator StatusLine",
"default link MsgArea NONE",
"default link NormalNC NONE",
"default link PmenuExtra Pmenu",
"default link PmenuExtraSel PmenuSel",
"default link PmenuKind Pmenu",
"default link PmenuKindSel PmenuSel",
"default link PmenuSbar Pmenu",
"default link Substitute Search",
"default link TabLine StatusLineNC",
"default link TabLineFill TabLine",
"default link TermCursorNC NONE",
"default link VertSplit WinSeparator",
"default link VisualNOS Visual",
"default link Whitespace NonText",
"default link WildMenu PmenuSel",
"default link WinSeparator Normal",
"default link CursorIM Cursor",
"default link CursorLineFold FoldColumn",
"default link CursorLineSign SignColumn",
"default link EndOfBuffer NonText",
"default link FloatBorder NormalFloat",
"default link FloatFooter FloatTitle",
"default link FloatTitle Title",
"default link FoldColumn SignColumn",
"default link IncSearch CurSearch",
"default link LineNrAbove LineNr",
"default link LineNrBelow LineNr",
"default link MsgSeparator StatusLine",
"default link MsgArea NONE",
"default link NormalNC NONE",
"default link PmenuExtra Pmenu",
"default link PmenuExtraSel PmenuSel",
"default link PmenuKind Pmenu",
"default link PmenuKindSel PmenuSel",
"default link PmenuSbar Pmenu",
"default link Substitute Search",
"default link StatusLineTerm StatusLine",
"default link StatusLineTermNC StatusLineNC",
"default link TabLine StatusLineNC",
"default link TabLineFill TabLine",
"default link TermCursorNC NONE",
"default link VertSplit WinSeparator",
"default link VisualNOS Visual",
"default link Whitespace NonText",
"default link WildMenu PmenuSel",
"default link WinSeparator Normal",
// Syntax
"default link Character Constant",

View File

@ -343,14 +343,6 @@ void terminal_open(Terminal **termpp, buf_T *buf, TerminalOptions opts)
refresh_screen(term, buf);
set_option_value(kOptBuftype, STATIC_CSTR_AS_OPTVAL("terminal"), OPT_LOCAL);
// Default settings for terminal buffers
buf->b_p_ma = false; // 'nomodifiable'
buf->b_p_ul = -1; // 'undolevels'
buf->b_p_scbk = // 'scrollback' (initialize local from global)
(p_scbk < 0) ? 10000 : MAX(1, p_scbk);
buf->b_p_tw = 0; // 'textwidth'
set_option_value(kOptWrap, BOOLEAN_OPTVAL(false), OPT_LOCAL);
set_option_value(kOptList, BOOLEAN_OPTVAL(false), OPT_LOCAL);
if (buf->b_ffname != NULL) {
buf_set_term_title(buf, buf->b_ffname, strlen(buf->b_ffname));
}

View File

@ -196,10 +196,10 @@ describe(':terminal buffer', function()
screen:expect([[
ab^c |
{4:~ }|
{5:========== }|
{17:========== }|
rows: 2, cols: 50 |
{2: } |
{1:========== }|
{18:========== }|
|
]])
@ -340,7 +340,7 @@ describe(':terminal buffer', function()
eq(termbuf, eval('g:termbuf'))
end)
it('TermReqeust synchronization #27572', function()
it('TermRequest synchronization #27572', function()
command('autocmd! nvim_terminal TermRequest')
local term = exec_lua([[
_G.input = {}

View File

@ -14,10 +14,12 @@ describe(':terminal mouse', function()
before_each(function()
clear()
api.nvim_set_option_value('statusline', '==========', {})
command('highlight StatusLine cterm=NONE')
command('highlight StatusLineNC cterm=NONE')
command('highlight VertSplit cterm=NONE')
screen = tt.screen_setup()
command('highlight StatusLine NONE')
command('highlight StatusLineNC NONE')
command('highlight StatusLineTerm NONE')
command('highlight StatusLineTermNC NONE')
command('highlight VertSplit NONE')
local lines = {}
for i = 1, 30 do
table.insert(lines, 'line' .. tostring(i))

View File

@ -92,6 +92,8 @@ local function screen_setup(extra_rows, command, cols, env, screen_opts)
api.nvim_command('highlight TermCursor cterm=reverse')
api.nvim_command('highlight TermCursorNC ctermbg=11')
api.nvim_command('highlight StatusLineTerm ctermbg=2 ctermfg=0')
api.nvim_command('highlight StatusLineTermNC ctermbg=2 ctermfg=8')
local screen = Screen.new(cols, 7 + extra_rows)
screen:set_default_attr_ids({
@ -111,6 +113,8 @@ local function screen_setup(extra_rows, command, cols, env, screen_opts)
[14] = { underline = true, reverse = true, bold = true },
[15] = { underline = true, foreground = 12 },
[16] = { background = 248, foreground = 0 }, -- Visual in :terminal session
[17] = { background = 2, foreground = 0 }, -- StatusLineTerm
[18] = { background = 2, foreground = 8 }, -- StatusLineTermNC
})
screen:attach(screen_opts or { rgb = false })

View File

@ -22,10 +22,12 @@ describe(':terminal', function()
-- set the statusline to a constant value because of variables like pid
-- and current directory and to improve visibility of splits
api.nvim_set_option_value('statusline', '==========', {})
command('highlight StatusLine cterm=NONE')
command('highlight StatusLineNC cterm=NONE')
command('highlight VertSplit cterm=NONE')
screen = tt.screen_setup(3)
command('highlight StatusLine NONE')
command('highlight StatusLineNC NONE')
command('highlight StatusLineTerm NONE')
command('highlight StatusLineTermNC NONE')
command('highlight VertSplit NONE')
end)
after_each(function()

View File

@ -250,7 +250,7 @@ describe('ui/cursor', function()
m.attr = { background = Screen.colors.DarkGray }
end
if m.id_lm then
m.id_lm = 69
m.id_lm = 71
end
end