Archived
0

первые намётки командной строки

This commit is contained in:
2019-02-01 13:06:10 +03:00
parent 70494d53f0
commit 7dd6086e26
2 changed files with 74 additions and 0 deletions

16
shell/build.gradle Normal file
View File

@@ -0,0 +1,16 @@
version '0.1-SNAPSHOT'
ext {
jline_version = '3.9.1-SNAPSHOT';
}
dependencies {
/* Core */
compile_excludeCopy project(':core')
compile (group: 'org.slf4j', name: 'jul-to-slf4j', version: slf4j_version)
compile (group: 'org.slf4j', name: 'slf4j-simple', version: slf4j_version)
compile (group: 'org.jline', name: 'jline', version: jline_version)
compile (group: 'org.jline', name: 'jline-terminal-jna', version: jline_version)
}

View File

@@ -0,0 +1,58 @@
package mc.core.shell;
import lombok.extern.slf4j.Slf4j;
import org.jline.reader.*;
import org.jline.reader.impl.DefaultParser;
import org.jline.reader.impl.DefaultParser.Bracket;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import java.io.IOException;
@Slf4j
public class Main {
public static void main(String[] args) throws IOException {
final String prompt = "mc-core> ";
final String rightPrompt = null;
DefaultParser parser = new DefaultParser();
parser.setEofOnUnclosedQuote(true);
parser.eofOnUnclosedBracket(Bracket.CURLY,Bracket.ROUND, Bracket.SQUARE);
final Terminal terminal = TerminalBuilder.builder().build();
LineReader reader = LineReaderBuilder.builder()
.terminal(terminal)
.parser(parser)
.variable(LineReader.SECONDARY_PROMPT_PATTERN, "%M%P > ")
.build();
Runnable shellTask = () -> {
log.info("< SHELL >");
while (!Thread.currentThread().isInterrupted()) {
String line = null;
try {
line = reader.readLine(prompt, rightPrompt, (MaskingCallback) null, null);
} catch (UserInterruptException ignore) {
} catch (EndOfFileException e) {
return;
}
if (line == null) {
continue;
}
log.info(line.trim());
}
};
Thread thread = new Thread(shellTask, "JLine reader Thread");
thread.start();
try {
thread.join();
} catch (InterruptedException ignore) {
}
}
}