Some extensions and helpers used to augment JLine3, as used in several JADAPTIVE command line applications such as Push SFTP.
It is available in Maven Central.
<dependency>
<groupId>com.sshtools</groupId>
<artifactId>sequins</artifactId>
<version>0.0.4</version>
</dependency>
- Nested progress output with animated spinners
- Simple prompting (passwords, yes/no, text)
- Highlights
MessageFormat.format()
andString.format()
arguments. - Draw tables with box drawing characters
- Will not support full screen features
- Tests
- More Widgets
Sequins.create().messageln("Hello World");
The formatter arguments will be bolded.
var terminal = Sequins.create();
var rnd = new Random();
terminal.messageln("Hello World, its {0} degrees outside today, with a {1}% chance of rain.", rnd.nextInt(-10, 50), rnd.nextInt(0, 100));
Will output on System.err
instead of System.out
.
var terminal = Sequins.create();
try {
throw new Exception("Bang!");
}
catch(Exception e) {
terminal.errorln("Something has gone terribly wrong");
terminal.error(e);
}
Prompt for text, passwords, confirmation.
var terminal = Sequins.create();
var name = terminal.prompt("what is your name?");
var age = terminal.prompt("Hello {0}, what is you age?", name);
if(terminal.yesNo("Are you sure {0}, age {1}.", name, age)) {
var pw = terminal.password("Ok then {0}, what is your password?", name);
terminal.messageln("Thanks, storing password {0} for later shenannigans", new String(pw));
}
With a sequence you can create a string of formatted and styled text, using background and foreground colours and text styles such as italic, bold, and underline.
var terminal = Sequins.create();
var seq = terminal.createSequence();
var encoded = seq.str("With a ").boldOn().str("sequence").boldOff().
str(" you can create a string of formatted and styled text, ").
str("using ").bg(Color.RED).str("background").defaultBg().
str(" and ").fg(Color.GREEN).str("foreground").defaultFg().
str(" colours and text styles such as ").
italic(true).str("italic").italic(false).ch(' ').
boldOn().str("bold").boldOff().str(" and ").
underlineOn().str("underline").underlineOff().ch('.').toString();
var wrt = terminal.getWriter();
wrt.write(encoded);
wrt.flush();
Intended for long running tasks, where output might be line by line, or animated progress. Progress can be nested too (with the output of each nested level being indented further).
var terminal = Sequins.create();
bldr = terminal.progressBuilder();
bldr.withIndeterminate();
bldr.withHideCursor();
bldr.withPercentageText();
try(var progress = bldr.build()) {
progress.message(Level.NORMAL, "Line 1. {0}", "Arg1");
sleep(DELAY);
progress.message(Level.NORMAL, "Line 2. {0}", "Arg2");
sleep(1000);
for(int i = 0 ; i <= 10; i++) {
progress.progressMessage("Count {0}", i);
sleep(3000);
}
}