первые намётки командной строки
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