diff options
author | Daniel Steinberg <dstein64@users.noreply.github.com> | 2024-01-15 11:12:07 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-15 10:12:07 -0600 |
commit | 7589336120a258cf75134a5243b2f6b1926ac85b (patch) | |
tree | ec4ee3d859c0686913e552e84bb6c857ee8f1e85 /runtime/lua/vim/_defaults.lua | |
parent | 9c202b9392f3d42618cc576aab00a50ed2f7bdeb (diff) | |
download | rneovim-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.lua | 24 |
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', |