license import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine' ; import { IBuffer } from 'common/buffer/Types' ; import { CoreTerminal } from 'common/CoreTerminal' ; import { EventEmitter , forwardEvent , IEvent } from 'common/EventEmitter' ; import { ITerminalOptions as IInitializedTerminalOptions } from 'common/services/Services' ; import { IMarker , ITerminalOptions , ScrollSource } from 'common/Types' ; export class Terminal extends CoreTerminal { public get options ( ) : IInitializedTerminalOptions { return this . optionsService . options ; } private _onBell = new EventEmitter < void > ( ) ; public get onBell ( ) : IEvent < void > { return this . _onBell . event ; } private _onCursorMove = new EventEmitter < void > ( ) ; public get onCursorMove ( ) : IEvent < void > { return this . _onCursorMove . event ; } private _onTitleChange = new EventEmitter < string > ( ) ; public get onTitleChange ( ) : IEvent < string > { return this . _onTitleChange . event ; } private _onA11yCharEmitter = new EventEmitter < string > ( ) ; public get onA11yChar ( ) : IEvent < string > { return this . _onA11yCharEmitter . event ; } private _onA11yTabEmitter = new EventEmitter < number > ( ) ; public get onA11yTab ( ) : IEvent < number > { return this . _onA11yTabEmitter . event ; } param options public class alias constructor ( options = { } ) { super ( options ) ; this . _setup ( ) ; this . register ( this . _inputHandler . onRequestBell ( ( ) => this . bell ( ) ) ) ; this . register ( this . _inputHandler . onRequestReset ( ( ) => this . reset ( ) ) ) ; this . register ( forwardEvent ( this . _inputHandler . onCursorMove , this . _onCursorMove ) ) ; this . register ( forwardEvent ( this . _inputHandler . onTitleChange , this . _onTitleChange ) ) ; this . register ( forwardEvent ( this . _inputHandler . onA11yChar , this . _onA11yCharEmitter ) ) ; this . register ( forwardEvent ( this . _inputHandler . onA11yTab , this . _onA11yTabEmitter ) ) ; } public dispose ( ) { if ( this . _isDisposed ) { return ; } super . dispose ( ) ; this . write = ( ) => { } ; } /**
     * Convenience property to active buffer.
     */ public get buffer ( ) : IBuffer { return this . buffers . active ; } protected _updateOptions ( key ) { super . _updateOptions ( key ) ; switch ( key ) { case 'tabStopWidth' : this . buffers . setupTabStops ( ) ; break ; } } public get markers ( ) : IMarker [ ] { return this . buffer . markers ; } public addMarker ( cursorYOffset ) { if ( this . buffer !== this . buffers . normal ) { return ; } return this . buffer . addMarker ( this . buffer . ybase + this . buffer . y + cursorYOffset ) ; } public bell ( ) { this . _onBell . fire ( ) ; } param x param y public resize ( x , y ) { if ( x === this . cols && y === this . rows ) { return ; } super . resize ( x , y ) ; } /**
     * Clear the entire buffer, making the prompt line the new first line.
     */ public clear ( ) { if ( this . buffer . ybase === 0 && this . buffer . y === 0 ) { return ; } this . buffer . lines . set ( 0 , this . buffer . lines . get ( this . buffer . ybase + this . buffer . y ) ! ) ; this . buffer . lines . length = 1 ; this . buffer . ydisp = 0 ; this . buffer . ybase = 0 ; this . buffer . y = 0 ; for ( let i = 1 ; i < this . rows ; i ++ ) { this . buffer . lines . push ( this . buffer . getBlankLine ( DEFAULT_ATTR_DATA ) ) ; } this . _onScroll . fire ( { position : this . buffer . ydisp , source : ScrollSource . TERMINAL } ) ; } /**
     * Reset terminal.
     * Note: Calling this directly from JS is synchronous but does not clear
     * input buffers and does not reset the parser, thus the terminal will
     * continue to apply pending input data.
     * If you need in band reset (synchronous with input data) consider
     * using DECSTR (soft reset, CSI ! p) or RIS instead (hard reset, ESC c).
     */ public reset ( ) { /**
         * Since _setup handles a full terminal creation, we have to carry forward
         * a few things that should not reset.
         */ this . options . rows = this . rows ; this . options . cols = this . cols ; this . _setup ( ) ; super . reset ( ) ; } }