-- this plugin registers two autocmds that trigger when openeing and closing the editor, setting the -- background of the terminal to the color used by our colorscheme using CSI control codes. local state = { enabled = false } if not state.enabled then return end local set_bg = function(clear) if not (state.tty and state.normal) then return end if clear then -- emit CSI to unset custom background os.execute('printf "\\033]111\\007" > ' .. state.tty) else -- emit CSI to change terminal background to Normal.bg os.execute( 'printf "\\033]11;' .. string.format('#%06x', state.normal.bg) .. '\\007" > ' .. state.tty ) -- set colorscheme Normal.bg to NONE, making it transparent vim.cmd([[hi Normal ctermbg=NONE guibg=NONE]]) end end local discover = function() if not state.tty then -- get tty handle local ok, tty_handle = pcall(io.popen, 'tty') if (not ok) or tty_handle == nil then return end local tty = tty_handle:read('*l') tty_handle:close() if tty:find('not a tty') then return end state.tty = tty end if not state.normal then -- get colorscheme Normal highlight local normal = vim.api.nvim_get_hl(0, { name = 'Normal', create = false }) if normal.bg == nil then return end -- cache old value for use with VimResume state.normal = normal end -- vim.notify('syncbg: ' .. vim.inspect(state), vim.log.levels.DEBUG) end -- setup autogroup local aug = vim.api.nvim_create_augroup('syncbg', { clear = true }) -- register update hook vim.api.nvim_create_autocmd({ 'ColorScheme', 'UIEnter', 'VimResume' }, { group = aug, callback = vim.schedule_wrap(function() discover() set_bg(false) end), }) -- register reset hook vim.api.nvim_create_autocmd({ 'UILeave' }, { group = aug, callback = vim.schedule_wrap(function() set_bg(true) end), })