vis-config

lua scripts to configure vis editor

git clone https://9o.is/git/vis-config.git

commit eb1663830fe8a6513519eac5d5ba9a33645f18c6
parent f6eaa00baeb976abd9841b88e39fa374e398961a
Author: Jul <jul@9o.is>
Date:   Fri, 20 Feb 2026 07:34:56 +0800

update status on focus in

Diffstat:
Mlib/window-manager/x11.lua | 24+++++++++++++++++++++---
1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/lib/window-manager/x11.lua b/lib/window-manager/x11.lua @@ -1,7 +1,10 @@ local fd_qrexec local fd_tmux +local fd_xev local winid +local xembed local tmuxid +local laststatus local function write(cmd) if io.type(fd_qrexec) ~= 'file' then @@ -30,13 +33,20 @@ local function open_status() else cmd = 'exec qrexec-client-vm @default user.WindowStatus+%d' end - return vis:communicate('qrexec-winstatus', string.format(cmd, winid)) + return vis:communicate('qrexec-winstatus', string.format(cmd, xembed or winid)) +end + +local function listenfocus() + local cmd = 'exec xev -id %d -event focus' + return vis:communicate('xev-winstatus', string.format(cmd, winid)) end local x11 = {} x11.init = function() - winid = os.getenv('XEMBED') or os.getenv('WINDOWID') + xembed = os.getenv('XEMBED') + winid = os.getenv('WINDOWID') + tmuxid = os.getenv('TMUX_PANE') if not winid then @@ -44,6 +54,7 @@ x11.init = function() end fd_qrexec = open_status() + fd_xev = listenfocus() if tmuxid then fd_tmux = vis:communicate('tmux', @@ -51,10 +62,16 @@ x11.init = function() end vis.events.subscribe(vis.events.PROCESS_RESPONSE, function(name, event, code, msg) - if name ~= 'qrexec-winstatus' and name ~= 'tmux' then + if name ~= 'qrexec-winstatus' and name ~= 'xev-winstatus' and name ~= 'tmux' then return end + if name == 'xev-winstatus' and event == 'STDOUT' then + if msg:match('FocusIn') then + write(laststatus) + end + end + if event == 'EXIT' then vis:info(string.format('%s client exited: %s', name, code)) elseif event == 'SIGNAL' then @@ -104,6 +121,7 @@ x11.set_title = function(title) end x11.set_status = function(status) + laststatus = status; return write(status) end