提交 3039a657 编写于 作者: E Eugene Pankov

fixed conpty detection (fixes #653)

上级 714f181b
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 () {
......
......@@ -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
......
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 {
......
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
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册