// Created on savesnippets.com ยท https://savesnippets.com/rPiywwFsBrPOiM function createShortcuts() { const map = new Map(); function parse(combo) { const parts = combo.toLowerCase().split('+'); return { key: parts.at(-1), ctrl: parts.includes('ctrl'), alt: parts.includes('alt'), shift: parts.includes('shift'), meta: parts.includes('meta'), }; } function handler(e) { for (const [combo, fn] of map) { const p = parse(combo); if (e.key.toLowerCase() === p.key && e.ctrlKey === p.ctrl && e.altKey === p.alt && e.shiftKey === p.shift && e.metaKey === p.meta) { e.preventDefault(); fn(e); } } } document.addEventListener('keydown', handler); return { on: (combo, fn) => map.set(combo.toLowerCase(), fn), off: (combo) => map.delete(combo.toLowerCase()), destroy: () => document.removeEventListener('keydown', handler), }; } // Usage const keys = createShortcuts(); keys.on('ctrl+k', () => document.querySelector('#search').focus()); keys.on('ctrl+shift+p', () => openCommandPalette()); keys.on('escape', () => closeAllModals());