Skip to content

Commit

Permalink
AnsiConsole should always obey the terminal (fixes #1160) (#1161)
Browse files Browse the repository at this point in the history
* bug: Obey terminal if set

Currently, if terminal is set, but is not "tty" (ie. is dumb),
AnsiConsole will grab the process stdout/stderr instead to obey
the set terminal output.

Fixes #1160
  • Loading branch information
cstamas authored Jan 24, 2025
1 parent c7f7fbe commit f869217
Showing 1 changed file with 6 additions and 22 deletions.
28 changes: 6 additions & 22 deletions jansi-core/src/main/java/org/jline/jansi/AnsiConsole.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@
*/
package org.jline.jansi;

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOError;
import java.io.IOException;
import java.io.OutputStream;
Expand All @@ -18,13 +16,10 @@

import org.jline.jansi.io.AnsiOutputStream;
import org.jline.jansi.io.AnsiProcessor;
import org.jline.jansi.io.FastBufferedOutputStream;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.jline.terminal.impl.DumbTerminal;
import org.jline.terminal.spi.SystemStream;
import org.jline.terminal.spi.TerminalExt;
import org.jline.terminal.spi.TerminalProvider;
import org.jline.utils.OSUtils;

/**
Expand Down Expand Up @@ -239,22 +234,11 @@ private static AnsiPrintStream ansiStream(boolean stdout) throws IOException {
final AnsiOutputStream.IoRunnable installer = null;
final AnsiOutputStream.IoRunnable uninstaller = null;

final TerminalProvider provider = ((TerminalExt) terminal).getProvider();
final boolean isatty =
provider != null && provider.isSystemStream(stdout ? SystemStream.Output : SystemStream.Error);
if (isatty) {
out = terminal.output();
width = terminal::getWidth;
type = terminal instanceof DumbTerminal ? AnsiType.Unsupported : AnsiType.Native;
} else {
out = new FastBufferedOutputStream(new FileOutputStream(stdout ? FileDescriptor.out : FileDescriptor.err));
width = new AnsiOutputStream.ZeroWidthSupplier();
type = ((TerminalExt) terminal).getSystemStream() != null ? AnsiType.Redirected : AnsiType.Unsupported;
}
String enc = System.getProperty(stdout ? "stdout.encoding" : "stderr.encoding");
if (enc == null) {
enc = System.getProperty(stdout ? "sun.stdout.encoding" : "sun.stderr.encoding");
}
out = terminal.output();
width = terminal::getWidth;
type = terminal instanceof DumbTerminal
? AnsiType.Unsupported
: ((TerminalExt) terminal).getSystemStream() != null ? AnsiType.Redirected : AnsiType.Native;

AnsiMode mode;

Expand All @@ -265,7 +249,7 @@ private static AnsiPrintStream ansiStream(boolean stdout) throws IOException {
} else if (JANSI_MODE_STRIP.equals(jansiMode)) {
mode = AnsiMode.Strip;
} else {
mode = isatty ? AnsiMode.Default : AnsiMode.Strip;
mode = type == AnsiType.Native ? AnsiMode.Default : AnsiMode.Strip;
}

AnsiColors colors;
Expand Down

0 comments on commit f869217

Please sign in to comment.