Foxglove is an aesthetic and highly-configurable python-based terminal rendering support library with an accompanying custom frame definition language. Consider this a personalized alternative to Urwid with features customized to my use cases only.
.bqt
is a plaintext custom frame definition language with support for variable sizing. Bouquet frames ignore all standard English-language alphabetic characters [a-zA-Z]
except for [AaBbCcLlX]
, which are reserved for renderer or interpreter instructions. Bouquet intentionally requires all alphabetic characters to be inserted during runtime using .fill()
(!!!TBD!!!). The following characters have special meanings:
A
|a
andB
|b
define strictly-rectangular text regions.A
,a
,B
, andb
do not connect to each other.AABBBAAA
will generate three independent numbered text frames.A
andB
hard cut. PrintingHello world!
toAAAAAA
yieldsHello
.a
andb
soft cut. PrintingHello world!
toaaaaaa
yieldsHel...
.- Multi-line regions text-wrap by default.
L
|l
is an alternative to theAaBb
format for a multi-line list region.X
is a smart division and expansion character. We call an orthogonal line of Xs a "cut."- Cuts must be drawn in axis lines across the canvas. These may intersect and you may have multiple in the same axis.
- Cuts reference the characters to their left/up to repeat the edge of a frame region to expand it to variable sizing.
- If you don't want vertical resizing, don't have a horizontal cut.
- Config in the form
X:Y:Z
can allow for biased expansion, handing out repeats in those proportions. - Expansions are Bouquet-only. They do not repeat printed text.
╔═X╝
expands to╔═══...═╝
.