jline/jline-jansi2.patch

163 lines
6.1 KiB
Diff
Raw Permalink Normal View History

--- jline2-jline-2.14.6/src/main/java/jline/AnsiWindowsTerminal.java 2022-05-13 06:20:11.713726341 +0200
+++ jline2-jline-2.14.6/src/main/java/jline/AnsiWindowsTerminal.java 2022-05-13 07:21:11.191259791 +0200
@@ -9,12 +9,17 @@
package jline;
import jline.internal.Configuration;
+import org.fusesource.jansi.AnsiColors;
import org.fusesource.jansi.AnsiConsole;
-import org.fusesource.jansi.AnsiOutputStream;
-import org.fusesource.jansi.WindowsAnsiOutputStream;
+import org.fusesource.jansi.AnsiMode;
+import org.fusesource.jansi.AnsiType;
+
+import org.fusesource.jansi.io.AnsiOutputStream;
+import org.fusesource.jansi.io.WindowsAnsiProcessor;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
+import java.nio.charset.Charset;
/**
* ANSI-supported {@link WindowsTerminal}.
@@ -42,26 +47,26 @@
if (Configuration.isWindows()) {
// On windows we know the console does not interpret ANSI codes..
try {
- return new WindowsAnsiOutputStream(stream);
+ return new AnsiOutputStream(stream, null, AnsiMode.Default, new WindowsAnsiProcessor(stream), AnsiType.Emulation, AnsiColors.Colors16, Charset.defaultCharset(), null, null, false );
} 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 new AnsiOutputStream(stream, null, AnsiMode.Strip, null, AnsiType.Unsupported, AnsiColors.TrueColor, Charset.defaultCharset(), null, null, false);
}
return stream;
}
private static boolean detectAnsiSupport() {
- OutputStream out = AnsiConsole.wrapOutputStream(new ByteArrayOutputStream());
try {
- out.close();
+ new WindowsAnsiProcessor(new ByteArrayOutputStream());
+ return true;
}
catch (Exception e) {
// ignore;
}
- return out instanceof WindowsAnsiOutputStream;
+ return false;
}
public AnsiWindowsTerminal() throws Exception {
--- jline2-jline-2.14.6/src/main/java/jline/internal/Ansi.java 2022-05-13 06:20:11.749726581 +0200
+++ jline2-jline-2.14.6/src/main/java/jline/internal/Ansi.java 2022-05-13 06:20:28.793840511 +0200
@@ -10,8 +10,12 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.nio.charset.Charset;
-import org.fusesource.jansi.AnsiOutputStream;
+import org.fusesource.jansi.io.AnsiOutputStream;
+import org.fusesource.jansi.AnsiColors;
+import org.fusesource.jansi.AnsiMode;
+import org.fusesource.jansi.AnsiType;
/**
* Ansi support.
@@ -25,7 +29,18 @@
if (str == null) return "";
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
- AnsiOutputStream aos = new AnsiOutputStream(baos);
+ AnsiOutputStream aos = new AnsiOutputStream(
+ baos,
+ null,
+ AnsiMode.Strip,
+ null,
+ AnsiType.Emulation,
+ AnsiColors.TrueColor,
+ Charset.defaultCharset(),
+ null,
+ null,
+ false
+ );
aos.write(str.getBytes());
aos.close();
return baos.toString();
--- jline2-jline-2.14.6/src/main/java/jline/WindowsTerminal.java 2022-05-13 06:20:11.717726368 +0200
+++ jline2-jline-2.14.6/src/main/java/jline/WindowsTerminal.java 2022-05-13 06:34:46.083425194 +0200
@@ -15,9 +15,10 @@
import jline.internal.Configuration;
import jline.internal.Log;
-import org.fusesource.jansi.internal.WindowsSupport;
+
import org.fusesource.jansi.internal.Kernel32;
import static org.fusesource.jansi.internal.Kernel32.*;
+import org.fusesource.jansi.internal.Kernel32.CONSOLE_SCREEN_BUFFER_INFO;
import static jline.WindowsTerminal.ConsoleMode.ENABLE_ECHO_INPUT;
import static jline.WindowsTerminal.ConsoleMode.ENABLE_LINE_INPUT;
@@ -208,18 +209,34 @@
// Native Bits
//
private static int getConsoleMode() {
- return WindowsSupport.getConsoleMode();
+ long hConsole = GetStdHandle (STD_INPUT_HANDLE);
+ if (hConsole == INVALID_HANDLE_VALUE)
+ return -1;
+ int mode[] = new int[1];
+ if (GetConsoleMode (hConsole, mode)==0)
+ return -1;
+ return mode[0];
}
private static void setConsoleMode(int mode) {
- WindowsSupport.setConsoleMode(mode);
+ long hConsole = GetStdHandle (STD_INPUT_HANDLE);
+ if (hConsole == INVALID_HANDLE_VALUE)
+ return;
+ SetConsoleMode (hConsole, mode);
+ }
+
+ private static INPUT_RECORD[] readConsoleInput(int count) throws IOException {
+ long hConsole = GetStdHandle (STD_INPUT_HANDLE);
+ if (hConsole == INVALID_HANDLE_VALUE)
+ return null;
+ return readConsoleKeyInput(hConsole, count, false);
}
private byte[] readConsoleInput() {
// XXX does how many events to read in one call matter?
INPUT_RECORD[] events = null;
try {
- events = WindowsSupport.readConsoleInput(1);
+ events = readConsoleInput(1);
} catch (IOException e) {
Log.debug("read Windows console input error: ", e);
}
@@ -304,11 +321,17 @@
}
private static int getWindowsTerminalWidth() {
- return WindowsSupport.getWindowsTerminalWidth();
+ long outputHandle = GetStdHandle (STD_OUTPUT_HANDLE);
+ CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();
+ GetConsoleScreenBufferInfo (outputHandle, info);
+ return info.windowWidth();
}
private static int getWindowsTerminalHeight() {
- return WindowsSupport.getWindowsTerminalHeight();
+ long outputHandle = GetStdHandle (STD_OUTPUT_HANDLE);
+ CONSOLE_SCREEN_BUFFER_INFO info = new CONSOLE_SCREEN_BUFFER_INFO();
+ GetConsoleScreenBufferInfo (outputHandle, info);
+ return info.windowHeight();
}
/**