You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2012/10/02 01:27:23 UTC

svn commit: r1392693 - in /karaf/branches/karaf-2.2.x: client/src/main/java/org/apache/karaf/client/ shell/console/src/main/java/org/apache/karaf/shell/console/ shell/console/src/main/java/org/apache/karaf/shell/console/jline/ shell/console/src/test/ja...

Author: gnodet
Date: Mon Oct  1 23:27:23 2012
New Revision: 1392693

URL: http://svn.apache.org/viewvc?rev=1392693&view=rev
Log:
[KARAF-1815] When ssh'ing from a windows box into a unix box, arrow keys are not correctly interpreted

Modified:
    karaf/branches/karaf-2.2.x/client/src/main/java/org/apache/karaf/client/Main.java
    karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java
    karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
    karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
    karaf/branches/karaf-2.2.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
    karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
    karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
    karaf/branches/karaf-2.2.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java

Modified: karaf/branches/karaf-2.2.x/client/src/main/java/org/apache/karaf/client/Main.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/client/src/main/java/org/apache/karaf/client/Main.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/client/src/main/java/org/apache/karaf/client/Main.java (original)
+++ karaf/branches/karaf-2.2.x/client/src/main/java/org/apache/karaf/client/Main.java Mon Oct  1 23:27:23 2012
@@ -20,6 +20,8 @@ import java.io.ByteArrayInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InterruptedIOException;
+import java.nio.charset.Charset;
+import java.util.Locale;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.BlockingQueue;
 
@@ -125,6 +127,12 @@ public class Main {
                 new Thread(in).start();
                 channel.setIn(in);
                 ((ChannelShell) channel).setupSensibleDefaultPty();
+                String ctype = System.getenv("LC_CTYPE");
+                if (ctype == null) {
+                    ctype = Locale.getDefault().toString() + "."
+                                + System.getProperty("input.encoding", Charset.defaultCharset().name());
+                }
+                ((ChannelShell) channel).setEnv("LC_CTYPE", ctype);
             }
             channel.setOut(AnsiConsole.wrapOutputStream(System.out));
             channel.setErr(AnsiConsole.wrapOutputStream(System.err));

