diff options
author | Simon Parri <simonparri@ganzeria.com> | 2025-09-23 10:53:02 -0500 |
---|---|---|
committer | Simon Parri <simonparri@ganzeria.com> | 2025-09-23 10:53:52 -0500 |
commit | 959001a86bae0d8539121eb31df033717809869b (patch) | |
tree | 22028f4220bc8e8516c1d4373a7e2ba39c4a8d98 | |
parent | fd89a62d77e70ddaf2c3b92f17b7b072c571ca14 (diff) | |
download | TabFS-959001a86bae0d8539121eb31df033717809869b.tar.gz TabFS-959001a86bae0d8539121eb31df033717809869b.zip |
Add initial implementation of /tabs/create-reuse
-rw-r--r-- | extension/background.js | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/extension/background.js b/extension/background.js index 0d95b95..411930c 100644 --- a/extension/background.js +++ b/extension/background.js @@ -215,6 +215,36 @@ Routes["/tabs/create"] = { async truncate() { return {}; } }; +Routes["/tabs/create-reuse"] = { + description: 'Open a URL, reusing existing tabs where it makes sense.', + usage: 'echo "https://en.wikipedia.org/wiki/HTTP#History" > $0', + async write({buf}) { + const CURRENT = browser.windows.WINDOW_ID_CURRENT + const url = buf.trim(); + + let tabs = await browser.tabs.query({url}), + tab, t + // algorithm improvements welcome + if (t = tabs.find(t => t.active && t.windowId == CURRENT)) + tab = t + else if (t = tabs.find(t => t.windowId == CURRENT)) + tab = t + else + tab = tabs[0] + if (!tab) tab = await browser.tabs.create({url}) + + let nurl = new URL(url), + ourl = new URL(tab.url) + if (ourl.hash != nurl.hash) { + ourl.hash = nurl.hash + tab.url = ourl.toString() + } + + return {size: stringToUtf8Array(buf).length}; + }, + async truncate() { return {}; } +}; + Routes["/tabs/by-title"] = { description: 'Open tabs, organized by title; each subfolder represents an open tab.', usage: 'ls $0', |