diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-06-06 18:50:40 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-06-06 18:50:40 +0530 |
| commit | a7214b76e3f3a01f8ec6a6f8a9fe49e67765a3c5 (patch) | |
| tree | f6f26a429d8a27b5623024963fbebdcc8d0881f6 /modules/firefox.home/chrome/globalKeybindings.uc.js | |
| parent | 210d4bf063d10a723f66029c2a12610e479d172c (diff) | |
| download | nixos-config-main.tar.gz nixos-config-main.zip | |
Diffstat (limited to 'modules/firefox.home/chrome/globalKeybindings.uc.js')
| -rw-r--r-- | modules/firefox.home/chrome/globalKeybindings.uc.js | 171 |
1 files changed, 0 insertions, 171 deletions
diff --git a/modules/firefox.home/chrome/globalKeybindings.uc.js b/modules/firefox.home/chrome/globalKeybindings.uc.js deleted file mode 100644 index fe1d1f7..0000000 --- a/modules/firefox.home/chrome/globalKeybindings.uc.js +++ /dev/null @@ -1,171 +0,0 @@ -// ==UserScript== -// @name Global Keybindings -// @version 1.0 -// @description Setup global keybindings on all windows -// @include main -// @startup UC.globalKeybindings.init(win); -// @shutdown UC.globalKeybindings.destroy(); -// @onlyonce -// ==/UserScript== - -console.log('------------------------- keybinds') - -(() => { - // Configure global keybindings - const KEYBINDINGS = () => ({ - RELEASE: [ - [ctrl(shift(key('J'))), moveSelectedTabBy(+1)], - [ctrl(shift(key('K'))), moveSelectedTabBy(-1)], - [ctrl(shift(key('B'))), sidetabs.toggle], - [ctrl(alt(key('p'))), togglePassthrough, { modes: ALL_MODES }], - [alt(key('h')), history.back], - [alt(key('l')), history.forward], - ], - PRESS: [ - // Block default key bindings - [ctrl(shift(key('J'))), preventDefault()], - [ctrl(shift(key('K'))), preventDefault()], - [ctrl(shift(key('B'))), preventDefault()], - [ctrl(key('h')), preventDefault()], - [ctrl(key('b')), preventDefault()], - [alt(key('h')), preventDefault()], - [alt(key('l')), preventDefault()], - - [ctrl(key('j')), preventDefault(nextTab())], - [ctrl(key('k')), preventDefault(prevTab())], - - // Ctrl + number takes to the tab at position - ...(Array.from({ length: 10 }, (_, idx) => - [ctrl(key(idx === 9 ? 0 : idx + 1)), tabIndex(idx)], - )), - ], - }); - - // Restart firefox: Services.startup.quit(Services.startup.eForceQuit | Services.startup.eRestart) - - const nextTab = () => () => updateTabIndex((n, len) => (n + 1) % len); - const prevTab = () => () => updateTabIndex((n, len) => n === 0 ? len - 1 : n - 1); - const tabIndex = idx => () => updateTabIndex((_n, _len) => idx) - const preventDefault = f => e => { e.preventDefault(); f?.(e); }; - const moveSelectedTabBy = incr => () => updateSelectedTabIndex(incr); - const togglePassthrough = () => UC.globalKeybindings.updateMode(m => m !== MODE_PASSTHRU ? MODE_PASSTHRU : MODE_NORMAL) - - const history = { - back: () => gBrowser.goBack(), - forward: () => gBrowser.goForward(), - } - - const sidetabs = { - // getExtensionId: () => { - // return [...SidebarController.sidebars].find(([_, p]) => p.label?.match(/sidetabs/i))?.[0]; - // }, - ensureReady: async () => { - // Hide sidebar - SidebarController.hide(); - // Close by default - SidebarController.toggleExpanded(false); - // for (let i = 0; i < 3; i++) { - // if (sidetabs.getExtensionId()) { - // return !SidebarController.isOpen && SidebarController.show(sidetabs.getExtensionId() ?? undefined) - // } else { - // console.log('sidebar retry...'); - // await new Promise(res => setTimeout(res), 100); - // } - // } - }, - toggle: async () => { - SidebarController.toggleExpanded(); - // await sidetabs.ensureReady(); - // const sidebar = document.getElementById('sidebar-box'); - // sidebar?.classList.toggle('open'); - }, - } - - const MODE_PASSTHRU = 'passthru'; - const MODE_NORMAL = ''; - const ALL_MODES = [MODE_NORMAL, MODE_PASSTHRU]; - - const ctrl = b => e => b(e) && e.ctrlKey; - const alt = b => e => b(e) && e.altKey; - const shift = b => e => b(e) && e.shiftKey; - const key = key => e => `${e.key}` === `${key}`; - - const updateTabIndex = (f) => { - const newIndex = f(gBrowser.tabContainer.selectedIndex, gBrowser.tabs.length) - if (typeof newIndex !== 'number') return; - if (newIndex >= gBrowser.tabContainer.allTabs.length) return; - if (newIndex < 0) return; - gBrowser.selectTabAtIndex(newIndex); - }; - - const updateSelectedTabIndex = (incr) => { - if (typeof incr !== 'number') return; - if (incr === +1) return gBrowser.moveTabForward(); - if (incr === -1) return gBrowser.moveTabBackward(); - const newIndex = gBrowser.tabContainer.selectedIndex + incr; - if (newIndex >= gBrowser.tabContainer.allTabs.length) return; - if (newIndex < 0) return; - gBrowser.moveTabTo(gBrowser.selectedTab, newIndex) - }; - - const module = { - mode: MODE_NORMAL, - allModes: ALL_MODES, - - keybindings: KEYBINDINGS(), - - evaluateKeybindings: (bindings, e) => { - for (const [isKey, action, options] of bindings) { - // Only allow keys from the given mode - if ((options?.modes ?? [MODE_NORMAL]).includes(module.mode)) { - if (isKey(e)) { - const shouldContinue = action(e); - if (!shouldContinue) break; - } - } - } - }, - - updateMode: f => { - module.mode = f(module.mode); - if (gNavToolbox) gNavToolbox.dataset.keyMode = module.mode; - Services.obs.notifyObservers(null, 'uc:globalKeybindings:modeChanged', module.mode); - }, - - handleKeyUpEvent: e => module.evaluateKeybindings(module.keybindings.RELEASE, e), - handleKeyDownEvent: e => module.evaluateKeybindings(module.keybindings.PRESS, e), - - onWindowReady: async (win) => { - win.addEventListener('keyup', module.handleKeyUpEvent, true); - win.addEventListener('keydown', module.handleKeyDownEvent, true); - - await sidetabs.ensureReady(); - }, - - init(win) { - console.log('-------------------------------------------'); - console.log('init keys'); - console.log('-------------------------------------------'); - - const observe = () => { - Services.obs.removeObserver(observe, 'browser-window-before-show'); - module.onWindowReady(win) - } - - if (win.__SSi) { - module.onWindowReady(win) - } else { - Services.obs.addObserver(observe, 'browser-window-before-show'); - } - }, - destroy() { - _uc.windows((_doc, win) => { - win.removeEventListener('keyup', module.handleKeyUpEvent, true); - win.removeEventListener('keydown', module.handleKeyDownEvent, true); - }); - delete UC.globalKeybindings; - }, - }; - - UC.globalKeybindings = module; -})(); |
