The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

ansicolumn - ANSI terminal sequence aware column command

SYNOPSIS

ansicolumn [options] [file ...]

    -w#, -c#             output width
    -s#                  separator string
    -t                   table style output
    -l#                  maximum number of table columns
    -x                   exchange rows and columns
    -o#                  output separator
    -R#                  right adjust table columns

    -P[#], --page=#      page mode, with optional page length
    -U[#], --up=#        show in N-up format (-WC# --linestyle=wrap)
    --2up .. --9up       same as -U2 .. -U9
    -D, --document       document mode
    -V, --parallel       parallel view mode
    -C#, --pane=#        number of panes
    -S#, --pane-width=#  pane width
    -W, --widen          widen to terminal width
    -p, --paragraph      paragraph mode

    -B, --border[=#]     print border with optional style
    -F, --fillup[=#]     fill-up unit (pane|page|none)

    --height=#           page height
    --column-unit=#      column unit (default 8)
    --linestyle=#        folding style (none|truncate|wrap|wordwrap)
    --boundary=#         line-end boundary
    --linebreak=#        line-break mode (none|all|runin|runout)
    --runin=#            run-in width
    --runout=#           run-out width
    --[no-]pagebreak     allow page break
    --border-style=#     border style
    --[no-]ignore-space  ignore space in table output
    --[no-]white-space   allow white spaces at the top of each pane
    --[no-]isolation     page-end line isolation
    --tabstop=#          tab-stop character
    --tabhead=#          tab-head character
    --tabspace=#         tab-space width
    --tabstyle=#         tab style
    --ambiguous=#        ambiguous character width (narrow|wide)

VERSION

Version 1.24

DESCRIPTION

ansicolumn is a column(1) command clone which can handle ANSI terminal sequences. It supports traditional options and some of Linux extended, and many other original options. Empty lines are not ignored, though.

In contrast to the original column(1) command which handles mainly short item list, and Linux variant which has been expanded to have ritch table style output, ansicolumn(1) has been expanded to show text file in multi-column view. Combined with pagenation and document-friendly folding mechanism, it can be used as a document viewing preprocessor for pager program.

When multiple files are given as arguments, it gets in the parallel view mode, and show all files in parallel. It's convenient to see multiple files side-by-side.

COMPATIBLE OPTIONS

The column utility formats its input into multiple columns. Rows are filled before columns. Input is taken from file operands, or, by default, from the standard input.

-w#, -c#, --width=#, --output-width=#

Output is formatted for a display columns wide. See "CALCULATION" section.

Accept -c for compatibility, but -w is more popular.

-s#, --separator=#

Specify a set of characters to be used to delimit columns for the -t option.

-t, --table

Determine the number of columns the input contains and create a table. Columns are delimited with whitespace, by default, or with the characters supplied using the -s option. Useful for pretty-printing displays.

-l#, --table-columns-limit=#

Specify maximal number of the input columns. The last column will contain all remaining line data if the limit is smaller than the number of the columns in the input data.

-x, --fillrows

Fill columns before filling rows.

-o#, --output-separator=#

When used --table or -t option, each column are joined by two space characters (' ') by default. This option will change it.

-R#, --table-right=#

Right align text in these columns. Support only numbers.

EXTENDED OPTIONS

-P[#], --page[=#]

Page mode. Set these options.

    --height=# or 1-
    --linestyle=wrap
    --border
    --fillup

If optional number is given, it is used as a page height unless option --height exists. Otherwise page height is set to terminal height minus one.

-U#, --up=#, --2up .. --9up

Show in N-up format. Almost same as -P but does not set page height. This is convenient when you want multi-column output without page control.

-D, --document

Document mode. Set these options.

    --widen
    --linebreak=all
    --linestyle=wrap
    --boundary=word
    --no-white-space
    --no-isolation

Next command display DOCX text in 3-up format using App::optex::textconv.

    optex -Mtextconv ansicolumn -DPC3 foo.docx | less
-V, [--no-]parallel

Parallel view mode. Implicitly enabled when multiple files are specified. Use --no-parallel to disable.

Set these options, and cancel all pagenation behavior.

    --widen
    --linestyle=wrap
    --border

By default, all files are displayed in parallel. In other words, number of pane is set as a number of files. You can use -C option to specify number of files displayed simultaneously.

You can use this option mixed with -D option to see document files.

-C#, --pane=#

Output is formatted in the specified number of panes. Setting number of panes implies --widen option enabled. See "CALCULATION" section.

-S#, --pane-width=#, --pw=#

Specify pane width. This includes border spaces. See "CALCULATION" section.

-W, --widen

Use full width of the terminal. Each pane is expanded to fill terminal width, unless --pane-width is specified.

-p, --paragraph

Insert empty line between every successive non-empty lines.

-B, --border[=style]

Print border. Enabled by --page option automatically. If the optional style is given, it is used as a border style and precedes to --border-style option. Use --border=none to disable it.

Border style is specified by --border-style option.

-F, --fillup[=pane|page|none]

Fill up final pane or page by empty lines. Parameter is optional and considered as 'pane' by default. Set by --page option automatically. Use --fillup=none if you want to explicitly disable it.

Option -F is a shortcut for --fillup=pane.

--height=#

Set page height and page mode on. See "CALCULATION" section.

--column-unit=#, --cu=#

Each column is placed at the unit of 8 by default. This option changes the number of the unit.

--linestyle=none|truncate|wrap|wordwrap, --ls=...

Set the style of treatment for longer lines. Default is none.

Option --linestyle=wordrap sets --linestyle=wrap and --boundary=word at once.

--boundary=none|word|space

Set text wrap boundary. If set as word or space, text is not wrapped in the middle of alphanumeric word or non-space sequence. Option --document set this as word. See Text::ANSI::Fold for detail.

--linebreak=none|all|runin|runout, --lb=...

Set the linebreak mode.

--runin=#, --runout=#

Set the number of runin/runout column. Default is both 2.

As for Japanese text, only one character can be moved with default value. Longer value allows more flexible arrangement, but makes text area shorter. Author is using the command with own ~/.ansicolumnrc like this:

    option default --runin=4 --runout=4
--[no-]pagebreak

Move to next pane when form feed character found. Default true.

--border-style=style, --bs=...

Set the border style. Current default style is box, which enclose each pane with box drawing graphic characters.

Sample styles: none, space, vbar, heavy-vbar, fat-vbar, line, heavy-line, stick, heavy-stick, ascii-frame, ascii-box, c-box, box, heavy-box, fat-box, very-fat-box, dash-box, heavy-dash-box, round-box, heavy-round-box, frame, heavy-frame, fat-frame, very-fat-frame, dash-frame, heavy-dash-frame, page-frame, heavy-page-frame, shadow, shadow-box, heavy-shadow-box, comb, heavy-comb, rake, heavy-rake, mesh, heavy-mesh, dumbbell, heavy-dumbbell, ribbon, heavy-ribbon, round-ribbon, double-ribbon, etc.

These are experimental and subject to change, and this document is not always up-to-date. See `perldoc -m App::ansicolumn::Border` for actual data.

You can define your own style in module or startup file. Put next lines in your $HOME/.ansicolumnrc file, for example.

    option default --border-style myheart
    __PERL__
    App::ansicolumn::Border->add_style(
        myheart  => {
        left   => [ "\N{WHITE HEART SUIT} ", "\N{BLACK HEART SUIT} " ],
        center => [ "\N{WHITE HEART SUIT} ", "\N{BLACK HEART SUIT} " ],
        right  => [ "\N{WHITE HEART SUIT}" , "\N{BLACK HEART SUIT}"  ],
    },
    );
--[no-]ignore-space, --[no-]is

When used -t option, leading spaces are ignored by default. Use --no-ignore-space option to disable it.

--[no-]white-space

Allow white spaces at the top of each pane, or clean them up. Default true. Negated by --document option.

--[no-]isolation

Allow the first line of a paragraph (continuous non-space lines) is placed at the bottom of a pane. Default true. If false, move it to the top of next pane. Negated by --document option.

--tabstop=#

Set tab width.

--tabhead=#
--tabspace=#

Set head and following space characters. Both are space by default. If the option value is longer than single characger, it is evaluated as unicode name.

--tabstyle=#

Set the style how tab is expanded. Select from dot, symbol or shade. Styles are defined in Text::ANSI::Fold library.

--ambiguous=wide|narrow

Specifies how to treat Unicode ambiguous width characters. Take a value of 'narrow' or 'wide. Default is 'narrow'.

CALCULATION

As for --height, --width, --pane and --pane-width options, besides giving numeric digits, you can calculate the number using terminal size. If the expression contains non-digit character, it is evaluated as an RPN (Reverse Polish Notation) with the terminal size pushed on the stack. Initial value for --height options is terminal height, and terminal width for others.

    OPTION              VALUE
    =================   =========================
    --height 1-         height - 1
    --height 2/         height / 2
    --height 1-2/       (height - 1) / 2
    --height dup2%-2/   (height - height % 2) / 2

Space and comma characters are ignored in the expression. So 1-2/ and 1 - 2 / and 1,-,2,/ are all same. See `perldoc Math::RPN` for the expression detail.

Next example select number of panes by dividing terminal width by 85:

    ansicolumn --pane 85/

If you consider the case the terminal width is less than 85:

    ansicolumn --pane 85/,DUP,1,GE,EXCH,1,IF

This RPN means $height/85 >= 1 ? $height/85 : 1.

STARTUP

This command is implemented with Getopt::EX module. So

    ~/.ansicolumnrc

file is read at start up time. If you want use --no-white-space always, put this line in your ~/.ansicolumnrc.

    option default --no-white-space

Also command can be extended by original modules with -M option. See `perldoc Getopt::EX` for detail.

INSTALL

CPANMINUS

    $ cpanm App::ansicolumn

To get the latest code, use this:

    $ cpanm https://github.com/kaz-utashiro/App-ansicolumn.git

EXAMPLES

https://github.com/kaz-utashiro/App-ansicolumn/tree/master/images

SEE ALSO

column(1), https://man7.org/linux/man-pages/man1/column.1.html

App::ansicolumn, https://github.com/kaz-utashiro/App-ansicolumn

Text::ANSI::Printf, https://github.com/kaz-utashiro/Text-ANSI-Printf

AUTHOR

Kazumasa Utashiro

LICENSE

Copyright 2020-2022 Kazumasa Utashiro.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.