mirror of
https://github.com/Eugeny/tabby.git
synced 2025-10-05 14:34:54 +00:00
xterm binary input support
This commit is contained in:
@@ -63,7 +63,7 @@ export class BaseTerminalTabComponent extends BaseTabComponent implements OnInit
|
||||
private bellPlayer: HTMLAudioElement
|
||||
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 resize$ (): Observable<ResizeEvent> { return this.frontend.resize$ }
|
||||
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
|
||||
*/
|
||||
sendInput (data: string) {
|
||||
sendInput (data: string|Buffer) {
|
||||
if (!(data instanceof Buffer)) {
|
||||
data = Buffer.from(data, 'utf-8')
|
||||
}
|
||||
this.session.write(data)
|
||||
if (this.config.store.terminal.scrollOnInput) {
|
||||
this.frontend.scrollToBottom()
|
||||
|
@@ -24,7 +24,7 @@ export abstract class Frontend {
|
||||
protected mouseEvent = new Subject<MouseEvent>()
|
||||
protected bell = 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 dragOver = new Subject<DragEvent>()
|
||||
protected drop = new Subject<DragEvent>()
|
||||
@@ -35,7 +35,7 @@ export abstract class Frontend {
|
||||
get mouseEvent$ (): Observable<MouseEvent> { return this.mouseEvent }
|
||||
get bell$ (): Observable<void> { return this.bell }
|
||||
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 dragOver$ (): Observable<DragEvent> { return this.dragOver }
|
||||
get drop$ (): Observable<DragEvent> { return this.drop }
|
||||
|
@@ -182,7 +182,7 @@ export class HTermFrontend extends Frontend {
|
||||
this.term.installKeyboard()
|
||||
this.term.scrollPort_.setCtrlVPaste(true)
|
||||
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.resize.next({ columns, rows })
|
||||
}
|
||||
|
@@ -39,8 +39,11 @@ export class XTermFrontend extends Frontend {
|
||||
})
|
||||
this.xtermCore = (this.xterm as any)._core
|
||||
|
||||
this.xterm.onBinary(data => {
|
||||
this.input.next(Buffer.from(data, 'binary'))
|
||||
})
|
||||
this.xterm.onData(data => {
|
||||
this.input.next(data)
|
||||
this.input.next(Buffer.from(data, 'utf-8'))
|
||||
})
|
||||
this.xterm.onResize(({ cols, rows }) => {
|
||||
this.resize.next({ rows, columns: cols })
|
||||
@@ -211,7 +214,7 @@ export class XTermFrontend extends Frontend {
|
||||
|
||||
const theme: ITheme = {
|
||||
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,
|
||||
}
|
||||
|
||||
|
@@ -77,7 +77,7 @@ export abstract class BaseSession {
|
||||
|
||||
abstract start (options: SessionOptions): void
|
||||
abstract resize (columns: number, rows: number): void
|
||||
abstract write (data: string): void
|
||||
abstract write (data: Buffer): void
|
||||
abstract kill (signal?: string): void
|
||||
abstract async getChildProcesses (): Promise<ChildProcess[]>
|
||||
abstract async gracefullyKillProcess (): Promise<void>
|
||||
@@ -201,10 +201,10 @@ export class Session extends BaseSession {
|
||||
}
|
||||
}
|
||||
|
||||
write (data) {
|
||||
write (data: Buffer) {
|
||||
if (this.open) {
|
||||
if (this.pty._writable) {
|
||||
this.pty.write(Buffer.from(data, 'utf-8'))
|
||||
this.pty.write(data)
|
||||
} else {
|
||||
this.destroy()
|
||||
}
|
||||
|
Reference in New Issue
Block a user