boxes
Section: User Commands (1)
Updated: October 3 2024
NAME
boxes - text mode box and comment drawing filter
SYNOPSIS
boxes [options] [infile [outfile]]
DESCRIPTION
Boxes is a text filter which can draw any kind of box around its input text. Box design choices range from simple boxes to complex ASCII art. A box can also be removed and repaired, even if it has been badly damaged by editing of the text inside. Since boxes may be open on any side, boxes can also be used to create regional comments in any programming language. New box designs can be added and shared by appending to a configuration file.
boxes is
a command line tool, but also integrates with any text
editor that supports filters. The boxes website has
examples on how to configure editor integration for various
text editors:
https://boxes.thomasjensen.com/editors.html
OPTIONS
Options offered by boxes are the following:
-a format, --align=format
Alignment/positioning of text inside box. This option takes a format string argument which is read from left to right. The format string may not contain whitespace and must consist of one or more of the following components:
- hx -
horizontal alignment of the input text block inside a box.
Possible values for x arel
(ell, for left alignment),c
(center), orr
(right). This does not affect the justification of text lines within the input text block (use the j argument instead). - vx - vertical alignment of the input text block inside a
box.
Possible values for x aret
(for top alignment),c
(center), orb
(bottom). - jx - justification of lines within the input text block.
Possible values for x arel
(ell, for left justification),c
(center), orr
(right). This does not affect the alignment of the input text block itself within the box. Use the h and v arguments for input text block positioning.
Short hand notations (can be combined with the above arguments):
l
(ell) - short forhlvcjl
c
- short forhcvcjc
r
- short forhrvcjr
The default for
-a
is hlvt
.
-c string, --create=string
Command line design definition
for simple cases. The argument of this option is the
definition for the "west" (W) shape. The defined
shape must consist of exactly one line, i.e. no multi-line
shapes are allowed. The -c option is intended as a
shortcut for those cases where simple regional comments are
to be created, which only need a certain character or
sequence of characters to be placed in front of every line.
In such cases, it is much more convenient to simply specify
-c than to do a complete design definition in
one’s config file, where the only shape defined is the
west shape.
This option implies a -d and does not access the
config file. -c may of course be used in conjunction
with any of the other options. By default, -c is not
specified.
Printing of color codes. Box
designs and the text inside a box may contain ANSI color
codes, sometimes called "escape sequences". In
this way, boxes and text can be colored.
Whether these escape sequences are printed by boxes
is normally determined by the terminal capabilities
(default). Using --color, boxes can be told to
always output escape sequences even if it thinks the
terminal may not understand them. Using --no-color,
escape sequences will never be printed.
Of course, even
with --color, a box will only appear colored if it is
already defined with colors. In case you want to auto-color
some text that isn’t yet, take a look at
lolcat.
These options consider all escape sequences to be color
codes. Any other escape sequences present will be printed or
removed along with the color codes.
-d string, --design=string
Design selection. The one argument of this option is the name of the design to use, which may either be a design’s primary name or any of its alias names.
-e eol, --eol=eol
Override line terminator.
eol can be CR
, LF
, or CRLF
. The
default is to use the system-specific line terminator, which
means CRLF
on Windows, and LF
otherwise. This
option should only be used in an emergency, because normally
the system-specific line terminator will be just fine. This
option is considered experimental, and may go away in a
future version of boxes. Let us know in
https://github.com/ascii-boxes/boxes/issues/60
if you think we should keep it.
-f string, --config=string
Use alternate config file. The one argument of this option is the name of a valid boxes config file. The argument of -f can also be a directory which contains a configuration file. More information on this topic below in the CONFIGURATION FILE section.
-h, --help
Print usage information.
-i string, --indent=string
Indentation mode. Possible values for string are:
text
- indent text inside of boxbox
- indent box, not text inside of boxnone
- discard indentation
Arguments may be abbreviated. The default is box
.
-k bool, --kill-blank, --no-kill-blank
Kill leading/trailing blank lines on removal. The value of bool is either true or false. This option only takes effect in connection with -r. If set to true, leading and trailing blank lines will be removed from the output. If set to false, the entire content of the former box is returned. The default is false, if both the top and the bottom part of the box are open, as is the case with most regional comments. If the box’s design defines a top part or a bottom part, the default is true.
-l, --list
List designs. Produces a listing of all available box designs in the config file, along with a sample box and information about its creator. Also checks the syntax of the entire config file. If used in conjunction with -d, displays detailed information about the specified design.
-m, --mend
Mend box. This removes a (potentially broken) box as with -r, and redraws it afterwards. The mended box is drawn according to the options given. This may be important to know when it comes to restoring padding, indentation, etc. for the mended box. Implies -k false.
-n encoding, --encoding=encoding
Character encoding. Overrides the character encoding of the input and output text. Choose from the list shown by iconv -l. If an invalid character encoding is specified here, UTF-8 is used as a fallback. The default is to use the system encoding, which is normally the best course of action. So don’t specify this option unless you have to.
-p string, --padding=string
Padding. Specify padding in spaces around the input text block for all sides of the box. The argument string may not contain whitespace and must consist of a combination of the following characters, each followed by a number indicating the padding in spaces:
a
- (all) give padding for all sides at onceh
- (horiz) give padding for both horizontal sidesv
- (vertical) give padding for both vertical sidesb
- (bottom) give padding for bottom (south) sidel
- (left) give padding for left (west) sidet
- (top) give padding for top (north) sider
- (right) give padding for right (east) side
Example:
-p a4t2
would define the padding to be
4 characters on all sides, except for the top of the box,
where the input text block will be only 2 lines away from
the box.
The default for this option is determined by the box design
used. If the design does not specify anything, no default
padding is used.
-q query, --tag-query=query
Query designs by tag. In
contrast to -l, this will only print the matching
design names. This option is normally used stand-alone; if
used in combination with other options, behavior is
undefined. The query argument is a comma-separated
list of tags which can be present on a design in order to
match. A tag may optionally be prefixed with +
in
order to require that it be present, or with -
in
order to exclude designs which have that tag. Each tag can
only occur once per query. The special query (all)
matches all box designs, even if they don't have any
tags.
This option is intended for use by scripts. Alias names are
printed below their primary design name, and postfixed with
(alias)
.
Example: boxes -q programming,-comment
-r, --remove
Remove an existing box. Which design to use is detected automatically. In order to save time or in case the detection does not decide correctly, combine with -d to specify the design.
-s widthxheight, --size=widthxheight
Box size. This option specifies
the desired box size in units of columns (for width) and
lines (for height). If only a single number is given as
argument, this number specifies the desired box width. A
single number prefixed by x
specifies only the
box height. The actual resulting box size may vary depending
on the individual shape sizes of the chosen design. Also,
other command line options may influence the box size (such
as -p).
By default, the smallest possible box is created around the
text.
-t tabopts, --tabs=tabopts
Tab handling. This option
controls how tab characters in the input text are handled.
The tabopts must always begin with a positive integer
number indicating the distance between tab stops, sometimes
called "spaces per tab".
Immediately following the tab distance, an optional
character can be appended, telling boxes how to treat
the leading tabs. The following options are available:
e
- expand tabs into spacesk
- keep tabs as close to what they were as possibleu
- unexpand tabs. This makes boxes turn as many spaces as possible into tabs.
The -t
string can be just a number. In that case, e
is assumed for tab handling. The default for the
-t option is simply 8
, which is just such a case.
For example, you could specify -t 4u
in order to have
your leading tabs unexpanded. In the box content, tabs are
always converted into spaces. The tab distance in this
example is 4.
-v, --version
Print out current version number.
CONFIGURATION FILE
Boxes will look for the configuration file in several places, some of which are given by the XDG specification.
- -f option [file or dir]
When a configuration file is specified on the command line, we will use that. The -f option can also specify a directory. Any location specified via -f must exist, or boxes will terminate with an error. - BOXES environment variable [file or dir]
If no config file is specified on the command line, boxes will check for the BOXES environment variable, which may contain a filename or directory to use. Any location specified via the BOXES environment variable must exist, or boxes will terminate with an error. - $HOME [dir]
- $XDG_CONFIG_HOME/boxes [dir]
- $HOME/.config/boxes [dir]
- /usr/share/boxes [file]
- /etc/xdg/boxes [dir]
- /usr/local/share/boxes [dir]
- /usr/share/boxes [dir]
Either one of these last two directory locations might have the same name as the global config file from 6. That’s fine. It just means that we first look for a file of that name, and then for a directory containing the file.
The XDG
environment variable XDG_CONFIG_DIRS is not
supported. However, its default value is supported via steps
8 and 9 above.
In the above list, whenever a step is designated with [dir],
the following file names will be found, in this order:
.boxes
box-designs
boxes-config
boxes
As soon as the first valid file is found, we use that and stop the search.
The recommended location for a user-specific configuration file is $HOME/.boxes or $HOME/.config/boxes/.boxes. A global configuration file should be located at /usr/share/boxes. But all of the other locations are fully supported, too.
The syntax of boxes config files is described on the website at https://boxes.thomasjensen.com/config-syntax.html.
EXAMPLES
Examples on how
to invoke boxes may be found on the website at
https://boxes.thomasjensen.com/examples.html.
Try
echo "Good Bye World!" | boxes -d nuke
Boxes also combines nicely with other tools. Try
figlet "boxes . . . !" | lolcat -f | boxes -d unicornthink
AVAILABILITY
The boxes website is https://boxes.thomasjensen.com/. It contains a number of examples illustrating this manual page as well as more in-depth documentation.
AUTHOR
Boxes
was made by Thomas Jensen and the boxes contributors.
It has been lovingly maintained since 1999.
For a full list of contributors, see
https://boxes.thomasjensen.com/team.html#contributors
and
https://github.com/ascii-boxes/boxes/graphs/contributors.
Please refer to the boxes website for the
maintainer’s current email address.
VERSION
This is boxes version 2.3.1.
LICENSE
boxes is free software under the terms of the GNU General Public License, version 3. Details in the LICENSE file: https://raw.githubusercontent.com/ascii-boxes/boxes/v2.3.1/LICENSE
ENVIRONMENT
Boxes recognizes the following environment variables:
- BOXES
- Absolute path of the boxes configuration file. If this is specified, it must refer to an existing file or directory.
- HOME
- The user's home directory.
- XDG_CONFIG_HOME
- The root of the configuration file location as per the XDG specification.
SEE ALSO
figlet(6), iconv(1), lolcat(6)