Updated Branches: refs/heads/master 32f423e63 -> 8fb6c8607
ACCUMULO-1042 use jline 2.11 for ctrl-c Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/8fb6c860 Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/8fb6c860 Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/8fb6c860 Branch: refs/heads/master Commit: 8fb6c860709419e95b16d18af3d4101ae035abd2 Parents: 32f423e Author: Mike Drob <md...@mdrob.com> Authored: Mon Oct 28 10:56:08 2013 -0400 Committer: Mike Drob <md...@mdrob.com> Committed: Mon Oct 28 10:56:08 2013 -0400 ---------------------------------------------------------------------- .../apache/accumulo/core/util/shell/Shell.java | 51 +++++++++++++------- 1 file changed, 34 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/accumulo/blob/8fb6c860/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java b/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java index 4140c8c..52e1d04 100644 --- a/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java +++ b/core/src/main/java/org/apache/accumulo/core/util/shell/Shell.java @@ -35,6 +35,7 @@ import java.util.TreeMap; import java.util.UUID; import jline.console.ConsoleReader; +import jline.console.UserInterruptException; import jline.console.history.FileHistory; import org.apache.accumulo.core.Constants; @@ -473,6 +474,9 @@ public class Shell extends ShellOptions { // This would be a nice feature but !METADATA screws it up reader.setExpandEvents(false); + // Turn Ctrl+C into Exception instead of JVM exit + reader.setHandleUserInterrupt(true); + ShellCompletor userCompletor = null; if (execFile != null) { @@ -492,26 +496,39 @@ public class Shell extends ShellOptions { } while (true) { - if (hasExited()) - return exitCode; + try { + if (hasExited()) + return exitCode; - // If tab completion is true we need to reset - if (tabCompletion) { - if (userCompletor != null) - reader.removeCompleter(userCompletor); - - userCompletor = setupCompletion(); - reader.addCompleter(userCompletor); - } + // If tab completion is true we need to reset + if (tabCompletion) { + if (userCompletor != null) + reader.removeCompleter(userCompletor); + + userCompletor = setupCompletion(); + reader.addCompleter(userCompletor); + } - reader.setPrompt(getDefaultPrompt()); - input = reader.readLine(); - if (input == null) { - reader.println(); - return exitCode; - } // user canceled + reader.setPrompt(getDefaultPrompt()); + input = reader.readLine(); + if (input == null) { + reader.println(); + return exitCode; + } // User Canceled (Ctrl+D) - execCommand(input, disableAuthTimeout, false); + execCommand(input, disableAuthTimeout, false); + } catch (UserInterruptException uie) { + // User Cancelled (Ctrl+C) + reader.println(); + + String partialLine = uie.getPartialLine(); + if (partialLine == null || "".equals(uie.getPartialLine().trim())) { + // No content, actually exit + return exitCode; + } + } finally { + reader.flush(); + } } }