fixed conpty detection (fixes #653)

This commit is contained in:
Eugene Pankov
2019-02-12 11:19:17 +01:00
parent 714f181be5
commit 3039a65757
4 changed files with 19 additions and 14 deletions

View File

@@ -1,4 +1,3 @@
import * as os from 'os'
import { Component } from '@angular/core'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { Subscription } from 'rxjs'
@@ -6,7 +5,7 @@ import { ConfigService, ElectronService, HostAppService, Platform } from 'termin
import { EditProfileModalComponent } from './editProfileModal.component'
import { IShell, Profile } from '../api'
import { TerminalService } from '../services/terminal.service'
import { UACService } from '../services/uac.service'
import { WIN_BUILD_CONPTY_SUPPORTED, WIN_BUILD_CONPTY_STABLE, isWindowsBuild } from '../utils'
@Component({
template: require('./shellSettingsTab.component.pug'),
@@ -20,7 +19,6 @@ export class ShellSettingsTabComponent {
private configSubscription: Subscription
constructor (
uac: UACService,
public config: ConfigService,
public hostApp: HostAppService,
private electron: ElectronService,
@@ -32,10 +30,9 @@ export class ShellSettingsTabComponent {
this.reload()
})
this.reload()
this.isConPTYAvailable = uac.isAvailable
this.isConPTYStable = hostApp.platform === Platform.Windows
&& parseFloat(os.release()) >= 10
&& parseInt(os.release().split('.')[2]) >= 18309
this.isConPTYAvailable = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED)
this.isConPTYStable = isWindowsBuild(WIN_BUILD_CONPTY_STABLE)
}
async ngOnInit () {

View File

@@ -7,6 +7,7 @@ import { Injectable } from '@angular/core'
import { Logger, LogService, ConfigService } from 'terminus-core'
import { exec } from 'mz/child_process'
import { SessionOptions } from '../api'
import { WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild } from '../utils'
let macOSNativeProcessList
try {
@@ -118,7 +119,8 @@ export class Session extends BaseSession {
rows: options.height || 30,
cwd,
env: env,
experimentalUseConpty: this.config.store.terminal.useConPTY && 1,
// `1` instead of `true` forces ConPTY even if unstable
experimentalUseConpty: (isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED) && this.config.store.terminal.useConPTY) ? 1 : false,
})
this.guessedCWD = cwd

View File

@@ -1,20 +1,18 @@
import * as path from 'path'
import * as os from 'os'
import { Injectable } from '@angular/core'
import { ElectronService, HostAppService, Platform } from 'terminus-core'
import { ElectronService } from 'terminus-core'
import { SessionOptions } from '../api'
import { WIN_BUILD_CONPTY_SUPPORTED, isWindowsBuild } from '../utils'
@Injectable({ providedIn: 'root' })
export class UACService {
isAvailable = false
constructor (
hostApp: HostAppService,
private electron: ElectronService,
) {
this.isAvailable = hostApp.platform === Platform.Windows
&& parseFloat(os.release()) >= 10
&& parseInt(os.release().split('.')[2]) >= 17692
this.isAvailable = isWindowsBuild(WIN_BUILD_CONPTY_SUPPORTED)
}
patchSessionOptionsForUAC (sessionOptions: SessionOptions): SessionOptions {

View File

@@ -0,0 +1,8 @@
import * as os from 'os'
export const WIN_BUILD_CONPTY_SUPPORTED = 17692
export const WIN_BUILD_CONPTY_STABLE = 18309
export function isWindowsBuild (build: number): boolean {
return process.platform === 'win32' && parseFloat(os.release()) >= 10 && parseInt(os.release().split('.')[2]) >= build
}