aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Anders <greg@gpanders.com>2024-06-11 11:10:34 -0500
committerGregory Anders <greg@gpanders.com>2024-06-12 10:43:57 -0500
commitd38912b59f97a4da0a2d0a24af226e6dd27e9b2c (patch)
tree90ac84e59533ad03c8a9199d52a5562c028b0db3
parent3e09fbdf82a181f1c0be1513fd50a17bf5b0a754 (diff)
downloadrneovim-d38912b59f97a4da0a2d0a24af226e6dd27e9b2c.tar.gz
rneovim-d38912b59f97a4da0a2d0a24af226e6dd27e9b2c.tar.bz2
rneovim-d38912b59f97a4da0a2d0a24af226e6dd27e9b2c.zip
refactor(terminal): move :terminal defaults to _defaults.lua
-rw-r--r--runtime/doc/news.txt2
-rw-r--r--runtime/doc/syntax.txt2
-rw-r--r--runtime/doc/vim_diff.txt21
-rw-r--r--runtime/lua/vim/_defaults.lua20
-rw-r--r--src/nvim/terminal.c8
-rw-r--r--test/functional/terminal/buffer_spec.lua6
-rw-r--r--test/functional/terminal/mouse_spec.lua8
-rw-r--r--test/functional/terminal/testutil.lua4
-rw-r--r--test/functional/terminal/window_split_tab_spec.lua8
9 files changed, 50 insertions, 29 deletions
diff --git a/runtime/doc/news.txt b/runtime/doc/news.txt
index 455b38b5fa..4addbf84c3 100644
--- a/runtime/doc/news.txt
+++ b/runtime/doc/news.txt
@@ -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
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index 1b981da2fc..9fc415a158 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -5111,7 +5111,7 @@ StatusLineNC Status lines of not-current windows.
StatusLineTerm Status line of |terminal| window.
*hl-StatusLineTermNC*
StatusLineTermNC
- Status line of non-current |terminal| window.
+ Status line of non-current |terminal| windows.
*hl-TabLine*
TabLine Tab pages line, not active tab page label.
*hl-TabLineFill*
diff --git a/runtime/doc/vim_diff.txt b/runtime/doc/vim_diff.txt
index ac20948f14..a6f08402f6 100644
--- a/runtime/doc/vim_diff.txt
+++ b/runtime/doc/vim_diff.txt
@@ -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
diff --git a/runtime/lua/vim/_defaults.lua b/runtime/lua/vim/_defaults.lua
index 01dcd4bf74..f417bda3fb 100644
--- a/runtime/lua/vim/_defaults.lua
+++ b/runtime/lua/vim/_defaults.lua
@@ -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',
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 818f8abbb5..000f750413 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -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));
}
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
index 96abd9f543..4ad0862986 100644
--- a/test/functional/terminal/buffer_spec.lua
+++ b/test/functional/terminal/buffer_spec.lua
@@ -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 = {}
diff --git a/test/functional/terminal/mouse_spec.lua b/test/functional/terminal/mouse_spec.lua
index ad98dfc6c3..476e2a5fe5 100644
--- a/test/functional/terminal/mouse_spec.lua
+++ b/test/functional/terminal/mouse_spec.lua
@@ -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))
diff --git a/test/functional/terminal/testutil.lua b/test/functional/terminal/testutil.lua
index f3fc5d3f93..45c73b1dc6 100644
--- a/test/functional/terminal/testutil.lua
+++ b/test/functional/terminal/testutil.lua
@@ -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 })
diff --git a/test/functional/terminal/window_split_tab_spec.lua b/test/functional/terminal/window_split_tab_spec.lua
index 04d2e0bca7..ccd6a5218b 100644
--- a/test/functional/terminal/window_split_tab_spec.lua
+++ b/test/functional/terminal/window_split_tab_spec.lua
@@ -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()