save/restore charset in DECSC/DECRC
This commit is contained in:
@@ -1938,6 +1938,7 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|||||||
this._terminal.buffer.savedY = this._terminal.buffer.ybase + this._terminal.buffer.y;
|
this._terminal.buffer.savedY = this._terminal.buffer.ybase + this._terminal.buffer.y;
|
||||||
this._terminal.buffer.savedCurAttrData.fg = this._terminal.curAttrData.fg;
|
this._terminal.buffer.savedCurAttrData.fg = this._terminal.curAttrData.fg;
|
||||||
this._terminal.buffer.savedCurAttrData.bg = this._terminal.curAttrData.bg;
|
this._terminal.buffer.savedCurAttrData.bg = this._terminal.curAttrData.bg;
|
||||||
|
this._terminal.buffer.savedCharset = this._terminal.charset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1951,6 +1952,10 @@ export class InputHandler extends Disposable implements IInputHandler {
|
|||||||
this._terminal.buffer.y = Math.max(this._terminal.buffer.savedY - this._terminal.buffer.ybase, 0);
|
this._terminal.buffer.y = Math.max(this._terminal.buffer.savedY - this._terminal.buffer.ybase, 0);
|
||||||
this._terminal.curAttrData.fg = this._terminal.buffer.savedCurAttrData.fg;
|
this._terminal.curAttrData.fg = this._terminal.buffer.savedCurAttrData.fg;
|
||||||
this._terminal.curAttrData.bg = this._terminal.buffer.savedCurAttrData.bg;
|
this._terminal.curAttrData.bg = this._terminal.buffer.savedCurAttrData.bg;
|
||||||
|
this._terminal.charset = (this as any)._savedCharset;
|
||||||
|
if (this._terminal.buffer.savedCharset) {
|
||||||
|
this._terminal.charset = this._terminal.buffer.savedCharset;
|
||||||
|
}
|
||||||
this._restrictCursor();
|
this._restrictCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
import { IRenderer, IRenderDimensions, CharacterJoinerHandler } from 'browser/renderer/Types';
|
import { IRenderer, IRenderDimensions, CharacterJoinerHandler } from 'browser/renderer/Types';
|
||||||
import { IInputHandlingTerminal, IViewport, ICompositionHelper, ITerminal, IBrowser, ITerminalOptions, ILinkifier, ILinkMatcherOptions } from './Types';
|
import { IInputHandlingTerminal, IViewport, ICompositionHelper, ITerminal, IBrowser, ITerminalOptions, ILinkifier, ILinkMatcherOptions } from './Types';
|
||||||
import { IBuffer, IBufferStringIterator, IBufferSet } from 'common/buffer/Types';
|
import { IBuffer, IBufferStringIterator, IBufferSet } from 'common/buffer/Types';
|
||||||
import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener } from 'common/Types';
|
import { IBufferLine, ICellData, IAttributeData, ICircularList, XtermListener, ICharset } from 'common/Types';
|
||||||
import { Buffer } from 'common/buffer/Buffer';
|
import { Buffer } from 'common/buffer/Buffer';
|
||||||
import * as Browser from 'common/Platform';
|
import * as Browser from 'common/Platform';
|
||||||
import { IDisposable, IMarker, IEvent, ISelectionPosition } from 'xterm';
|
import { IDisposable, IMarker, IEvent, ISelectionPosition } from 'xterm';
|
||||||
@@ -320,6 +320,7 @@ export class MockBuffer implements IBuffer {
|
|||||||
scrollTop: number;
|
scrollTop: number;
|
||||||
savedY: number;
|
savedY: number;
|
||||||
savedX: number;
|
savedX: number;
|
||||||
|
savedCharset: ICharset | null;
|
||||||
savedCurAttrData = new AttributeData();
|
savedCurAttrData = new AttributeData();
|
||||||
translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol?: number, endCol?: number): string {
|
translateBufferLineToString(lineIndex: number, trimRight: boolean, startCol?: number, endCol?: number): string {
|
||||||
return Buffer.prototype.translateBufferLineToString.apply(this, arguments);
|
return Buffer.prototype.translateBufferLineToString.apply(this, arguments);
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
|
|
||||||
import { CircularList, IInsertEvent } from 'common/CircularList';
|
import { CircularList, IInsertEvent } from 'common/CircularList';
|
||||||
import { IBuffer, BufferIndex, IBufferStringIterator, IBufferStringIteratorResult } from 'common/buffer/Types';
|
import { IBuffer, BufferIndex, IBufferStringIterator, IBufferStringIteratorResult } from 'common/buffer/Types';
|
||||||
import { IBufferLine, ICellData, IAttributeData } from 'common/Types';
|
import { IBufferLine, ICellData, IAttributeData, ICharset } from 'common/Types';
|
||||||
import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';
|
import { BufferLine, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine';
|
||||||
import { CellData } from 'common/buffer/CellData';
|
import { CellData } from 'common/buffer/CellData';
|
||||||
import { NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from 'common/buffer/Constants';
|
import { NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE, CHAR_DATA_WIDTH_INDEX, CHAR_DATA_CHAR_INDEX } from 'common/buffer/Constants';
|
||||||
import { reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths, getWrappedLineTrimmedLength } from 'common/buffer/BufferReflow';
|
import { reflowLargerApplyNewLayout, reflowLargerCreateNewLayout, reflowLargerGetLinesToRemove, reflowSmallerGetNewLineLengths, getWrappedLineTrimmedLength } from 'common/buffer/BufferReflow';
|
||||||
import { Marker } from 'common/buffer/Marker';
|
import { Marker } from 'common/buffer/Marker';
|
||||||
import { IOptionsService, IBufferService } from 'common/services/Services';
|
import { IOptionsService, IBufferService } from 'common/services/Services';
|
||||||
|
import { DEFAULT_CHARSET } from 'common/data/Charsets';
|
||||||
|
|
||||||
export const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1
|
export const MAX_BUFFER_SIZE = 4294967295; // 2^32 - 1
|
||||||
|
|
||||||
@@ -35,6 +36,7 @@ export class Buffer implements IBuffer {
|
|||||||
public savedY: number = 0;
|
public savedY: number = 0;
|
||||||
public savedX: number = 0;
|
public savedX: number = 0;
|
||||||
public savedCurAttrData = DEFAULT_ATTR_DATA.clone();
|
public savedCurAttrData = DEFAULT_ATTR_DATA.clone();
|
||||||
|
public savedCharset: ICharset | null = DEFAULT_CHARSET;
|
||||||
public markers: Marker[] = [];
|
public markers: Marker[] = [];
|
||||||
private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);
|
private _nullCell: ICellData = CellData.fromCharData([0, NULL_CELL_CHAR, NULL_CELL_WIDTH, NULL_CELL_CODE]);
|
||||||
private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);
|
private _whitespaceCell: ICellData = CellData.fromCharData([0, WHITESPACE_CELL_CHAR, WHITESPACE_CELL_WIDTH, WHITESPACE_CELL_CODE]);
|
||||||
|
|||||||
Vendored
+2
-1
@@ -3,7 +3,7 @@
|
|||||||
* @license MIT
|
* @license MIT
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { IAttributeData, ICircularList, IBufferLine, ICellData, IMarker } from 'common/Types';
|
import { IAttributeData, ICircularList, IBufferLine, ICellData, IMarker, ICharset } from 'common/Types';
|
||||||
import { IEvent } from 'common/EventEmitter';
|
import { IEvent } from 'common/EventEmitter';
|
||||||
|
|
||||||
// BufferIndex denotes a position in the buffer: [rowIndex, colIndex]
|
// BufferIndex denotes a position in the buffer: [rowIndex, colIndex]
|
||||||
@@ -31,6 +31,7 @@ export interface IBuffer {
|
|||||||
hasScrollback: boolean;
|
hasScrollback: boolean;
|
||||||
savedY: number;
|
savedY: number;
|
||||||
savedX: number;
|
savedX: number;
|
||||||
|
savedCharset: ICharset | null;
|
||||||
savedCurAttrData: IAttributeData;
|
savedCurAttrData: IAttributeData;
|
||||||
isCursorInViewport: boolean;
|
isCursorInViewport: boolean;
|
||||||
markers: IMarker[];
|
markers: IMarker[];
|
||||||
|
|||||||
Reference in New Issue
Block a user