@@ -417,6 +417,10 @@ export class WriteableStickyNote extends AbstractStickyNote {
417417 constructor ( note ?: Note ) {
418418 super ( note ) ;
419419
420+ this . buffer . connect_after ( 'insert-text' , ( buffer , loc , text , length ) => {
421+ this . on_text_inserted ( buffer , loc , text , length ) ;
422+ } ) ;
423+
420424 this . buffer . connect ( "changed" , ( ) => {
421425 if ( this . updating ) {
422426 this . updating = false ;
@@ -472,6 +476,55 @@ export class WriteableStickyNote extends AbstractStickyNote {
472476 if ( compare_tags ( tags , this . note ! . tags ) ) return ;
473477 this . change ( "tags" , tags ) ;
474478 }
479+
480+ on_text_inserted ( buffer : Gtk . TextBuffer , loc : Gtk . TextIter , text : string , length : number ) {
481+ if ( text === '\n' ) {
482+ const start_iter = loc . copy ( ) ;
483+ start_iter . backward_char ( ) ;
484+ start_iter . set_line_offset ( 0 ) ;
485+
486+ const end_iter = start_iter . copy ( ) ;
487+ end_iter . forward_chars ( 2 ) ;
488+ const chars = buffer . get_text ( start_iter , end_iter , false ) ;
489+
490+ const simple_regex_pattern = / ^ [ - + * ] $ / ;
491+ if ( simple_regex_pattern . test ( chars ) ) {
492+ const bullet = chars [ 0 ] ;
493+ const line_end = loc . copy ( ) ;
494+ line_end . backward_char ( ) ;
495+ if ( line_end . get_line_offset ( ) === 2 ) {
496+ start_iter . set_line_offset ( 0 ) ;
497+ buffer . delete ( start_iter , loc ) ;
498+ } else {
499+ buffer . insert ( loc , bullet + ' ' , - 1 ) ;
500+ }
501+ } else {
502+ const search_limit = start_iter . copy ( ) ;
503+ const search_end = start_iter . copy ( ) ;
504+ search_limit . forward_chars ( 10 ) ;
505+
506+ search_end . forward_find_char ( ( ch ) => { return ch === ' ' } , search_limit ) ;
507+ search_end . forward_char ( )
508+ const chars = buffer . get_text ( start_iter , search_end , false ) ;
509+
510+ const ordered_regex_pattern = / ^ \d + \. $ / ;
511+ if ( ordered_regex_pattern . test ( chars ) ) {
512+ const current_order = parseInt ( chars . slice ( 0 , - 2 ) ) ;
513+ const new_order = current_order + 1 ;
514+ const new_order_bullet = `${ new_order } . ` ;
515+ const line_end = loc . copy ( ) ;
516+ line_end . backward_char ( ) ;
517+
518+ if ( line_end . get_line_offset ( ) === current_order . toString ( ) . length + 2 ) {
519+ start_iter . set_line_offset ( 0 ) ;
520+ buffer . delete ( start_iter , loc ) ;
521+ } else {
522+ buffer . insert ( loc , new_order_bullet , - 1 ) ;
523+ }
524+ }
525+ }
526+ }
527+ }
475528}
476529
477530const compare_tags = ( a : ITag [ ] , b : ITag [ ] ) => {
0 commit comments