2121 * http://linux.die.net/man/7/urxvt
2222 */
2323
24- import { ICompositionHelper , ITerminal , IBrowser , CustomKeyEventHandler , ILinkifier , IMouseZoneManager , LinkMatcherHandler , ILinkMatcherOptions , IViewport , ILinkifier2 } from 'browser/Types' ;
25- import { IRenderer , CharacterJoinerHandler } from 'browser/renderer/Types' ;
24+ import { ICompositionHelper , ITerminal , IBrowser , CustomKeyEventHandler , ILinkifier , IMouseZoneManager , LinkMatcherHandler , ILinkMatcherOptions , IViewport , ILinkifier2 , CharacterJoinerHandler } from 'browser/Types' ;
25+ import { IRenderer } from 'browser/renderer/Types' ;
2626import { CompositionHelper } from 'browser/input/CompositionHelper' ;
2727import { Viewport } from 'browser/Viewport' ;
2828import { rightClickHandler , moveTextAreaUnderMouseCursor , handlePasteEvent , copyHandler , paste } from 'browser/Clipboard' ;
@@ -45,7 +45,7 @@ import { EventEmitter, IEvent, forwardEvent } from 'common/EventEmitter';
4545import { DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine' ;
4646import { ColorManager } from 'browser/ColorManager' ;
4747import { RenderService } from 'browser/services/RenderService' ;
48- import { ICharSizeService , IRenderService , IMouseService , ISelectionService , ISoundService , ICoreBrowserService } from 'browser/services/Services' ;
48+ import { ICharSizeService , IRenderService , IMouseService , ISelectionService , ISoundService , ICoreBrowserService , ICharacterJoinerService } from 'browser/services/Services' ;
4949import { CharSizeService } from 'browser/services/CharSizeService' ;
5050import { IBuffer } from 'common/buffer/Types' ;
5151import { MouseService } from 'browser/services/MouseService' ;
@@ -54,6 +54,7 @@ import { CoreBrowserService } from 'browser/services/CoreBrowserService';
5454import { CoreTerminal } from 'common/CoreTerminal' ;
5555import { ITerminalOptions as IInitializedTerminalOptions } from 'common/services/Services' ;
5656import { rgba } from 'browser/Color' ;
57+ import { CharacterJoinerService } from 'browser/services/CharacterJoinerService' ;
5758
5859// Let it work inside Node.js for automated testing purposes.
5960const document : Document = ( typeof window !== 'undefined' ) ? window . document : null as any ;
@@ -82,6 +83,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
8283 private _charSizeService : ICharSizeService | undefined ;
8384 private _mouseService : IMouseService | undefined ;
8485 private _renderService : IRenderService | undefined ;
86+ private _characterJoinerService : ICharacterJoinerService | undefined ;
8587 private _selectionService : ISelectionService | undefined ;
8688 private _soundService : ISoundService | undefined ;
8789
@@ -449,6 +451,9 @@ export class Terminal extends CoreTerminal implements ITerminal {
449451 this . register ( this . optionsService . onOptionChange ( e => this . _colorManager ! . onOptionsChange ( e ) ) ) ;
450452 this . _colorManager . setTheme ( this . _theme ) ;
451453
454+ this . _characterJoinerService = this . _instantiationService . createInstance ( CharacterJoinerService ) ;
455+ this . _instantiationService . setService ( ICharacterJoinerService , this . _characterJoinerService ) ;
456+
452457 const renderer = this . _createRenderer ( ) ;
453458 this . _renderService = this . register ( this . _instantiationService . createInstance ( RenderService , renderer , this . rows , this . screenElement ) ) ;
454459 this . _instantiationService . setService ( IRenderService , this . _renderService ) ;
@@ -550,7 +555,7 @@ export class Terminal extends CoreTerminal implements ITerminal {
550555
551556 private _createRenderer ( ) : IRenderer {
552557 switch ( this . options . rendererType ) {
553- case 'canvas' : return this . _instantiationService . createInstance ( Renderer , this . _colorManager ! . colors , this . screenElement ! , this . linkifier , this . linkifier2 ) ;
558+ case 'canvas' : return this . _instantiationService . createInstance ( Renderer , this . _colorManager ! . colors , this . screenElement ! , this . linkifier , this . linkifier2 , this . _instantiationService ) ;
554559 case 'dom' : return this . _instantiationService . createInstance ( DomRenderer , this . _colorManager ! . colors , this . element ! , this . screenElement ! , this . _viewportElement ! , this . linkifier , this . linkifier2 ) ;
555560 default : throw new Error ( `Unrecognized rendererType "${ this . options . rendererType } "` ) ;
556561 }
@@ -914,13 +919,19 @@ export class Terminal extends CoreTerminal implements ITerminal {
914919 }
915920
916921 public registerCharacterJoiner ( handler : CharacterJoinerHandler ) : number {
917- const joinerId = this . _renderService ! . registerCharacterJoiner ( handler ) ;
922+ if ( ! this . _characterJoinerService ) {
923+ throw new Error ( 'Terminal must be opened first' ) ;
924+ }
925+ const joinerId = this . _characterJoinerService . register ( handler ) ;
918926 this . refresh ( 0 , this . rows - 1 ) ;
919927 return joinerId ;
920928 }
921929
922930 public deregisterCharacterJoiner ( joinerId : number ) : void {
923- if ( this . _renderService ! . deregisterCharacterJoiner ( joinerId ) ) {
931+ if ( ! this . _characterJoinerService ) {
932+ throw new Error ( 'Terminal must be opened first' ) ;
933+ }
934+ if ( this . _characterJoinerService . deregister ( joinerId ) ) {
924935 this . refresh ( 0 , this . rows - 1 ) ;
925936 }
926937 }
0 commit comments