@@ -418,6 +418,7 @@ bool ZepMode_Vim::HandleExCommand(const std::string& strCommand, const char key)
418
418
{
419
419
auto pWindow = GetEditor ().GetActiveTabWindow ()->GetActiveWindow ();
420
420
auto & buffer = pWindow->GetBuffer ();
421
+ auto bufferCursor = pWindow->GetBufferCursor ();
421
422
if (GetEditor ().Broadcast (std::make_shared<ZepMessage>(Msg_HandleCommand, strCommand)))
422
423
{
423
424
return true ;
@@ -437,10 +438,29 @@ bool ZepMode_Vim::HandleExCommand(const std::string& strCommand, const char key)
437
438
}
438
439
GetEditor ().SetCommandText (str.str ());
439
440
}
440
- else if (strCommand == " :tabedit" )
441
+ else if (strCommand. find ( " :tabedit" ) == 0 )
441
442
{
442
443
auto pTab = GetEditor ().AddTabWindow ();
443
- pTab->AddWindow (&pWindow->GetBuffer (), nullptr , true );
444
+ auto strTok = string_split (strCommand, " " );
445
+ if (strTok.size () > 1 )
446
+ {
447
+ if (strTok[1 ] == " %" )
448
+ {
449
+ pTab->AddWindow (&GetEditor ().GetActiveTabWindow ()->GetActiveWindow ()->GetBuffer (), nullptr , true );
450
+ }
451
+ else
452
+ {
453
+ auto fname = strTok[1 ];
454
+ auto pBuffer = GetEditor ().GetBuffer (fname);
455
+ pBuffer->Load (fname);
456
+ pTab->AddWindow (pBuffer, nullptr , true );
457
+ }
458
+ }
459
+ else
460
+ {
461
+ pTab->AddWindow (GetEditor ().GetBuffer (" Empty" ), nullptr , true );
462
+ }
463
+ GetEditor ().SetCurrentTabWindow (pTab);
444
464
}
445
465
else if (strCommand == " :vsplit" )
446
466
{
@@ -450,8 +470,7 @@ bool ZepMode_Vim::HandleExCommand(const std::string& strCommand, const char key)
450
470
pTab->AddWindow (&pWindow->GetBuffer (), pTab->GetActiveWindow (), true );
451
471
}
452
472
}
453
- else if (strCommand == " :hsplit" ||
454
- strCommand == " :split" )
473
+ else if (strCommand == " :hsplit" || strCommand == " :split" )
455
474
{
456
475
auto pTab = GetEditor ().GetActiveTabWindow ();
457
476
if (pTab)
@@ -484,6 +503,34 @@ bool ZepMode_Vim::HandleExCommand(const std::string& strCommand, const char key)
484
503
GetEditor ().GetActiveTabWindow ()->CloseActiveWindow ();
485
504
}
486
505
}
506
+ else if (strCommand.find (" :ZTestMarkers" ) == 0 )
507
+ {
508
+ int markerType = 0 ;
509
+ auto strTok = string_split (strCommand, " " );
510
+ if (strTok.size () > 1 )
511
+ {
512
+ markerType = std::stoi (strTok[1 ]);
513
+ }
514
+ RangeMarker marker;
515
+ long start, end;
516
+ start = buffer.GetLinePos (bufferCursor, LineLocation::LineFirstGraphChar);
517
+ end = buffer.GetLinePos (bufferCursor, LineLocation::LineLastGraphChar) + 1 ;
518
+ marker.range = BufferRange{start, end};
519
+ switch (markerType)
520
+ {
521
+ case 1 :
522
+ marker.color = ThemeColor::Warning;
523
+ marker.name = " Warning" ;
524
+ marker.name = " This is an example warning mark" ;
525
+ break ;
526
+ case 0 :
527
+ default :
528
+ marker.color = ThemeColor::Error;
529
+ marker.name = " Error" ;
530
+ marker.name = " This is an example error mark" ;
531
+ }
532
+ buffer.AddRangeMarker (marker);
533
+ }
487
534
else if (strCommand == " :ZWhiteSpace" )
488
535
{
489
536
pWindow->ToggleFlag (WindowFlags::ShowCR);
0 commit comments