diff --git a/tabby-core/src/services/config.service.ts b/tabby-core/src/services/config.service.ts index fcd9d3a1..5d631890 100644 --- a/tabby-core/src/services/config.service.ts +++ b/tabby-core/src/services/config.service.ts @@ -263,6 +263,7 @@ export class ConfigService { config.version = 1 } if (config.version < 2) { + config.profiles ??= [] if (config.terminal?.recoverTabs !== undefined) { config.recoverTabs = config.terminal.recoverTabs delete config.terminal.recoverTabs diff --git a/tabby-local/src/config.ts b/tabby-local/src/config.ts index 60f7968f..01b2f181 100644 --- a/tabby-local/src/config.ts +++ b/tabby-local/src/config.ts @@ -15,6 +15,7 @@ export class TerminalConfigProvider extends ConfigProvider { showBuiltinProfiles: true, environment: {}, profiles: [], + setComSpec: false, }, } diff --git a/tabby-local/src/session.ts b/tabby-local/src/session.ts index 8c942dae..344168ae 100644 --- a/tabby-local/src/session.ts +++ b/tabby-local/src/session.ts @@ -122,7 +122,13 @@ export class Session extends BaseSession { ...this.config.store.terminal.environment || {}, } - if (this.hostApp.platform === Platform.Windows) { + if (this.hostApp.platform === Platform.Windows && this.config.store.terminal.setComSpec) { + for (const k of Object.keys(env)) { + if (k.toUpperCase() === 'COMSPEC') { + // eslint-disable-next-line @typescript-eslint/no-dynamic-delete + delete env[k] + } + } env.COMSPEC = this.bootstrapData.executable } diff --git a/tabby-terminal/src/components/terminalSettingsTab.component.pug b/tabby-terminal/src/components/terminalSettingsTab.component.pug index 67550b57..8c161122 100644 --- a/tabby-terminal/src/components/terminalSettingsTab.component.pug +++ b/tabby-terminal/src/components/terminalSettingsTab.component.pug @@ -158,3 +158,12 @@ h3.mb-3 Terminal [(ngModel)]='config.store.terminal.warnOnMultilinePaste', (ngModelChange)='config.save()', ) + +.form-line(*ngIf='hostApp.platform === Platform.Windows') + .header + .title Set Tabby as %COMSPEC% + .description Allows opening .bat files in tabs, but breaks some shells + toggle( + [(ngModel)]='config.store.terminal.setComSpec', + (ngModelChange)='config.save()', + )