feat(overlay): discover unclaimed mpv key bindings (#246)

This commit is contained in:
sudacode authored and GitHub committed 2026-09-15 18:26:45 -07:00
1 parent e6dc9dfec5
commit 7c1eac03dc
21 files changed
+674 -5

No files matched your search

+31
View File
@@ -1,5 +1,6 @@
import type { CompiledSessionBinding, PrimarySubMode, ShortcutsConfig } from '../../types';
import type { RendererContext } from '../context';
import { createMpvInputForwarding } from './mpv-input-forwarding';
import {
YOMITAN_POPUP_HIDDEN_EVENT,
YOMITAN_POPUP_SHOWN_EVENT,
@@ -55,6 +56,11 @@ export function createKeyboardHandlers(
timeout: ReturnType<typeof setTimeout> | null;
} | null = null;
let mpvInputForwardingListenersInstalled = false;
let keyboardConfigLoaded = false;
const importedMpvBindings = createMpvInputForwarding({
load: () => window.electronAPI.getMpvInputBindings(),
send: (command) => window.electronAPI.sendMpvCommand(command),
});
const CHORD_MAP = new Map<
string,
@@ -131,6 +137,7 @@ export function createKeyboardHandlers(
ctx.state.sessionBindingMap = new Map(
bindings.map((binding) => [keyEventToStringFromBinding(binding), binding]),
);
void importedMpvBindings.refresh();
}
function keyEventToStringFromBinding(binding: CompiledSessionBinding): string {
@@ -984,6 +991,7 @@ export function createKeyboardHandlers(
]);
updateSessionBindings(sessionBindings);
updateConfiguredShortcuts(shortcuts, statsToggleKey, markWatchedKey);
keyboardConfigLoaded = true;
syncKeyboardTokenSelection();
}
@@ -1034,6 +1042,18 @@ export function createKeyboardHandlers(
return;
}
mpvInputForwardingListenersInstalled = true;
const lateScriptRefresh = setTimeout(() => {
void importedMpvBindings.refresh();
}, 1500);
window.addEventListener('focus', () => {
void importedMpvBindings.refresh();
});
window.addEventListener('blur', importedMpvBindings.releaseAll);
window.addEventListener('beforeunload', () => {
clearTimeout(lateScriptRefresh);
importedMpvBindings.dispose();
});
document.addEventListener('keyup', importedMpvBindings.keyup, true);
const subtitleMutationObserver = new MutationObserver(() => {
syncKeyboardTokenSelection();
@@ -1248,7 +1268,18 @@ export function createKeyboardHandlers(
if (binding) {
e.preventDefault();
dispatchSessionBinding(binding);
return;
}
if (
keyboardConfigLoaded &&
!ctx.state.playlistBrowserModalOpen &&
!ctx.state.youtubePickerModalOpen &&
!ctx.state.subtitleSidebarModalOpen &&
!ctx.state.yomitanPopupVisible &&
!isYomitanPopupVisible(document) &&
!isInteractiveTarget(e.target)
)
importedMpvBindings.keydown(e);
});
document.addEventListener('mousedown', (e: MouseEvent) => {