diff --git a/addons/xterm-addon-attach/src/AttachAddon.api.ts b/addons/xterm-addon-attach/src/AttachAddon.api.ts index 945824a2..c5b2d858 100644 --- a/addons/xterm-addon-attach/src/AttachAddon.api.ts +++ b/addons/xterm-addon-attach/src/AttachAddon.api.ts @@ -54,7 +54,7 @@ describe('AttachAddon', () => { const server = new WebSocket.Server({ port }); const data = new Uint8Array([102, 111, 111]); server.on('connection', socket => socket.send(data)); - await page.evaluate(`window.term.loadAddon(new window.AttachAddon(new WebSocket('ws://localhost:${port}'), { inputUtf8: true }))`); + await page.evaluate(`window.term.loadAddon(new window.AttachAddon(new WebSocket('ws://localhost:${port}')))`); assert.equal(await page.evaluate(`window.term.buffer.getLine(0).translateToString(true)`), 'foo'); server.close(); }); diff --git a/addons/xterm-addon-attach/src/AttachAddon.ts b/addons/xterm-addon-attach/src/AttachAddon.ts index 9dc45ecb..d0bbce16 100644 --- a/addons/xterm-addon-attach/src/AttachAddon.ts +++ b/addons/xterm-addon-attach/src/AttachAddon.ts @@ -9,13 +9,11 @@ import { Terminal, IDisposable, ITerminalAddon } from 'xterm'; interface IAttachOptions { bidirectional?: boolean; - inputUtf8?: boolean; } export class AttachAddon implements ITerminalAddon { private _socket: WebSocket; private _bidirectional: boolean; - private _utf8: boolean; private _disposables: IDisposable[] = []; constructor(socket: WebSocket, options?: IAttachOptions) { @@ -23,17 +21,17 @@ export class AttachAddon implements ITerminalAddon { // always set binary type to arraybuffer, we do not handle blobs this._socket.binaryType = 'arraybuffer'; this._bidirectional = (options && options.bidirectional === false) ? false : true; - this._utf8 = !!(options && options.inputUtf8); } public activate(terminal: Terminal): void { - if (this._utf8) { - this._disposables.push(addSocketListener(this._socket, 'message', - (ev: MessageEvent | Event | CloseEvent) => terminal.writeUtf8(new Uint8Array((ev as any).data as ArrayBuffer)))); - } else { - this._disposables.push(addSocketListener(this._socket, 'message', - (ev: MessageEvent | Event | CloseEvent) => terminal.write((ev as any).data as string))); - } + this._disposables.push( + addSocketListener(this._socket, 'message', + (ev: MessageEvent | Event | CloseEvent) => { + const data: ArrayBuffer | string = (ev as any).data; + terminal.write(typeof data === 'string' ? data : new Uint8Array(data)); + } + ) + ); if (this._bidirectional) { this._disposables.push(terminal.onData(data => this._sendData(data))); diff --git a/addons/xterm-addon-attach/typings/xterm-addon-attach.d.ts b/addons/xterm-addon-attach/typings/xterm-addon-attach.d.ts index 8c667140..1aa21357 100644 --- a/addons/xterm-addon-attach/typings/xterm-addon-attach.d.ts +++ b/addons/xterm-addon-attach/typings/xterm-addon-attach.d.ts @@ -11,14 +11,6 @@ declare module 'xterm-addon-attach' { * Whether input should be written to the backend. Defaults to `true`. */ bidirectional?: boolean; - - /** - * Whether to use UTF8 binary transport for incoming messages. Defaults to `false`. - * Note: This must be in line with the server side of the websocket. - * Always send string messages from the backend if this options is false, - * otherwise always binary UTF8 data. - */ - inputUtf8?: boolean; } export class AttachAddon implements ITerminalAddon { diff --git a/demo/client.ts b/demo/client.ts index 040292e4..92bac731 100644 --- a/demo/client.ts +++ b/demo/client.ts @@ -167,14 +167,7 @@ function createTerminal(): void { } function runRealTerminal(): void { - /** - * The demo defaults to string transport by default. - * To run it with UTF8 binary transport, swap comment on - * the lines below. (Must also be switched in server.js) - */ term.loadAddon(new AttachAddon(socket)); - // term.loadAddon(new AttachAddon(socket, {inputUtf8: true})); - term._initialized = true; } diff --git a/demo/server.js b/demo/server.js index f1fae572..a2987558 100644 --- a/demo/server.js +++ b/demo/server.js @@ -4,10 +4,9 @@ var os = require('os'); var pty = require('node-pty'); /** - * Whether to use UTF8 binary transport. - * (Must also be switched in client.ts) + * Whether to use binary transport. */ -const USE_BINARY_UTF8 = false; +const USE_BINARY = true; function startServer() { @@ -46,7 +45,7 @@ function startServer() { rows: rows || 24, cwd: env.PWD, env: env, - encoding: USE_BINARY_UTF8 ? null : 'utf8' + encoding: USE_BINARY ? null : 'utf8' }); console.log('Created terminal with PID: ' + term.pid); @@ -108,7 +107,7 @@ function startServer() { } }; } - const send = USE_BINARY_UTF8 ? bufferUtf8(ws, 5) : buffer(ws, 5); + const send = USE_BINARY ? bufferUtf8(ws, 5) : buffer(ws, 5); term.on('data', function(data) { try { diff --git a/src/Terminal.ts b/src/Terminal.ts index f95873b8..53d8fe3c 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -1597,7 +1597,7 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp public write(data: string | Uint8Array, callback?: () => void): void { this._writeBuffer.write(data, callback); } - + public writeSync(data: string | Uint8Array): void { this._writeBuffer.writeSync(data); }