diff --git a/src/background/actions/command.js b/src/background/actions/command.js index 2b77507..020a57f 100644 --- a/src/background/actions/command.js +++ b/src/background/actions/command.js @@ -84,6 +84,8 @@ const exec = (tab, line, settings) => { case 'b': case 'buffer': return bufferCommand(args); + case 'bdeletes': + return tabs.closeTabsByKeywords(args.join(' ')); case 'addbookmark': return addBookmarkCommand(tab, args).then((item) => { if (!item) { diff --git a/src/background/shared/completions/index.js b/src/background/shared/completions/index.js index 8ecdcfc..43af23d 100644 --- a/src/background/shared/completions/index.js +++ b/src/background/shared/completions/index.js @@ -88,6 +88,7 @@ const getCompletions = (line, settings) => { return getOpenCompletions(name, keywords, settings.search); case 'b': case 'buffer': + case 'bdeletes': return tabs.getCompletions(keywords).then((gotTabs) => { let items = gotTabs.map((tab) => { return { diff --git a/src/background/shared/tabs.js b/src/background/shared/tabs.js index f1dcc73..1e5e3e4 100644 --- a/src/background/shared/tabs.js +++ b/src/background/shared/tabs.js @@ -1,3 +1,5 @@ +import * as tabCompletions from './completions/tabs'; + const closeTab = (id) => { return browser.tabs.get(id).then((tab) => { if (!tab.pinned) { @@ -10,6 +12,12 @@ const closeTabForce = (id) => { return browser.tabs.remove(id); }; +const closeTabsByKeywords = (keyword) => { + tabCompletions.getCompletions(keyword).then((tabs) => { + browser.tabs.remove(tabs.map(tab => tab.id)); + }); +}; + const reopenTab = () => { return browser.sessions.getRecentlyClosed({ maxResults: 1 @@ -119,7 +127,7 @@ const duplicate = (id) => { }; export { - closeTab, closeTabForce, reopenTab, selectAt, selectByKeyword, + closeTab, closeTabForce, closeTabsByKeywords, reopenTab, selectAt, selectByKeyword, selectPrevTab, selectNextTab, selectFirstTab, selectLastTab, selectTab, reload, updateTabPinned, toggleTabPinned, duplicate