первые намётки командной строки
This commit is contained in:
16
shell/build.gradle
Normal file
16
shell/build.gradle
Normal 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)
|
||||||
|
}
|
||||||
58
shell/src/main/java/mc/core/shell/Main.java
Normal file
58
shell/src/main/java/mc/core/shell/Main.java
Normal 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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user