@@ -26,21 +26,33 @@ let triggerInput = function (element: HTMLTextAreaElement) {
26
26
bubbles : true ,
27
27
cancelable : true ,
28
28
} ) ;
29
- return element . dispatchEvent ( event ) ;
29
+ element . dispatchEvent ( event ) ;
30
30
} ;
31
31
32
32
interface TextInfo {
33
+ /** row */
33
34
row : number ;
35
+ /** column */
34
36
col : number ;
37
+ /** all lines */
35
38
all : string [ ] ;
39
+ /** selection start at row */
36
40
ar : number ;
41
+ /** selection start at column */
37
42
ac : number ;
43
+ /** is select start at line start */
38
44
as : boolean ;
45
+ /** is select start at line end */
39
46
ae : boolean ;
47
+ /** selection end at row */
40
48
br : number ;
49
+ /** selection end at column */
41
50
bc : number ;
51
+ /** is select end at line start */
42
52
bs : boolean ;
53
+ /** is select end at line end */
43
54
be : boolean ;
55
+ /** no selection, just same caret */
44
56
same : boolean ;
45
57
}
46
58
@@ -90,7 +102,8 @@ let write_text = function (
90
102
}
91
103
}
92
104
// o '4: ', ar, ac, br, bc, obj.bc
93
- target . value = arr . join ( "\n" ) ;
105
+ let newText = arr . join ( "\n" ) ;
106
+ target . value = newText ;
94
107
target . selectionStart = set_position ( arr , ar , ac ) ;
95
108
target . selectionEnd = set_position ( arr , br , bc ) ;
96
109
triggerInput ( target ) ;
@@ -328,6 +341,22 @@ let key_enter = function (target: HTMLTextAreaElement, event: Event) {
328
341
}
329
342
} ;
330
343
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
+
331
360
// press backspace at head, last line if empty, delete it
332
361
let key_backspace = function ( target : HTMLTextAreaElement , event : Event ) {
333
362
var ac , all , ar , caret , n , pair ;
@@ -537,6 +566,10 @@ let call_shortcut = {
537
566
9 : function ( target : HTMLTextAreaElement , event : Event ) {
538
567
return key_tab ( target , event ) ;
539
568
} ,
569
+
570
+ "shift 13" : function ( target : HTMLTextAreaElement , event : Event ) {
571
+ return key_shift_enter ( target , event ) ;
572
+ } ,
540
573
13 : function ( target : HTMLTextAreaElement , event : Event ) {
541
574
return key_enter ( target , event ) ;
542
575
} ,
0 commit comments