Modified: karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java (original)
+++ karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/Main.java Mon Oct  1 23:27:23 2012
@@ -207,7 +207,7 @@ public class Main {
      * @throws Exception
      */
     protected Console createConsole(CommandProcessorImpl commandProcessor, InputStream in, PrintStream out, PrintStream err, Terminal terminal) throws Exception {
-        return new Console(commandProcessor, in, out, err, terminal, null);
+        return new Console(commandProcessor, in, out, err, terminal, null, null);
     }
 
     /**

Modified: karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java (original)
+++ karaf/branches/karaf-2.2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java Mon Oct  1 23:27:23 2012
@@ -26,7 +26,6 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.InterruptedIOException;
 import java.io.PrintStream;
-import java.io.PrintWriter;
 import java.io.Reader;
 import java.util.Map;
 import java.util.Properties;
@@ -38,7 +37,6 @@ import java.util.regex.Pattern;
 import jline.Terminal;
 import jline.UnsupportedTerminal;
 import jline.console.ConsoleReader;
-import jline.console.history.FileHistory;
 import jline.console.history.PersistentHistory;
 import org.apache.felix.gogo.commands.CommandException;
 import org.apache.felix.gogo.runtime.CommandNotFoundException;
@@ -85,6 +83,7 @@ public class Console implements Runnable
                    PrintStream out,
                    PrintStream err,
                    Terminal term,
+                   String encoding,
                    Runnable closeCallback) throws Exception
     {
         this.in = in;
@@ -97,9 +96,11 @@ public class Console implements Runnable
         this.session.put("SCOPE", "shell:osgi:*");
         this.closeCallback = closeCallback;
 
-        reader = new ConsoleReader(this.consoleInput,
+        reader = new ConsoleReader(null,
+                                   this.consoleInput,
                                    this.out,
-                                   this.terminal);
+                                   this.terminal,
+                                   encoding);
 
         final File file = getHistoryFile();
         try {

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=1392693&r1=1392692&r2=1392693&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 Mon Oct  1 23:27:23 2012
@@ -22,6 +22,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.lang.reflect.Method;
+import java.nio.charset.Charset;
 import java.security.PrivilegedExceptionAction;
 import java.util.List;
 import javax.security.auth.Subject;
@@ -114,11 +115,19 @@ public class ConsoleFactory {
                 }
             }
         };
+        String ctype = System.getenv("LC_CTYPE");
+        String encoding = ctype;
+        if (encoding != null && encoding.indexOf('.') > 0) {
+            encoding = encoding.substring(encoding.indexOf('.') + 1);
+        } else {
+            encoding = System.getProperty("input.encoding", Charset.defaultCharset().name());
+        }
         this.console = new Console(commandProcessor,
                                    in,
                                    wrap(out),
                                    wrap(err),
                                    terminal,
+                                   encoding,
                                    callback);
         CommandSession session = console.getSession();
         session.put("USER", user);
@@ -133,6 +142,9 @@ public class ConsoleFactory {
                 return Integer.toString(terminal.getWidth());
             }
         });
+        if (ctype != null) {
+            session.put("LC_CTYPE", ctype);
+        }
         session.put(".jline.terminal", terminal);
         new Thread(console, "Karaf Shell Console Thread").start();
     }

Modified: karaf/branches/karaf-2.2.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java (original)
+++ karaf/branches/karaf-2.2.x/shell/console/src/test/java/org/apache/karaf/shell/console/ExampleSubclassMain.java Mon Oct  1 23:27:23 2012
@@ -16,13 +16,13 @@
  */
 package org.apache.karaf.shell.console;
 
+import java.io.InputStream;
+import java.io.PrintStream;
+
 import jline.Terminal;
 import org.apache.felix.gogo.runtime.CommandProcessorImpl;
 import org.apache.karaf.shell.console.jline.Console;
 
-import java.io.InputStream;
-import java.io.PrintStream;
-
 /**
  * This class is mostly here so that folks can see an example of how you can extend the Karaf Main shell.  Also
  * lets Karaf developers see how changes the Main class can affect the interface comparability
@@ -43,7 +43,7 @@ public class ExampleSubclassMain extends
 
     @Override
     protected Console createConsole(CommandProcessorImpl commandProcessor, InputStream in, PrintStream out, PrintStream err, Terminal terminal) throws Exception {
-        return new Console(commandProcessor, in, out, err, terminal, null) {
+        return new Console(commandProcessor, in, out, err, terminal, null, null) {
 
             /**
              * If you don't overwrite, then karaf will use the welcome message found in the

Modified: karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java (original)
+++ karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellFactoryImpl.java Mon Oct  1 23:27:23 2012
@@ -94,11 +94,16 @@ public class ShellFactoryImpl implements
         public void start(final Environment env) throws IOException {
             try {
                 final Terminal terminal = new SshTerminal(env);
+                String encoding = env.getEnv().get("LC_CTYPE");
+                if (encoding != null && encoding.indexOf('.') > 0) {
+                    encoding = encoding.substring(encoding.indexOf('.') + 1);
+                }
                 Console console = new Console(commandProcessor,
                                               in,
                                               new PrintStream(new LfToCrLfFilterOutputStream(out), true),
                                               new PrintStream(new LfToCrLfFilterOutputStream(err), true),
                                               terminal,
+                                              encoding,
                                               new Runnable() {
                                                   public void run() {
                                                       destroy();

Modified: karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java (original)
+++ karaf/branches/karaf-2.2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshAction.java Mon Oct  1 23:27:23 2012
@@ -140,6 +140,10 @@ public class SshAction extends OsgiComma
                     channel.setIn(new NoCloseInputStream(System.in));
                     ((ChannelShell) channel).setPtyColumns(getTermWidth());
                     ((ChannelShell) channel).setupSensibleDefaultPty();
+                    Object ctype = session.get("LC_CTYPE");
+                    if (ctype != null) {
+                        ((ChannelShell) channel).setEnv("LC_CTYPE", ctype.toString());
+                    }
                 }
                 channel.setOut(new NoCloseOutputStream(System.out));
                 channel.setErr(new NoCloseOutputStream(System.err));

Modified: karaf/branches/karaf-2.2.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.2.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java?rev=1392693&r1=1392692&r2=1392693&view=diff
==============================================================================
--- karaf/branches/karaf-2.2.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java (original)
+++ karaf/branches/karaf-2.2.x/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/GogoPlugin.java Mon Oct  1 23:27:23 2012
@@ -204,6 +204,7 @@ public class GogoPlugin extends Abstract
                                       pipedOut,
                                       pipedOut,
                                       new WebTerminal(TERM_WIDTH, TERM_HEIGHT),
+                                      null,
                                       null);
                 CommandSession session = console.getSession();
                 session.put("APPLICATION", System.getProperty("karaf.name", "root"));