fix hotkeys

Signed-off-by: Vladimir Mandic <mandic00@live.com>
This commit is contained in:
Vladimir Mandic
2026-07-22 08:43:10 +02:00
parent 9d42c7c483
commit e503d88934
6 changed files with 40 additions and 32 deletions
+3 -1
View File
@@ -1,6 +1,6 @@
# Change Log for SD.Next
## Update for 2026-07-21
## Update for 2026-07-22
- **Compute**
- torch: update to `2.13.0` for CUDA, ROCm, IPEX
@@ -18,6 +18,7 @@
- seedvr: enhanced upscaler support
- logs: propagate server tracebacks to client
- networks: improve search and filtering to allow multi-words
- hotkeys: add alt+0-9 to switch to tab 0-9
- **Fixes**
- upscaler: auto-refresh to catch chainner upscalers that are not loaded on first attempt
- lora: support diffusers trainer
@@ -25,6 +26,7 @@
- preview: cache image for reuse
- kanvas: paint combined with zoom
- rembg: numba dependencies
- hotkeys: legacy-vs-modernui
## Update for 2026-07-14
+14 -11
View File
@@ -9955,6 +9955,7 @@ function getUICurrentTab() {
return gradioApp().querySelector("#tabs button.selected");
}
function getUICurrentTabContent() {
if (window.waitForUiReady) return gradioApp().querySelector(".xtabs-item:not(.hidden) > .split");
return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])');
}
var uiAfterUpdateCallbacks = [];
@@ -10076,22 +10077,24 @@ document.addEventListener("DOMContentLoaded", () => {
gradioObserver = new MutationObserver(mutationCallback);
gradioObserver.observe(gradioApp(), { childList: true, subtree: true, attributes: false });
});
document.addEventListener("keydown", (e) => {
let elem;
if (e.key === "Escape") elem = getUICurrentTabContent().querySelector("button[id$=_interrupt]");
if (e.key === "Enter" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_generate]");
if (e.key === "i" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_reprocess]");
if (e.key === " " && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_extra_networks_btn]");
if (e.key === "n" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id$=_extra_networks_btn]");
if (e.key === "s" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id^=save_]");
if (e.key === "Insert" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id^=save_]");
if (e.key === "d" && e.ctrlKey) elem = getUICurrentTabContent().querySelector("button[id^=delete_]");
async function selectHotKeyElement(e, id) {
const elem = getUICurrentTabContent().querySelector(id);
log("hotkey", { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey, id, elid: elem?.id, elnode: elem?.nodeName });
if (elem) {
e.preventDefault();
log("hotkey", { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey }, elem?.id, elem.nodeName);
if (elem.nodeName === "BUTTON") elem.click();
else elem.focus();
}
}
document.addEventListener("keydown", (e) => {
if (e.key === "Escape") selectHotKeyElement(e, "button[id$=_interrupt]");
if (e.key === "Enter" && e.ctrlKey) selectHotKeyElement(e, "button[id$=_generate]");
if (e.key === "i" && e.ctrlKey) selectHotKeyElement(e, "button[id$=_reprocess]");
if (e.key === " " && e.ctrlKey) selectHotKeyElement(e, "button[id$=_extra_networks_btn]");
if (e.key === "n" && e.ctrlKey) selectHotKeyElement(e, "button[id$=_extra_networks_btn]");
if (e.key === "s" && e.ctrlKey) selectHotKeyElement(e, "button[id^=save_]");
if (e.key === "Insert" && e.ctrlKey) selectHotKeyElement(e, "button[id^=save_]");
if (e.key === "d" && e.ctrlKey) selectHotKeyElement(e, "button[id^=delete_]");
});
function getSortableCellValue(cell, sortType) {
const rawValue = cell?.dataset?.sortValue ?? cell?.textContent?.trim() ?? "";
+2 -2
View File
File diff suppressed because one or more lines are too long
+19 -16
View File
@@ -35,6 +35,7 @@ export function getUICurrentTab() {
}
export function getUICurrentTabContent() {
if (window.waitForUiReady) return gradioApp().querySelector('.xtabs-item:not(.hidden) > .split');
return gradioApp().querySelector('.tabitem[id^=tab_]:not([style*="display: none"])');
}
@@ -177,26 +178,28 @@ document.addEventListener('DOMContentLoaded', () => {
gradioObserver.observe(gradioApp(), { childList: true, subtree: true, attributes: false });
});
async function selectHotKeyElement(e: KeyboardEvent, id: string) {
const elem = getUICurrentTabContent().querySelector(id);
log('hotkey', { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey, id, elid: elem?.id, elnode: elem?.nodeName });
if (elem) {
e.preventDefault();
if (elem.nodeName === 'BUTTON') elem.click();
else elem.focus();
}
}
/**
* Add a listener to the document for keydown events
*/
document.addEventListener('keydown', (e) => {
let elem;
if (e.key === 'Escape') elem = getUICurrentTabContent().querySelector('button[id$=_interrupt]');
if (e.key === 'Enter' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_generate]');
if (e.key === 'i' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_reprocess]');
if (e.key === ' ' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_extra_networks_btn]');
if (e.key === 'n' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id$=_extra_networks_btn]');
if (e.key === 's' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id^=save_]');
if (e.key === 'Insert' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id^=save_]');
if (e.key === 'd' && e.ctrlKey) elem = getUICurrentTabContent().querySelector('button[id^=delete_]');
// if (e.key === 'm' && e.ctrlKey) elem = gradioApp().getElementById('setting_sd_model_checkpoint');
if (elem) {
e.preventDefault();
log('hotkey', { key: e.key, meta: e.metaKey, ctrl: e.ctrlKey, alt: e.altKey }, elem?.id, elem.nodeName);
if (elem.nodeName === 'BUTTON') elem.click();
else elem.focus();
}
if (e.key === 'Escape') selectHotKeyElement(e, 'button[id$=_interrupt]');
if (e.key === 'Enter' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_generate]');
if (e.key === 'i' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_reprocess]');
if (e.key === ' ' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_extra_networks_btn]');
if (e.key === 'n' && e.ctrlKey) selectHotKeyElement(e, 'button[id$=_extra_networks_btn]');
if (e.key === 's' && e.ctrlKey) selectHotKeyElement(e, 'button[id^=save_]');
if (e.key === 'Insert' && e.ctrlKey) selectHotKeyElement(e, 'button[id^=save_]');
if (e.key === 'd' && e.ctrlKey) selectHotKeyElement(e, 'button[id^=delete_]');
});
function getSortableCellValue(cell, sortType) {
+1 -1
Submodule wiki updated: c66bc2864b...53cdbf62ab