@@ -121,7 +121,9 @@ export namespace EditorScroll_ {
121
121
*/
122
122
export const RawDirection = {
123
123
Up : 'up' ,
124
+ Right : 'right' ,
124
125
Down : 'down' ,
126
+ Left : 'left'
125
127
} ;
126
128
127
129
/**
@@ -132,7 +134,8 @@ export namespace EditorScroll_ {
132
134
WrappedLine : 'wrappedLine' ,
133
135
Page : 'page' ,
134
136
HalfPage : 'halfPage' ,
135
- Editor : 'editor'
137
+ Editor : 'editor' ,
138
+ Column : 'column'
136
139
} ;
137
140
138
141
/**
@@ -152,9 +155,15 @@ export namespace EditorScroll_ {
152
155
case RawDirection . Up :
153
156
direction = Direction . Up ;
154
157
break ;
158
+ case RawDirection . Right :
159
+ direction = Direction . Right ;
160
+ break ;
155
161
case RawDirection . Down :
156
162
direction = Direction . Down ;
157
163
break ;
164
+ case RawDirection . Left :
165
+ direction = Direction . Left ;
166
+ break ;
158
167
default :
159
168
// Illegal arguments
160
169
return null ;
@@ -177,6 +186,9 @@ export namespace EditorScroll_ {
177
186
case RawUnit . Editor :
178
187
unit = Unit . Editor ;
179
188
break ;
189
+ case RawUnit . Column :
190
+ unit = Unit . Column ;
191
+ break ;
180
192
default :
181
193
unit = Unit . WrappedLine ;
182
194
}
@@ -201,17 +213,21 @@ export namespace EditorScroll_ {
201
213
select : boolean ;
202
214
}
203
215
216
+
204
217
export const enum Direction {
205
218
Up = 1 ,
206
- Down = 2
219
+ Right = 2 ,
220
+ Down = 3 ,
221
+ Left = 4
207
222
}
208
223
209
224
export const enum Unit {
210
225
Line = 1 ,
211
226
WrappedLine = 2 ,
212
227
Page = 3 ,
213
228
HalfPage = 4 ,
214
- Editor = 5
229
+ Editor = 5 ,
230
+ Column = 6
215
231
}
216
232
}
217
233
@@ -1294,16 +1310,43 @@ export namespace CoreNavigationCommands {
1294
1310
} ) ;
1295
1311
}
1296
1312
1313
+ determineScrollMethod ( args : EditorScroll_ . ParsedArguments ) {
1314
+ const horizontalUnits = [ EditorScroll_ . Unit . Column ] ;
1315
+ const verticalUnits = [
1316
+ EditorScroll_ . Unit . Line ,
1317
+ EditorScroll_ . Unit . WrappedLine ,
1318
+ EditorScroll_ . Unit . Page ,
1319
+ EditorScroll_ . Unit . HalfPage ,
1320
+ EditorScroll_ . Unit . Editor ,
1321
+ EditorScroll_ . Unit . Column
1322
+ ] ;
1323
+ const horizontalDirections = [ EditorScroll_ . Direction . Left , EditorScroll_ . Direction . Right ] ;
1324
+ const verticalDirections = [ EditorScroll_ . Direction . Up , EditorScroll_ . Direction . Down ] ;
1325
+
1326
+ if ( horizontalUnits . includes ( args . unit ) && horizontalDirections . includes ( args . direction ) ) {
1327
+ return this . _runHorizontalEditorScroll . bind ( this ) ;
1328
+ }
1329
+ if ( verticalUnits . includes ( args . unit ) && verticalDirections . includes ( args . direction ) ) {
1330
+ return this . _runVerticalEditorScroll . bind ( this ) ;
1331
+ }
1332
+ return null ;
1333
+ }
1334
+
1297
1335
public runCoreEditorCommand ( viewModel : IViewModel , args : Partial < EditorScrollCommandOptions > ) : void {
1298
1336
const parsed = EditorScroll_ . parse ( args ) ;
1299
1337
if ( ! parsed ) {
1300
1338
// illegal arguments
1301
1339
return ;
1302
1340
}
1303
- this . _runEditorScroll ( viewModel , args . source , parsed ) ;
1341
+ const runEditorScroll = this . determineScrollMethod ( parsed ) ;
1342
+ if ( ! runEditorScroll ) {
1343
+ // Incompatible unit and direction
1344
+ return ;
1345
+ }
1346
+ runEditorScroll ( viewModel , args . source , parsed ) ;
1304
1347
}
1305
1348
1306
- _runEditorScroll ( viewModel : IViewModel , source : string | null | undefined , args : EditorScroll_ . ParsedArguments ) : void {
1349
+ _runVerticalEditorScroll ( viewModel : IViewModel , source : string | null | undefined , args : EditorScroll_ . ParsedArguments ) : void {
1307
1350
1308
1351
const desiredScrollTop = this . _computeDesiredScrollTop ( viewModel , args ) ;
1309
1352
@@ -1361,6 +1404,16 @@ export namespace CoreNavigationCommands {
1361
1404
const deltaLines = ( args . direction === EditorScroll_ . Direction . Up ? - 1 : 1 ) * noOfLines ;
1362
1405
return viewModel . viewLayout . getCurrentScrollTop ( ) + deltaLines * viewModel . cursorConfig . lineHeight ;
1363
1406
}
1407
+
1408
+ _runHorizontalEditorScroll ( viewModel : IViewModel , source : string | null | undefined , args : EditorScroll_ . ParsedArguments ) : void {
1409
+ const desiredScrollLeft = this . _computeDesiredScrollLeft ( viewModel , args ) ;
1410
+ viewModel . viewLayout . setScrollPosition ( { scrollLeft : desiredScrollLeft } , ScrollType . Smooth ) ;
1411
+ }
1412
+
1413
+ _computeDesiredScrollLeft ( viewModel : IViewModel , args : EditorScroll_ . ParsedArguments ) {
1414
+ const deltaColumns = ( args . direction === EditorScroll_ . Direction . Left ? - 1 : 1 ) * args . value ;
1415
+ return viewModel . viewLayout . getCurrentScrollLeft ( ) + deltaColumns * viewModel . cursorConfig . typicalHalfwidthCharacterWidth ;
1416
+ }
1364
1417
}
1365
1418
1366
1419
export const EditorScroll : EditorScrollImpl = registerEditorCommand ( new EditorScrollImpl ( ) ) ;
@@ -1380,12 +1433,13 @@ export namespace CoreNavigationCommands {
1380
1433
}
1381
1434
1382
1435
runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1383
- EditorScroll . _runEditorScroll ( viewModel , args . source , {
1384
- direction : EditorScroll_ . Direction . Up ,
1385
- unit : EditorScroll_ . Unit . WrappedLine ,
1436
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1437
+ to : EditorScroll_ . RawDirection . Up ,
1438
+ by : EditorScroll_ . RawUnit . WrappedLine ,
1386
1439
value : 1 ,
1387
1440
revealCursor : false ,
1388
- select : false
1441
+ select : false ,
1442
+ source : args . source
1389
1443
} ) ;
1390
1444
}
1391
1445
} ) ;
@@ -1406,12 +1460,13 @@ export namespace CoreNavigationCommands {
1406
1460
}
1407
1461
1408
1462
runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1409
- EditorScroll . _runEditorScroll ( viewModel , args . source , {
1410
- direction : EditorScroll_ . Direction . Up ,
1411
- unit : EditorScroll_ . Unit . Page ,
1463
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1464
+ to : EditorScroll_ . RawDirection . Up ,
1465
+ by : EditorScroll_ . RawUnit . Page ,
1412
1466
value : 1 ,
1413
1467
revealCursor : false ,
1414
- select : false
1468
+ select : false ,
1469
+ source : args . source
1415
1470
} ) ;
1416
1471
}
1417
1472
} ) ;
@@ -1429,12 +1484,13 @@ export namespace CoreNavigationCommands {
1429
1484
}
1430
1485
1431
1486
runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1432
- EditorScroll . _runEditorScroll ( viewModel , args . source , {
1433
- direction : EditorScroll_ . Direction . Up ,
1434
- unit : EditorScroll_ . Unit . Editor ,
1487
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1488
+ to : EditorScroll_ . RawDirection . Up ,
1489
+ by : EditorScroll_ . RawUnit . Editor ,
1435
1490
value : 1 ,
1436
1491
revealCursor : false ,
1437
- select : false
1492
+ select : false ,
1493
+ source : args . source
1438
1494
} ) ;
1439
1495
}
1440
1496
} ) ;
@@ -1454,12 +1510,13 @@ export namespace CoreNavigationCommands {
1454
1510
}
1455
1511
1456
1512
runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1457
- EditorScroll . _runEditorScroll ( viewModel , args . source , {
1458
- direction : EditorScroll_ . Direction . Down ,
1459
- unit : EditorScroll_ . Unit . WrappedLine ,
1513
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1514
+ to : EditorScroll_ . RawDirection . Down ,
1515
+ by : EditorScroll_ . RawUnit . WrappedLine ,
1460
1516
value : 1 ,
1461
1517
revealCursor : false ,
1462
- select : false
1518
+ select : false ,
1519
+ source : args . source
1463
1520
} ) ;
1464
1521
}
1465
1522
} ) ;
@@ -1480,12 +1537,13 @@ export namespace CoreNavigationCommands {
1480
1537
}
1481
1538
1482
1539
runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1483
- EditorScroll . _runEditorScroll ( viewModel , args . source , {
1484
- direction : EditorScroll_ . Direction . Down ,
1485
- unit : EditorScroll_ . Unit . Page ,
1540
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1541
+ to : EditorScroll_ . RawDirection . Down ,
1542
+ by : EditorScroll_ . RawUnit . Page ,
1486
1543
value : 1 ,
1487
1544
revealCursor : false ,
1488
- select : false
1545
+ select : false ,
1546
+ source : args . source
1489
1547
} ) ;
1490
1548
}
1491
1549
} ) ;
@@ -1503,12 +1561,61 @@ export namespace CoreNavigationCommands {
1503
1561
}
1504
1562
1505
1563
runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1506
- EditorScroll . _runEditorScroll ( viewModel , args . source , {
1507
- direction : EditorScroll_ . Direction . Down ,
1508
- unit : EditorScroll_ . Unit . Editor ,
1564
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1565
+ to : EditorScroll_ . RawDirection . Down ,
1566
+ by : EditorScroll_ . RawUnit . Editor ,
1509
1567
value : 1 ,
1510
1568
revealCursor : false ,
1511
- select : false
1569
+ select : false ,
1570
+ source : args . source
1571
+ } ) ;
1572
+ }
1573
+ } ) ;
1574
+
1575
+ export const ScrollLeft : CoreEditorCommand < BaseCommandOptions > = registerEditorCommand ( new class extends CoreEditorCommand < BaseCommandOptions > {
1576
+ constructor ( ) {
1577
+ super ( {
1578
+ id : 'scrollLeft' ,
1579
+ precondition : undefined ,
1580
+ kbOpts : {
1581
+ weight : CORE_WEIGHT ,
1582
+ kbExpr : EditorContextKeys . textInputFocus ,
1583
+ }
1584
+ } ) ;
1585
+ }
1586
+
1587
+ runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1588
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1589
+ to : EditorScroll_ . RawDirection . Left ,
1590
+ by : EditorScroll_ . RawUnit . Column ,
1591
+ value : 2 ,
1592
+ revealCursor : false ,
1593
+ select : false ,
1594
+ source : args . source
1595
+ } ) ;
1596
+ }
1597
+ } ) ;
1598
+
1599
+ export const ScrollRight : CoreEditorCommand < BaseCommandOptions > = registerEditorCommand ( new class extends CoreEditorCommand < BaseCommandOptions > {
1600
+ constructor ( ) {
1601
+ super ( {
1602
+ id : 'scrollRight' ,
1603
+ precondition : undefined ,
1604
+ kbOpts : {
1605
+ weight : CORE_WEIGHT ,
1606
+ kbExpr : EditorContextKeys . textInputFocus ,
1607
+ }
1608
+ } ) ;
1609
+ }
1610
+
1611
+ runCoreEditorCommand ( viewModel : IViewModel , args : Partial < BaseCommandOptions > ) : void {
1612
+ EditorScroll . runCoreEditorCommand ( viewModel , {
1613
+ to : EditorScroll_ . RawDirection . Right ,
1614
+ by : EditorScroll_ . RawUnit . Column ,
1615
+ value : 2 ,
1616
+ revealCursor : false ,
1617
+ select : false ,
1618
+ source : args . source
1512
1619
} ) ;
1513
1620
}
1514
1621
} ) ;
0 commit comments