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 2011/11/25 14:22:46 UTC

svn commit: r1206153 - in /karaf/trunk: ./ shell/commands/src/main/java/org/apache/karaf/shell/shell/ shell/console/ shell/console/src/main/java/jline/console/ shell/console/src/main/java/org/apache/karaf/shell/console/jline/ shell/ssh/src/main/java/or...

Author: gnodet
Date: Fri Nov 25 13:22:44 2011
New Revision: 1206153

URL: http://svn.apache.org/viewvc?rev=1206153&view=rev
Log:
[KARAF-1042] Upgrade to jline 2.6

Removed:
    karaf/trunk/shell/console/src/main/java/jline/console/ConsoleReader.java
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/keybindings.properties
Modified:
    karaf/trunk/pom.xml
    karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/shell/MoreAction.java
    karaf/trunk/shell/console/pom.xml
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
    karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java
    karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java
    karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java

Modified: karaf/trunk/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/pom.xml?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/pom.xml (original)
+++ karaf/trunk/pom.xml Fri Nov 25 13:22:44 2011
@@ -145,7 +145,7 @@
         <aries.util.version>0.4</aries.util.version>
         <gemini.blueprint.version>1.0.0.RELEASE</gemini.blueprint.version>
         <jansi.version>1.7</jansi.version>
-        <jline.version>2.5</jline.version>
+        <jline.version>2.6-SNAPSHOT</jline.version>
         <jsw.version>3.2.3</jsw.version>
         <log4j.version>1.2.16</log4j.version>
         <maven.version>2.0.9</maven.version>
@@ -243,6 +243,18 @@
                 <enabled>false</enabled>
             </snapshots>
         </repository>
+        <!-- OSSRH snapshots -->
+        <repository>
+            <id>ossrh.sonatype.snapshots.deploy</id>
+            <name>OSSRH snapshot repository</name>
+            <url>https://oss.sonatype.org/content/groups/public/</url>
+            <releases>
+                <enabled>false</enabled>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+            </snapshots>
+        </repository>
     </repositories>
 
     <dependencyManagement>
