diff --git a/tabby-core/src/components/selectorModal.component.ts b/tabby-core/src/components/selectorModal.component.ts index 23bcdc4b..76092314 100644 --- a/tabby-core/src/components/selectorModal.component.ts +++ b/tabby-core/src/components/selectorModal.component.ts @@ -76,10 +76,11 @@ export class SelectorModalComponent { { sort: true }, ).search(f) - const freeOption = this.options.find(x => x.freeInputPattern) - if (freeOption && !this.filteredOptions.includes(freeOption)) { - this.filteredOptions.push(freeOption) - } + this.options.filter(x => x.freeInputPattern).forEach(freeOption => { + if (!this.filteredOptions.includes(freeOption)) { + this.filteredOptions.push(freeOption) + } + }) } this.selectedIndex = Math.max(0, this.selectedIndex) this.selectedIndex = Math.min(this.filteredOptions.length - 1, this.selectedIndex) diff --git a/tabby-core/src/configDefaults.yaml b/tabby-core/src/configDefaults.yaml index d8624391..7a7ee99c 100644 --- a/tabby-core/src/configDefaults.yaml +++ b/tabby-core/src/configDefaults.yaml @@ -54,3 +54,4 @@ hacks: disableVibrancyWhileDragging: false enableFluentBackground: false language: null +defaultQuickConnectProvider: "ssh" diff --git a/tabby-core/src/index.ts b/tabby-core/src/index.ts index 56229857..6cf14a24 100644 --- a/tabby-core/src/index.ts +++ b/tabby-core/src/index.ts @@ -219,6 +219,7 @@ export default class AppModule { // eslint-disable-line @typescript-eslint/no-ex name: this.translate.instant('Quick connect'), freeInputPattern: this.translate.instant('Connect to "%s"...'), icon: 'fas fa-arrow-right', + description: `(${provider.name.toUpperCase()})`, callback: query => { const p = provider.quickConnect(query) if (p) { diff --git a/tabby-core/src/services/profiles.service.ts b/tabby-core/src/services/profiles.service.ts index 295909e7..943d11c2 100644 --- a/tabby-core/src/services/profiles.service.ts +++ b/tabby-core/src/services/profiles.service.ts @@ -177,17 +177,20 @@ export class ProfilesService { }) } catch { } - if (this.getProviders().some(x => x.supportsQuickConnect)) { + this.getProviders().filter(x => x.supportsQuickConnect).forEach(provider => { options.push({ name: this.translate.instant('Quick connect'), freeInputPattern: this.translate.instant('Connect to "%s"...'), + description: `(${provider.name.toUpperCase()})`, icon: 'fas fa-arrow-right', + weight: provider.id !== this.config.store.defaultQuickConnectProvider ? 1 : 0, callback: query => { - const profile = this.quickConnect(query) + const profile = provider.quickConnect(query) resolve(profile) }, }) - } + }) + await this.selector.show(this.translate.instant('Select profile or enter an address'), options) } catch (err) { reject(err) diff --git a/tabby-settings/src/components/profilesSettingsTab.component.pug b/tabby-settings/src/components/profilesSettingsTab.component.pug index 0513f26b..9ce3f981 100644 --- a/tabby-settings/src/components/profilesSettingsTab.component.pug +++ b/tabby-settings/src/components/profilesSettingsTab.component.pug @@ -149,6 +149,20 @@ ul.nav-tabs(ngbNav, #nav='ngbNav') option(ngValue='wt', translation) Windows Terminal option(ngValue='cygwin', translation) Cygwin + .form-line + .header + .title(translate) Default "Connect to" type + .description(translate) Default connection type used by quick connect feature (ex. SSH, Telnet) + + select.form-control( + [(ngModel)]='config.store.defaultQuickConnectProvider', + (ngModelChange)='config.save()', + ) + option( + *ngFor='let provider of getQuickConnectProviders()', + [ngValue]='provider.id' + ) {{provider.name}} + .form-line.content-box .header .title(translate) Default profile settings diff --git a/tabby-settings/src/components/profilesSettingsTab.component.ts b/tabby-settings/src/components/profilesSettingsTab.component.ts index 9b6e1c8b..38898ae6 100644 --- a/tabby-settings/src/components/profilesSettingsTab.component.ts +++ b/tabby-settings/src/components/profilesSettingsTab.component.ts @@ -312,4 +312,8 @@ export class ProfilesSettingsTabComponent extends BaseComponent { isProfileBlacklisted (profile: PartialProfile): boolean { return profile.id && this.config.store.profileBlacklist.includes(profile.id) } + + getQuickConnectProviders (): ProfileProvider[] { + return this.profileProviders.filter(x => x.supportsQuickConnect) + } } diff --git a/tabby-telnet/src/profiles.ts b/tabby-telnet/src/profiles.ts index 6530771e..fad4f8ce 100644 --- a/tabby-telnet/src/profiles.ts +++ b/tabby-telnet/src/profiles.ts @@ -8,7 +8,7 @@ import { TelnetProfile } from './session' export class TelnetProfilesService extends ProfileProvider { id = 'telnet' name = 'Telnet' - supportsQuickConnect = false + supportsQuickConnect = true settingsComponent = TelnetProfileSettingsComponent configDefaults = { options: {