diff --git a/turnstone/ui/static/app.js b/turnstone/ui/static/app.js index eb04bbd1..1cca77e9 100644 --- a/turnstone/ui/static/app.js +++ b/turnstone/ui/static/app.js @@ -4494,9 +4494,17 @@ document }); document.addEventListener("keydown", function (e) { - // Defer to modal's own keydown handler when new-ws modal is open - var nwsOverlay = document.getElementById("new-ws-overlay"); - if (nwsOverlay && nwsOverlay.style.display !== "none") return; + // Defer to modal's own keydown handler when any modal is open + var modalIds = [ + "new-ws-overlay", + "edit-title-overlay", + "delete-ws-overlay", + "ws-delete-overlay", + ]; + for (var mi = 0; mi < modalIds.length; mi++) { + var modal = document.getElementById(modalIds[mi]); + if (modal && modal.style.display !== "none") return; + } if (e.key === "Escape" && dashboardVisible) { e.preventDefault(); @@ -4542,6 +4550,34 @@ document.addEventListener("keydown", function (e) { } return; } + // Workstream action shortcuts — only preventDefault when a workstream + // is active, so native browser shortcuts (e.g. Ctrl+Shift+R hard reload) + // still work when no workstream is focused. + if (e.ctrlKey && e.shiftKey) { + var wsActionKey = e.key.toLowerCase(); + var activeWsId = !dashboardVisible && getCurrentWsId(); + if (wsActionKey === "r" && activeWsId) { + e.preventDefault(); + refreshWorkstreamTitle(); + return; + } + if (wsActionKey === "e" && activeWsId) { + e.preventDefault(); + editWorkstreamTitle(); + return; + } + if (wsActionKey === "f" && activeWsId) { + e.preventDefault(); + forkWorkstream(); + return; + } + // X not D — D conflicts with Chrome DevTools + if (wsActionKey === "x" && activeWsId) { + e.preventDefault(); + confirmDeleteWorkstream(); + return; + } + } // Ctrl+W: close current workstream tab if (e.ctrlKey && !e.shiftKey && e.key === "w") { if (Object.keys(workstreams).length > 1) { diff --git a/turnstone/ui/static/index.html b/turnstone/ui/static/index.html index 0286d641..8294eead 100644 --- a/turnstone/ui/static/index.html +++ b/turnstone/ui/static/index.html @@ -153,7 +153,11 @@ window.TURNSTONE_KB_SHORTCUTS = [ { desc: "Toggle dashboard", badge: 'Ctrl+D' }, { desc: "New workstream", badge: 'Ctrl+T' }, { desc: "Close workstream", badge: 'Ctrl+W' }, - { desc: "Switch to tab 1\u20139", badge: 'Ctrl+1\u20269' } + { desc: "Switch to tab 1\u20139", badge: 'Ctrl+1\u20269' }, + { desc: "Refresh title", badge: 'Ctrl+Shift+R' }, + { desc: "Edit title", badge: 'Ctrl+Shift+E' }, + { desc: "Fork workstream", badge: 'Ctrl+Shift+F' }, + { desc: "Delete workstream", badge: 'Ctrl+Shift+X' } ]}, { title: "Split panes", keys: [ { desc: "Split right", badge: 'Ctrl+\\' },