Eu fiz uma biblioteca anos atrás para renderizar no terminal. Quando a executei novamente em 2025, ela estava parcialmente quebrada.
Aqui está um pequeno exemplo que isola o problema:
TerminalCols.java
package p5_terminal_graphics_examples;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
public class TerminalCols {
public static void main(String[] args) {
while (true) {
int cols = cols();
System.out.println("Terminal columns: " + cols);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
static public int cols() {
return Integer.parseInt(cmd("tput cols"));
}
static public String cmd(String args) {
return exec("sh", "-c", args);
}
static public String exec(String... cmd) {
try {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
Process p;
p = Runtime.getRuntime().exec(cmd);
int c;
InputStream in = p.getInputStream();
while ((c = in.read()) != -1) {
bout.write(c);
}
in = p.getErrorStream();
while ((c = in.read()) != -1) {
bout.write(c);
}
p.waitFor();
String result = new String(bout.toByteArray());
return result.trim();
}
catch (IOException | InterruptedException e) {
return null;
}
}
}
O código acima deve imprimir a quantidade de colunas que o terminal tem a cada segundo. No entanto, ele sempre imprime o padrão 80.
Se eu digitar diretamente tput cols
no terminal, ele sempre retorna a resposta correta.
Então, com o tempo, algo quebrou e não sei como continuar a descobrir como consertar isso. Qualquer ajuda seria bem-vinda.