JLine is a Java library for handling console input.

Related tags

CLI jline3
Overview

JLine License Maven Central Build Status: Linux Build Status: Windows DepShield Badge

JLine is a Java library for handling console input. It is similar in functionality to BSD editline and GNU readline but with additional features that bring it in par with ZSH line editor. People familiar with the readline/editline capabilities for modern shells (such as bash and tcsh) will find most of the command editing features of JLine to be familiar.

JLine 3.x is an evolution of JLine 2.x.

License

JLine is distributed under the BSD License, meaning that you are completely free to redistribute, modify, or sell it with almost no restrictions.

Documentation

Forums

Artifacts

JLine can be used with a single bundle or smaller fine grained jars. The bundle contains all jars except jline-groovy that must be included in classpath if you want to use scripting capabilities. The big bundle is named:

jline-${jline.version}.jar

The dependencies are minimal: you may use JLine without any dependency on *nix systems, but in order to support windows or more advanced usage, you will need to add either Jansi or JNA library.

You can also use fine grained jars:

  • jline-terminal: the Terminal api and implementations
  • jline-terminal-jansi: terminal implementations leveraging the Jansi library
  • jline-terminal-jna: terminal implementations leveraging the JNA library
  • jline-reader: the line reader (including completion, history, etc...)
  • jline-style: styling api
  • jline-remote-ssh: helpers for using jline with Mina SSHD
  • jline-remote-telnet: helpers for using jline over telnet (including a telnet server implementation)
  • jline-builtins: several high level tools: less pager, nano editor, screen multiplexer, etc...
  • jline-console: command registry, object printer and widget implementations
  • jline-groovy: ScriptEngine implementation using Groovy

Supported platforms

JLine supports the following platforms:

  • FreeBSD
  • Linux
  • OS X
  • Solaris
  • Windows

Jansi vs JNA

To access the JVM's main terminal under a *nix system, no additional dependency will be needed. However, such usage will make use of child processes whenever the terminal is accessed (using Terminal.getAttributes, Terminal.setAttributes, Terminal.getSize, Terminal.setSize). If one of the Jansi or JNA library is present, it will be used and JLine will use native calls instead of child processes. This also allows the use of pseudo-terminals when dealing with non system terminals (for example when creating a terminal for an incoming connection).

On the Windows platform, relying on native calls is mandatory, so you need to have either Jansi or JNA library in your classpath along with the jline-terminal-jansi or jline-terminal-jna jar. Failing to do so will create a dumb terminal with no advanced capabilities.

There is no difference between JLine's support for Jansi and JNA. Both will provide the exact same behaviors. So it's a matter of preference: Jansi is a smaller but more focused library while JNA is a bigger but more generic and versatile one.

Maven Usage

Use the following definition to use JLine in your maven project:

<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline</artifactId>
    <version>${jline.version}</version>
</dependency>

JLine can also be used with more low-level jars:

<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline-terminal</artifactId>
    <version>${jline.version}</version>
</dependency>
<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline-reader</artifactId>
    <version>${jline.version}</version>
</dependency>

All the jars and releases are available from Maven Central, so you'll find everything at the following location https://repo1.maven.org/maven2/org/jline/.

Building

Requirements

  • Maven 3.3+
  • Java 8+
  • Graal 19.3+ (native-image)

Check out and build:

git clone git://github.com/jline/jline3.git
cd jline3
./build rebuild

Build Graal native-image demo:

./build rebuild -Pnative-image

Results

The following artifacts are build:

The big bundle includes everything (except jline-groovy) and is located at:

jline/target/jline-${jline.version}.jar

The fine grained bundles are located at:

