< prev index next >
src/jdk.scripting.nashorn.shell/share/classes/jdk/nashorn/tools/jjs/Console.java
Print this page
*** 23,65 ****
* questions.
*/
package jdk.nashorn.tools.jjs;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import jdk.internal.jline.NoInterruptUnixTerminal;
import jdk.internal.jline.Terminal;
import jdk.internal.jline.TerminalFactory;
import jdk.internal.jline.TerminalFactory.Flavor;
import jdk.internal.jline.WindowsTerminal;
import jdk.internal.jline.console.ConsoleReader;
import jdk.internal.jline.console.completer.Completer;
import jdk.internal.jline.console.history.FileHistory;
class Console implements AutoCloseable {
private final ConsoleReader in;
private final FileHistory history;
Console(final InputStream cmdin, final PrintStream cmdout, final File historyFile,
! final Completer completer) throws IOException {
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.setHistory(history = new FileHistory(historyFile));
in.addCompleter(completer);
Runtime.getRuntime().addShutdownHook(new Thread((Runnable)this::saveHistory));
}
String readLine(final String prompt) throws IOException {
return in.readLine(prompt);
}
--- 23,70 ----
* questions.
*/
package jdk.nashorn.tools.jjs;
+ import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+ import java.util.function.Function;
import jdk.internal.jline.NoInterruptUnixTerminal;
import jdk.internal.jline.Terminal;
import jdk.internal.jline.TerminalFactory;
import jdk.internal.jline.TerminalFactory.Flavor;
import jdk.internal.jline.WindowsTerminal;
import jdk.internal.jline.console.ConsoleReader;
+ import jdk.internal.jline.console.KeyMap;
import jdk.internal.jline.console.completer.Completer;
import jdk.internal.jline.console.history.FileHistory;
class Console implements AutoCloseable {
+ private static final String DOCUMENTATION_SHORTCUT = "\033\133\132"; //Shift-TAB
private final ConsoleReader in;
private final FileHistory history;
Console(final InputStream cmdin, final PrintStream cmdout, final File historyFile,
! final Completer completer, final Function<String, String> docHelper) throws IOException {
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.setHistory(history = new FileHistory(historyFile));
in.addCompleter(completer);
Runtime.getRuntime().addShutdownHook(new Thread((Runnable)this::saveHistory));
+ bind(DOCUMENTATION_SHORTCUT, (ActionListener)evt -> showDocumentation(docHelper));
}
String readLine(final String prompt) throws IOException {
return in.readLine(prompt);
}
*** 136,141 ****
--- 141,176 ----
}
private static boolean isCygwin() {
return System.getenv("SHELL") != null;
}
+
+ private void bind(String shortcut, Object action) {
+ KeyMap km = in.getKeys();
+ for (int i = 0; i < shortcut.length(); i++) {
+ final Object value = km.getBound(Character.toString(shortcut.charAt(i)));
+ if (value instanceof KeyMap) {
+ km = (KeyMap) value;
+ } else {
+ km.bind(shortcut.substring(i), action);
+ }
+ }
+ }
+
+ private void showDocumentation(final Function<String, String> docHelper) {
+ final String buffer = in.getCursorBuffer().buffer.toString();
+ final int cursor = in.getCursorBuffer().cursor;
+ final String doc = docHelper.apply(buffer.substring(0, cursor));
+ try {
+ if (doc != null) {
+ in.println();
+ in.println(doc);
+ in.redrawLine();
+ in.flush();
+ } else {
+ in.beep();
+ }
+ } catch (IOException ex) {
+ throw new IllegalStateException(ex);
+ }
+ }
}
< prev index next >