Finds horizontal tab characters (0x09) in a string and replaces them with the spaces that produce the same horizontal offset.
character vector or object coercible to character; any tabs therein will be replaced.
integer(1:n) indicating position of tab stops to use when converting tabs to spaces. If there are more tabs in a line than defined tab stops the last tab stop is re-used. For the purposes of applying tab stops, each input line is considered a line and the character count begins from the beginning of the input line.
TRUE (default) or FALSE, whether to warn when potentially
problematic Control Sequences are encountered. These could cause the
assumptions fansi makes about how strings are rendered on your display
to be incorrect, for example by moving the cursor (see ?fansi).
At most one warning will be issued per element in each input vector. Will
also warn about some badly encoded UTF-8 strings, but a lack of UTF-8
warnings is not a guarantee of correct encoding (use validUTF8 for
that).
character, which Control Sequences should be treated
specially. Special treatment is context dependent, and may include
detecting them and/or computing their display/character width as zero. For
the SGR subset of the ANSI CSI sequences, and OSC hyperlinks, fansi
will also parse, interpret, and reapply the sequences as needed. You can
modify whether a Control Sequence is treated specially with the ctl
parameter.
"nl": newlines.
"c0": all other "C0" control characters (i.e. 0x01-0x1f, 0x7F), except for newlines and the actual ESC (0x1B) character.
"sgr": ANSI CSI SGR sequences.
"csi": all non-SGR ANSI CSI sequences.
"url": OSC hyperlinks
"osc": all non-OSC-hyperlink OSC sequences.
"esc": all other escape sequences.
"all": all of the above, except when used in combination with any of the above, in which case it means "all but".
character, x with tabs replaced by spaces, with elements
possibly converted to UTF-8.
Since we do not know of a reliable cross platform means of detecting tab stops you will need to provide them yourself if you are using anything outside of the standard tab stop every 8 characters that is the default.
Non-ASCII strings are converted to and returned in UTF-8 encoding. The
ctl parameter only affects which Control Sequences are considered zero
width. Tabs will always be converted to spaces, irrespective of the ctl
setting.
?fansi for details on how Control Sequences are
interpreted, particularly if you are getting unexpected results,
unhandled_ctl for detecting bad control sequences.
string <- '1\t12\t123\t1234\t12345678'
tabs_as_spaces(string)
#> [1] "1 12 123 1234 12345678"
writeLines(
c(
'-------|-------|-------|-------|-------|',
tabs_as_spaces(string)
) )
#> -------|-------|-------|-------|-------|
#> 1 12 123 1234 12345678
writeLines(
c(
'-|--|--|--|--|--|--|--|--|--|--|',
tabs_as_spaces(string, tab.stops=c(2, 3))
) )
#> -|--|--|--|--|--|--|--|--|--|--|
#> 1 12 123 1234 12345678
writeLines(
c(
'-|--|-------|-------|-------|',
tabs_as_spaces(string, tab.stops=c(2, 3, 8))
) )
#> -|--|-------|-------|-------|
#> 1 12 123 1234 12345678