From fa51fc2024e5eb4268acc5cf24fe0b6c75c34f6d Mon Sep 17 00:00:00 2001 From: Oliver Blanthorn Date: Mon, 16 Oct 2017 14:42:12 +0100 Subject: [PATCH] Add tabdetach,duplicate and undo commands; fix multi-window bugs --- src/excmds_background.ts | 27 +++++++++++++++++++++------ src/parsing.ts | 1 + src/tridactyl.d.ts | 6 ++++++ 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/excmds_background.ts b/src/excmds_background.ts index 803628b1..a2e1e540 100644 --- a/src/excmds_background.ts +++ b/src/excmds_background.ts @@ -16,7 +16,7 @@ const DEFAULT_FAVICON = browser.extension.getURL("static/defaultFavicon.svg") * TODO: Highlander theory: Can there ever be more than one? * */ -async function activeTab() { +async function getActiveTab() { return (await browser.tabs.query({active:true, currentWindow:true}))[0] } @@ -27,11 +27,11 @@ async function messageCommandline(command: string, args?: Array) { args, } // For commandlines not in iframes on content scripts, use runtime - browser.tabs.sendMessage((await activeTab()).id, message) + browser.tabs.sendMessage((await getActiveTab()).id, message) } function messageActiveTab(command: string, args?: Array) { - messageFilteredTabs({active:true}, command, args) + messageFilteredTabs({active:true, currentWindow: true}, command, args) } async function messageFilteredTabs(filter, command: string, args?: Array) { @@ -79,7 +79,7 @@ export function closetabs(ids: number[]){ } export async function getactivetabid(){ - return (await browser.tabs.query({active: true}))[0].id + return (await getActiveTab()).id } // NB: it is unclear how to undo tab closure. @@ -89,7 +89,7 @@ export async function tabclose(n = 1){ } export async function tabmove(n?: string){ - let activeTab = (await browser.tabs.query({active: true}))[0], m: number + let activeTab = await getActiveTab(), m: number if (!n) { browser.tabs.move(activeTab.id, {index: -1}); return; } else if (n.startsWith("+") || n.startsWith("-")) { m = Math.max(0, Number(n) + activeTab.index) @@ -98,8 +98,23 @@ export async function tabmove(n?: string){ browser.tabs.move(activeTab.id, {index: m}) } +export async function tabdetach(id?: number){ + id = id ? id : (await getactivetabid()) + browser.windows.create({tabId: id}) +} + +export async function tabduplicate(id?: number){ + id = id ? id : (await getactivetabid()) + browser.tabs.duplicate(id) +} + +export async function undo(){ + let id = (await browser.sessions.getRecentlyClosed({maxResults: 1}))[0].id + browser.sessions.restore(id) +} + export async function pin(){ - let activeTab = (await browser.tabs.query({active: true}))[0] + let activeTab = await getActiveTab() browser.tabs.update(activeTab.id, {pinned: !activeTab.pinned}) } diff --git a/src/parsing.ts b/src/parsing.ts index 77aaaa32..46c9753f 100644 --- a/src/parsing.ts +++ b/src/parsing.ts @@ -45,6 +45,7 @@ export namespace normalmode { ["H", "historyback"], ["L", "historyforward"], ["d", "tabclose"], + ["u", "undo"], ["r", "reload"], ["R", "reloadhard"], ["gt", "tabnext"], diff --git a/src/tridactyl.d.ts b/src/tridactyl.d.ts index 4d79e507..e044db20 100644 --- a/src/tridactyl.d.ts +++ b/src/tridactyl.d.ts @@ -28,6 +28,12 @@ interface Window { scrollByPages(n: number): void } +// Web extension types not in web-ext-types yet declare namespace browser.find { function find(query, object): any } + +declare namespace browser.sessions{ + function getRecentlyClosed(filter: any): any + function restore(sessionId: number): any +}