-- this plugin registers two autocmds that trigger when openeing and closing vim, setting the -- background of the terminal to the color used by our colorscheme using CSI control codes. local state = {} -- get tty local tty_handle = io.popen('tty') if tty_handle == nil then return end local tty = tty_handle:read('*a') tty_handle:close() if tty:find('not a tty') then error('not a tty') end state.tty = tty -- register update hook vim.api.nvim_create_autocmd({ 'ColorScheme', 'UIEnter', 'VimResume' }, { callback = function() if state.tty == nil then return 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 -- 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, }) -- register reset hook vim.api.nvim_create_autocmd({ 'UILeave' }, { callback = function() if state.tty == nil then return end os.execute('printf "\\033]111\\007" > ' .. state.tty) end, })