@@ -115,19 +115,20 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
115115 'documentOverride' ,
116116 'linkHandler' ,
117117 'logger' ,
118- 'overviewRuler' ,
119118 'quirks' ,
120119 'theme' ,
121120 'vtExtensions' ,
122121 'windowOptions' ,
123122 'windowsPty' ,
124123 ] ;
125- const nestedBooleanOptions : { label : string , parent : string , prop : string } [ ] = [
126- { label : 'scrollbar.showScrollbar' , parent : 'scrollbar' , prop : 'showScrollbar' } ,
127- { label : 'scrollbar.showArrows' , parent : 'scrollbar' , prop : 'showArrows' } ,
128- { label : 'vtExtensions.kittyKeyboard' , parent : 'vtExtensions' , prop : 'kittyKeyboard' } ,
129- { label : 'vtExtensions.kittySgrBoldFaintControl' , parent : 'vtExtensions' , prop : 'kittySgrBoldFaintControl' } ,
130- { 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' }
131132 ] ;
132133 const stringOptions : { [ key : string ] : string [ ] | null } = {
133134 cursorStyle : [ 'block' , 'underline' , 'bar' ] ,
@@ -163,8 +164,10 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
163164 booleanOptions . forEach ( o => {
164165 html += `<div class="option"><label><input id="opt-${ o } " type="checkbox" ${ ( this . _terminal . options as Record < string , unknown > ) [ o ] ? 'checked' : '' } /> ${ o } </label></div>` ;
165166 } ) ;
166- nestedBooleanOptions . forEach ( ( { label, parent, prop } ) => {
167- 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 ;
168171 html += `<div class="option"><label><input id="opt-${ label . replace ( '.' , '-' ) } " type="checkbox" ${ checked ? 'checked' : '' } /> ${ label } </label></div>` ;
169172 } ) ;
170173 html += '</div><div class="option-group">' ;
@@ -198,11 +201,22 @@ export class OptionsWindow extends BaseWindow implements IControlWindow {
198201 }
199202 } ) ;
200203 } ) ;
201- nestedBooleanOptions . forEach ( ( { label, parent , prop } ) => {
204+ nestedBooleanOptions . forEach ( ( { label, path , prop } ) => {
202205 const input = document . getElementById ( `opt-${ label . replace ( '.' , '-' ) } ` ) as HTMLInputElement ;
203206 addDomListener ( input , 'change' , ( ) => {
204207 console . log ( 'change' , label , input . checked ) ;
205- ( 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+ }
206220 } ) ;
207221 } ) ;
208222 numberOptions . forEach ( o => {
0 commit comments