🔨VT Sequences Internals

VT sequences are the power of any terminal emulator!

contains several techniques on how to work with the VT sequences contained in the text.

Techniques

There are currently four types of operations.

Filters

Found in VtSequenceTools.FilterVTSequences(), when this function is called, the library selects the appropriate regular expression for the sequence type and replaces the found sequences with blanks. You can optionally replace it with something, like a text, a syntax, or even another VT sequence.

Matches

Found in VtSequenceTools.MatchVTSequences(), when this function is called, the library selects the appropriate regular expression for the sequence type and gets all the matched regular expressions. You can then wrap the values in the for or the foreach loop to get match information for each matched sequence.

Queries

Found in VtSequenceTools.IsMatchVTSequences(), when this function is called, the library selects the appropriate regular expression for the sequence type and checks the text to see if any part of the text is a VT sequence.

Additionally, it contains IsMatchVTSequencesSpecific(), which helps to check the text for any specific VT sequence type.

Splits

Found in VtSequenceTools.SplitVTSequences(), when this function is called, the library selects the appropriate regular expression for the sequence type and splits the text with the matched VT sequences as delimiters.

Regex of VT expressions

Each type of VT sequences listed below by the VtSequenceRegexes class are supported by VT.NET for the above operations.

  • CSI sequences (CSISequences)

    • (\x9B|\x1B\[)[0-?]*[ -\/]*[@-~]

  • OSC sequences (OSCSequences)

    • (\x9D|\x1B\]).+(\x07|\x9c)

  • ESC sequences (ESCSequences)

    • \x1b [F-Nf-n]|\x1b#[3-8]|\x1b%[@Gg]|\x1b[()*+][A-Za-z0-9=`<>]|\x1b[()*+]""[>4?]|\x1b[()*+]%[0-6=]|\x1b[()*+]&[4-5]|\x1b[-.\/][ABFHLM]|\x1b[6-9Fcl-o=>\|\}~]

  • APC sequences (APCSequences)

    • (\x9f|\x1b_).+\x9c

  • DCS sequences (DCSSequences)

    • (\x90|\x1bP).+\x9c

  • PM sequences (PMSequences)

    • (\x9e|\x1b\^).+\x9c

  • C1 sequences (C1Sequences)

    • \x1b[DEHMNOVWXYZ78]

  • All VT sequences (AllVTSequences)

Usage in console writers

All console writers internally use the VT sequence filtering tools, like GetFilteredPositions() that uses FilterVTSequences(), to be able to determine the exact text position. This is to work around Linux Mono installs that report wrong position when VT sequences are appended.

It works by seeking through every visible letter from the text in the form of "advancing" so that GetFilteredPositions() can make sure that the filtered positions are actually correct and sought "to the last letter" rather than "past the last letter" that Mono and the normal Console.Write[Line]() were suffering.