aboutsummaryrefslogtreecommitdiff
path: root/src/background/completion/TabCompletionUseCase.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/background/completion/TabCompletionUseCase.ts')
-rw-r--r--src/background/completion/TabCompletionUseCase.ts25
1 files changed, 23 insertions, 2 deletions
diff --git a/src/background/completion/TabCompletionUseCase.ts b/src/background/completion/TabCompletionUseCase.ts
index 7e6dce3..dec86e9 100644
--- a/src/background/completion/TabCompletionUseCase.ts
+++ b/src/background/completion/TabCompletionUseCase.ts
@@ -1,6 +1,6 @@
import { inject, injectable } from "tsyringe";
import TabItem from "./TabItem";
-import TabRepository from "./TabRepository";
+import TabRepository, { Tab } from "./TabRepository";
import TabPresenter from "../presenters/TabPresenter";
import TabFlag from "../../shared/TabFlag";
@@ -14,7 +14,28 @@ export default class TabCompletionUseCase {
async queryTabs(query: string, excludePinned: boolean): Promise<TabItem[]> {
const lastTabId = await this.tabPresenter.getLastSelectedId();
- const tabs = await this.tabRepository.queryTabs(query, excludePinned);
+ const allTabs = await this.tabRepository.getAllTabs(excludePinned);
+ const num = parseInt(query, 10);
+ let tabs: Tab[] = [];
+ if (!isNaN(num)) {
+ const tab = allTabs.find(t => t.index === num - 1);
+ if (tab) {
+ tabs = [tab];
+ }
+ } else if (query == '%') {
+ const tab = allTabs.find(t => t.active);
+ if (tab) {
+ tabs = [tab];
+ }
+ } else if (query == '#') {
+ const tab = allTabs.find(t => t.id === lastTabId);
+ if (tab) {
+ tabs = [tab];
+ }
+ } else {
+ tabs = await this.tabRepository.queryTabs(query, excludePinned);
+ }
+
return tabs.map(tab => {
let flag = TabFlag.None;
if (tab.active) {