From 4818a04b0d6dbe314bf9fdd969528cb548cc1f65 Mon Sep 17 00:00:00 2001 From: Mortdecai Date: Thu, 26 Mar 2026 20:04:43 -0400 Subject: [PATCH] fix: remove Tab keydown interceptor, use tabIndex=-1 on buttons instead The keydown interceptor was likely conflicting with xterm.js native Tab handling. Instead, set tabIndex=-1 on toolbar buttons so Tab can't escape the terminal to browser focus, and auto-refocus terminal on any click outside the toolbar. --- static/toolbar.js | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/static/toolbar.js b/static/toolbar.js index 24ec023..24bfe98 100644 --- a/static/toolbar.js +++ b/static/toolbar.js @@ -111,18 +111,14 @@ if(btn.dataset.k) send(btn.dataset.k); }); - // Prevent browser from stealing Tab key — send it to the terminal instead - document.addEventListener('keydown', function(e){ - if(e.key === 'Tab' && !e.altKey && !e.ctrlKey && !e.metaKey){ - var active = document.activeElement; - // Only intercept if focus is on the terminal or body (not on toolbar buttons) - if(!active || active === document.body || active.closest('.xterm')){ - e.preventDefault(); - send('\t'); - } - } + // Ensure terminal keeps focus (prevents Tab from escaping to browser chrome) + document.addEventListener('click', function(e){ + if(!e.target.closest('#mb') && window.term) window.term.focus(); }); + // Remove tabindex from toolbar buttons so Tab can't escape to them + bar.querySelectorAll('button').forEach(function(b){ b.tabIndex = -1; }); + // Shrink terminal for toolbar on mobile (2 rows) var obs=new MutationObserver(function(){ var el=document.querySelector('.xterm');