1
2
3
4
5
6
7
8
9 package jline;
10
11 import jline.internal.Configuration;
12 import org.fusesource.jansi.AnsiConsole;
13 import org.fusesource.jansi.AnsiOutputStream;
14 import org.fusesource.jansi.WindowsAnsiOutputStream;
15
16 import java.io.ByteArrayOutputStream;
17 import java.io.OutputStream;
18
19
20
21
22
23
24 public class AnsiWindowsTerminal
25 extends WindowsTerminal
26 {
27 private final boolean ansiSupported = detectAnsiSupport();
28
29 @Override
30 public OutputStream wrapOutIfNeeded(OutputStream out) {
31 return wrapOutputStream(out);
32 }
33
34
35
36
37
38
39
40
41 private static OutputStream wrapOutputStream(final OutputStream stream) {
42 if (Configuration.isWindows()) {
43
44 try {
45 return new WindowsAnsiOutputStream(stream);
46 } catch (Throwable ignore) {
47
48
49 }
50
51 return new AnsiOutputStream(stream);
52 }
53 return stream;
54 }
55
56 private static boolean detectAnsiSupport() {
57 OutputStream out = AnsiConsole.wrapOutputStream(new ByteArrayOutputStream());
58 try {
59 out.close();
60 }
61 catch (Exception e) {
62
63 }
64 return out instanceof WindowsAnsiOutputStream;
65 }
66
67 public AnsiWindowsTerminal() throws Exception {
68 super();
69 }
70
71 @Override
72 public boolean isAnsiSupported() {
73 return ansiSupported;
74 }
75
76 @Override
77 public boolean hasWeirdWrap() {
78 return false;
79 }
80 }