From 4aecd7a8550d63df57a23224b2bf76092de9087b Mon Sep 17 00:00:00 2001 From: Zacharias-Brohn Date: Tue, 16 Dec 2025 22:05:17 +0100 Subject: [PATCH] powerline? --- lua/zterm-navigator/init.lua | 48 ++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/lua/zterm-navigator/init.lua b/lua/zterm-navigator/init.lua index 6e68547..15692cb 100644 --- a/lua/zterm-navigator/init.lua +++ b/lua/zterm-navigator/init.lua @@ -35,14 +35,28 @@ M.config = { }, } +-- Create a persistent TTY handle for writing escape sequences directly to the terminal. +-- This bypasses neovim's terminal handling by using libuv to write to stdout. +local tty_handle = nil + +local function get_tty_handle() + if tty_handle then + return tty_handle + end + -- Create a TTY handle wrapping stdout (fd 1) + -- The second parameter (true) means readable=false (write-only) + local handle = vim.loop.new_tty(1, false) + if handle then + tty_handle = handle + end + return tty_handle +end + -- Send raw escape sequence to the terminal, bypassing neovim's terminal handling local function send_to_tty(str) - -- Write directly to /dev/tty to bypass neovim's terminal buffer - local tty = io.open("/dev/tty", "w") - if tty then - tty:write(str) - tty:flush() - tty:close() + local handle = get_tty_handle() + if handle then + handle:write(str) end end @@ -124,8 +138,28 @@ end local function is_zterm() local term = vim.env.TERM or "" local term_program = vim.env.TERM_PROGRAM or "" + local zterm_env = vim.env.ZTERM or "" -- ZTerm sets TERM to "zterm" or similar - return term:match("zterm") or term_program:match("[Zz]term") + return term:match("zterm") ~= nil + or term_program:match("[Zz]term") ~= nil + or zterm_env ~= "" +end + +-- Debug function to test statusline sending +function M.debug_statusline() + local is_in_zterm = is_zterm() + print("TERM=" .. (vim.env.TERM or "nil")) + print("TERM_PROGRAM=" .. (vim.env.TERM_PROGRAM or "nil")) + print("is_zterm=" .. tostring(is_in_zterm)) + print("statusline_enabled=" .. tostring(M._statusline_enabled)) + print("Sending test statusline...") + send_to_tty("\027]51;statusline;\027[38;2;255;0;0mTEST\027[0m\007") + print("Done. Check ZTerm statusline.") +end + +-- Force send a test statusline (for debugging) +function M.test_statusline() + send_to_tty("\027]51;statusline;\027[38;2;255;100;0mNeovim Test\027[0m\007") end -- Send statusline content to ZTerm via OSC 51