2015-07-08 07:06:43 +03:00
|
|
|
brick
|
|
|
|
-----
|
|
|
|
|
2015-07-09 21:02:24 +03:00
|
|
|
[![Build Status](https://travis-ci.org/jtdaugherty/brick.png)](https://travis-ci.org/jtdaugherty/brick)
|
|
|
|
|
2015-07-08 07:06:43 +03:00
|
|
|
`brick` is a terminal user interface programming
|
|
|
|
library written in Haskell, in the style of
|
|
|
|
[gloss](http://hackage.haskell.org/package/gloss). This means you write
|
|
|
|
a function that describes how your user interface should look, but the
|
|
|
|
library takes care of a lot of the book-keeping that so commonly goes
|
|
|
|
into writing such programs.
|
|
|
|
|
2015-07-08 23:39:17 +03:00
|
|
|
The API exposed by `brick` is declarative. Unlike most GUI toolkits
|
|
|
|
which require you to write a long and tedious sequence of "create
|
|
|
|
a widget, now bind an event handler", `brick` just requires you to
|
|
|
|
describe your interface -- even the bits that are stateful -- using a
|
|
|
|
set of declarative combinators and it does the rest. All you have to do
|
|
|
|
is provide functions to transform your own application state when input
|
|
|
|
(or other kinds of) events arrive.
|
2015-07-08 07:06:43 +03:00
|
|
|
|
2015-07-08 07:49:01 +03:00
|
|
|
Under the hood, this library uses [vty](http://hackage.haskell.org/package/vty).
|
|
|
|
|
2015-07-08 07:38:54 +03:00
|
|
|
This library deprecates [vty-ui](https://github.com/jtdaugherty/vty-ui).
|
2015-07-08 07:49:32 +03:00
|
|
|
Some day `brick`, too, will have a [70-page
|
2015-07-08 07:41:28 +03:00
|
|
|
manual](http://jtdaugherty.github.io/vty-ui/manuals/vty-ui-users-manual-1.9.pdf).
|
2015-07-08 07:38:54 +03:00
|
|
|
|
|
|
|
Getting Started
|
|
|
|
---------------
|
|
|
|
|
2015-07-08 07:06:43 +03:00
|
|
|
The best way to get started is to build, run, and read the source for
|
|
|
|
the various demonstration programs in the `programs/` directory. This
|
|
|
|
will help you get to know the library and what it can do. There is also
|
|
|
|
extensive Haddock documentation.
|
2015-07-08 07:08:54 +03:00
|
|
|
|
2015-07-08 07:38:54 +03:00
|
|
|
```
|
|
|
|
$ cabal sandbox init
|
|
|
|
$ cabal install -j
|
|
|
|
$ .cabal-sandbox/bin/brick-???-demo
|
|
|
|
```
|
2015-07-08 07:56:28 +03:00
|
|
|
|
|
|
|
Status
|
|
|
|
------
|
|
|
|
|
|
|
|
`brick` is experimental. It does not yet support many of the features
|
|
|
|
of, say, `vty-ui`. And there are some places were I have deliberately
|
|
|
|
chosen to worry about performance later, for the sake of spending more
|
|
|
|
time on the design. For a while my goal with `brick` will be to develop
|
|
|
|
a very solid core library with minimal features. It *should* be possible
|
|
|
|
to extend this library by making your own packages that depend on
|
|
|
|
`brick`. If you do that, you'll also be helping me by testing whether
|
|
|
|
the exported interface is usable!
|
|
|
|
|
|
|
|
There is a lot that I haven't documented in terms of design and intended
|
|
|
|
API usage, but some of that can be gleaned from the demo program source
|
|
|
|
and by looking at the implementation of the widgets that are already
|
|
|
|
provided.
|
|
|
|
|
2015-07-08 07:57:29 +03:00
|
|
|
The development of this library has also revealed some bugs in `vty`,
|
|
|
|
and I've tried to report those as I go. If they haven't been resolved,
|
|
|
|
you'll see them arise when using `brick`.
|
|
|
|
|
2015-07-09 21:15:21 +03:00
|
|
|
Reporting bugs
|
|
|
|
--------------
|
|
|
|
|
|
|
|
Please file bug reports as GitHub issues. For best results:
|
|
|
|
|
|
|
|
- Include the versions of relevant software packages: `brick`, `ghc`,
|
|
|
|
and `vty` will be the most important ones. Even better, the output
|
|
|
|
of `cabal freeze` would probably be helpful in making the problem
|
|
|
|
reproducible.
|
|
|
|
|
|
|
|
- Clearly describe the behavior you expected ...
|
|
|
|
|
|
|
|
- ... and include a mininal demonstration program that exhibits the
|
|
|
|
behavior you actually observed.
|
|
|
|
|
2015-07-08 07:56:28 +03:00
|
|
|
Contributing
|
|
|
|
------------
|
|
|
|
|
|
|
|
If you decide to contribute, that's great! Here are some guidelines you
|
|
|
|
should consider to make submitting patches easier for all concerned:
|
|
|
|
|
|
|
|
- If you want to take on big things, talk to me first; let's have a
|
2015-07-08 07:57:29 +03:00
|
|
|
design/vision discussion before you start coding. Create a GitHub
|
|
|
|
issue and we can use that as the place to hash things out.
|
2015-07-08 07:56:28 +03:00
|
|
|
- If you make changes, try to make them consistent with the syntactic
|
|
|
|
conventions I've used in the codebase.
|
|
|
|
- Please provide Haddock documentation for any new functions you add.
|