You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jg...@apache.org on 2012/04/04 16:42:51 UTC
svn commit: r1309421 -
/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Author: jgoodyear
Date: Wed Apr 4 14:42:51 2012
New Revision: 1309421
URL: http://svn.apache.org/viewvc?rev=1309421&view=rev
Log:
[KARAF-1038] release apache karaf 2.2.6
Fixed windows terminal key processing.
Will recut release candidate..
Modified:
karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
Modified: karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1309421&r1=1309420&r2=1309421&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java (original)
+++ karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java Wed Apr 4 14:42:51 2012
@@ -78,8 +78,31 @@ public class ConsoleFactory {
}
}
+ public static Object invokePrivateMethod(Object o, String methodName, Object[] params) throws Exception {
+ final Method methods[] = o.getClass().getDeclaredMethods();
+ for (int i = 0; i < methods.length; ++i) {
+ if (methodName.equals(methods[i].getName())) {
+ methods[i].setAccessible(true);
+ return methods[i].invoke(o, params);
+ }
+ }
+ return null;
+ }
+
+ private static <T> T unwrapBIS(T stream) {
+ try {
+ return (T) invokePrivateMethod(stream, "getInIfOpen", null);
+ } catch (Throwable t) {
+ return stream;
+ }
+ }
+
protected void doStart(String user) throws Exception {
- InputStream in = unwrap(System.in);
+ final Terminal terminal = terminalFactory.getTerminal();
+ // unwrap stream so it can be recognized by the terminal and wrapped to get
+ // special keys in windows
+ InputStream unwrappedIn = unwrapBIS(unwrap(System.in));
+ InputStream in = terminal.wrapInIfNeeded(unwrappedIn);
PrintStream out = unwrap(System.out);
PrintStream err = unwrap(System.err);
Runnable callback = new Runnable() {
@@ -91,7 +114,6 @@ public class ConsoleFactory {
}
}
};
- final Terminal terminal = terminalFactory.getTerminal();
this.console = new Console(commandProcessor,
in,
wrap(out),