From 23de12baba9fbfc4ca24581b37c374aa5345cc25 Mon Sep 17 00:00:00 2001 From: Robert Günzler Date: Mon, 25 Nov 2024 13:30:37 +0100 Subject: update nvim config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Robert Günzler --- .vim/plugin/syncbg.lua | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .vim/plugin/syncbg.lua (limited to '.vim/plugin/syncbg.lua') diff --git a/.vim/plugin/syncbg.lua b/.vim/plugin/syncbg.lua new file mode 100644 index 0000000..d9243f0 --- /dev/null +++ b/.vim/plugin/syncbg.lua @@ -0,0 +1,53 @@ +-- 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, +}) -- cgit 1.4.1