in shell/core/src/main/java/org/apache/karaf/shell/impl/console/ConsoleSessionImpl.java [107:234]
public ConsoleSessionImpl(SessionFactory factory,
CommandProcessor processor,
ThreadIO threadIO,
InputStream in,
PrintStream out,
PrintStream err,
Terminal term,
String encoding,
Runnable closeCallback) {
// Arguments
this.factory = factory;
this.threadIO = threadIO;
this.in = in;
this.out = out;
this.err = err;
this.closeCallback = closeCallback;
// Terminal
if (term instanceof org.jline.terminal.Terminal) {
terminal = term;
jlineTerminal = (org.jline.terminal.Terminal) term;
} else if (term != null) {
terminal = term;
// jlineTerminal = new KarafTerminal(term);
// TODO:JLINE
throw new UnsupportedOperationException();
} else {
try {
jlineTerminal = new DumbTerminal(in, out);
terminal = new JLineTerminal(jlineTerminal);
} catch (IOException e) {
throw new RuntimeException("Unable to create terminal", e);
}
}
if (jlineTerminal.getSize().getColumns() == 0) {
jlineTerminal.setSize(new Size(80, 24));
}
brandingProps = Branding.loadBrandingProperties(terminal.getClass().getName().endsWith("SshTerminal"));
// Create session
if (in == null || out == null || err == null) {
session = processor.createSession(((org.jline.terminal.Terminal) terminal).input(),
((org.jline.terminal.Terminal) terminal).output(),
((org.jline.terminal.Terminal) terminal).output());
} else {
session = processor.createSession(in, out, err);
}
// Completers
Completer builtinCompleter = createBuiltinCompleter();
CommandsCompleter commandsCompleter = new CommandsCompleter(factory, this);
Completer completer = (rdr, line, candidates) -> {
builtinCompleter.complete(rdr, line, candidates);
commandsCompleter.complete(rdr, line, candidates);
merge(candidates);
};
// Masking
maskingCallback = new AggregateMaskingCallback();
// Console reader
reader = LineReaderBuilder.builder()
.terminal(jlineTerminal)
.appName("karaf")
.variables(((CommandSessionImpl) session).getVariables())
.highlighter(new org.apache.felix.gogo.jline.Highlighter(session))
.parser(new KarafParser(this))
.completer(completer)
.build();
// History
final Path file = getHistoryFile();
reader.setVariable(LineReader.HISTORY_FILE, file);
String maxSizeStr = System.getProperty(SHELL_HISTORY_MAXSIZE);
if (maxSizeStr != null) {
reader.setVariable(LineReader.HISTORY_SIZE, Integer.parseInt(maxSizeStr));
}
String maxFileSizeStr = System.getProperty(SHELL_HISTORY_FILE_MAXSIZE);
if (maxFileSizeStr != null) {
reader.setVariable(LineReader.HISTORY_FILE_SIZE, Integer.parseInt(maxFileSizeStr));
}
history = new HistoryWrapper(reader.getHistory());
// Registry
registry = new RegistryImpl(factory.getRegistry(), this);
registry.register(factory);
registry.register(this);
registry.register(registry);
registry.register(terminal);
registry.register(history);
registry.register(commandsCompleter);
registry.register(new CommandNamesCompleter());
registry.register(new FileCompleter());
registry.register(new UriCompleter());
registry.register(new FileOrUriCompleter());
// Session
Properties sysProps = System.getProperties();
for (Object key : sysProps.keySet()) {
session.put(key.toString(), sysProps.get(key));
}
session.put(".session", this);
session.put(".processor", processor);
session.put(".commandSession", session);
session.put(".jline.reader", reader);
session.put(".jline.terminal", reader.getTerminal());
session.put(".jline.history", reader.getHistory());
session.put(Session.SCOPE, "shell:bundle:*");
session.put(Session.SUBSHELL, "");
session.put(Session.COMPLETION_MODE, loadCompletionMode());
session.put(Session.DISABLE_EOF_EXIT, loadDisableEofExit());
session.put("USER", ShellUtil.getCurrentUserName());
session.put("TERM", terminal.getType());
session.put("APPLICATION", System.getProperty("karaf.name", "root"));
session.put("#LINES", (Function) (session, arguments) -> Integer.toString(terminal.getHeight()));
session.put("#COLUMNS", (Function) (session, arguments) -> Integer.toString(terminal.getWidth()));
session.put("pid", getPid());
session.put(Shell.VAR_COMPLETIONS, new HashMap<>());
session.put(Shell.VAR_READER, reader);
session.put(Shell.VAR_TERMINAL, reader.getTerminal());
session.put(CommandSession.OPTION_NO_GLOB, Boolean.TRUE);
session.currentDir(Paths.get(System.getProperty("user.dir")).toAbsolutePath().normalize());
}