Simple terminal-based ncurses UIs.
LessCurse is a work-in-progress, but it's unclear how much work and how much progress will happen/is needed.
It will probably just be developed enough to serve as a dead-simple TUI for the trackt time-tracking system.
I'm happy about bug reports and ideas, but chances are high that I cannot react in the way I wish others would do.
LessCurse is released under the GPL, Version 3 or any later version and Copyright 2016 by Felix Wolfsteller.
Add this line to your application's Gemfile:
And then execute:
Or install it yourself as:
$ gem install lesscurse
See the examples folder for now. Note that executing the examples creates a log file next to it (e.g. examples/list.rb.log). It boils down to initialize a Screen, populate it with Widgets and create lambdas to react to events (like a list item was selected) or key-presses.
There is only one screen and it will fill up your terminal. Access it via
The screen can and should be populated by widgets. You cannot decide on exact positioning of widgets, as a tiling-approach is used. By default, the screen will split vertically and each widget will take up an equal amount of space. However, slightly more complex
Grid-layouts are possible (see below).
Always one widget is focused.
The screen can handle global keyboard input (shortcuts, in LessCurse#actions). Currently, the TAB key is used to switch the focus of widgets. CTRL_Q will quit the application.
A Grid can be used if the screen is to be tiled not only vertically, but also horizontally. Each row will take up an equal amount of space, where each widget in a row shares the space within that row equally.
All (four... :)) widgets inherit from
LessCurse::Widgets::Base and provide following methods:
new(title: "Shows on top", data: "Shows somewhere")[creates instance]
set_default_actions[populates the @action map (keys to lambdas)]
draw[(re)draws the widget]
handle_input(key)[deals with input, that will be handed on from main module if focused] has to return true if key press was dealt with
The default look of a widget has a box drawn around it, with an optional title at the top.
Shows a list where a single item can be selected with the UP and DOWN array keys.
The list is thought to be able to gobble up Lists of Objects which can be selected and are then represented as
The text which is shown per Object defaults to
object.to_s but can be overridden by passing a lambda into
Shows text. Doesnt even scroll yet.
Allows creepy text input.
Buttons do not look very much like buttons yet, but can execute a lambda on keypress (typically
RETURN) when focused.
After checking out the repo, run
bundle to install dependencies. You can also run
bundle console for an interactive prompt that will allow you to experiment.
To install this gem onto your local machine, run
bundle exec rake install. To release a new version, update the version number in
version.rb, and then run
bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the
.gem file to rubygems.org.
Design goals and decisions
LessCurse aims to solve a specific problem and the library user (me) should be able to hack a UI with ease and without caring too much about configuration.
Thus, LessCurse is very oppinionated.
- No complex layouts, only screen-tiling.
- Few options.
- No way to get lost in visual design decisions.
Widgets are for now not directly aware of the underlying (ncurses) window, this is a design decision workaround and yet on purpose.
Bug reports and pull requests are welcome on GitHub at https://github.com/econya/less_curse.