terminal/target/jline-terminal-${jline.version}.jar
terminal-jansi/target/jline-jansi-${jline.version}.jar
terminal-jna/target/jline-jna-${jline.version}.jar
reader/target/jline-reader-${jline.version}.jar
style/target/jline-style-${jline.version}.jar
remote-telnet/target/jline-remote-telnet-${jline.version}.jar
remote-ssh/target/jline-remote-ssh-${jline.version}.jar
builtins/target/jline-builtins-${jline.version}.jar
console/target/jline-console-${jline.version}.jar
groovy/target/jline-groovy-${jline.version}.jar

Maven has a concept of SNAPSHOT. During development, the jline version will always ends with -SNAPSHOT, which means that the version is in development and not a release.

Note that all those artifacts are also installed in the local maven repository, so you will usually find them in the following folder: ~/.m2/repository/org/jline/.

Running the demo

To run the demo, simply use one of the following commands after having build JLine

# Gogo terminal
./build demo

# Groovy REPL
./build repl

# Graal native-image
./build graal

Continuous Integration

Comments
  • Use WriteConsoleW to write to Windows console

    Use WriteConsoleW to write to Windows console

    This is an attempt to fix #133 and #164 at the same time, without having to set a code page manually.

    Further investigation of #164 has shown: Even when the UTF-8 code page is supported just fine (e.g. on Windows 10), it seems to be partially broken. As an example, with the system locale set to Chinese, the UTF-8 code page will produce incorrect characters to be displayed.

    Since we avoid all encoding problems for the input mechanism by using the Windows API to read a Unicode char directly, I've been looking for solutions to apply the same for console output. This pull request changes the Windows terminal implementation to use WriteConsoleW to write Unicode text directly to the console window - bypassing all problems caused by the code pages.

    Since the Windows API accepts characters directly, the primary output for the Windows terminal now operates as Writer: the encoding step is skipped entirely. For compatibility reasons, we still need to support a OutputStream: some applications may use it directly through Terminal.output(). The output stream now emulates the old behavior: it decodes the written bytes using the configured code page. Consequently, Unicode works only properly when using the Writer directly (through Terminal.writer()). This is the case for JLine's LineReader implementation and probably most other applications.

    I've tested this on Windows 10 with the system locale set to English, German and Chinese and various code pages and it now handles both #133 and #164 automatically, without having to change the code page. We still need to test if it works properly on older Windows versions.

    opened by stephan-gh 24
  • 3.19.0 Regression - Escape sequences are printed when using Git Bash in Windows Terminal

    3.19.0 Regression - Escape sequences are printed when using Git Bash in Windows Terminal

    jline version 3.18.0 works, but 3.19.0 and 3.20.0 prints out raw unprocessed ANSI sequences on Git Bash from Git For Windows version 2.33.0.2-64-bit.

    Version 3.19.0 and higher image

    Version 3.18.0 image

    bug 
    opened by ryanhinton 22
  • On Windows, JLine 3.4.0 interferes with the std input of sub process.

    On Windows, JLine 3.4.0 interferes with the std input of sub process.

    Trying to use the JLine as library for a console launching OS or perl scripts, we found the following problem on Windows: Below the source code of small application, launching a subprocess from the input of JLine readline. When trying to execute a small perl script (see below), from the small application, the std input is blocked (see the image included). Calling this small application (from this small application) is also blocking. So, it is not a perl problem (;o).

    Tests made on Windows 7 and Windows 2016 server.

    import org.jline.reader.*; 
    import org.jline.terminal.Terminal; 
    import org.jline.terminal.TerminalBuilder; 
    import java.util.concurrent.TimeUnit;
    
    public class Main {
    
    	public static void main(String[] args) {
    
    		String prompt = "prompt> "; 
    		String rightPrompt = null; 
    		TerminalBuilder builder = null; 
    		
    		try {
    			builder = TerminalBuilder.builder(); 
    
    			Terminal terminal = builder
    					.system(true)
    					.build(); 
    
    			LineReader reader = LineReaderBuilder.builder() 
    					.terminal(terminal) 
    					.build(); 
    			
    			while (true) { 
    
    				String line = null; 
    				try { 
    					line = reader.readLine(prompt, rightPrompt, null, null); 
    				} catch (UserInterruptException e) { 
    					terminal.writer().println("User Interruption !");
    				} catch (EndOfFileException e) { 
    					return; 
    				} 
    
    				if (line == null) { 
    					continue; 
    				} 
    
    				line = line.trim(); 
    
    				terminal.writer().println("======>\"" + line + "\""); 
    
    				terminal.flush(); 
    
    				if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit")) { 
    					break; 
    				} 
    
    				runCommand (line);
    			}
    		}
    		catch (Throwable t) {
    			t.printStackTrace();
    		}
    	}
    
    	public static int runCommand (String command) {
    
    		int returnCode = -1;
    
    		try {
    			ProcessBuilder pb = new ProcessBuilder(command.split(" "));
    			pb.inheritIO();
    			Process p = pb.start ();  
    
    			if (!p.waitFor(60,TimeUnit.SECONDS)) 
    				System.out.println ("Timeout");
    			else {
    				returnCode = p.exitValue();
    				System.out.println ("return code :" + returnCode);
    			}
    
    			return returnCode;
    
    		} catch (Throwable t) { 
    			t.printStackTrace();
    			returnCode = -1;
    		}
    		return returnCode;
    	}
    }
    

    Perl Script:

    print  "Do you Wish To continue: Yes/No \n";
    	my $contExec = <STDIN>;
    	chomp($contExec);
    	if ( uc($contExec) ne "YES" )
    	{
            	print "Exiting\n";
    		exit -1;
    	}
    

    image

    opened by PhVdP 22
  • jline3 crashes under cygwin: Cannot run program

    jline3 crashes under cygwin: Cannot run program "infocmp"

    When running a java program from cygwin, jline3 prints the following stack trace:

    WARNING: Unable to create a system terminal, creating a dumb terminal (enable debug logging for more information)                                            
    Jul 21, 2017 1:59:03 AM org.jline.utils.Log logr                                                                                                             
    WARNING: Unable to retrieve infocmp for type cygwin                                                                                                          
    java.io.IOException: Cannot run program "infocmp": CreateProcess error=2, The system cannot find the file specified                                          
            at java.lang.ProcessBuilder.start(Unknown Source)                                                                                                    
            at org.jline.utils.InfoCmp.getInfoCmp(InfoCmp.java:547)                                                                                              
            at org.jline.terminal.impl.AbstractTerminal.parseInfoCmp(AbstractTerminal.java:160)                                                                  
            at org.jline.terminal.impl.DumbTerminal.<init>(DumbTerminal.java:102)                                                                                
            at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:296)                                                                              
            at org.jline.terminal.TerminalBuilder.build(TerminalBuilder.java:172)                                                                                
            at org.jline.terminal.TerminalBuilder.terminal(TerminalBuilder.java:57)                                                                              
            at org.jline.reader.LineReaderBuilder.build(LineReaderBuilder.java:96)                                                                                                                                                                                
    Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified                                                             
            at java.lang.ProcessImpl.create(Native Method)                                                                                                       
            at java.lang.ProcessImpl.<init>(Unknown Source)                                                                                                      
            at java.lang.ProcessImpl.start(Unknown Source)                                                                                                       
            ... 11 more
    
    opened by adorokhine 20
  • Ansi capabilities don't contain delete, home, or insert

    Ansi capabilities don't contain delete, home, or insert

    When using a custom version of sbt on windows that uses the latest jline, none of the delete, home or insert keys work. I was able to fix it with a workaround (https://github.com/sbt/sbt/pull/5874/commits/036fef33832ae672f13c394f39a0ed1b5040d4ec) but I'm wondering if maybe these keys should be added to the ansi.caps file.

    opened by eatkins 18
  • Problem with command prompt

    Problem with command prompt

    I'm currently trying to update from jLine2 to jLine3 but I'm having problems creating a command prompt which always "stays as the bottom". This is want I'm currently testing with.

    public class Main {
    
        public static void main( String[] args ) {
            new Main();
        }
    
        private Terminal terminal;
        private LineReader reader;
    
        private Main() {
            try {
                this.terminal = TerminalBuilder.terminal();
                this.reader = LineReaderBuilder.builder().terminal( terminal ).build();
    
                Thread thread = new Thread( new Runnable() {
                    @Override
                    public void run() {
                        while ( !Thread.interrupted() ) {
                            try {
                                Thread.sleep( 1000 );
                            } catch ( InterruptedException e ) {
                                break;
                            }
    
                            terminal.writer().println( "test" );
                            terminal.flush();
                        }
                    }
                } );
                thread.start();
    
                String line;
                while ( !Thread.interrupted() ) {
                    line = reader.readLine( "> " );
    
                    if ( line == null ) {
                        continue;
                    }
    
                    if ( line.equalsIgnoreCase( "quit" ) ) {
                        thread.interrupt();
                        System.exit( 0 );
                        break;
                    }
                }
            } catch ( IOException e ) {
                e.printStackTrace();
            }
        }
    
    }
    

    Link to google group topic https://groups.google.com/forum/#!topic/jline-users/VBLZ6Wn15LY

    question 
    opened by AgentLV 18
  • JLine3 interactive mode does not work in cygwin

    JLine3 interactive mode does not work in cygwin

    Problem description:

    When running the REPL application in cygwin, the terminal's behavior is unpredictable. E.g. the prompt name is all over the place when I execute a command, additional whitespaces or line breaks are inserted randomly, tab completion and command history are not working.

    Steps to reproduce:

    1. Download and install cygwin: https://cygwin.com/install.html
    2. Build the demo application in the project
    3. Execute jline-repl.bat

    Log during startup: JLine terminal: xterm-256color

    In the terminal try using tab completion, get the previous command with the up arrow key, start typing a command then move the cursor within the command with the left and right arrow keys, execute the help command or just simply hit enter.

    Setup:

    • Windows 10 x64
    • JLine3 3.14.0
    opened by adamGyure 17
  • readLine() ignores any text in the buffer when OEF is reached

    readLine() ignores any text in the buffer when OEF is reached

    CommandBox allows you to pipe a file of commands into it and readLine() will read the lines one at a time off the standard input just as though a human had typed them.

    box.exe < commands.txt
    

    If there's no trailing line break at the end of the file, then the last command is read in but the OEF fires before the last line is handed back for execution. I get that this makes some deal of sense since I can press Ctrl-D while typing at the shell to exit immediately, but in the case of reading an actual text file input, I'd like to be able to execute that last line even if there's no line break at the end.

    The org.jline.reader.UserInterruptException exception provides getPartialLine() to see if the user typed something. Is the correct fix to add the partial line to the org.jline.reader.EndOfFileException as well?

    opened by bdw429s 17
  • Ability to stop reading the input stream

    Ability to stop reading the input stream

    Related to #138, it would be interesting to have a way to stop reading the main terminal input stream in advance for signal processing. While adding a couple of methods pause() / resume() / isPaused() to the Terminal interface is easy, the problem is that the implementation can not easily interrupt its reading. So this would require a smarter control of the underlying input stream. On Windows, it may be achievable using WaitForSingleObject on the console handle to actually wait until there are some events to read. However, this method is missing in the jansi library. On Unix, we may 2 possibilities that would require investigation: using a FileChannel on top of the InputStream (when it's based on a real unix pipe) and check if the reading thread can actually be interrupted or when using a Pty, it may be possible to set the VTIME flag to set the timeout (in tenth of seconds) so that the read will unblock automatically.

    opened by gnodet 16
  • Persistent input line with asynchronous output

    Persistent input line with asynchronous output

    I'm trying to implement a persistent input line while having asynchronous (logging) output with a LineReader. To do this, I call some widgets as suggested in https://github.com/jline/jline3/issues/75#issuecomment-268496777:

    reader.callWidget(LineReader.CLEAR);
    terminal.writer().println(line);
    reader.callWidget(LineReader.REDRAW_LINE);
    reader.callWidget(LineReader.REDISPLAY);
    

    This works fine, but since the output is asynchronous, there is a potential race condition:

    OutputThread: works
    InputThread:  readLine() returns with a new input line
    OutputThread: callWidget() results in
        java.lang.IllegalStateException: Widgets can only be called during a `readLine` call
            at org.jline.reader.impl.LineReaderImpl.callWidget(LineReaderImpl.java:671)
    InputThread:  readLine() is called to start reading another line
    OutputThread: works, but may result into duplicate input prompts (e.g. > > ...)
    OutputThread: works
    

    Here is a very simple example that makes this reproducible: https://gist.github.com/Minecrell/374c4d3a0239a8c8a9c50849acf0b3f8

    It reads lines from input, and schedules them to be printed a few times asynchronously directly after they were read. In reality, this situation would only occur occasionally if there is new output at the same time. With this example, I always get a duplicate input prompt (> > instead of >), and when typing quickly enough it will also run into the IllegalStateException.

    All this brings me to the conclusion that I need some sort of locking mechanism to prevent the two threads from interfering with each other. However, I've been unable to think of any solution that doesn't require changes in JLine.

    One way I was thinking about would be to synchronize parts of LineReader.readLine (e.g. everything except actual input I/O) to prevent the input/output thread from modifying the input line at the same time. E.g. https://github.com/Minecrell/jline3/commit/c4c0560a1472d2d10c39daf8cc03f9f2285b8ebb together with this change in the output thread (full code):

    synchronized (reader) {
        if (reader.isReading()) {
            reader.callWidget(LineReader.CLEAR);
            terminal.writer().println(line);
            reader.callWidget(LineReader.REDRAW_LINE);
            reader.callWidget(LineReader.REDISPLAY);
        } else {
            // No need to redraw prompt
            terminal.writer().println(line);
        }
    }
    

    These changes fix both issues I mentioned above. There is always only a single input prompt (>) and I wasn't able to observe the IllegalStateException anymore.

    I'm not sure if this should be default behavior or if some kind of optional, external lock would be more appropriate here. Or maybe you have any other suggestions to avoid the problems mentioned above?

    opened by stephan-gh 15
  • Emacs ANSI support

    Emacs ANSI support

    Emacs comint announces it self as DUMP terminal, but it still support ANSI colors.

    JLine Terminal should detect emacs based on the INSIDE_EMACS environment variable and turn on ANSI support for it.

    I could make a PR and test it if somebody gave me a few pointers where this would be best implemented in JLine.

    opened by hvesalai 15
  • Bump sshd-common from 2.7.0 to 2.9.2

    Bump sshd-common from 2.7.0 to 2.9.2

    Bumps sshd-common from 2.7.0 to 2.9.2.

    Changelog

    Sourced from sshd-common's changelog.

    Version 2.6.0 to 2.7.0

    Version 2.7.0 to 2.8.0

    Version 2.8.0 to 2.9.0

    Version 2.9.0 to 2.9.1

    Version 2.9.1 to 2.9.2

    Planned for next version

    Bug fixes

    Major code re-factoring

    Potential compatibility issues

    Minor code helpers

    Behavioral changes and enhancements

    Commits
    • fbbbb7b [maven-release-plugin] prepare release sshd-2.9.2
    • 1ccde6c Minor comment fix
    • 5a8fe83 Better file handling for host keys
    • bba481a MinaSession: avoid synthetic accesses
    • f3a3d16 GH-266: Make ChannelPipedOutputStream.flush() a no-op
    • a85d074 [releng] Update GitHub action versions
    • b724ac2 Changes.md: mention GH-263
    • ba82c13 GH-263: Fix race condition in BufferedIoOutputStream
    • ae3851a Changes.md: mention SSHD-1287
    • 6d0ef48 [SSHD-1287] SFTP: better default buffer size handling
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • AttributedString fromAnsi <-> toAnsi does not round-trip convert correctly for box chars

    AttributedString fromAnsi <-> toAnsi does not round-trip convert correctly for box chars

    AttributedString.fromAnsi(
      new AttributedStringBuilder()
        .append("─")
        .toAttributedString()
        .toAnsi(terminal)
    ).toAnsi(terminal)
    

    This prints garbage instead of "─".

    Culprit appears to be https://github.com/jline/jline3/commit/adb1d94643725b28686cd215e8f6a40e79c19d26: toAnsi converts to alternate charset, but fromAnsi does not convert back. Setting DISABLE_ALTERNATE_CHARSET fixes the issue.

    The implication of this is that it is not possible to use AttributedString to set prompt, because there is always round-trip conversion involved.

    opened by uosis 0
  • Bracketed-Paste resulting in unresponsive shell (macOS + JNA)

    Bracketed-Paste resulting in unresponsive shell (macOS + JNA)

    During integration of jline3 into our projects we noticed that copy-and-pasting leads to an unresponsive shell, requiring us to kill the ssh-client process afterwards.

    The issue is reproducible on macOS 12.6 on Intel Macs. After some debugging we found out that only the JNA Pty implementation (JnaNativePty) shows the above problem. Setting org.jline.terminal.jna=fase, i.e. using the JANSI implementation can be used as a workaround in our case. Neither the simple ExternalTerminal nor the JANSI variant (JansiNativePty) have the described issue.

    Currently we suspect that issue only affects the macOS implementation of JnaNativePty, however this still needs to be verified.

    There 's a potentially related issue: #757

    opened by sa-BrigitteHerrmann 0
  • Update conemu capabilities

    Update conemu capabilities

    I was looking why cursor show/hide doesn't work in conemu but works fine in cmd and powershell. Looks like windows-conemu.caps is quite old and conemu has matured quite a bit since caps were updated. Essentially in repl demo tput cursor_invisible and tput cursor_visible doesn't work if type is windows-conemu.

    If I add below to windows-conemu.caps those those start to work.

    civis=\E[?25l, cvvis=\E[?25h,
    

    Looking at https://conemu.github.io/en/AnsiEscapeCodes.html#List_of_supported_codes I'm just wondering what else this caps file might be missing?

    opened by jvalkeal 0
  • Long output is cropped when tailtip widgets are enabled in Windows Terminal

    Long output is cropped when tailtip widgets are enabled in Windows Terminal

    This issue can be tested with the jline-repl.bat jansi in the demo folder. If the output of of the command is too long, it's impossible to scroll to it. In order to test it run the above command in the Windows Terminal (either in Powershell or in Command Prompt). Then press enter several times so that the scroll is enabled. Press Alt-S to enable tailtip widgets. Run help command (make sure that the windows is small enough so that the output is longer that the height of the terminal window). Now try to scroll up - the first lines of the output are cropped. It seems to me that the Windows Terminal treats the Capability.change_scroll_region in such a way that it crops the text which is outside the region? Most probably it's a Windows Terminal bug but since I encountered it in the jline, reporting it here.

    opened by valepakh 0
Owner
null
A library for creating interactive console applications in Java

Text-IO Text-IO is a library for creating Java console applications. It can be used in applications that need to read interactive input from the user.

Beryx 295 Jan 5, 2023
Java library for creating text-based GUIs

Lanterna Lanterna is a Java library allowing you to write easy semi-graphical user interfaces in a text-only environment, very similar to the C librar

null 2k Dec 31, 2022
Command-line API for Atlassian JIRA using the Tomitribe CREST library

Atlassian JIRA Command-Line (CLI) Jamira is a command-line API for Atlassian JIRA using the Tomitribe CREST library. Installation Jamira can be downlo

Tomitribe 12 Sep 10, 2022
JCLR (JavaColor) is a library that allows you to write colored text in your terminal. It use the ANSI color system. Go check the README.md file to see how to use it.

JCLR JCLR (JavaColor) is a library that allows you to write colored text in your terminal. It use the ANSI color system. To start using it, go to the

Scythe 3 Aug 21, 2021
Java annotation-based framework for parsing Git like command line structures

Airline Airline is a Java annotation-based framework for parsing Git like command line structures. Latest release is 0.8, available from Maven Central

null 847 Nov 26, 2022
ASCII renderer in pure java with no external dependencies

Java ASCII Render ASCII renderer in pure java with no external dependencies. Java ASCII Render supports graphical primitives/elements, layers, context

David E. Veliev 140 Dec 12, 2022
Command line parsing framework for Java

JCommander This is an annotation based parameter parsing framework for Java 8. Here is a quick example: public class JCommanderTest { @Parameter

Cedric Beust 1.8k Dec 29, 2022
This library provides facilities to match an input string against a collection of regex patterns.

This library provides facilities to match an input string against a collection of regex patterns. This library acts as a wrapper around the popular Chimera library, which allows it to be used in Java.

Sahab 5 Oct 26, 2022
It creates a Trie with given input and perform character based operations

Trie-with-character-based-operations It creates a Trie with given input and perform character based operations Boolean Search(String arg): This functi

null 2 Jul 3, 2022
Your new way of getting player input. An alternative to the Conversation API

Dialogue Dialogue is a Spigot API that completely revamps the Conversation API. This is not a plugin you put on your server. Want to know what's curre

nthByte 16 Aug 26, 2022
Make the Velocity proxy run commands based on backend input.

Command Sync Server This plugin allows the Velocity proxy to run commands based on backend input. Purpose The purpose of this is to allow easy access

Wind Development 3 May 23, 2022
A library that simplifies error handling for Functional Programming in Java

Faux Pas: Error handling in Functional Programming Faux pas noun, /fəʊ pɑː/: blunder; misstep, false step Faux Pas is a library that simplifies error

Zalando SE 114 Dec 5, 2022
Java library for handling exceptions in concise, unified, and architecturally clean way.

NoException NoException is a Java library for handling exceptions in concise, unified, and architecturally clean way. System.out.println(Exceptions.lo

Robert Važan 79 Nov 17, 2022
A library that simplifies error handling for Functional Programming in Java

Faux Pas: Error handling in Functional Programming Faux pas noun, /fəʊ pɑː/: blunder; misstep, false step Faux Pas is a library that simplifies error

Zalando SE 114 Dec 5, 2022
Jansi is a small java library that allows you to use ANSI escape sequences to format your console output which works even on windows.

Description Jansi is a small java library that allows you to use ANSI escape codes to format your console output which works even on Windows. It also

FuseSource 955 Dec 28, 2022
A library for creating interactive console applications in Java

Text-IO Text-IO is a library for creating Java console applications. It can be used in applications that need to read interactive input from the user.

Beryx 295 Jan 5, 2023
Terminal GUI library for simple ANSI console tools and graphical interfaces with Windows/Linux support

TerminalCore Terminal GUI library for Windows/Linux. This library contains all colors as ascii codes, native functions of the respective operating sys

Pascal 3 Oct 19, 2022
uniVocity-parsers is a suite of extremely fast and reliable parsers for Java. It provides a consistent interface for handling different file formats, and a solid framework for the development of new parsers.

Welcome to univocity-parsers univocity-parsers is a collection of extremely fast and reliable parsers for Java. It provides a consistent interface for

univocity 874 Dec 15, 2022
Utilities for handling math and showing numbers in Java.

digital Utilities for handling math and showing numbers in Java. What is it? BitConversion allows converting float and double values to int and long v

Tommy Ettinger 9 Nov 16, 2022