diff options
author | zreed <zach@digitalforgemc.com> | 2014-12-06 13:55:50 -0500 |
---|---|---|
committer | md_5 <git@md-5.net> | 2014-12-12 11:06:13 +1100 |
commit | 45be36a7b85249a50872e8db1d44a14ebd1724b6 (patch) | |
tree | db1bb535e0c3896728430b25f69022309a28fad5 /src/main/java/jline | |
parent | 2dda1b33b0238996e5838f7f757e2f2d103481db (diff) | |
download | craftbukkit-45be36a7b85249a50872e8db1d44a14ebd1724b6.tar craftbukkit-45be36a7b85249a50872e8db1d44a14ebd1724b6.tar.gz craftbukkit-45be36a7b85249a50872e8db1d44a14ebd1724b6.tar.lz craftbukkit-45be36a7b85249a50872e8db1d44a14ebd1724b6.tar.xz craftbukkit-45be36a7b85249a50872e8db1d44a14ebd1724b6.zip |
Update JLine
Later releases include the TerminalLineSettings patch. Also move call to AnsiConsole.systemInstall() to avoid patching AnsiWindowsTerminal.
Diffstat (limited to 'src/main/java/jline')
-rw-r--r-- | src/main/java/jline/AnsiWindowsTerminal.java | 91 | ||||
-rw-r--r-- | src/main/java/jline/internal/TerminalLineSettings.java | 227 |
2 files changed, 0 insertions, 318 deletions
diff --git a/src/main/java/jline/AnsiWindowsTerminal.java b/src/main/java/jline/AnsiWindowsTerminal.java deleted file mode 100644 index a6380364..00000000 --- a/src/main/java/jline/AnsiWindowsTerminal.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2009 the original author(s). - * - * Licensed 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 - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * MODIFICATIONS: methods to deal with wrapping the output stream. - */ - -package jline; - -import org.fusesource.jansi.AnsiConsole; -import org.fusesource.jansi.AnsiOutputStream; -import org.fusesource.jansi.WindowsAnsiOutputStream; - -import java.io.ByteArrayOutputStream; -import java.io.OutputStream; - -/** - * ANSI-supported {@link WindowsTerminal}. - * - * @since 2.0 - */ -public class AnsiWindowsTerminal - extends WindowsTerminal -{ - private final boolean ansiSupported = detectAnsiSupport(); - - @Override - public OutputStream wrapOutIfNeeded(OutputStream out) { - return wrapOutputStream(out); - } - - /** - * Returns an ansi output stream handler. We return whatever was - * passed if we determine we cannot handle ansi based on Kernel32 calls. - * - * @return an @{link AltWindowAnsiOutputStream} instance or the passed - * stream. - */ - private static OutputStream wrapOutputStream(final OutputStream stream) { - String os = System.getProperty("os.name"); - if( os.startsWith("Windows") ) { - // On windows we know the console does not interpret ANSI codes.. - try { - return new WindowsAnsiOutputStream(stream); - } catch (Throwable ignore) { - // this happens when JNA is not in the path.. or - // this happens when the stdout is being redirected to a file. - } - // Use the ANSIOutputStream to strip out the ANSI escape sequences. - return new AnsiOutputStream(stream); - } - return stream; - } - - private static boolean detectAnsiSupport() { - AnsiConsole.systemInstall(); // CraftBukkit - install Windows JNI library - OutputStream out = AnsiConsole.wrapOutputStream(new ByteArrayOutputStream()); - try { - out.close(); - } - catch (Exception e) { - // ignore; - } - return out instanceof WindowsAnsiOutputStream; - } - - public AnsiWindowsTerminal() throws Exception { - super(); - } - - @Override - public boolean isAnsiSupported() { - return ansiSupported; - } - - @Override - public boolean hasWeirdWrap() { - return false; - } -} diff --git a/src/main/java/jline/internal/TerminalLineSettings.java b/src/main/java/jline/internal/TerminalLineSettings.java deleted file mode 100644 index b4b2409e..00000000 --- a/src/main/java/jline/internal/TerminalLineSettings.java +++ /dev/null @@ -1,227 +0,0 @@ -/* - * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved. - * - * This software is distributable under the BSD license. See the terms of the - * BSD license in the documentation provided with this software. - */ - -package jline.internal; - -import java.io.ByteArrayOutputStream; -import java.io.Closeable; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.text.MessageFormat; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -/** - * Provides access to terminal line settings via <tt>stty</tt>. - * - * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a> - * @author <a href="mailto:dwkemp@gmail.com">Dale Kemp</a> - * @author <a href="mailto:jason@planet57.com">Jason Dillon</a> - * @author <a href="mailto:jbonofre@apache.org">Jean-Baptiste Onofré</a> - * @since 2.0 - */ -public final class TerminalLineSettings -{ - public static final String JLINE_STTY = "jline.stty"; - - public static final String DEFAULT_STTY = "stty"; - - public static final String JLINE_SH = "jline.sh"; - - public static final String DEFAULT_SH = "sh"; - - private String sttyCommand; - - private String shCommand; - - private String config; - - private long configLastFetched; - - public TerminalLineSettings() throws IOException, InterruptedException { - sttyCommand = Configuration.getString(JLINE_STTY, DEFAULT_STTY); - shCommand = Configuration.getString(JLINE_SH, DEFAULT_SH); - config = get("-a"); - configLastFetched = System.currentTimeMillis(); - - Log.debug("Config: ", config); - - // sanity check - if (config.length() == 0) { - throw new IOException(MessageFormat.format("Unrecognized stty code: {0}", config)); - } - } - - public String getConfig() { - return config; - } - - public void restore() throws IOException, InterruptedException { - set("sane"); - } - - public String get(final String args) throws IOException, InterruptedException { - return stty(args); - } - - public void set(final String args) throws IOException, InterruptedException { - stty(args); - } - - /** - * <p> - * Get the value of a stty property, including the management of a cache. - * </p> - * - * @param name the stty property. - * @return the stty property value. - */ - public int getProperty(String name) { - assert name != null; - // CraftBukkit start - long currentTime = System.currentTimeMillis(); - - try { - // tty properties are cached so we don't have to worry too much about getting term widht/height - if (config == null || currentTime - configLastFetched > 1000) { - config = get("-a"); - } - } catch (Exception e) { - Log.debug("Failed to query stty ", name, "\n", e); - } - - // always update the last fetched time and try to parse the output - if (currentTime - configLastFetched > 1000) { - configLastFetched = currentTime; - } - - return this.getProperty(name, config); - // CraftBukkit end - } - - /** - * <p> - * Parses a stty output (provided by stty -a) and return the value of a given property. - * </p> - * - * @param name property name. - * @param stty string resulting of stty -a execution. - * @return value of the given property. - */ - protected static int getProperty(String name, String stty) { - // try the first kind of regex - Pattern pattern = Pattern.compile(name + "\\s+=\\s+([^;]*)[;\\n\\r]"); - Matcher matcher = pattern.matcher(stty); - if (!matcher.find()) { - // try a second kind of regex - pattern = Pattern.compile(name + "\\s+([^;]*)[;\\n\\r]"); - matcher = pattern.matcher(stty); - if (!matcher.find()) { - // try a second try of regex - pattern = Pattern.compile("(\\S*)\\s+" + name); - matcher = pattern.matcher(stty); - if (!matcher.find()) { - return -1; - } - } - } - return parseControlChar(matcher.group(1)); - } - - private static int parseControlChar(String str) { - // under - if ("<undef>".equals(str)) { - return -1; - } - // octal - if (str.charAt(0) == '0') { - return Integer.parseInt(str, 8); - } - // decimal - if (str.charAt(0) >= '1' && str.charAt(0) <= '9') { - return Integer.parseInt(str, 10); - } - // control char - if (str.charAt(0) == '^') { - if (str.charAt(1) == '?') { - return 127; - } else { - return str.charAt(1) - 64; - } - } else if (str.charAt(0) == 'M' && str.charAt(1) == '-') { - if (str.charAt(2) == '^') { - if (str.charAt(3) == '?') { - return 127 + 128; - } else { - return str.charAt(3) - 64 + 128; - } - } else { - return str.charAt(2) + 128; - } - } else { - return str.charAt(0); - } - } - - private String stty(final String args) throws IOException, InterruptedException { - assert args != null; - return exec(String.format("%s %s < /dev/tty", sttyCommand, args)); - } - - private String exec(final String cmd) throws IOException, InterruptedException { - assert cmd != null; - return exec(shCommand, "-c", cmd); - } - - private String exec(final String... cmd) throws IOException, InterruptedException { - assert cmd != null; - - ByteArrayOutputStream bout = new ByteArrayOutputStream(); - - Log.trace("Running: ", cmd); - - Process p = Runtime.getRuntime().exec(cmd); - - InputStream in = null; - InputStream err = null; - OutputStream out = null; - try { - int c; - in = p.getInputStream(); - while ((c = in.read()) != -1) { - bout.write(c); - } - err = p.getErrorStream(); - while ((c = err.read()) != -1) { - bout.write(c); - } - out = p.getOutputStream(); - p.waitFor(); - } - finally { - close(in, out, err); - } - - String result = bout.toString(); - - Log.trace("Result: ", result); - - return result; - } - - private static void close(final Closeable... closeables) { - for (Closeable c : closeables) { - try { - c.close(); - } - catch (Exception e) { - // Ignore - } - } - } -}
\ No newline at end of file |