@@ -26,21 +26,33 @@ let triggerInput = function (element: HTMLTextAreaElement) {
2626 bubbles : true ,
2727 cancelable : true ,
2828 } ) ;
29- return element . dispatchEvent ( event ) ;
29+ element . dispatchEvent ( event ) ;
3030} ;
3131
3232interface TextInfo {
33+ /** row */
3334 row : number ;
35+ /** column */
3436 col : number ;
37+ /** all lines */
3538 all : string [ ] ;
39+ /** selection start at row */
3640 ar : number ;
41+ /** selection start at column */
3742 ac : number ;
43+ /** is select start at line start */
3844 as : boolean ;
45+ /** is select start at line end */
3946 ae : boolean ;
47+ /** selection end at row */
4048 br : number ;
49+ /** selection end at column */
4150 bc : number ;
51+ /** is select end at line start */
4252 bs : boolean ;
53+ /** is select end at line end */
4354 be : boolean ;
55+ /** no selection, just same caret */
4456 same : boolean ;
4557}
4658
@@ -90,7 +102,8 @@ let write_text = function (
90102 }
91103 }
92104 // o '4: ', ar, ac, br, bc, obj.bc
93- target . value = arr . join ( "\n" ) ;
105+ let newText = arr . join ( "\n" ) ;
106+ target . value = newText ;
94107 target . selectionStart = set_position ( arr , ar , ac ) ;
95108 target . selectionEnd = set_position ( arr , br , bc ) ;
96109 triggerInput ( target ) ;
@@ -328,6 +341,22 @@ let key_enter = function (target: HTMLTextAreaElement, event: Event) {
328341 }
329342} ;
330343
344+ // enter only, consider last line and
345+ let key_shift_enter = function ( target : HTMLTextAreaElement , event : Event ) {
346+ event . preventDefault ( ) ;
347+ let caret = wrap_text ( target ) ;
348+ let { all, ar, ac } = caret ;
349+ if ( caret . same ) {
350+ all = all . slice ( 0 , + ar + 1 || 9e9 ) . concat ( all . slice ( ar ) ) ;
351+ let line = all [ ar ] ;
352+ let spaces = line . match ( / ^ \s * / ) [ 0 ] ;
353+ all [ ar ] = spaces ;
354+ ac = spaces . length ;
355+ ar = ar ;
356+ return write_text ( target , { all, ac, ar } ) ;
357+ }
358+ } ;
359+
331360// press backspace at head, last line if empty, delete it
332361let key_backspace = function ( target : HTMLTextAreaElement , event : Event ) {
333362 var ac , all , ar , caret , n , pair ;
@@ -537,6 +566,10 @@ let call_shortcut = {
537566 9 : function ( target : HTMLTextAreaElement , event : Event ) {
538567 return key_tab ( target , event ) ;
539568 } ,
569+
570+ "shift 13" : function ( target : HTMLTextAreaElement , event : Event ) {
571+ return key_shift_enter ( target , event ) ;
572+ } ,
540573 13 : function ( target : HTMLTextAreaElement , event : Event ) {
541574 return key_enter ( target , event ) ;
542575 } ,
0 commit comments