mirror of
https://github.com/neovim/neovim.git
synced 2026-04-19 14:00:49 +00:00
feat(terminal): respond to OSC background and foreground request (#17197)
The motivation for this update is Issue #15365, where background=light is not properly set for Nvim running from an Nvim :terminal. This can be encountered when e.g., opening a terminal to make git commits, which opens EDITOR=nvim in the nested terminal. Under the implementation of this commit, the OSC response always indicates a black or white foreground/background. 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. The behaviour matches Vim.
This commit is contained in:
@@ -155,6 +155,30 @@ do
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd('TermRequest', {
|
||||
group = nvim_terminal_augroup,
|
||||
desc = 'Respond to OSC foreground/background color requests',
|
||||
callback = function(args)
|
||||
local fg_request = args.data == '\027]10;?'
|
||||
local bg_request = args.data == '\027]11;?'
|
||||
if fg_request or bg_request then
|
||||
-- WARN: This does not return the actual foreground/background color,
|
||||
-- but rather returns:
|
||||
-- - fg=white/bg=black when Nvim option 'background' is 'dark'
|
||||
-- - fg=black/bg=white when Nvim option 'background' is 'light'
|
||||
local red, green, blue = 0, 0, 0
|
||||
local bg_option_dark = vim.o.background == 'dark'
|
||||
if (fg_request and bg_option_dark) or (bg_request and not bg_option_dark) then
|
||||
red, green, blue = 65535, 65535, 65535
|
||||
end
|
||||
local command = fg_request and 10 or 11
|
||||
local data = string.format('\027]%d;rgb:%04x/%04x/%04x\007', command, red, green, blue)
|
||||
local channel = vim.bo[args.buf].channel
|
||||
vim.api.nvim_chan_send(channel, data)
|
||||
end
|
||||
end,
|
||||
})
|
||||
|
||||
vim.api.nvim_create_autocmd('CmdwinEnter', {
|
||||
pattern = '[:>]',
|
||||
desc = 'Limit syntax sync to maxlines=1 in the command window',
|
||||
|
||||
Reference in New Issue
Block a user