mirror of
https://github.com/Eugeny/tabby.git
synced 2024-12-26 12:03:31 +03:00
xterm binary input support
This commit is contained in:
parent
09838197a2
commit
9fe82f2c0a
@ -30,8 +30,8 @@
|
|||||||
"xterm": "4.3.0",
|
"xterm": "4.3.0",
|
||||||
"xterm-addon-fit": "^0.4.0-beta2",
|
"xterm-addon-fit": "^0.4.0-beta2",
|
||||||
"xterm-addon-ligatures": "^0.2.1",
|
"xterm-addon-ligatures": "^0.2.1",
|
||||||
"xterm-addon-search": "^0.4.0-beta5",
|
"xterm-addon-search": "^0.4.0",
|
||||||
"xterm-addon-webgl": "^0.4.0-beta.15"
|
"xterm-addon-webgl": "^0.4.0"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@angular/animations": "^7",
|
"@angular/animations": "^7",
|
||||||
|
@ -63,7 +63,7 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
|
|||||||
private bellPlayer: HTMLAudioElement
|
private bellPlayer: HTMLAudioElement
|
||||||
private termContainerSubscriptions: Subscription[] = []
|
private termContainerSubscriptions: Subscription[] = []
|
||||||
|
|
||||||
get input$ (): Observable<string> { return this.frontend.input$ }
|
get input$ (): Observable<Buffer> { return this.frontend.input$ }
|
||||||
get output$ (): Observable<string> { return this.output }
|
get output$ (): Observable<string> { return this.output }
|
||||||
get resize$ (): Observable<ResizeEvent> { return this.frontend.resize$ }
|
get resize$ (): Observable<ResizeEvent> { return this.frontend.resize$ }
|
||||||
get alternateScreenActive$ (): Observable<boolean> { return this.frontend.alternateScreenActive$ }
|
get alternateScreenActive$ (): Observable<boolean> { return this.frontend.alternateScreenActive$ }
|
||||||
@ -229,7 +229,10 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
|
|||||||
/**
|
/**
|
||||||
* Feeds input into the active session
|
* Feeds input into the active session
|
||||||
*/
|
*/
|
||||||
sendInput (data: string) {
|
sendInput (data: string|Buffer) {
|
||||||
|
if (!(data instanceof Buffer)) {
|
||||||
|
data = Buffer.from(data, 'utf-8')
|
||||||
|
}
|
||||||
this.session.write(data)
|
this.session.write(data)
|
||||||
if (this.config.store.terminal.scrollOnInput) {
|
if (this.config.store.terminal.scrollOnInput) {
|
||||||
this.frontend.scrollToBottom()
|
this.frontend.scrollToBottom()
|
||||||
|
@ -24,7 +24,7 @@ export abstract class Frontend {
|
|||||||
protected mouseEvent = new Subject<MouseEvent>()
|
protected mouseEvent = new Subject<MouseEvent>()
|
||||||
protected bell = new Subject<void>()
|
protected bell = new Subject<void>()
|
||||||
protected contentUpdated = new Subject<void>()
|
protected contentUpdated = new Subject<void>()
|
||||||
protected input = new Subject<string>()
|
protected input = new Subject<Buffer>()
|
||||||
protected resize = new ReplaySubject<ResizeEvent>(1)
|
protected resize = new ReplaySubject<ResizeEvent>(1)
|
||||||
protected dragOver = new Subject<DragEvent>()
|
protected dragOver = new Subject<DragEvent>()
|
||||||
protected drop = new Subject<DragEvent>()
|
protected drop = new Subject<DragEvent>()
|
||||||
@ -35,7 +35,7 @@ export abstract class Frontend {
|
|||||||
get mouseEvent$ (): Observable<MouseEvent> { return this.mouseEvent }
|
get mouseEvent$ (): Observable<MouseEvent> { return this.mouseEvent }
|
||||||
get bell$ (): Observable<void> { return this.bell }
|
get bell$ (): Observable<void> { return this.bell }
|
||||||
get contentUpdated$ (): Observable<void> { return this.contentUpdated }
|
get contentUpdated$ (): Observable<void> { return this.contentUpdated }
|
||||||
get input$ (): Observable<string> { return this.input }
|
get input$ (): Observable<Buffer> { return this.input }
|
||||||
get resize$ (): Observable<ResizeEvent> { return this.resize }
|
get resize$ (): Observable<ResizeEvent> { return this.resize }
|
||||||
get dragOver$ (): Observable<DragEvent> { return this.dragOver }
|
get dragOver$ (): Observable<DragEvent> { return this.dragOver }
|
||||||
get drop$ (): Observable<DragEvent> { return this.drop }
|
get drop$ (): Observable<DragEvent> { return this.drop }
|
||||||
|
@ -182,7 +182,7 @@ export class HTermFrontend extends Frontend {
|
|||||||
this.term.installKeyboard()
|
this.term.installKeyboard()
|
||||||
this.term.scrollPort_.setCtrlVPaste(true)
|
this.term.scrollPort_.setCtrlVPaste(true)
|
||||||
this.io = this.term.io.push()
|
this.io = this.term.io.push()
|
||||||
this.io.onVTKeystroke = this.io.sendString = data => this.input.next(data)
|
this.io.onVTKeystroke = this.io.sendString = data => this.input.next(Buffer.from(data, 'utf-8'))
|
||||||
this.io.onTerminalResize = (columns, rows) => {
|
this.io.onTerminalResize = (columns, rows) => {
|
||||||
this.resize.next({ columns, rows })
|
this.resize.next({ columns, rows })
|
||||||
}
|
}
|
||||||
|
@ -39,8 +39,11 @@ export class XTermFrontend extends Frontend {
|
|||||||
})
|
})
|
||||||
this.xtermCore = (this.xterm as any)._core
|
this.xtermCore = (this.xterm as any)._core
|
||||||
|
|
||||||
|
this.xterm.onBinary(data => {
|
||||||
|
this.input.next(Buffer.from(data, 'binary'))
|
||||||
|
})
|
||||||
this.xterm.onData(data => {
|
this.xterm.onData(data => {
|
||||||
this.input.next(data)
|
this.input.next(Buffer.from(data, 'utf-8'))
|
||||||
})
|
})
|
||||||
this.xterm.onResize(({ cols, rows }) => {
|
this.xterm.onResize(({ cols, rows }) => {
|
||||||
this.resize.next({ rows, columns: cols })
|
this.resize.next({ rows, columns: cols })
|
||||||
@ -211,7 +214,7 @@ export class XTermFrontend extends Frontend {
|
|||||||
|
|
||||||
const theme: ITheme = {
|
const theme: ITheme = {
|
||||||
foreground: config.terminal.colorScheme.foreground,
|
foreground: config.terminal.colorScheme.foreground,
|
||||||
background: config.terminal.background === 'colorScheme' ? config.terminal.colorScheme.background : config.appearance.vibrancy ? 'transparent' : this.themesService.findCurrentTheme().terminalBackground,
|
background: config.terminal.background === 'colorScheme' ? config.terminal.colorScheme.background : config.appearance.vibrancy ? '#00000000' : this.themesService.findCurrentTheme().terminalBackground,
|
||||||
cursor: config.terminal.colorScheme.cursor,
|
cursor: config.terminal.colorScheme.cursor,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ export abstract class BaseSession {
|
|||||||
|
|
||||||
abstract start (options: SessionOptions): void
|
abstract start (options: SessionOptions): void
|
||||||
abstract resize (columns: number, rows: number): void
|
abstract resize (columns: number, rows: number): void
|
||||||
abstract write (data: string): void
|
abstract write (data: Buffer): void
|
||||||
abstract kill (signal?: string): void
|
abstract kill (signal?: string): void
|
||||||
abstract async getChildProcesses (): Promise<ChildProcess[]>
|
abstract async getChildProcesses (): Promise<ChildProcess[]>
|
||||||
abstract async gracefullyKillProcess (): Promise<void>
|
abstract async gracefullyKillProcess (): Promise<void>
|
||||||
@ -201,10 +201,10 @@ export class Session extends BaseSession {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
write (data) {
|
write (data: Buffer) {
|
||||||
if (this.open) {
|
if (this.open) {
|
||||||
if (this.pty._writable) {
|
if (this.pty._writable) {
|
||||||
this.pty.write(Buffer.from(data, 'utf-8'))
|
this.pty.write(data)
|
||||||
} else {
|
} else {
|
||||||
this.destroy()
|
this.destroy()
|
||||||
}
|
}
|
||||||
|
@ -226,12 +226,12 @@ xterm-addon-ligatures@^0.2.1:
|
|||||||
font-finder "^1.0.4"
|
font-finder "^1.0.4"
|
||||||
font-ligatures "^1.3.2"
|
font-ligatures "^1.3.2"
|
||||||
|
|
||||||
xterm-addon-search@^0.4.0-beta5:
|
xterm-addon-search@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.4.0.tgz#a7beadb3caa7330eb31fb1f17d92de25537684a1"
|
resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.4.0.tgz#a7beadb3caa7330eb31fb1f17d92de25537684a1"
|
||||||
integrity sha512-g07qb/Z4aSfrQ25e6Z6rz6KiExm2DvesQXkx+eA715VABBr5VM/9Jf0INoCiDSYy/nn7rpna+kXiGVJejIffKg==
|
integrity sha512-g07qb/Z4aSfrQ25e6Z6rz6KiExm2DvesQXkx+eA715VABBr5VM/9Jf0INoCiDSYy/nn7rpna+kXiGVJejIffKg==
|
||||||
|
|
||||||
xterm-addon-webgl@^0.4.0-beta.15:
|
xterm-addon-webgl@^0.4.0:
|
||||||
version "0.4.0"
|
version "0.4.0"
|
||||||
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.4.0.tgz#7b7cdbdbf9b0d06189af20d468d8ea2798382e0f"
|
resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.4.0.tgz#7b7cdbdbf9b0d06189af20d468d8ea2798382e0f"
|
||||||
integrity sha512-2ExOKJQcyv4hUo/d41uMDe7fNZCi42kPtbvG/v+dVj1NwqGD7g1bhuoH2j1iA1vTP5O1fClc6pU9nLBpbwrdZQ==
|
integrity sha512-2ExOKJQcyv4hUo/d41uMDe7fNZCi42kPtbvG/v+dVj1NwqGD7g1bhuoH2j1iA1vTP5O1fClc6pU9nLBpbwrdZQ==
|
||||||
|
Loading…
Reference in New Issue
Block a user