Console( final InputStream cmdin, final PrintStream cmdout, final File historyFile, final NashornCompleter completer, final Function<String, String> docHelper) throws IOException { this.historyFile = historyFile; TerminalFactory.registerFlavor( Flavor.WINDOWS, isCygwin() ? JJSUnixTerminal::new : JJSWindowsTerminal::new); TerminalFactory.registerFlavor(Flavor.UNIX, JJSUnixTerminal::new); in = new ConsoleReader(cmdin, cmdout); in.setExpandEvents(false); in.setHandleUserInterrupt(true); in.setBellEnabled(true); in.setCopyPasteDetection(true); final Iterable<String> existingHistory = historyFile.exists() ? Files.readAllLines(historyFile.toPath()) : null; in.setHistory( new EditingHistory(in, existingHistory) { @Override protected boolean isComplete(CharSequence input) { return completer.isComplete(input.toString()); } }); in.addCompleter(completer); Runtime.getRuntime().addShutdownHook(new Thread((Runnable) this::saveHistory)); bind(DOCUMENTATION_SHORTCUT, (ActionListener) evt -> showDocumentation(docHelper)); }