diff options
author | Simon Parri <simonparri@ganzeria.com> | 2025-09-25 11:43:54 -0500 |
---|---|---|
committer | Simon Parri <simonparri@ganzeria.com> | 2025-09-25 11:43:54 -0500 |
commit | 0d366eb0734f81e02d024f11294799d39e9ff079 (patch) | |
tree | b74959a44bfdddcfb2b757e44c0bd5395b2bcbd9 /common/.vimfx/config.js | |
parent | 4ad21893fa8ccd4447d78a0a4f9999162d8704cf (diff) | |
download | dotfiles-0d366eb0734f81e02d024f11294799d39e9ff079.tar.gz dotfiles-0d366eb0734f81e02d024f11294799d39e9ff079.zip |
VimFX: Replace Tab Groups add-on with new native tab groups
Diffstat (limited to 'common/.vimfx/config.js')
-rw-r--r-- | common/.vimfx/config.js | 71 |
1 files changed, 44 insertions, 27 deletions
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 <c-x>tr", "reload_all"], ["xtR <c-x>tR", "reload_all_force"], ["xg <c-x>g", "stop"], - ["xtg <c-x>tg", "stop_all"], + ["xts <c-x>ts", "stop_all"], ["gg", "my/browse_git"], ["gwb", "my/go_way_back"], ["gwf", "my/go_way_forward"], @@ -206,10 +228,13 @@ mappings = { ["u/ uxtu <c-u><c-x>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 <c-x>tm", "my/tab_groups_move"], - ["xtv <c-x>tv", "my/tab_groups_view"], + ["uxtg <c-u><c-x>tg", "my/add_tab_group"], + ["uxtG <c-u><c-x>tG", "my/ungroup_tab_group"], + ["xtg <c-x>tg", "my/add_tab_to_group"], + ["xtG <c-x>tG", "my/remove_tab_from_group"], + ["xtc <c-x>tc", "my/collapse_tab_group"], ], browsing: [ ["j ss <a-s>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 |