Scurses alternatives and similar packages
Based on the "Tools" category.
Alternatively, view Scurses alternatives based on common mentions on social networks and blogs.
-
Gitbucket
A Git platform powered by Scala with easy installation, high extensibility & GitHub API compatibility -
Mill
Mill is a fast build tool that supports Java, Scala, Kotlin and many other languages. 2-4x faster than Gradle and 4-10x faster than Maven for common workflows, Mill aims to make your project’s build process performant, maintainable, and flexible -
bloop
Bloop is a build server and CLI tool to compile, test and run Scala fast from any editor or build tool. -
dregrex
dregex is a Java library that implements a regular expression engine using deterministic finite automata (DFA). It supports some Perl-style features and yet retains linear matching time, and also offers set operations. -
pos
Macro based print debugging for Scala code. Locates debug statements in your IDE. Supports logging.
SaaSHub - Software Alternatives and Reviews
Do you think we are missing an alternative of Scurses or a related project?
Popular Comparisons
README
Scurses / Onions
Scurses and Onions are frameworks for drawing nice things in your terminal using simple, elegant Scala. Scurses provides a low-level drawing and event handling API while Onions provides a high-level UI API with useful widgets.
Contents:
<!-- MarkdownTOC autolink="true" -->
<!-- /MarkdownTOC -->
Onions
High-level Scurses framework for easy terminal UI
Dependency:
libraryDependencies += "net.team2xh" %% "onions" % "<version in the badge>"
Example application
To see an example application showcasing all the widgets, run:
$ sbt onions/run
Make sure that your terminal is sized big enough, scrolling is not supported yet.
Goal is to provide an API full of widgets to make it really easy for users to quickly set up a dashboard to monitor their services in the terminal (graphs, histograms, logs, etc.). It works great through SSH as well!
How to use
Scurses { implicit screen =>
val frame = Frame("Example UI")
// Three columns
val colA = frame.panel
val colB = colA.splitRight
val colC = colB.splitRight
// Split second column in three rows
val colB2 = colB.splitDown
val colB3 = colB2.splitDown
// Split third row of second column into two columns
val colB3B = colB3.splitRight
val colB3B2 = colB3B.splitDown
// Split last column into two rows
val colC2 = colC.splitDown
// Add a label in the first column
Label(colA, Lorem.Ipsum, TextWrap.JUSTIFY)
val r = Random
val points = (1 to 50) map (i => {
val x = r.nextInt(40)
val y = 50 - x + (r.nextGaussian() * 5).toInt - 2
(x, y max 0)
})
// Add a scatter plot in the first row of third column
ScatterPlot(colC, points, "Time", "Sales")
// Show a heat map of the same values in the second row
HeatMap(colC2, points, "Time", "Sales")
// Display and launch event loop
frame.show()
}
For examples regarding all widgets, see ExampleUI.scala
Keyboard controls
Keys | Action |
---|---|
↑ / ↓ | Focus next widget in direction / Focus next panel in direction |
← / → | Focus next panel in direction |
⇥ / ⇧+⇥ | Focus next / previous panel |
CTRL+SPACE | Switch to next tab (if panel has multiple tabs) |
SPACE / ↵ | Activate label action, check radio or checkbox |
< / > | Move slider left / right (also with SPACE / ↵) |
ESC / CTRL+C | Exit |
Scurses
Low-level terminal drawing API for Scala
Dependency:
libraryDependencies += "net.team2xh" %% "scurses" % "<version in the badge>"
Example applications
- Hello World:
$ sbt "scurses/runMain net.team2xh.scurses.examples.HelloWorld"
- Game of life:
$ sbt scurses/run
- Stress test:
$ sbt "scurses/runMain net.team2xh.scurses.examples.StressTest"
How to use
import net.team2xh.scurses.Scurses
Scurses { screen =>
// The screen will only be in Scurses mode inside this block
// Scurses will reset the terminal buffer and everything when outside
// Get the current terminal size
val (w, h) = screen.size
val greeting = "Hello, world!"
val prompt = "Press a key to continue..."
// Put some strings in the middle of the screen
screen.put(w/2 - greeting.length/2, h/2, greeting)
screen.put(w/2 - prompt.length/2, h/2 + 1, prompt, Colors.BRIGHT_BLACK)
// Flush the buffer
screen.refresh()
// Wait for an input without storing it
screen.keypress()
}