@@ -875,7 +887,7 @@
                 <version>${log4j.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.sonatype.jline</groupId>
+                <groupId>net.sf.jline</groupId>
                 <artifactId>jline</artifactId>
                 <version>${jline.version}</version>
             </dependency>

Modified: karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/shell/MoreAction.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/shell/MoreAction.java?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/shell/MoreAction.java (original)
+++ karaf/trunk/shell/commands/src/main/java/org/apache/karaf/shell/shell/MoreAction.java Fri Nov 25 13:22:44 2011
@@ -68,7 +68,7 @@ public class MoreAction extends Abstract
                         System.out.flush();
                         System.out.print("--More--");
                         System.out.flush();
-                        c = term.readVirtualKey(session.getKeyboard());
+                        c = session.getKeyboard().read();
                         switch (c) {
                             case 'q':
                             case -1:

Modified: karaf/trunk/shell/console/pom.xml
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/pom.xml?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/shell/console/pom.xml (original)
+++ karaf/trunk/shell/console/pom.xml Fri Nov 25 13:22:44 2011
@@ -49,7 +49,7 @@
             <scope>provided</scope>
         </dependency>
         <dependency>
-            <groupId>org.sonatype.jline</groupId>
+            <groupId>net.sf.jline</groupId>
             <artifactId>jline</artifactId>
             <exclusions>
                 <exclusion>

Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java Fri Nov 25 13:22:44 2011
@@ -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;
@@ -39,12 +38,12 @@ import jline.Terminal;
 import jline.UnsupportedTerminal;
 import jline.console.ConsoleReader;
 import jline.console.history.PersistentHistory;
-import org.apache.karaf.shell.commands.CommandException;
 import org.apache.felix.gogo.runtime.CommandNotFoundException;
 import org.apache.felix.gogo.runtime.Parser;
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.apache.felix.service.command.Converter;
+import org.apache.karaf.shell.commands.CommandException;
 import org.apache.karaf.shell.console.CloseShellException;
 import org.apache.karaf.shell.console.Completer;
 import org.apache.karaf.shell.console.completer.CommandsCompleter;
@@ -79,7 +78,7 @@ public class Console implements Runnable
     private PrintStream err;
     private Thread thread;
 
-    public Console(CommandProcessor processor,
+        public Console(CommandProcessor processor,
                    InputStream in,
                    PrintStream out,
                    PrintStream err,
@@ -97,11 +96,9 @@ public class Console implements Runnable
         this.closeCallback = closeCallback;
 
         reader = new ConsoleReader(this.consoleInput,
-                                   new PrintWriter(this.out),
-                                   getClass().getResourceAsStream("keybinding.properties"),
+                                   this.out,
                                    this.terminal);
 
-        
 		final File file = getHistoryFile();
 		
         try {
@@ -110,14 +107,12 @@ public class Console implements Runnable
 		} catch (Exception e) {
 			LOGGER.error("Can not read history from file " + file + ". Using in memory history", e);
 		}
+        session.put(".jline.reader", reader);
         session.put(".jline.history", reader.getHistory());
         Completer completer = createCompleter();
         if (completer != null) {
             reader.addCompleter(new CompleterAsCompletor(completer));
         }
-        if (Boolean.getBoolean("jline.nobell")) {
-            reader.setBellEnabled(false);
-        }
         pipe = new Thread(new Pipe());
         pipe.setName("gogo shell pipe thread");
         pipe.setDaemon(true);
@@ -479,7 +474,7 @@ public class Console implements Runnable
                 {
                     try
                     {
-                        int c = terminal.readCharacter(in);
+                        int c = in.read();
                         if (c == -1)
                         {
                             return;
@@ -487,6 +482,7 @@ public class Console implements Runnable
                         else if (c == 4 && !getBoolean(IGNORE_INTERRUPTS))
                         {
                             err.println("^D");
+                            return;
                         }
                         else if (c == 3 && !getBoolean(IGNORE_INTERRUPTS))
                         {

Modified: karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java (original)
+++ karaf/trunk/shell/console/src/main/java/org/apache/karaf/shell/console/jline/TerminalFactory.java Fri Nov 25 13:22:44 2011
@@ -18,18 +18,8 @@
  */
 package org.apache.karaf.shell.console.jline;
 
-import jline.Terminal;
-import jline.UnsupportedTerminal;
-import jline.AnsiWindowsTerminal;
 import jline.NoInterruptUnixTerminal;
-import org.fusesource.jansi.internal.WindowsSupport;
-
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FilterInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Field;
+import jline.Terminal;
 
 public class TerminalFactory {
 
@@ -43,27 +33,8 @@ public class TerminalFactory {
     }
 
     public void init() throws Exception {
-        if ("jline.UnsupportedTerminal".equals(System.getProperty("jline.terminal"))) {
-            term = new UnsupportedTerminal();
-            return;
-        }
-        
-        boolean windows = System.getProperty("os.name").toLowerCase().contains("windows");
-        try {
-            if (windows) {
-                AnsiWindowsTerminal t = new KarafWindowsTerminal();
-                t.setDirectConsole(true);
-                t.init();
-                term = t;
-            } else {
-                NoInterruptUnixTerminal t = new NoInterruptUnixTerminal();
-                t.init();
-                term = t;
-            }
-        } catch (Throwable e) {
-            System.out.println("Using an unsupported terminal: " + e.toString());
-            term = new UnsupportedTerminal();
-        }
+        jline.TerminalFactory.registerFlavor(jline.TerminalFactory.Flavor.UNIX, NoInterruptUnixTerminal.class);
+        term = jline.TerminalFactory.create();
     }
 
     public synchronized void destroy() throws Exception {
@@ -73,47 +44,4 @@ public class TerminalFactory {
         }
     }
 
-    public static class KarafWindowsTerminal extends AnsiWindowsTerminal {
-
-        public KarafWindowsTerminal() throws Exception {
-            super();
-        }
-
-        @Override
-        public int readCharacter(InputStream in) throws IOException {
-            if (isSystemIn(in)) {
-                return WindowsSupport.readByte();
-            }
-            else {
-                return super.readCharacter(in);
-            }
-        }
-
-        private boolean isSystemIn(InputStream in) throws IOException {
-            assert in != null;
-
-            if (in == System.in) {
-                return true;
-            }
-            while (in instanceof FilterInputStream) {
-                try {
-                    Field f = FilterInputStream.class.getDeclaredField("in");
-                    f.setAccessible(true);
-                    in = (InputStream) f.get(in);
-                } catch (Throwable t) {
-                    break;
-                }
-                if (in == System.in) {
-                    return true;
-                }
-            }
-            if (in instanceof FileInputStream && ((FileInputStream) in).getFD() == FileDescriptor.in) {
-                return true;
-            }
-
-            return false;
-        }
-
-    }
-
 }

Modified: karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java
URL: http://svn.apache.org/viewvc/karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java (original)
+++ karaf/trunk/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/SshTerminal.java Fri Nov 25 13:22:44 2011
@@ -18,42 +18,19 @@
  */
 package org.apache.karaf.shell.ssh;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
 
 import jline.TerminalSupport;
-import jline.console.Key;
-import jline.internal.ReplayPrefixOneCharInputStream;
-import org.apache.sshd.common.PtyMode;
 import org.apache.sshd.server.Environment;
 
-import static jline.console.Key.*;
-import static org.apache.karaf.shell.ssh.SshTerminal.UnixKey.*;
-
 public class SshTerminal extends TerminalSupport {
 
     private Environment environment;
-    private String encoding = System.getProperty("input.encoding", "UTF-8");
-    private ReplayPrefixOneCharInputStream replayStream = new ReplayPrefixOneCharInputStream(encoding);
-    private InputStreamReader replayReader;
-    private boolean deleteSendsBackspace = false;
-    private boolean backspaceSendsDelete = false;
 
 
     public SshTerminal(Environment environment) {
         super(true);
         setAnsiSupported(true);
         this.environment = environment;
-        try {
-            replayReader = new InputStreamReader(replayStream, encoding);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
-        Integer verase = this.environment.getPtyModes().get(PtyMode.VERASE);
-        deleteSendsBackspace = verase != null && verase == Key.DELETE.code;
     }
 
     public void init() throws Exception {
@@ -84,115 +61,4 @@ public class SshTerminal extends Termina
         return height > 0 ? height : super.getHeight();
     }
 
-    @Override
-    public int readVirtualKey(final InputStream in) throws IOException {
-        int c = readCharacter(in);
-
-        if (Key.valueOf(c) == DELETE && deleteSendsBackspace) {
-            c = BACKSPACE.code;
-        } else if (Key.valueOf(c) == BACKSPACE && backspaceSendsDelete) {
-            c = DELETE.code;
-        }
-
-        UnixKey key = UnixKey.valueOf(c);
-
-        // in Unix terminals, arrow keys are represented by a sequence of 3 characters. E.g., the up arrow key yields 27, 91, 68
-        if (key == ARROW_START) {
-            // also the escape key is 27 thats why we read until we have something different than 27
-            // this is a bugfix, because otherwise pressing escape and than an arrow key was an undefined state
-            while (key == ARROW_START) {
-                c = readCharacter(in);
-                key = UnixKey.valueOf(c);
-            }
-
-            if (key == ARROW_PREFIX || key == O_PREFIX) {
-                c = readCharacter(in);
-                key = UnixKey.valueOf(c);
-
-                if (key == ARROW_UP) {
-                    return CTRL_P.code;
-                }
-                else if (key == ARROW_DOWN) {
-                    return CTRL_N.code;
-                }
-                else if (key == ARROW_LEFT) {
-                    return CTRL_B.code;
-                }
-                else if (key == ARROW_RIGHT) {
-                    return CTRL_F.code;
-                }
-                else if (key == HOME_CODE) {
-                    return CTRL_A.code;
-                }
-                else if (key == END_CODE) {
-                    return CTRL_E.code;
-                }
-                else if (key == DEL_THIRD) {
-                    readCharacter(in); // read 4th & ignore
-                    return DELETE.code;
-                }
-            }
-        }
-
-        // handle unicode characters, thanks for a patch from amyi@inf.ed.ac.uk
-        if (c > 128) {
-            // handle unicode characters longer than 2 bytes,
-            // thanks to Marc.Herbert@continuent.com
-            replayStream.setInput(c, in);
-            // replayReader = new InputStreamReader(replayStream, encoding);
-            c = replayReader.read();
-        }
-
-        return c;
-    }
-
-    /**
-     * Unix keys.
-     */
-    public static enum UnixKey
-    {
-        ARROW_START(27),
-
-        ARROW_PREFIX(91),
-
-        ARROW_LEFT(68),
-
-        ARROW_RIGHT(67),
-
-        ARROW_UP(65),
-
-        ARROW_DOWN(66),
-
-        O_PREFIX(79),
-
-        HOME_CODE(72),
-
-        END_CODE(70),
-
-        DEL_THIRD(51),
-
-        DEL_SECOND(126),;
-
-        public final short code;
-
-        UnixKey(final int code) {
-            this.code = (short) code;
-        }
-
-        private static final Map<Short, UnixKey> codes;
-
-        static {
-            Map<Short, UnixKey> map = new HashMap<Short, UnixKey>();
-
-            for (UnixKey key : UnixKey.values()) {
-                map.put(key.code, key);
-            }
-
-            codes = map;
-        }
-
-        public static UnixKey valueOf(final int code) {
-            return codes.get((short) code);
-        }
-    }
 }

Modified: karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java
URL: http://svn.apache.org/viewvc/karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java?rev=1206153&r1=1206152&r2=1206153&view=diff
==============================================================================
--- karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java (original)
+++ karaf/trunk/webconsole/gogo/src/main/java/org/apache/karaf/webconsole/gogo/WebTerminal.java Fri Nov 25 13:22:44 2011
@@ -16,38 +16,17 @@
  */
 package org.apache.karaf.webconsole.gogo;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
-
 import jline.TerminalSupport;
-import jline.console.Key;
-import jline.internal.ReplayPrefixOneCharInputStream;
-
-import static jline.console.Key.*;
-import static org.apache.karaf.webconsole.gogo.WebTerminal.UnixKey.*;
 
 public class WebTerminal extends TerminalSupport {
 
     private int width;
     private int height;
-    private String encoding = System.getProperty("input.encoding", "UTF-8");
-    private ReplayPrefixOneCharInputStream replayStream = new ReplayPrefixOneCharInputStream(encoding);
-    private InputStreamReader replayReader;
-    private boolean deleteSendsBackspace = false;
-    private boolean backspaceSendsDelete = false;
 
     public WebTerminal(int width, int height) {
         super(true);
         this.width = width;
         this.height = height;
-        try {
-            replayReader = new InputStreamReader(replayStream, encoding);
-        } catch (Exception e) {
-            throw new RuntimeException(e);
-        }
     }
 
     public void init() throws Exception {
@@ -64,115 +43,4 @@ public class WebTerminal extends Termina
         return height;
     }
 
-    @Override
-    public int readVirtualKey(final InputStream in) throws IOException {
-        int c = readCharacter(in);
-
-        if (Key.valueOf(c) == DELETE && deleteSendsBackspace) {
-            c = BACKSPACE.code;
-        } else if (Key.valueOf(c) == BACKSPACE && backspaceSendsDelete) {
-            c = DELETE.code;
-        }
-
-        UnixKey key = UnixKey.valueOf(c);
-
-        // in Unix terminals, arrow keys are represented by a sequence of 3 characters. E.g., the up arrow key yields 27, 91, 68
-        if (key == ARROW_START) {
-            // also the escape key is 27 thats why we read until we have something different than 27
-            // this is a bugfix, because otherwise pressing escape and than an arrow key was an undefined state
-            while (key == ARROW_START) {
-                c = readCharacter(in);
-                key = UnixKey.valueOf(c);
-            }
-
-            if (key == ARROW_PREFIX || key == O_PREFIX) {
-                c = readCharacter(in);
-                key = UnixKey.valueOf(c);
-
-                if (key == ARROW_UP) {
-                    return CTRL_P.code;
-                }
-                else if (key == ARROW_DOWN) {
-                    return CTRL_N.code;
-                }
-                else if (key == ARROW_LEFT) {
-                    return CTRL_B.code;
-                }
-                else if (key == ARROW_RIGHT) {
-                    return CTRL_F.code;
-                }
-                else if (key == HOME_CODE) {
-                    return CTRL_A.code;
-                }
-                else if (key == END_CODE) {
-                    return CTRL_E.code;
-                }
-                else if (key == DEL_THIRD) {
-                    readCharacter(in); // read 4th & ignore
-                    return DELETE.code;
-                }
-            }
-        }
-
-        // handle unicode characters, thanks for a patch from amyi@inf.ed.ac.uk
-        if (c > 128) {
-            // handle unicode characters longer than 2 bytes,
-            // thanks to Marc.Herbert@continuent.com
-            replayStream.setInput(c, in);
-            // replayReader = new InputStreamReader(replayStream, encoding);
-            c = replayReader.read();
-        }
-
-        return c;
-    }
-
-    /**
-     * Unix keys.
-     */
-    public static enum UnixKey
-    {
-        ARROW_START(27),
-
-        ARROW_PREFIX(91),
-
-        ARROW_LEFT(68),
-
-        ARROW_RIGHT(67),
-
-        ARROW_UP(65),
-
-        ARROW_DOWN(66),
-
-        O_PREFIX(79),
-
-        HOME_CODE(72),
-
-        END_CODE(70),
-
-        DEL_THIRD(51),
-
-        DEL_SECOND(126),;
-
-        public final short code;
-
-        UnixKey(final int code) {
-            this.code = (short) code;
-        }
-
-        private static final Map<Short, UnixKey> codes;
-
-        static {
-            Map<Short, UnixKey> map = new HashMap<Short, UnixKey>();
-
-            for (UnixKey key : UnixKey.values()) {
-                map.put(key.code, key);
-            }
-
-            codes = map;
-        }
-
-        public static UnixKey valueOf(final int code) {
-            return codes.get((short) code);
-        }
-    }
 }