diff options
author | Shin'ya Ueoka <ueokande@i-beam.org> | 2017-09-04 07:54:27 +0900 |
---|---|---|
committer | Shin'ya Ueoka <ueokande@i-beam.org> | 2017-09-05 18:15:24 +0900 |
commit | 4341f5ab620bc9e7b1e8b02f74167fa8c77c8f90 (patch) | |
tree | 814cd7dce6590c4ce1814402c4f30873b86e4c65 | |
parent | 8cabd68b927fe7022efa11dee082aafe8c2d4f30 (diff) |
select tab as rotations
-rw-r--r-- | src/background/index.js | 6 | ||||
-rw-r--r-- | src/background/tabs.js | 10 |
2 files changed, 9 insertions, 7 deletions
diff --git a/src/background/index.js b/src/background/index.js index 15c8ab0..93d0e74 100644 --- a/src/background/index.js +++ b/src/background/index.js @@ -55,9 +55,9 @@ const normalizeUrl = (string) => { } } -const cmdBuffer = (arg) => { +const cmdBuffer = (sender, arg) => { if (isNaN(arg)) { - return tabs.selectByKeyword(arg); + return tabs.selectByKeyword(sender.tab, arg); } else { let index = parseInt(arg, 10) - 1; return tabs.selectAt(index); @@ -73,7 +73,7 @@ const cmdEnterHandle = (request, sender) => { return browser.tabs.create({ url: normalizeUrl(words[1]) }); case 'b': case 'buffer': - return cmdBuffer(words[1]); + return cmdBuffer(sender, words[1]); } throw new Error(words[0] + ' command is not defined'); }; diff --git a/src/background/tabs.js b/src/background/tabs.js index efecdc4..be8ef02 100644 --- a/src/background/tabs.js +++ b/src/background/tabs.js @@ -31,7 +31,7 @@ const selectAt = (index) => { }); }; -const selectByKeyword = (keyword) => { +const selectByKeyword = (current, keyword) => { return browser.tabs.query({ currentWindow: true }).then((tabs) => { let matched = tabs.filter((t) => { return t.url.includes(keyword) || t.title.includes(keyword) @@ -39,10 +39,12 @@ const selectByKeyword = (keyword) => { if (matched.length == 0) { throw new RangeError('No matching buffer for ' + keyword); - } else if (matched.length >= 2) { - throw new RangeError('More than one match for ' + keyword); } - + for (let tab of matched) { + if (tab.index > current.index) { + return browser.tabs.update(tab.id, { active: true }); + } + } return browser.tabs.update(matched[0].id, { active: true }); }); } |