aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/vim/_defaults.lua
diff options
context:
space:
mode:
authorDaniel Steinberg <dstein64@users.noreply.github.com>2024-01-15 11:12:07 -0500
committerGitHub <noreply@github.com>2024-01-15 10:12:07 -0600
commit7589336120a258cf75134a5243b2f6b1926ac85b (patch)
treeec4ee3d859c0686913e552e84bb6c857ee8f1e85 /runtime/lua/vim/_defaults.lua
parent9c202b9392f3d42618cc576aab00a50ed2f7bdeb (diff)
downloadrneovim-7589336120a258cf75134a5243b2f6b1926ac85b.tar.gz
rneovim-7589336120a258cf75134a5243b2f6b1926ac85b.tar.bz2
rneovim-7589336120a258cf75134a5243b2f6b1926ac85b.zip
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.
Diffstat (limited to 'runtime/lua/vim/_defaults.lua')
-rw-r--r--runtime/lua/vim/_defaults.lua24
1 files changed, 24 insertions, 0 deletions
diff --git a/runtime/lua/vim/_defaults.lua b/runtime/lua/vim/_defaults.lua
index 64eb638fd7..07850a5a47 100644
--- a/runtime/lua/vim/_defaults.lua
+++ b/runtime/lua/vim/_defaults.lua
@@ -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',