2015-07-08 07:06:43 +03:00
|
|
|
brick
|
|
|
|
-----
|
|
|
|
|
2016-07-10 18:41:30 +03:00
|
|
|
[![Build Status](https://travis-ci.org/jtdaugherty/brick.svg?branch=master)](https://travis-ci.org/jtdaugherty/brick)
|
2015-07-09 21:02:24 +03:00
|
|
|
|
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-22 05:45:17 +03:00
|
|
|
`brick` exposes a declarative API. 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
|
2015-08-09 07:18:30 +03:00
|
|
|
declarative combinators. Then you provide a function to transform your
|
|
|
|
own application state when input (or other kinds of) events arrive.
|
2015-07-08 07:06:43 +03:00
|
|
|
|
2015-08-09 07:18:30 +03:00
|
|
|
Under the hood, this library builds upon [vty](http://hackage.haskell.org/package/vty).
|
2015-07-08 07:49:01 +03:00
|
|
|
|
2015-07-08 07:38:54 +03:00
|
|
|
This library deprecates [vty-ui](https://github.com/jtdaugherty/vty-ui).
|
|
|
|
|
2015-07-21 05:02:53 +03:00
|
|
|
Feature Overview
|
|
|
|
----------------
|
|
|
|
|
2015-07-21 05:07:33 +03:00
|
|
|
`brick` comes with a bunch of widget types to get you started:
|
2015-07-21 05:02:53 +03:00
|
|
|
|
|
|
|
* Vertical and horizontal box layout widgets
|
|
|
|
* Basic single- and multi-line text editor widgets
|
|
|
|
* List widget
|
|
|
|
* Progress bar widget
|
|
|
|
* Simple dialog box widget
|
|
|
|
* Border-drawing widgets (put borders around or in between things)
|
2015-07-21 23:08:19 +03:00
|
|
|
* Generic scrollable viewports
|
2015-07-22 04:30:33 +03:00
|
|
|
* Extensible widget-building API
|
2015-07-22 05:37:55 +03:00
|
|
|
* (And many more general-purpose layout control combinators)
|
2015-07-21 05:02:53 +03:00
|
|
|
|
|
|
|
In addition, some of `brick`'s more powerful features may not be obvious
|
|
|
|
right away:
|
|
|
|
|
|
|
|
* All widgets can be arranged in predictable layouts so you don't have
|
|
|
|
to worry about terminal resizes.
|
|
|
|
* Most widgets can be made scrollable *for free*.
|
2015-07-24 09:14:44 +03:00
|
|
|
* Attribute management is flexible and can be customized at runtime on
|
|
|
|
a per-widget basis.
|
2015-07-21 05:02:53 +03:00
|
|
|
|
2016-05-11 20:00:40 +03:00
|
|
|
`brick` exports
|
|
|
|
[microlens](http://hackage.haskell.org/package/microlens) and non-lens
|
|
|
|
interfaces for most things, so you can get the power of lenses if
|
|
|
|
desired or use plain Haskell if you don't. If a `brick` library function
|
|
|
|
named `thing` has a lens version, the lens version is named `thingL`.
|
2015-07-22 05:45:17 +03:00
|
|
|
|
2015-07-08 07:38:54 +03:00
|
|
|
Getting Started
|
|
|
|
---------------
|
|
|
|
|
2015-07-24 09:11:49 +03:00
|
|
|
TLDR:
|
2015-07-08 07:08:54 +03:00
|
|
|
|
2015-07-08 07:38:54 +03:00
|
|
|
```
|
|
|
|
$ cabal sandbox init
|
2015-07-13 08:34:09 +03:00
|
|
|
$ cabal install -j -f demos
|
2015-07-08 07:38:54 +03:00
|
|
|
$ .cabal-sandbox/bin/brick-???-demo
|
|
|
|
```
|
2015-07-08 07:56:28 +03:00
|
|
|
|
2015-07-24 09:11:49 +03:00
|
|
|
To get started, see the [first few sections of the brick
|
2015-08-07 04:45:49 +03:00
|
|
|
user guide](docs/guide.rst).
|
2015-07-24 09:11:49 +03:00
|
|
|
|
2016-03-12 23:17:51 +03:00
|
|
|
Brick-Users Discussion
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
The `brick-users` Google Group / e-mail list is a place to discuss
|
|
|
|
library changes, give feedback, and ask questions. You can subscribe at:
|
|
|
|
|
|
|
|
[https://groups.google.com/group/brick-users](https://groups.google.com/group/brick-users)
|
|
|
|
|
2015-07-24 09:11:49 +03:00
|
|
|
Documentation
|
|
|
|
-------------
|
|
|
|
|
|
|
|
Your documentation options, in recommended order, are:
|
|
|
|
|
2015-08-12 19:19:04 +03:00
|
|
|
* [FAQ](https://github.com/jtdaugherty/brick/blob/master/FAQ.md)
|
|
|
|
* [The brick user guide](https://github.com/jtdaugherty/brick/blob/master/docs/guide.rst)
|
2015-07-24 09:11:49 +03:00
|
|
|
* Haddock (all modules)
|
2015-08-12 19:19:04 +03:00
|
|
|
* [Demo programs](https://github.com/jtdaugherty/brick/blob/master/programs)
|
2015-07-24 09:11:49 +03:00
|
|
|
|
2015-07-08 07:56:28 +03:00
|
|
|
Status
|
|
|
|
------
|
|
|
|
|
2015-08-07 04:51:52 +03:00
|
|
|
`brick` is young and may be missing some essential features. There are
|
|
|
|
some places were I have deliberately chosen to worry about performance
|
|
|
|
later for the sake of spending more time on the design (and to wait on
|
|
|
|
performance issues to arise first). `brick` exports an extension API
|
|
|
|
that makes it possible to make your own packages and widgets. If you
|
|
|
|
use that, you'll also be helping to test whether the exported interface
|
|
|
|
is usable and complete!
|
2015-07-08 07:56:28 +03:00
|
|
|
|
2015-07-09 21:15:21 +03:00
|
|
|
Reporting bugs
|
|
|
|
--------------
|
|
|
|
|
|
|
|
Please file bug reports as GitHub issues. For best results:
|
|
|
|
|
2015-08-10 20:00:27 +03:00
|
|
|
- Include the versions of relevant software packages: your terminal
|
|
|
|
emulator, `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.
|
2015-07-09 21:15:21 +03:00
|
|
|
|
|
|
|
- Clearly describe the behavior you expected ...
|
|
|
|
|
2015-12-08 23:48:10 +03:00
|
|
|
- ... and include a minimal demonstration program that exhibits the
|
2015-07-09 21:15:21 +03:00
|
|
|
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.
|
2015-08-07 04:45:49 +03:00
|
|
|
- Please provide Haddock and/or user guide documentation for any
|
|
|
|
changes you make.
|