From 0d366eb0734f81e02d024f11294799d39e9ff079 Mon Sep 17 00:00:00 2001 From: Simon Parri Date: Thu, 25 Sep 2025 11:43:54 -0500 Subject: VimFX: Replace Tab Groups add-on with new native tab groups --- common/.vimfx/config.js | 71 +++++++++++++++++++++++++++----------------- common/.vimfx/userChrome.css | 6 ++++ 2 files changed, 50 insertions(+), 27 deletions(-) (limited to 'common/.vimfx') diff --git a/common/.vimfx/config.js b/common/.vimfx/config.js index 8968a8d..6783857 100644 --- a/common/.vimfx/config.js +++ b/common/.vimfx/config.js @@ -98,22 +98,41 @@ function reloadUserChrome(callback) { } } -function tabGroupsToggleTabView({vim}) { - vim.window.TabView.toggle() +function listTabs({vim}) { + vim.window.gTabsPanel.showAllTabsPanel() } -function tabGroupsSwitch({vim}) { - vim.window.TabView.button.click() +function addTabToGroup({vim, count}) { + if (!count) return vim.notify("No count specified") + let {window: {gBrowser: {tabGroups, selectedTabs}}} = vim + return tabGroups[count-1]?.addTabs(selectedTabs) } -function tabGroupsMoveTab({vim}) { - let m = vim.window.document.querySelector("#tabGroups-context_tabViewMenu") - m.parentElement.openPopup() - m.click() +function removeTabFromGroup({vim}) { + let {window: {gBrowser}} = vim + for (let tab of gBrowser.selectedTabs) + gBrowser.ungroupTab(tab) } -function listTabs({vim}) { - vim.window.gTabsPanel.showAllTabsPanel() +function collapseTabGroup({vim, count}) { + let {window: {gBrowser: {tabGroups, selectedTab}}} = vim, + group = (count ? tabGroups[count-1] : selectedTab.group) + if (group) + return group.collapsed = !group.collapsed +} + +function addTabGroup({vim}) { + let {window: {gBrowser}} = vim, + {selectedTab, selectedTabs, tabs} = gBrowser + return gBrowser.addTabGroup(selectedTabs, { + insertBefore: tabs[Math.max(0, tabs.indexOf(selectedTab)-1)], + isUserTriggered: true, + }) +} + +function ungroupTabGroup({vim, count}) { + let {window: {gBrowser: {tabGroups, selectedTab}}} = vim + return (count ? tabGroups[count-1] : selectedTab.group)?.ungroupTabs() } const sendFn = msg => @@ -125,14 +144,17 @@ let commands = { emacsclient_eww: rcurry(execOnLink, "emacsclient", "--eval", "(eww \"%u\")"), toggle_images: toggleImages, reload_userchrome: ({vim}) => reloadUserChrome(a => vim.notify(a)), - tab_groups_view: tabGroupsToggleTabView, - tab_groups_switch: tabGroupsSwitch, - tab_groups_move: tabGroupsMoveTab, list_tabs: listTabs, browse_git: rcurry(execOnCurrent, "browse-git", "%u"), browse_git_follow: rcurry(execOnLink, "browse-git", "%u"), go_way_back: sendFn("goWayBack"), go_way_forward: sendFn("goWayForward"), + search_tabs: ({vim: {window: {gTabsPanel}}}) => gTabsPanel.searchTabs(), + add_tab_to_group: addTabToGroup, + remove_tab_from_group: removeTabFromGroup, + collapse_tab_group: collapseTabGroup, + add_tab_group: addTabGroup, + ungroup_tab_group: ungroupTabGroup, } // ** Apply Object.entries(commands) @@ -163,7 +185,7 @@ mappings = { ["xtr tr", "reload_all"], ["xtR tR", "reload_all_force"], ["xg g", "stop"], - ["xtg tg", "stop_all"], + ["xts ts", "stop_all"], ["gg", "my/browse_git"], ["gwb", "my/go_way_back"], ["gwf", "my/go_way_forward"], @@ -206,10 +228,13 @@ mappings = { ["u/ uxtu tu", "tab_restore_list"], ["", "tab_close_to_end"], ["", "tab_close_other"], + ["t", "my/search_tabs"], ["T", "my/list_tabs"], - ["t", "my/tab_groups_switch"], - ["xtm tm", "my/tab_groups_move"], - ["xtv tv", "my/tab_groups_view"], + ["uxtg tg", "my/add_tab_group"], + ["uxtG tG", "my/ungroup_tab_group"], + ["xtg tg", "my/add_tab_to_group"], + ["xtG tG", "my/remove_tab_from_group"], + ["xtc tc", "my/collapse_tab_group"], ], browsing: [ ["j ss s", "follow"], @@ -360,6 +385,8 @@ const prefs = { "browser.link.open_newwindow": 1, "browser.link.open_newwindow.restriction": 0, // use above setting "browser.link.open_newwindow.override.external": 3, // external links in new tab + // ** Enable AI (for once) in tab groups + "browser.tabs.groups.smart.enabled": true, // ** Prefer Japanese to Chinese and Korean "font.cjk_pref_fallback_order": "ja,zh-cn,zh-hk,zh-tw,ko", // ** Let me debug my own browser @@ -444,15 +471,6 @@ const prefs = { // ** Enable "experimental" features "dom.dialog_element.enabled": true, "layout.css.has-selector.enabled": true, - // ** Configure Tab Groups - "extensions.tabgroups.displayMode": "grid", - "extensions.tabgroups.stackTabs": false, - "extensions.tabgroups.showThumbs": false, - "extensions.tabgroups.sortGroupsByName": true, - "extensions.tabgroups.gridDynamicSize": false, - "extensions.tabgroups.nextGroupAccel": false, - "extensions.tabgroups.prevGroupAccel": false, - "extensions.tabgroups.tabViewAccel": false, } // ** Apply Preferences.set(prefs) @@ -461,7 +479,6 @@ let addons = { "uBlock Origin": "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi", "Music Score Downloader": "https://addons.mozilla.org/firefox/downloads/latest/music-score-downloader/latest.xpi", "PassFF": "https://addons.mozilla.org/firefox/downloads/latest/passff/latest.xpi", - "Tab Groups": "https://github.com/117649/Tab-Groups/releases/download/dev-build/Tab-Groups-2.1.4b1_r20250829.0325.xpi", "Chrome Mask": "https://addons.mozilla.org/firefox/downloads/latest/chrome-mask/latest.xpi", } // ** Apply diff --git a/common/.vimfx/userChrome.css b/common/.vimfx/userChrome.css index 3a1f71f..588f9f6 100644 --- a/common/.vimfx/userChrome.css +++ b/common/.vimfx/userChrome.css @@ -62,3 +62,9 @@ findbar { padding-block: 0 !important } findbar, #statuspanel, #TabsToolbar, #nav-bar { font-family: monospace; } + +tabs:has(tab-group) { counter-reset: group-index } +tab-group > vbox > label::before { + counter-increment: group-index; + content: counter(group-index) ": "; +} -- cgit v1.2.3