Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
  * distributed with this work for additional information
  * regarding copyright ownership.  The ASF licenses this file
  * to you under the Apache License, Version 2.0 (the
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.    
import  jline.Completor;
import  jline.ConsoleReader;
Keep all the JLine specific code out of the Shell class so that it runs ok when jline isn't on the classpath.
public class JLine {
    public static String readLine(Object rthrows IOException {
        return ((ConsoleReader)r).readLine();
    public static Object createJLineReader(final Shell shellthrows IOException {
        ConsoleReader reader = new ConsoleReader();
        // Add a Ctrl-c listener
        reader.addTriggeredAction((char)3, new ActionListener() {
            public void actionPerformed(ActionEvent e) {
        // TODO: write a Completor specific to this that can handle the individual command arguments
        List<Completor> completors = new LinkedList<Completor>();
//        completors.add(new SimpleCompletor(Shell.COMMANDS));
//        completors.add(new ICURICompletor(shell.node));
//        completors.add(new FileNameCompletor());
//        reader.addCompletor(new ArgumentCompletor(completors));
        reader.addCompletor(new TShellCompletor(shell));
        return reader;

The shipped inside jline maps ctrl-c to INSERT with the comment "(frankly, I wasn't sure where to bind this)". That does not seem a great choice as it disables ctrl-c interupt so this resets that binding.
    private static void fixCtrlC(ConsoleReader reader) {
        try {
            Field f = ConsoleReader.class.getDeclaredField("keybindings");
            short[] keybindings = (short[])f.get(reader);
            if (keybindings[3] == -48) keybindings[3] = 3;
        } catch (Exception e) {
            e.printStackTrace(); // shouldnt happen
New to GrepCode? Check out our FAQ X