@@ -121,12 +121,14 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
121121 'windowOptions' ,
122122 'windowsPty' ,
123123 ] ;
124- const nestedBooleanOptions : { label : string , parent : string , prop : string } [ ] = [
125- { label : 'scrollbar.showScrollbar' , parent : 'scrollbar' , prop : 'showScrollbar' } ,
126- { label : 'scrollbar.showArrows' , parent : 'scrollbar' , prop : 'showArrows' } ,
127- { label : 'vtExtensions.kittyKeyboard' , parent : 'vtExtensions' , prop : 'kittyKeyboard' } ,
128- { label : 'vtExtensions.kittySgrBoldFaintControl' , parent : 'vtExtensions' , prop : 'kittySgrBoldFaintControl' } ,
129- { label : 'vtExtensions.win32InputMode' , parent : 'vtExtensions' , prop : 'win32InputMode' }
124+ const nestedBooleanOptions : { label : string , path : string [ ] , prop : string } [ ] = [
125+ { label : 'scrollbar.showScrollbar' , path : [ 'scrollbar' ] , prop : 'showScrollbar' } ,
126+ { label : 'scrollbar.showArrows' , path : [ 'scrollbar' ] , prop : 'showArrows' } ,
127+ { label : 'scrollbar.overviewRuler.showTopBorder' , path : [ 'scrollbar' , 'overviewRuler' ] , prop : 'showTopBorder' } ,
128+ { label : 'scrollbar.overviewRuler.showBottomBorder' , path : [ 'scrollbar' , 'overviewRuler' ] , prop : 'showBottomBorder' } ,
129+ { label : 'vtExtensions.kittyKeyboard' , path : [ 'vtExtensions' ] , prop : 'kittyKeyboard' } ,
130+ { label : 'vtExtensions.kittySgrBoldFaintControl' , path : [ 'vtExtensions' ] , prop : 'kittySgrBoldFaintControl' } ,
131+ { label : 'vtExtensions.win32InputMode' , path : [ 'vtExtensions' ] , prop : 'win32InputMode' }
130132 ] ;
131133 const stringOptions : { [ key : string ] : string [ ] | null } = {
132134 cursorStyle : [ 'block' , 'underline' , 'bar' ] ,
@@ -162,8 +164,10 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
162164 booleanOptions . forEach ( o => {
163165 html += `<div class="option"><label><input id="opt-${ o } " type="checkbox" ${ ( this . _terminal . options as Record < string , unknown > ) [ o ] ? 'checked' : '' } /> ${ o } </label></div>` ;
164166 } ) ;
165- nestedBooleanOptions . forEach ( ( { label, parent, prop } ) => {
166- const checked = ( this . _terminal . options as Record < string , Record < string , unknown > | undefined > ) [ parent ] ?. [ prop ] ?? false ;
167+ nestedBooleanOptions . forEach ( ( { label, path, prop } ) => {
168+ const options = this . _terminal . options as Record < string , unknown > ;
169+ const parent = path . reduce < Record < string , unknown > | undefined > ( ( acc , key ) => ( acc as Record < string , unknown > | undefined ) ?. [ key ] as Record < string , unknown > | undefined , options ) ;
170+ const checked = ( parent as Record < string , unknown > | undefined ) ?. [ prop ] ?? false ;
167171 html += `<div class="option"><label><input id="opt-${ label . replace ( '.' , '-' ) } " type="checkbox" ${ checked ? 'checked' : '' } /> ${ label } </label></div>` ;
168172 } ) ;
169173 html += '</div><div class="option-group">' ;
@@ -197,11 +201,22 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
197201 }
198202 } ) ;
199203 } ) ;
200- nestedBooleanOptions . forEach ( ( { label, parent , prop } ) => {
204+ nestedBooleanOptions . forEach ( ( { label, path , prop } ) => {
201205 const input = document . getElementById ( `opt-${ label . replace ( '.' , '-' ) } ` ) as HTMLInputElement ;
202206 addDomListener ( input , 'change' , ( ) => {
203207 console . log ( 'change' , label , input . checked ) ;
204- ( this . _terminal . options as Record < string , unknown > ) [ parent ] = { ...( this . _terminal . options as Record < string , Record < string , unknown > | undefined > ) [ parent ] , [ prop ] : input . checked } ;
208+ const options = this . _terminal . options as Record < string , unknown > ;
209+ if ( path . length === 1 ) {
210+ const parentKey = path [ 0 ] ;
211+ options [ parentKey ] = { ...( options [ parentKey ] as Record < string , unknown > | undefined ) , [ prop ] : input . checked } ;
212+ return ;
213+ }
214+ if ( path . length === 2 ) {
215+ const [ parentKey , childKey ] = path ;
216+ const parent = ( options [ parentKey ] as Record < string , unknown > | undefined ) ?? { } ;
217+ const child = ( parent [ childKey ] as Record < string , unknown > | undefined ) ?? { } ;
218+ options [ parentKey ] = { ...parent , [ childKey ] : { ...child , [ prop ] : input . checked } } ;
219+ }
205220 } ) ;
206221 } ) ;
207222 numberOptions . forEach ( o => {
0 commit comments